add warp_sync_params (#1909)

* wait for relay chain to sync then get parachain header

* Spawn new thread to wait for the target block

* second round of comments from the PR on substrate

* third round of pr comments

* add zombienet tests

* rebase issues

* refactor tests based on pr comments

* rebase issues

* pr comments

* passing zombienet test

* cargo +nightly fmt

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* use cargo lock from master

* pr comments

* cargo fmt

* use finalised block instead of best block

* use import notification stream

* rebase changes

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/relay-chain-interface/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/relay-chain-interface/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* pr comments

* use new file names

* db snaphots moved to google cloud storage

* Update client/network/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update client/service/src/lib.rs

Co-authored-by: Sebastian Kunert <skunert49@gmail.com>

* pr comments

* Update zombienet/tests/0007-full_node_warp_sync.toml

Co-authored-by: Sebastian Kunert <skunert49@gmail.com>

* Update zombienet/tests/0007-full_node_warp_sync.toml

Co-authored-by: Sebastian Kunert <skunert49@gmail.com>

* Scenario 1

Parachain node and in-node relay chain both start with --sync warp. This ensures that the waiting logic works as expected.

Scenario 2
Parachain node starts with warp sync, relay chain points to a node already synced up

scenario 3
Parachain node starts with warp sync, relay chain points to a node that uses warp sync

* Use test-parachain

* use test-parachain chainspecs

* remove relay chain spec as it is no longer required

* add back relaychain spec file

* pr comments

* Upload snapshots to google cloud

* Update zombienet/tests/0007-prepare-warp-sync-db-snapshot.md

Co-authored-by: Sebastian Kunert <skunert49@gmail.com>

* update documentation

* Fix snapshot URLs

* use master lock file

* add finalized_block_hash

* Patch diener for CI

* Bump Zombienet

* Add 0007 zombienet test

* Bump zombienet

* Revert "Patch diener for CI"

This reverts commit 9ece6c9fc9b17058b61cd7e9dee29d3a9af87841.

* merge fixes

* use master lock file

* Update Substrate & Polkadot

---------

Co-authored-by: Bastian Köcher <git@kchr.de>
Co-authored-by: Michal Kucharczyk <1728078+michalkucharczyk@users.noreply.github.com>
Co-authored-by: Sebastian Kunert <skunert49@gmail.com>
Co-authored-by: Bastian Köcher <info@kchr.de>
This commit is contained in:
authored and GitHub committed 2023-02-14 19:15:43 +00:00
1 parent d6b16afb8c
commit f2dc402cec
19 files changed
+900 -365

No files matched your search

+1 -1
View File
@@ -30,7 +30,7 @@ variables:
CI_IMAGE: "paritytech/ci-linux:production"
DOCKER_OS: "debian:stretch"
ARCH: "x86_64"
ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.29"
ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.34"
.collect-artifacts:
artifacts:
+280 -292
View File
File diff suppressed because it is too large. Load diff
@@ -85,6 +85,10 @@ impl RelayChainInterface for Relaychain {
unimplemented!("Not needed for test")
}
async fn finalized_block_hash(&self) -> RelayChainResult<PHash> {
unimplemented!("Not needed for test")
}
async fn retrieve_dmq_contents(
&self,
_: ParaId,
-1
View File
@@ -36,7 +36,6 @@ use polkadot_primitives::{
use codec::{Decode, DecodeAll, Encode};
use futures::{channel::oneshot, future::FutureExt, Future};
use std::{convert::TryFrom, fmt, marker::PhantomData, pin::Pin, sync::Arc};
#[cfg(test)]
+3
View File
@@ -84,6 +84,9 @@ impl RelayChainInterface for DummyRelayChainInterface {
async fn best_block_hash(&self) -> RelayChainResult<PHash> {
Ok(self.relay_backend.blockchain().info().best_hash)
}
async fn finalized_block_hash(&self) -> RelayChainResult<PHash> {
Ok(self.relay_backend.blockchain().info().finalized_hash)
}
async fn retrieve_dmq_contents(
&self,
@@ -167,6 +167,10 @@ where
Ok(self.backend.blockchain().info().best_hash)
}
async fn finalized_block_hash(&self) -> RelayChainResult<PHash> {
Ok(self.backend.blockchain().info().finalized_hash)
}
async fn is_major_syncing(&self) -> RelayChainResult<bool> {
Ok(self.sync_oracle.is_major_syncing())
}
@@ -105,6 +105,9 @@ pub trait RelayChainInterface: Send + Sync {
/// Get the hash of the current best block.
async fn best_block_hash(&self) -> RelayChainResult<PHash>;
/// Get the hash of the finalized block.
async fn finalized_block_hash(&self) -> RelayChainResult<PHash>;
/// Returns the whole contents of the downward message queue for the parachain we are collating
/// for.
///
@@ -248,6 +251,10 @@ where
(**self).best_block_hash().await
}
async fn finalized_block_hash(&self) -> RelayChainResult<PHash> {
(**self).finalized_block_hash().await
}
async fn is_major_syncing(&self) -> RelayChainResult<bool> {
(**self).is_major_syncing().await
}
@@ -123,6 +123,10 @@ impl RelayChainInterface for RelayChainRpcInterface {
self.rpc_client.chain_get_head(None).await
}
async fn finalized_block_hash(&self) -> RelayChainResult<RelayHash> {
self.rpc_client.chain_get_finalized_head().await
}
async fn is_major_syncing(&self) -> RelayChainResult<bool> {
self.rpc_client.system_health().await.map(|h| h.is_syncing)
}
+8 -1
View File
@@ -11,14 +11,20 @@ futures = "0.3.26"
# Substrate
sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-service = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-utils = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-network-transactions = { git = "https://github.com/paritytech/substrate", branch = "master" }
sp-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" }
sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" }
sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" }
sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" }
sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" }
# Polkadot
polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "master" }
@@ -28,7 +34,8 @@ cumulus-client-cli = { path = "../cli" }
cumulus-client-collator = { path = "../collator" }
cumulus-client-consensus-common = { path = "../consensus/common" }
cumulus-client-pov-recovery = { path = "../pov-recovery" }
cumulus-client-network = { path = "../network" }
cumulus-primitives-core = { path = "../../primitives/core" }
cumulus-relay-chain-interface = { path = "../relay-chain-interface" }
cumulus-relay-chain-inprocess-interface = { path = "../relay-chain-inprocess-interface" }
cumulus-relay-chain-minimal-node = { path = "../relay-chain-minimal-node" }
cumulus-relay-chain-minimal-node = { path = "../relay-chain-minimal-node" }
+187 -12
View File
@@ -20,31 +20,37 @@
use cumulus_client_cli::CollatorOptions;
use cumulus_client_consensus_common::ParachainConsensus;
use cumulus_client_network::BlockAnnounceValidator;
use cumulus_client_pov_recovery::{PoVRecovery, RecoveryDelayRange, RecoveryHandle};
use cumulus_primitives_core::{CollectCollationInfo, ParaId};
use cumulus_relay_chain_inprocess_interface::build_inprocess_relay_chain;
use cumulus_relay_chain_interface::{RelayChainInterface, RelayChainResult};
use cumulus_relay_chain_minimal_node::build_minimal_relay_chain_node;
use polkadot_primitives::CollatorPair;
use sc_client_api::{
Backend as BackendT, BlockBackend, BlockchainEvents, Finalizer, UsageProvider,
use futures::{
channel::{mpsc, oneshot},
FutureExt, StreamExt,
};
use sc_consensus::{import_queue::ImportQueueService, BlockImport};
use sc_service::{Configuration, TaskManager};
use sc_telemetry::TelemetryWorkerHandle;
use polkadot_primitives::{CollatorPair, OccupiedCoreAssumption};
use sc_client_api::{
Backend as BackendT, BlockBackend, BlockchainEvents, Finalizer, ProofProvider, UsageProvider,
};
use sc_consensus::{import_queue::ImportQueueService, BlockImport, ImportQueue};
use sc_network::{config::SyncMode, NetworkService};
use sc_network_transactions::TransactionsHandlerController;
use sc_service::{Configuration, NetworkStarter, SpawnTaskHandle, TaskManager, WarpSyncParams};
use sc_telemetry::{log, TelemetryWorkerHandle};
use sc_utils::mpsc::TracingUnboundedSender;
use sp_api::ProvideRuntimeApi;
use sp_blockchain::HeaderBackend;
use sp_core::traits::SpawnNamed;
use sp_runtime::traits::Block as BlockT;
use futures::channel::mpsc;
use sp_blockchain::{HeaderBackend, HeaderMetadata};
use sp_core::{traits::SpawnNamed, Decode};
use sp_runtime::traits::{Block as BlockT, BlockIdTo};
use std::{sync::Arc, time::Duration};
// Given the sporadic nature of the explicit recovery operation and the
// possibility to retry infinite times this value is more than enough.
// In practice here we expect no more than one queued messages.
const RECOVERY_CHAN_SIZE: usize = 8;
const LOG_TARGET_SYNC: &str = "sync::cumulus";
/// Parameters given to [`start_collator`].
pub struct StartCollatorParams<'a, Block: BlockT, BS, Client, RCInterface, Spawner> {
@@ -268,3 +274,172 @@ pub async fn build_relay_chain_interface(
)
}
}
/// Parameters given to [`build_network`].
pub struct BuildNetworkParams<
'a,
Block: BlockT,
Client: ProvideRuntimeApi<Block>
+ BlockBackend<Block>
+ HeaderMetadata<Block, Error = sp_blockchain::Error>
+ HeaderBackend<Block>
+ BlockIdTo<Block>
+ 'static,
RCInterface,
IQ,
> where
Client::Api: sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block>,
{
pub parachain_config: &'a Configuration,
pub client: Arc<Client>,
pub transaction_pool: Arc<sc_transaction_pool::FullPool<Block, Client>>,
pub para_id: ParaId,
pub relay_chain_interface: RCInterface,
pub spawn_handle: SpawnTaskHandle,
pub import_queue: IQ,
}
/// Build the network service, the network status sinks and an RPC sender.
pub async fn build_network<'a, Block, Client, RCInterface, IQ>(
BuildNetworkParams {
parachain_config,
client,
transaction_pool,
para_id,
spawn_handle,
relay_chain_interface,
import_queue,
}: BuildNetworkParams<'a, Block, Client, RCInterface, IQ>,
) -> sc_service::error::Result<(
Arc<NetworkService<Block, Block::Hash>>,
TracingUnboundedSender<sc_rpc::system::Request<Block>>,
TransactionsHandlerController<Block::Hash>,
NetworkStarter,
)>
where
Block: BlockT,
Client: UsageProvider<Block>
+ HeaderBackend<Block>
+ sp_consensus::block_validation::Chain<Block>
+ Send
+ Sync
+ BlockBackend<Block>
+ BlockchainEvents<Block>
+ ProvideRuntimeApi<Block>
+ HeaderMetadata<Block, Error = sp_blockchain::Error>
+ BlockIdTo<Block, Error = sp_blockchain::Error>
+ ProofProvider<Block>
+ 'static,
Client::Api: CollectCollationInfo<Block>
+ sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block>,
for<'b> &'b Client: BlockImport<Block>,
RCInterface: RelayChainInterface + Clone + 'static,
IQ: ImportQueue<Block> + 'static,
{
let warp_sync_params = match parachain_config.network.sync_mode {
SyncMode::Warp => {
let target_block = warp_sync_get::<Block, RCInterface>(
para_id,
relay_chain_interface.clone(),
spawn_handle.clone(),
);
Some(WarpSyncParams::WaitForTarget(target_block))
},
_ => None,
};
let block_announce_validator = BlockAnnounceValidator::new(relay_chain_interface, para_id);
let block_announce_validator_builder = move |_| Box::new(block_announce_validator) as Box<_>;
sc_service::build_network(sc_service::BuildNetworkParams {
config: parachain_config,
client,
transaction_pool,
spawn_handle,
import_queue,
block_announce_validator_builder: Some(Box::new(block_announce_validator_builder)),
warp_sync_params,
})
}
/// Creates a new background task to wait for the relay chain to sync up and retrieve the parachain header
fn warp_sync_get<B, RCInterface>(
para_id: ParaId,
relay_chain_interface: RCInterface,
spawner: SpawnTaskHandle,
) -> oneshot::Receiver<<B as BlockT>::Header>
where
B: BlockT + 'static,
RCInterface: RelayChainInterface + 'static,
{
let (sender, receiver) = oneshot::channel::<B::Header>();
spawner.spawn(
"cumulus-parachain-wait-for-target-block",
None,
async move {
log::debug!(
target: "cumulus-network",
"waiting for announce block in a background task...",
);
let _ = wait_for_target_block::<B, _>(sender, para_id, relay_chain_interface)
.await
.map_err(|e| {
log::error!(
target: LOG_TARGET_SYNC,
"Unable to determine parachain target block {:?}",
e
)
});
}
.boxed(),
);
receiver
}
/// Waits for the relay chain to have finished syncing and then gets the parachain header that corresponds to the last finalized relay chain block.
async fn wait_for_target_block<B, RCInterface>(
sender: oneshot::Sender<<B as BlockT>::Header>,
para_id: ParaId,
relay_chain_interface: RCInterface,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>>
where
B: BlockT + 'static,
RCInterface: RelayChainInterface + Send + 'static,
{
let mut imported_blocks = relay_chain_interface.import_notification_stream().await?.fuse();
while imported_blocks.next().await.is_some() {
let is_syncing = relay_chain_interface.is_major_syncing().await.map_err(|e| {
Box::<dyn std::error::Error + Send + Sync>::from(format!(
"Unable to determine sync status. {e}"
))
})?;
if !is_syncing {
let relay_chain_best_hash = relay_chain_interface
.finalized_block_hash()
.await
.map_err(|e| Box::new(e) as Box<_>)?;
let validation_data = relay_chain_interface
.persisted_validation_data(
relay_chain_best_hash,
para_id,
OccupiedCoreAssumption::TimedOut,
)
.await
.map_err(|e| format!("{e:?}"))?
.ok_or_else(|| "Could not find parachain head in relay chain")?;
let target_block = B::Header::decode(&mut &validation_data.parent_head.0[..])
.map_err(|e| format!("Failed to decode parachain head: {e}"))?;
log::debug!(target: LOG_TARGET_SYNC, "Target block reached {:?}", target_block);
let _ = sender.send(target_block);
return Ok(())
}
}
Err("Stopping following imported blocks. Could not determine parachain target block".into())
}
+8 -13
View File
@@ -12,10 +12,9 @@ use cumulus_client_consensus_aura::{AuraConsensus, BuildAuraConsensusParams, Slo
use cumulus_client_consensus_common::{
ParachainBlockImport as TParachainBlockImport, ParachainConsensus,
};
use cumulus_client_network::BlockAnnounceValidator;
use cumulus_client_service::{
build_relay_chain_interface, prepare_node_config, start_collator, start_full_node,
StartCollatorParams, StartFullNodeParams,
build_network, build_relay_chain_interface, prepare_node_config, start_collator,
start_full_node, BuildNetworkParams, StartCollatorParams, StartFullNodeParams,
};
use cumulus_primitives_core::ParaId;
use cumulus_relay_chain_interface::{RelayChainError, RelayChainInterface};
@@ -168,9 +167,6 @@ async fn start_node_impl(
s => s.to_string().into(),
})?;
let block_announce_validator =
BlockAnnounceValidator::new(relay_chain_interface.clone(), para_id);
let force_authoring = parachain_config.force_authoring;
let validator = parachain_config.role.is_authority();
let prometheus_registry = parachain_config.prometheus_registry().cloned();
@@ -178,17 +174,16 @@ async fn start_node_impl(
let import_queue_service = params.import_queue.service();
let (network, system_rpc_tx, tx_handler_controller, start_network) =
sc_service::build_network(sc_service::BuildNetworkParams {
config: &parachain_config,
build_network(BuildNetworkParams {
parachain_config: &parachain_config,
client: client.clone(),
transaction_pool: transaction_pool.clone(),
para_id,
spawn_handle: task_manager.spawn_handle(),
relay_chain_interface: relay_chain_interface.clone(),
import_queue: params.import_queue,
block_announce_validator_builder: Some(Box::new(|_| {
Box::new(block_announce_validator)
})),
warp_sync: None,
})?;
})
.await?;
if parachain_config.offchain_worker.enabled {
sc_service::build_offchain_workers(
+20 -33
View File
@@ -20,10 +20,9 @@ use cumulus_client_consensus_aura::{AuraConsensus, BuildAuraConsensusParams, Slo
use cumulus_client_consensus_common::{
ParachainBlockImport as TParachainBlockImport, ParachainCandidate, ParachainConsensus,
};
use cumulus_client_network::BlockAnnounceValidator;
use cumulus_client_service::{
build_relay_chain_interface, prepare_node_config, start_collator, start_full_node,
StartCollatorParams, StartFullNodeParams,
build_network, build_relay_chain_interface, prepare_node_config, start_collator,
start_full_node, BuildNetworkParams, StartCollatorParams, StartFullNodeParams,
};
use cumulus_primitives_core::{
relay_chain::{Hash as PHash, PersistedValidationData},
@@ -390,9 +389,6 @@ where
s => s.to_string().into(),
})?;
let block_announce_validator =
BlockAnnounceValidator::new(relay_chain_interface.clone(), para_id);
let force_authoring = parachain_config.force_authoring;
let validator = parachain_config.role.is_authority();
let prometheus_registry = parachain_config.prometheus_registry().cloned();
@@ -400,17 +396,16 @@ where
let import_queue_service = params.import_queue.service();
let (network, system_rpc_tx, tx_handler_controller, start_network) =
sc_service::build_network(sc_service::BuildNetworkParams {
config: &parachain_config,
build_network(BuildNetworkParams {
parachain_config: &parachain_config,
client: client.clone(),
transaction_pool: transaction_pool.clone(),
para_id,
spawn_handle: task_manager.spawn_handle(),
relay_chain_interface: relay_chain_interface.clone(),
import_queue: params.import_queue,
block_announce_validator_builder: Some(Box::new(|_| {
Box::new(block_announce_validator)
})),
warp_sync: None,
})?;
})
.await?;
let rpc_client = client.clone();
let rpc_builder = Box::new(move |_, _| rpc_ext_builder(rpc_client.clone()));
@@ -583,9 +578,6 @@ where
s => s.to_string().into(),
})?;
let block_announce_validator =
BlockAnnounceValidator::new(relay_chain_interface.clone(), para_id);
let force_authoring = parachain_config.force_authoring;
let validator = parachain_config.role.is_authority();
let prometheus_registry = parachain_config.prometheus_registry().cloned();
@@ -593,17 +585,16 @@ where
let import_queue_service = params.import_queue.service();
let (network, system_rpc_tx, tx_handler_controller, start_network) =
sc_service::build_network(sc_service::BuildNetworkParams {
config: &parachain_config,
build_network(cumulus_client_service::BuildNetworkParams {
parachain_config: &parachain_config,
client: client.clone(),
transaction_pool: transaction_pool.clone(),
para_id,
spawn_handle: task_manager.spawn_handle(),
relay_chain_interface: relay_chain_interface.clone(),
import_queue: params.import_queue,
block_announce_validator_builder: Some(Box::new(|_| {
Box::new(block_announce_validator)
})),
warp_sync: None,
})?;
})
.await?;
let rpc_builder = {
let client = client.clone();
@@ -1362,9 +1353,6 @@ where
s => s.to_string().into(),
})?;
let block_announce_validator =
BlockAnnounceValidator::new(relay_chain_interface.clone(), para_id);
let force_authoring = parachain_config.force_authoring;
let validator = parachain_config.role.is_authority();
let prometheus_registry = parachain_config.prometheus_registry().cloned();
@@ -1372,17 +1360,16 @@ where
let import_queue_service = params.import_queue.service();
let (network, system_rpc_tx, tx_handler_controller, start_network) =
sc_service::build_network(sc_service::BuildNetworkParams {
config: &parachain_config,
build_network(BuildNetworkParams {
parachain_config: &parachain_config,
client: client.clone(),
transaction_pool: transaction_pool.clone(),
para_id,
spawn_handle: task_manager.spawn_handle(),
relay_chain_interface: relay_chain_interface.clone(),
import_queue: params.import_queue,
block_announce_validator_builder: Some(Box::new(|_| {
Box::new(block_announce_validator)
})),
warp_sync: None,
})?;
})
.await?;
let rpc_builder = {
let client = client.clone();
@@ -127,3 +127,15 @@ zombienet-0006-rpc_collator_builds_blocks:
--github-remote-dir="${GH_DIR}"
--concurrency=1
--test="0006-rpc_collator_builds_blocks.feature"
zombienet-0007-full_node_warp_sync:
extends:
- .zombienet-common
- .zombienet-refs
- .zombienet-before-script
- .zombienet-after-script
script:
- /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh
--github-remote-dir="${GH_DIR}"
--concurrency=1
--test="0007-full_node_warp_sync.feature"
+10 -12
View File
@@ -33,10 +33,10 @@ use cumulus_client_cli::CollatorOptions;
use cumulus_client_consensus_common::{
ParachainBlockImport as TParachainBlockImport, ParachainCandidate, ParachainConsensus,
};
use cumulus_client_network::BlockAnnounceValidator;
use cumulus_client_pov_recovery::RecoveryHandle;
use cumulus_client_service::{
prepare_node_config, start_collator, start_full_node, StartCollatorParams, StartFullNodeParams,
build_network, prepare_node_config, start_collator, start_full_node, BuildNetworkParams,
StartCollatorParams, StartFullNodeParams,
};
use cumulus_primitives_core::ParaId;
use cumulus_relay_chain_inprocess_interface::RelayChainInProcessInterface;
@@ -314,23 +314,21 @@ where
s => s.to_string().into(),
})?;
let block_announce_validator =
BlockAnnounceValidator::new(relay_chain_interface.clone(), para_id);
let block_announce_validator_builder = move |_| Box::new(block_announce_validator) as Box<_>;
let prometheus_registry = parachain_config.prometheus_registry().cloned();
let import_queue_service = params.import_queue.service();
let (network, system_rpc_tx, tx_handler_controller, start_network) =
sc_service::build_network(sc_service::BuildNetworkParams {
config: &parachain_config,
build_network(BuildNetworkParams {
parachain_config: &parachain_config,
client: client.clone(),
transaction_pool: transaction_pool.clone(),
para_id,
spawn_handle: task_manager.spawn_handle(),
relay_chain_interface: relay_chain_interface.clone(),
import_queue: params.import_queue,
block_announce_validator_builder: Some(Box::new(block_announce_validator_builder)),
warp_sync: None,
})?;
})
.await?;
let prometheus_registry = parachain_config.prometheus_registry().cloned();
let rpc_builder = {
let client = client.clone();
@@ -0,0 +1,14 @@
Description: Full node catching up using warp sync
Network: ./0007-full_node_warp_sync.toml
Creds: config
alice: is up within 30 seconds
bob: is up within 30 seconds
charlie: is up within 30 seconds
dave: is up within 30 seconds
eve: is up within 30 seconds
ferdie: is up within 30 seconds
alice: parachain 2000 is registered within 225 seconds
one: reports block height is at least 770 within 225 seconds
two: reports block height is at least 770 within 225 seconds
three: reports block height is at least 770 within 225 seconds
@@ -0,0 +1,77 @@
[relaychain]
default_image = "{{RELAY_IMAGE}}"
default_command = "polkadot"
default_args = [ "-lparachain=debug" ]
chain = "rococo-local"
chain_spec_path = "zombienet/tests/0007-warp-sync-relaychain-spec.json"
[[relaychain.nodes]]
name = "alice"
validator = true
db_snapshot = "https://storage.googleapis.com/zombienet-db-snaps/cumulus/0007-full_node_warp_sync/relaychain-1964f8b557f10085cdc18f4105ad0bbb3df4c4c6.tgz"
[[relaychain.nodes]]
name = "bob"
validator = true
db_snapshot = "https://storage.googleapis.com/zombienet-db-snaps/cumulus/0007-full_node_warp_sync/relaychain-1964f8b557f10085cdc18f4105ad0bbb3df4c4c6.tgz"
[[relaychain.nodes]]
name = "charlie"
validator = true
db_snapshot = "https://storage.googleapis.com/zombienet-db-snaps/cumulus/0007-full_node_warp_sync/relaychain-1964f8b557f10085cdc18f4105ad0bbb3df4c4c6.tgz"
[[relaychain.nodes]]
name = "dave"
validator = true
args = ["--sync warp", "--reserved-only", "--reserved-nodes {{'alice'|zombie('multiAddress')}} {{'bob'|zombie('multiAddress')}} {{'charlie'|zombie('multiAddress')}}"]
[[parachains]]
id = 2000
cumulus_based = true
chain_spec_path = "zombienet/tests/0007-warp-sync-parachain-spec.json"
add_to_genesis = false
[[parachains.collators]]
name = "dave"
validator = true
image = "{{COL_IMAGE}}"
command = "test-parachain"
args = ["-lparachain=debug"]
db_snapshot = "https://storage.googleapis.com/zombienet-db-snaps/cumulus/0007-full_node_warp_sync/parachain-587c1ed24ddd7de05c237cf7c158fff53b8f5b26.tgz"
[[parachains.collators]]
name = "eve"
validator = true
image = "{{COL_IMAGE}}"
command = "test-parachain"
args = ["-lparachain=debug"]
db_snapshot = "https://storage.googleapis.com/zombienet-db-snaps/cumulus/0007-full_node_warp_sync/parachain-587c1ed24ddd7de05c237cf7c158fff53b8f5b26.tgz"
[[parachains.collators]]
name = "ferdie"
validator = true
image = "{{COL_IMAGE}}"
command = "test-parachain"
args = ["-lparachain=debug"]
db_snapshot = "https://storage.googleapis.com/zombienet-db-snaps/cumulus/0007-full_node_warp_sync/parachain-587c1ed24ddd7de05c237cf7c158fff53b8f5b26.tgz"
[[parachains.collators]]
name = "one"
validator = false
image = "{{COL_IMAGE}}"
command = "test-parachain"
args = ["-lsync=debug","--sync warp","--","--sync warp"]
[[parachains.collators]]
name = "two"
validator = false
image = "{{COL_IMAGE}}"
command = "test-parachain"
args = ["-lsync=debug","--sync warp","--relay-chain-rpc-urls {{'alice'|zombie('wsUri')}}"]
[[parachains.collators]]
name = "three"
validator = false
image = "{{COL_IMAGE}}"
command = "test-parachain"
args = ["-lsync=debug","--sync warp","--relay-chain-rpc-urls {{'dave'|zombie('wsUri')}}"]
@@ -0,0 +1,37 @@
# Database snapshot guide
For this guide we will be taking a snapshot of a parachain and relay chain. Please note we are using a local chain here `rococo_local_testnet` and `local_testnet`. Live chains will have different values
*Please ensure that the database is not in current use, i.e no nodes are writing to it*
# How to prepare database for a relaychain
To prepare snapshot for a relay chain we need to copy the database.
```
mkdir -p relaychain-snapshot/alice/data/chains/rococo_local_testnet/db/
cp -r chain-data/alice/data/chains/rococo_local_testnet/db/. relaychain-snapshot/alice/data/chains/rococo_local_testnet/db/
tar -C relaychain-snapshot/alice/ -czf relaychain.tgz data
```
# How to prepare database for a parachain
To prepare snapshot for a parachain we need to copy the database for both the collator node (parachain data) and validator (relay data)
```
#Parachain data
mkdir -p parachain-snapshot/charlie/data/chains/local_testnet/db/
# Relay data
mkdir -p parachain-snapshot/charlie/relay-data/chains/rococo_local_testnet/db/
cp -r chain-data/charlie/data/chains/local_testnet/db/. parachain-snapshot/charlie/data/chains/local_testnet/db/
cp -r chain-data/charlie/relay-data/chains/rococo_local_testnet/db/. parachain-snapshot/charlie/relay-data/chains/rococo_local_testnet/db/
tar -C parachain-snapshot/charlie/ -czf parachain.tgz data relay-data
```
# Restoring a snapshot
Zombienet will automatically download the `*.tgz` file to the respective folder for a run. However you can also download it manually, just ensure you extract the tar file in the correct directory, i.e. the root directory
`chain-data/charlie/`
@@ -0,0 +1,53 @@
{
"name": "Local Testnet",
"id": "local_testnet",
"chainType": "Local",
"bootNodes": [
"/ip4/127.0.0.1/tcp/63048/ws/p2p/12D3KooWKM1HeSv61ryZwAiBTZnqmass5pYM48k9Z7obzhTbnphm"
],
"telemetryEndpoints": null,
"protocolId": null,
"properties": null,
"para_id": 2000,
"codeSubstitutes": {},
"genesis": {
"raw": {
"top": {
"0x2089cf3645f21ef4a51744f13e6e4e45": "0xd0070000",
"0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01",
"0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545",
"0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545",
"0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9007cbc1270b5b091758f9c42f5915b3e8ac59e11963af19174d0b94d5d78041c233f55d2e19324665bafdfb62925af2d": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da923a05cabf6d3bde7ca3ef0d11596b5611cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da932a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94f9aea1afa791265fae359272badc1cf8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96f2e33376834a63c86a195bcf685aebbfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da98578796c363c105114787203e4d93ca6101191192fc877c24d725b337120fa3edc63d227bbc92705db1e2cb65f56981a": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b0edae20838083f2cde1c4080db8cf8090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b321d16960ce1d9190b61e2421cc60131e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9e5e802737cce3a54b0bc9e3d3e6be26e306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9edeaa42c2163f68084a988529a0e2ec5e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9f3f619a1c2956443880db9cc9a13d058e860f1b1c7227f7c22602f53f15af80747814dffd839719731ee3bba6edc126c": "0x0000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x045863756d756c75732d746573742d70617261636861696e",
"0x2b746573745f72756e74696d655f757067726164655f6b65792b": "0x01020304",
"0x3a63": "0x",
"0x3a636f6465": "0x52bc537646db8e0528b52ffd0058141105def98535124d107877930ef0565839f8f5c1e2f0077f0fad17c87323feddec14ff657b8b1316becd112e7e9b1869497315cfa9942f3bd3522e26b2907799a96820d709ac8778336b37217befbde59652a69452a31276112112514e4d04e913aaf0a8cf13fc73d5205479987a92e28907dacfe2848ae1a964908ae151e944fd89921adca00a50da080ae28932284a50108ffa74e22d271397c3e2a6eeb676ce2ec0031a6394e151d7ec02335bc8820ee2a082326578d46dbe1916e16ae7b6e7bb547ccfdbe3a6bd0719dbac8797d0d9f37d3d5139e3474c7aeeb6fdabb1750e9f73dbbe63c6827a5420bd1dbd2b6fe80dbdbd821e617b436fcabbfb829bfeebe128f80eb3435fe837cef7f96fdc14a03f0abe6ddf6d2eea0f65325cfadc2910e8ea4f81c0ed07263d57c2e730e9b9663d6312d15bc7f2e7a4d6b9fc390f2e3926457f0e840271fd11fdf9b5698c13ddda22e3c41cb175468c13bdf2e7aae5e70fff3c8702d97f0ea377971dd617bd9d8a95e7c1a4e8eceb9b45bfa1bc9fff86923f5be629d7139526bc9ea82ce1474c8a0e7fdc575299149ffe50d7cce90ff51d86dbfe13363dee1f5cca25aaddc9b9ef306adb7f9b73cd843c77ce6ffbd93241da9d4f31463308b43b8feee48cef28dfeca789284e4009fa9f598237c0a1cc4367627a28993c572651723ae7b72589519c80f23f5b6636c119912867139766429e3b775910e8aa3fe6a3b67db8fd6c995f7f3d4ede0c6977deeea40fbb933f4e7ef6f35b26e3a2fcdaace772cc9fc72d73552021877e85b620a69f985fae599018f289ae8e6d33fafab5af272aa77ffa03fa0e337bb645b7b6fdebd20c02ec55e5d956b9b5e9ba663d959c9563d5b67ff90e5fba617e6dfa97664254ce7d75cc2fc62e21d6abfe98ead7b5d885f90e2b766d71c398d47e44c3fc72eb671c121f933e95b36fb3f2f59dd68c087bb5d9cf9679cb777a87ad4dbfdaf4a33edcdee636c724c5b6af5cda01cdf91cfd8b4070e9e5fcf3e73f70e9e69f53b9f2cf79b00ef33c21feedf0cf352eb1bff79eab8f277df4f4e4525dd54de2d2378331c9d918c1a5e95f7afc5433def9732a3e7f0afa54304f39105c9aa31d2ecd380497a6a604972817824b374f7906d878ca3bc03a8ea7158c7679ca954b3c7edafc04e2a9e73bcce3e28d9ab2533ce51763bcf18f5cf0945fcaab1dfad932af94db70c9394539e5ea83923e3aa6b544910577405b1ff16041d0b3cdbb901e7d7bebea2c4fbbd6362fe452cb0c6d62639e5db31929907dedd2d0c544734c52e97a2322b9dad5c7d41397eebe7976c77e6acf3e3026ed9880b2814510c0acc10b18b8600c3c3a9a71bbee1c8828c2e8300fbb10bded633a9e1d5b89bd9ea2f8f24e8e98b47a72c3a51fd0d867c40270e90534f62bd485ebf50405981ff1b84c5966b0022a6499810bce1006cfb6af7fad63d23a2ec23189af4b3321504e7fe851df8c63929c40fd968fb874793b0f2e5117555572566e7945614cd2b84455de7e51dbfe553109f3cd848c1e931373cba94d1fdb80fa2bbf96753b446dfad7a66f55a35f8fad0385f328e3a8fe983c7ee584febcfdea5db8e933603d6e40ef17bb186be2a1eb366367fa66d6d5650a673026f960523be5ce24aa7573dbdc57871b50bffa6e1a93d837eb51f96464126befb1755c50505050104f3b4981f4b78fb7f6d1a0bd3723b4f5f83c42f1e5d9b1111441cfcee3b9cc086d5df79d894bf9ba1433f58e6b7d37324f4ed33fdf6d36b6dbfeb55376ca1a9df54ca9c2399eb5d115cfcec3b3f81d342ecdeb19c710d5c2ff6c999f463e0ba269bcfaf530e70562cf0c0a8353c25c0ddf320042ea970251a9fa637753263de998a412d0e6e8d9dbddfea88d67e74122f3ec3bb86dc4a4c9e3d7ed6bc2fa0ad4e0155879e627c6e82582ee9e5f3b42606837ced7db9f43efac07c27d4e0e59efb73bc6a51ed0f4f444987fafa727a2bccea8b1ce6940178fd62451ef0334cd1e607ae76494a65d077cd180226a80e95665674c9d33224cefa3f2e7c9ab4f766dc190a2c6eb498a979ff19d17e0f524e58a7717dcae7d1911a67742f6a14fd34319790b81f1fc7259cfeb8c08d3b766d06fa00cb20f1dcac8a475dd571f4efa68572e1ede2d24c6ae06b9f401eeb1bf44f0353bcb76f7a010f6f61d562edd04616f6f389ffbb43b87d02397f821f6a74b1fa05d22e5123b9742e6f557462639777e89767e9ebcfbd977120497728b2297dad99de3acc76d4684c96dfb9a75072ee51237a6dba53ea2b081e570690af1ed932404979cb7efc025eadb352ee9298a986fb7611de6f141fdfce1dbafc59475b4c651c7251ff6751b2eb1b72beb68e3b49b5126614c5a777e31b68ead2beb288f3a16e6d53763d72c08bbf321ec0ee312ebe90997f2a5ae3ee6063dab134d4f54d8f80dd2694c371fcda75d7f6e10bf9ea488f2fbeb9b15b1505ee5dc20e7ba3571afee3622a257ef4d15c8747e33c47a277f44afae687cce4f2df3b39df5755326e9b653b4f57d6504a86ff6e33fdab7dc205e820abefc8ccfeccccc5c9e9999d9d5072f7169073476e712894bd38db8d4ee430553be1d639de6e91df8278f6f6f775cf2d1d22727490e129a9e9cb8e2f504858d9fa4673fc0eb09cae935eb918036b51dd6348c4beafcfcd5afb7e9f7b67fa90fda3e6cec6dd037eb69e89a11617a786d36e43994f3f9f38bb321da3fd7cc31c9f9e5b0def6afc6e0f67c3365d2b4f9f5ebd20cca697ae8bdcdf8bc7b9beea1eff0d5db74c0b75f9a517236f194f736f5f4ed6f9bcaa4269850c24806be7d2a93a611df3edf10dfbed36fd3a7b69f2e53a60c997fdedb14e29d5f8bf5e6fc6dfa9a15413ddc7ea87f72eeb7fcd93265ca94f969fa76b72993563a26ade7bc02c004d741b9d43ac3ba94d4014d4f50b6fc8caf27285a5e1d639de5511f71494f41645e9dc7abab0f65c0a53f5c977249f7d7d52f9172491d97d8d5afbd1ca65cd29ff155671c50851626e9b7f376f6ce7a58eace38a08a2d4cd25fef4d9ddcac2732a95db32134eb61dfe16dc2a5cfeccb2c77d8b44bc4b5be9b04b45350989feed9e37a8cda3aca3853fbf5a9bddb45a2b779db7778bbbb7bbd7b993d3ecb1b22ecce799de5646fdefd72a98fe9cf7ee901b44b7dd0d4db35eb51df2c4813414141505ea53269c667bf18532ead734999c4bec3bd3926b1f7a0391f71495fe312bb0d97dad9475cda67d7aca7ddd6448767628abf1e7fe50d9175e7eb4e02edb7d4ac67e55c7f0580a9779f70e9ab8fa93dfb15b9347784c0d0d627f67cf566006dbd5d5db322d67d5a46264df7ea3b7cedd60fc37c132c742db69b7b4c812cd931ff437d139a26d8afb38714c8920dfa1f067c13f8ebec2205b26483fe8701bfceaed9101714f4eb3b7c31a60a647db62b93d42397e67ebbfad55b6492fa0fad5d5d33218e49ea2d2393d477Line truncated
"0x3a65787472696e7369635f696e646578": "0x00000000",
"0x3f1467a096bcd71a5b6a0c8155e20810308ce9615de0775a82f8a94dc3d285a1": "0x01",
"0x3f1467a096bcd71a5b6a0c8155e208103f2edf3bdf381debe331ab7446addfdc": "0x000064a7b3b6e00d0000000000000000",
"0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x45323df7cc47150b3930e2666b0aa3134e7b9012096b41c4eb3aaf947f6ea429": "0x0200",
"0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
"0xae2f5cafcc1a57aac6a0e51fb2a269b74e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100",
"0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00000000000000c00000000000000000",
"0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000"
},
"childrenDefault": {}
}
}
}
@@ -0,0 +1,171 @@
{
"name": "Rococo Local Testnet",
"id": "rococo_local_testnet",
"chainType": "Local",
"bootNodes": [
"/ip4/127.0.0.1/tcp/63035/ws/p2p/12D3KooWQCkBm1BYtkHpocxCwMgR8yjitEeHGx8spzcDLGt2gkBm"
],
"telemetryEndpoints": null,
"protocolId": "dot",
"properties": null,
"forkBlocks": null,
"badBlocks": null,
"lightSyncState": null,
"codeSubstitutes": {},
"genesis": {
"raw": {
"top": {
"0x0595267586b57744927884f519eb81014e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x06de3d8a54d27e44a9d5ce189618f22d4e7b9012096b41c4eb3aaf947f6ea429": "0x0400",
"0x06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385": "0x0000300000800000080000000000100000c800000500000005000000020000000200000000005000000010000700e876481702004001040000000400000000000000000000000000000000000000000000000000000000000000000000000800000000200000040000000400000000001000b00400000000000000000000140000000400000004000000000000000101000000000600000064000000c800000002000000190000000000000002000000020000000700c817a80402004001000200000005000000",
"0x084e7f70a295a190e2e33fd3f8cdfcc24e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x08c41974a97dbf15cfbec28365bea2da4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x08c41974a97dbf15cfbec28365bea2da5e0621c4869aa60c02be9adcc98a0d1d": "0x0c020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a10390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f270389411795514af1627765eceffcbd002719f031604fadd7d188e2dc585b4e1afb",
"0x08c41974a97dbf15cfbec28365bea2da8f05bccc2f70ec66a32999c5761156be": "0x0000000000000000",
"0x08c41974a97dbf15cfbec28365bea2daaacf00b9b41fda7a9268821c2a2b3e4c": "0x0c020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a10390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f270389411795514af1627765eceffcbd002719f031604fadd7d188e2dc585b4e1afb",
"0x1405f2411d0af5a7ff397e7c9dc68d194e7b9012096b41c4eb3aaf947f6ea429": "0x0100",
"0x1405f2411d0af5a7ff397e7c9dc68d196323ae84c43568be0d1394d5d0d522c4": "0x03000000",
"0x1809d78346727a0ef58c0fa03bafa3234e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x196e027349017067f9eb56e2c4d9ded54e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x1a736d37504c2e3fb73dad160c55b2914e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x1cb6f36e027abb2091cfb5110ab5087f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x0cd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d01000000000000008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48010000000000000090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe220100000000000000",
"0x1cb6f36e027abb2091cfb5110ab5087f66e8f035c8adbe7f1547b43c51e6f8a4": "0x00000000",
"0x1cb6f36e027abb2091cfb5110ab5087faacf00b9b41fda7a9268821c2a2b3e4c": "0x0cd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d01000000000000008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48010000000000000090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe220100000000000000",
"0x1cb6f36e027abb2091cfb5110ab5087fdc6b171b77304263c292cc3ea5ed31ef": "0x0100000000000000040000000000000002",
"0x2099d7f109d6e535fb000bba623fd4404c014e6bf8b8c2c011e7290b85696bb3": "0x0cd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4890b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22",
"0x2099d7f109d6e535fb000bba623fd4404e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x0cd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4890b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22",
"0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01",
"0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545",
"0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545",
"0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9007cbc1270b5b091758f9c42f5915b3e8ac59e11963af19174d0b94d5d78041c233f55d2e19324665bafdfb62925af2d": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da923a05cabf6d3bde7ca3ef0d11596b5611cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da932a5935f6edc617ae178fef9eb1e211fbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x00000000010000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da94f9aea1afa791265fae359272badc1cf8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95ecffd7b6c0f78751baa9d281e0bfa3a6d6f646c70792f74727372790000000000000000000000000000000000000000": "0x0000000000000000010000000000000055a0fc01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96f2e33376834a63c86a195bcf685aebbfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0x00000000010000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da98578796c363c105114787203e4d93ca6101191192fc877c24d725b337120fa3edc63d227bbc92705db1e2cb65f56981a": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b0edae20838083f2cde1c4080db8cf8090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b321d16960ce1d9190b61e2421cc60131e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625": "0x00000000010000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9de1e86a9a8c739864cf3cc5ec2bea59fd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9e5e802737cce3a54b0bc9e3d3e6be26e306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9edeaa42c2163f68084a988529a0e2ec5e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9f3f619a1c2956443880db9cc9a13d058e860f1b1c7227f7c22602f53f15af80747814dffd839719731ee3bba6edc126c": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x699218726f636f636f",
"0x2762c81376aaa894b6f64c67e58cc6504e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x2aeddc77fe58c98d50bd37f1b90840f94e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x2b06af9719ac64d755623cda8ddd9b944e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179": "0x0cd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4890b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22",
"0x2c5de123c468aef7f3ac2ab3a76f87ce4e7b9012096b41c4eb3aaf947f6ea429": "0x0400",
"0x2f85f1e1378cb2d7b83adbaf0b5869c24e7b9012096b41c4eb3aaf947f6ea429": "0x0100",
"0x2f85f1e1378cb2d7b83adbaf0b5869c2ff3ae12770bea2e48d9bde7385e7a25f": "0x0000000002000000",
"0x3195e99b3353c0f2dd3f53c10740793a4e7b9012096b41c4eb3aaf947f6ea429": "0x0100",
"0x3195e99b3353c0f2dd3f53c10740793a57c875e4cff74148e4628f264b974c80": "0x00000000000000000000000000000000",
"0x31a3a2ce3603138b8b352e8f192ca55a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x39e295d143ed41353167609a3d816584": "0x0a000000",
"0x3a2d6c9353500637d8f8e3e0fa0bb1c54e7b9012096b41c4eb3aaf947f6ea429": "0x0400",
"0x3a2d6c9353500637d8f8e3e0fa0bb1c5ba7fb8745735dc3be2a2c61a72c39e78": "0x00",
"0x3a636f6465": "0x52bc537646db8e0528b52ffd005894f804ae5fc66e14552010ab9a0ec117fa6058596ebc671fe7774ed143107932f0c4b28cbc70d5a0785d72e5469c084b32f9ffa5a6732fe618bc1b54fc473b9c38549e6e1dadfec5885caec5f28cfd521fefe36f6b7bb735b9b79429c9145316f512cb13deaaede3df3f9fdb677a0d16991234e1688af232e818f0b87dda3f163dd641c2e3bbb3f61945f8f6196122b4cf7cff9df6e9ae7fd83e7c438ae3fabbfaa769ae73fdb97dba3b8270fd3df971ff841ee3d93e41fdf25dedd3efcffdc31ef319c30dfb1a267fbed79ffc4f3ef70fd3f8bfa8cb2fc17e068df4cf2fa17f7eedd37ceb323c6e8f9f754669bbcdf287906f4bb72b6d3ffeb128670883fcf98ed2d6976f4b50575ef9127c8094e1b21da56d3e8b51e6e59fe291d6e5779179c838ffa684d59d56a875f9798d3bbb234fddd1bff9b2c80d63518620942f2f7708fc12147aa1f0ba95b626630ad4942dfd63bdeeeffeee3e45e9babbbb8e378943ca185296be7dfafb61ed33cedbfd3a33b8f1e3b4dee93be2dc7eee7f32f340c8b719ae5cbec980c71d61b73fc8e59b0cb7cb601116c23124d261f8b50f7fd3bffc1e15f9ba28afc743427939ffa8c8bd048b38f70c9a7074394f8225d0e7ec489fbed76009e1a5cfe06cd87c6f7e2ecaebf9c789f425c80d1b5d57bee731c8d9f1e872efe258e9bb8be3bcdc1369cfc57101d7df63b0b3230cb77b1747be5d7f2a8edc3018a0b4902485eb3f72c3c613aeff4849b8fe449c8a7c3b51c8a7a6a6c25cfa2e8e22dcf99efc5c9c4f45be0c3ea0bbce8942dda57694d7ad909c9a9a9abae3d1f59f22374cdad930f9b3cb1d1c7172cae0b1ec499660e5f150c837199c6e6d1fbec9d074f9bffe9134fe57fbf0cd16e6f2e35c7ed6e104782c42289f9f559ec7edc3f2cae7f75adc3e3cdba79fdf93defcb87df88ef532c74c600e371ac6d7e7fbf73b58a42dcb9809cc1147c3f8ca7791a7956091da307f0649e02bc122fd445a8ae1f1ed7ed96d89f491942678f2a5c84278b345dd71defe2abf56f61feed8185ef96378a7944b5c7a4b7f222ddddd5dbebbecfe7adbde1ce99fdfb204f96dc77e6f29a13cd619fff67b6c80d0e32121bf3f8345f8256804069bcd26c365cb0d1bebedf7fae3f691df3edcb07e22ede26c587f01c2f9aff6e11bb60f378cbfdfd53efefdaff691b79fc1223ec5281c5ca2a37ae5d72bedcd11f9f3e54f5b24af5b068b483bca2b9f4813e9bfdcc1914b5986c79775c6f0f67bb57d462041f208e58fdfed1ffdb9613ea17c7f7e061f203f881b36cecb4fa43d29fa053f1e3224a36e948f25bfdf939f14e7fda4ae5077a3c8801fabc56009d366bbf289b4d71ff310f9a33f378cbfb6cf28af3fbfe7626d187f08a13f3f8323cc86f1bbad0de327d25e7f52ecfbf1902179bb51b82bbf1fe42143d276851270e5f74bf001a1edcaffda876f3f832548db954fa489349126d22c72c3f859a76d5078b983a396fd86c7edc9e7f619f9a5e586f1f31f4949e3f1cdc674b90be2a59b90011dab20b7207704890a8245902e41b608c245902e7a521084079e3d78fae091418f1d3d523d2be881a3c74acf1d3d28e8a9a3278a9e11f440d113478f538f143d4ef04cf1c4a0678a1e15f490c153468f103d5a7a5cd00344cf0f3d2fe081a367069e1af0e8c113078f1c3c78f4d878c2f0e4c103c533064f183c33e0e18387063d32f09cd173060f1b3c2fe8d1a3a78d1e3678a478a278501044071e3578d2e0b983c78d9e281e17f4f8c063829e317854d053464f097852d0f325880f417608f203cf1b3d3df09c6046c70ccc0c8d9918b312ccc8988d31db62c6c5ac69c6c42ccb8c88d908663ccc8c983531db321b6226c42c8899951912b323662198fd30f36106c4ac871d356441cca69831cd9e98619941e13590bd40e602991db23a6474c8e690b54036850c8cac0d9909646bc8a49045218342f684ac0b1917b22d64379916b22c6458c8b8c8ae905921ab42c602991cb215c8e290c1217b43a60259942c053214c84e2073435602d9161915b234645e6464c8c69089210b4306860c0dd91932336450b224644ac84420434286450684ec079992ac8a8c8aac06990d32196438c8966449321d76ead8c963678e1d3b765c20b3ed4cc9acec9060e78b1d2f76bad861dad1b213821d237670d859dab96127879d1a3e98da912127891c313e70e303137c80468d1d3575c84ce58c2047899c295a37e41c914344ce18f3e903232a973ac50c0b26179b14d04c7d53a6145e1e353ae40491d3451da3a60c9715ef0e9b3966e6a865501a6ef400a3a852cc11958abaa53a51ada859e4a471d3021005558b9918381534884a068d548da296a07e2153c50c9819856c2adc218729c7890faef078e9b9a1ab987b501d7c0a190d3158e4542143050f182e9ba7c4a4412b87960c2d1a5a53eaad478789450e97960d3334e87123880c54080f06354b3942f49860264c4ed38c0ce41e3d7bf41cf1c11e337bc86ca9c1a1b19899ea2e526aba1173454d0e2d9b6b31d3871fb132a35543ce172d29353bb4748031f5f011c385678d9e1af484f92c66f4f0137cb0657aa99941cf1a417ac819a2c78c160ead2ad3041f133d5e62aaf8b2d8a8a027cb4c0d665d66f8f880063c4f418098c963e7e9fb627fb0427c69b0a2b03358222c932d2267891c2d34871c3044188877b06a10db426422a709981a3d6a744b9f1b3154b47a6821753eccb0a040ce1d337180327858c08a8011514730f3464e0fe00c540610a96a9955ccac20e609d61e74e9adc0aec086006d3010cc2d9e16393fccc8f1446c30054e0d368802678a05c506476c80044f0936981293450d23078d9c3072b0c039c31bc1cd1c3845e010710386a5e53323a4c15ab94983f5844c8896139e1e353708600a1c2b324b80768846acb800d1e3c68e9b366ed6c82922678d1b19e45091e31413450e173731b819814c1137596e98b0e922064c4c8c1817338d5919b32f4d43d7d03c740f3950e47831e3f246b0a478f1f0da6146053153b068608386cd1936536ca4d82c6133430fcf0a8d95171b249b286ca0b069c266043472d838d968b179c2c6091ba51a1a84546af8a8e9c3a606d70d1f10911345cd18ada59a2b70f68875f142d42e1e891a1e66ea9879417da279016c8d1c2962ac9899414f951929590866ec905da15dccd0310335c3a5668f192c6439cca59c2c72ba7cc0142ecdd0d0a2322365a605d58b9b2636c0e2032ac014ccb880da401a66ee7029de8719a4191e7c0b9913d42b2a18332690d1229325c78acc92cc94983d586ab0d698adf158be88af02a4f251dcd0c03525664b43f157dc8d0a052add84b141784b9e0e3834086d703ede4b8e086660e026a85d389062c78c07c1cc69e6c40e1ab38d1fa242e1b71da90f827699c1833505a2f1219850cc44b19a608d80c9388b82d5857505c8c4e28275038b60Line truncated
"0x3a65787472696e7369635f696e646578": "0x00000000",
"0x3a6772616e6470615f617574686f726974696573": "0x010c88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee0100000000000000d17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae690100000000000000439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f0100000000000000",
"0x3d9cad2baf702e20b136f4c8900cd8024e7b9012096b41c4eb3aaf947f6ea429": "0x0100",
"0x3db7a24cfdc9de785974746c14a99df94e7b9012096b41c4eb3aaf947f6ea429": "0x0400",
"0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x3fba98689ebed1138735e0e7a5a790ab4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x3fba98689ebed1138735e0e7a5a790abee99a84ccbfb4b82e714617e5e06f6f7": "0xd0070000",
"0x426e15054d267946093858132eb537f14e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x42b50b77ef717947e7043bb52127d6654e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x4da2c41eaffa8e1a791c5d65beeefd1f028685274e698e781f7f2766cba0cc8300000000": "0x0c020000000000000001000000abc3f086f5ac20eaab792c75933b2e196307835a61a955be82aa63bc0ff9617a060000000c90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48000000000000000000000000000000000000000100000000000000",
"0x4da2c41eaffa8e1a791c5d65beeefd1f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100",
"0x4da2c41eaffa8e1a791c5d65beeefd1f5762b52ec4f696c1235b20491a567f8500000000": "0x00",
"0x4da2c41eaffa8e1a791c5d65beeefd1fff4a51b74593c3708682038efe5323b5": "0x00000000",
"0x50e709b04947c0cd2f04727ef76e88f64e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
"0x5f27b51b5ec208ee9cb25b55d8728243308ce9615de0775a82f8a94dc3d285a1": "0x01",
"0x5f27b51b5ec208ee9cb25b55d87282434e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x5f9cc45b7a00c5899361e1c6099678dc4e7b9012096b41c4eb3aaf947f6ea429": "0x0400",
"0x5f9cc45b7a00c5899361e1c6099678dc8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000",
"0x5f9cc45b7a00c5899361e1c6099678dcd47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000",
"0x63f78c98723ddc9073523ef3beefda0c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x6786c4cec8d628b6598d7a70ace7acd44e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x6a0da05ca59913bc38a8630590f2627c2a351b6a99a5b21324516e668bb86a57": "0x00",
"0x6a0da05ca59913bc38a8630590f2627c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x6ac983d82528bf1595ab26438ae5b2cf4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x6cf4040bbce30824850f1a4823d8c65f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x7474449cca95dc5d0c00e71735a6d17d4e7b9012096b41c4eb3aaf947f6ea429": "0x0100",
"0x89d139e01a5eb2256f222e5fc5dbe6b34e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x928fa8b8d92aa31f47ed74f188a43f704e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x94eadf0156a8ad5156507773d0471e4a16973e1142f5bd30d9464076794007db": "0x00",
"0x94eadf0156a8ad5156507773d0471e4a1e8de4295679f32032acb318db364135": "0x00",
"0x94eadf0156a8ad5156507773d0471e4a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x94eadf0156a8ad5156507773d0471e4a64fb6e378f53d72f7859ad0e6b6d8810": "0x0000000000",
"0x94eadf0156a8ad5156507773d0471e4a9ce0310edffce7a01a96c2039f92dd10": "0x01000000",
"0x94eadf0156a8ad5156507773d0471e4ab8ebad86f546c7e0b135a4212aace339": "0x00",
"0x9c5d795d0297be56027a4b2464e333974e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0x9c5d795d0297be56027a4b2464e33397f43d6436dec51f09c3b71287a8fc9d48": "0x00000000000000000000000000000000",
"0xa2ce73642c549ae79c14f0a671cf45f94e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xa37f719efab16103103a0c8c2c784ce14e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xa8c65209d47ee80f56b0011e8fd91f504e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xaebd463ed9925c488c112434d61debc04e7b9012096b41c4eb3aaf947f6ea429": "0x0400",
"0xb341e3a63e58a188839b242d17f8c9f82586833f834350b4d435d5fd269ecc8b": "0x0c020000000000000001000000",
"0xb341e3a63e58a188839b242d17f8c9f84e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xb341e3a63e58a188839b242d17f8c9f87a50c904b368210021127f9238883a6e": "0x0c90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48",
"0xb341e3a63e58a188839b242d17f8c9f8b5cab3380174032968897a4c3ce57c0a": "0x00000000",
"0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100",
"0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x55a0acda6b9088a60000000000000000",
"0xca32a41f4b3ed515863dc0a38697f84e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xcd710b30bd2eab0352ddcc26417aa1944e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xcd710b30bd2eab0352ddcc26417aa1949f4993f016e2d2f8e5f43be7bb259486": "0x00",
"0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb30e5be00fbc2e15b5fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e": "0xd17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae698eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27",
"0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3ce4f6702f7c0a2951e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625": "0x439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe2290b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe2290b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe2290b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe2290b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe220389411795514af1627765eceffcbd002719f031604fadd7d188e2dc585b4e1afb",
"0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3e535263148daaf49be5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f": "0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0eed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1",
"0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500b42ace3b5fab73c6265656684020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500e3a507571a62417696d6f6e808eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500e9b1341d066bc7162656566840389411795514af1627765eceffcbd002719f031604fadd7d188e2dc585b4e1afb": "0x1e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195021cd04f63ad37128626162658090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x1e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950246b6699fb8b8db670617261808eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19504a8e42157609c6c86173676e80d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505905fe216cc5924c6772616e80d17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195062190f64559b55c9696d6f6e8090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x1e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195066b8d48da86b869b6261626580d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950721887aafd517d296173676e8090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x1e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195079b38849014a07307061726180d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19508b6d3621e5bd57f16772616e80439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f": "0x1e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509d4a4cfe1c2ef0b961756469808eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bcb9c3677bfe9155706172618090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x1e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c0cadce9c18510226173676e808eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c7e637254b9ea61962656566840390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f27": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c9b0c13125732d276175646980d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ce1dd85a539ac289617564698090b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22": "0x1e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d62c40514b41f31962616265808eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48": "0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ed43a85541921049696d6f6e80d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f",
"0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f5537bdb2a1f626b6772616e8088dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee": "0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f",
"0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x0cbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25ffe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e1e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625",
"0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x0cbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0eed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27dd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d020a1091341fe5664bfa1782d5e04779689068c916b04cb365ec3153755684d9a1fe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860ed17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae698eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a488eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480390084fdbf27d2b79d26a4f13f0ccd982cb755a661969143c37cbc49ef5b91f271e07379407fecc4b89eb7dbd287c2c781cfb1907a96947a3eb18e4f8e7198625439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe2290b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe2290b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe2290b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe2290b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe220389411795514af1627765eceffcbd002719f031604fadd7d188e2dc585b4e1afb",
"0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xd5c41b52a371aa36c9254ce34324f2a54e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xd8bbe27baf3aa64bb483afabc240f68e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xd8f314b7f4e6b095f0f8ee4656a448254e7b9012096b41c4eb3aaf947f6ea429": "0x0100",
"0xda7d4185f8093e80caceb64da45219e30c98535b82c72faf3c64974094af4643": "0x0100000000000000030000000dbfa19dafecc6c6c04586ce02ad17e404dd9aa1ddde5521f3169b192ca4a699",
"0xda7d4185f8093e80caceb64da45219e34e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xda7d4185f8093e80caceb64da45219e3c52aa943bf0908860a3eea0fad707cdc": "0x0000000000000000030000000dbfa19dafecc6c6c04586ce02ad17e404dd9aa1ddde5521f3169b192ca4a699",
"0xe2e62dd81c48a88f73b6f6463555fd8e4e7b9012096b41c4eb3aaf947f6ea429": "0x0400",
"0xed25f63942de25ac5253ba64b5eb64d14e7b9012096b41c4eb3aaf947f6ea429": "0x0400",
"0xedfb05b766f199ce00df85317e33050e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000",
"0xf2794c22e353e9a839f12faab03a911b4e7b9012096b41c4eb3aaf947f6ea429": "0x0100",
"0xf2794c22e353e9a839f12faab03a911b7f17cdfbfa73331856cca0acddd7842e": "0x00000000",
"0xf2794c22e353e9a839f12faab03a911bbdcb0c5143a8617ed38ae3810dd45bc6": "0x00000000",
"0xf2794c22e353e9a839f12faab03a911be2f6cb0456905c189bcb0458f9440f13": "0x00000000",
"0xf5207f03cfdce586301014700e2c25934e7b9012096b41c4eb3aaf947f6ea429": "0x0100"
},
"childrenDefault": {}
}
}
}