From 62e90b7031a15ecccc682e293d677ecc856b99aa Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 2 Aug 2024 18:25:08 +0200 Subject: [PATCH 01/44] pass check --- Cargo.lock | 1 + ethexe/cli/src/service.rs | 345 ++++++++++++++++++++++++------ ethexe/common/src/db.rs | 3 + ethexe/common/src/lib.rs | 12 ++ ethexe/db/src/database.rs | 14 ++ ethexe/network/src/lib.rs | 8 +- ethexe/processor/src/lib.rs | 2 + ethexe/sequencer/src/agro.rs | 96 ++++++--- ethexe/sequencer/src/lib.rs | 400 +++++++++++++++++++++++++++++------ ethexe/signer/src/lib.rs | 26 ++- ethexe/validator/Cargo.toml | 1 + ethexe/validator/src/lib.rs | 186 +++++++++++----- 12 files changed, 880 insertions(+), 214 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d0cf5e99c26..e7ad15f6993 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5159,6 +5159,7 @@ dependencies = [ "parity-scale-codec", "static_init", "tempfile", + "uluru", ] [[package]] diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 09a8f4c08bc..33a9adf5b8f 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -23,16 +23,22 @@ use crate::{ metrics::MetricsService, }; use anyhow::{anyhow, Ok, Result}; -use ethexe_common::{events::BlockEvent, BlockCommitment, CodeCommitment, StateTransition}; +use ethexe_common::{ + db, events::BlockEvent, BlockCommitment, CodeCommitment, Commitments, StateTransition, +}; use ethexe_db::{BlockHeader, BlockMetaStorage, CodeUploadInfo, CodesStorage, Database}; +use ethexe_network::GossipsubMessage; use ethexe_observer::{BlockData, CodeLoadedData}; use ethexe_processor::LocalOutcome; +use ethexe_sequencer::{ + AggregatedCommitments, BlockCommitmentValidationRequest, CodeCommitmentValidationRequest, + NetworkMessage, SeqHash, +}; use ethexe_signer::{PublicKey, Signer}; -use ethexe_validator::Commitment; use futures::{future, stream::StreamExt, FutureExt}; use gprimitives::H256; -use parity_scale_codec::Decode; -use std::{future::Future, sync::Arc, time::Duration}; +use parity_scale_codec::{Decode, Encode}; +use std::{collections::BTreeMap, future::Future, ops::Not, sync::Arc, time::Duration}; /// ethexe service. pub struct Service { @@ -332,12 +338,12 @@ impl Service { processor: &mut ethexe_processor::Processor, maybe_sequencer: &mut Option, observer_event: ethexe_observer::Event, - ) -> Result> { + ) -> Result { if let Some(sequencer) = maybe_sequencer { sequencer.process_observer_event(&observer_event)?; } - let commitments = match observer_event { + match observer_event { ethexe_observer::Event::Block(block_data) => { log::info!( "📦 receive a new block {}, hash {}, parent hash {}", @@ -347,28 +353,27 @@ impl Service { ); let commitments = Self::process_block_event(db, query, processor, block_data).await?; - commitments.into_iter().map(Commitment::Block).collect() + Ok((Vec::new(), commitments).into()) } ethexe_observer::Event::CodeLoaded(CodeLoadedData { code_id, code, .. }) => { let outcomes = processor.process_upload_code(code_id, code.as_slice())?; - outcomes + let commitments: Vec<_> = outcomes .into_iter() .map(|outcome| match outcome { - LocalOutcome::CodeApproved(code_id) => Commitment::Code(CodeCommitment { + LocalOutcome::CodeApproved(code_id) => CodeCommitment { code_id, approved: true, - }), - LocalOutcome::CodeRejected(code_id) => Commitment::Code(CodeCommitment { + }, + LocalOutcome::CodeRejected(code_id) => CodeCommitment { code_id, approved: false, - }), + }, _ => unreachable!("Only code outcomes are expected here"), }) - .collect() + .collect(); + Ok((commitments, Vec::new()).into()) } - }; - - Ok(commitments) + } } async fn run_inner(self) -> Result<()> { @@ -415,7 +420,8 @@ impl Service { None }; - let mut delay: Option<_> = None; + let mut collection_round_timer: Option<_> = None; + let mut submission_round_timer: Option<_> = None; let mut roles = "Observer".to_string(); if let Some(seq) = sequencer.as_ref() { @@ -442,58 +448,44 @@ impl Service { observer_event, ).await?; - if let Some(ref mut validator) = validator { - log::debug!("Pushing commitments to local validator..."); - validator.push_commitments(commitments)?; - - if let Some(ref mut network_sender) = network_sender { - log::debug!("Publishing commitments to network..."); - validator.publish_commitments(network_sender)?; - } - - if let Some(ref mut sequencer) = sequencer { - let origin = validator.pub_key().to_address(); - if validator.has_codes_commit() { - let aggregated_codes_commitments = validator.codes_aggregation()?; - log::debug!("Received ({}) signed code commitments from local validator...", aggregated_codes_commitments.len()); - sequencer.receive_codes_commitment(origin, aggregated_codes_commitments)?; - } - if validator.has_transitions_commit() { - let aggregated_transitions_commitments = validator.blocks_aggregation()?; - log::debug!("Received ({}) signed transition commitments from local validator...", aggregated_transitions_commitments.len()); - sequencer.receive_block_commitment(origin, aggregated_transitions_commitments)?; - } else { - log::debug!("No commitments from local validator..."); - } - } - } + Self::post_process_commitments( + commitments, + validator.as_mut(), + sequencer.as_mut(), + network_sender.as_mut(), + ).await?; - log::trace!("Sending timeout after observer event..."); - delay = Some(tokio::time::sleep(block_time / 4)); + collection_round_timer = Some(tokio::time::sleep(block_time / 4)); } - _ = maybe_await(delay.take()) => { - log::debug!("Sending timeout after block event..."); + _ = maybe_await(collection_round_timer.take()) => { + log::debug!("Reach timeout after block event..."); - if let Some(sequencer) = sequencer.as_mut() { - sequencer.process_block_timeout().await?; - } + Self::process_collected_commitments( + db.clone(), + validator.as_mut(), + sequencer.as_mut(), + network_sender.as_mut() + )?; - if let Some(ref mut validator) = validator { - // clean validator state - validator.clear(); - }; + submission_round_timer = Some(tokio::time::sleep(block_time / 4)); } - message = maybe_await(gossipsub_stream.as_mut().map(|stream| stream.next())) => { - if let Some(message) = message { - if let Some(sequencer) = sequencer.as_mut() { - log::debug!("Received p2p commitments from: {:?}", message.source); + _ = maybe_await(submission_round_timer.take()) => { + log::debug!("Reach timeout after collecting commitments..."); - let (origin, (codes_aggregated_commitment, transitions_aggregated_commitment)) = Decode::decode(&mut message.data.as_slice())?; + Self::process_approved_commitments(sequencer.as_mut()).await?; + } + message = maybe_await(gossipsub_stream.as_mut().map(|stream| stream.next())) => { + let Some(message) = message else { + continue; + }; - sequencer.receive_codes_commitment(origin, codes_aggregated_commitment)?; - sequencer.receive_block_commitment(origin, transitions_aggregated_commitment)?; - } - } + let _ = Self::process_network_message( + message, + db.clone(), + validator.as_mut(), + sequencer.as_mut(), + network_sender.as_mut(), + ); } _ = maybe_await(network_handle.as_mut()) => { log::info!("`NetworkWorker` has terminated, shutting down..."); @@ -515,6 +507,235 @@ impl Service { err }) } + + async fn post_process_commitments( + commitments: Commitments, + maybe_validator: Option<&mut ethexe_validator::Validator>, + maybe_sequencer: Option<&mut ethexe_sequencer::Sequencer>, + maybe_network_sender: Option<&mut ethexe_network::NetworkSender>, + ) -> Result<()> { + let Some(validator) = maybe_validator else { + return Ok(()); + }; + + let origin = validator.address(); + let aggregated_codes = commitments + .codes + .is_empty() + .not() + .then(|| validator.aggregate_codes(commitments.codes)) + .transpose()?; + let aggregated_blocks = commitments + .blocks + .is_empty() + .not() + .then(|| validator.aggregate_blocks(commitments.blocks)) + .transpose()?; + + if aggregated_codes.is_none() && aggregated_blocks.is_none() { + return Ok(()); + } + + if let Some(network_sender) = maybe_network_sender { + log::debug!("Publishing commitments to network..."); + network_sender.publish_message( + NetworkMessage::PublishCommitments { + origin, + codes: aggregated_codes.clone(), + blocks: aggregated_blocks.clone(), + } + .encode(), + ); + } + + if let Some(sequencer) = maybe_sequencer { + if let Some(aggregated) = aggregated_codes { + log::debug!( + "Received ({}) signed code commitments from local validator...", + aggregated.len() + ); + sequencer.receive_code_commitments(origin, aggregated)?; + } + if let Some(aggregated) = aggregated_blocks { + log::debug!( + "Received ({}) signed block commitments from local validator...", + aggregated.len() + ); + sequencer.receive_block_commitments(origin, aggregated)?; + } + } + + Ok(()) + } + + fn process_collected_commitments( + db: Database, + maybe_validator: Option<&mut ethexe_validator::Validator>, + maybe_sequencer: Option<&mut ethexe_sequencer::Sequencer>, + maybe_network_sender: Option<&mut ethexe_network::NetworkSender>, + ) -> Result<()> { + let Some(sequencer) = maybe_sequencer else { + return Ok(()); + }; + + let (codes_hash, blocks_hash) = sequencer.process_collected_commitments()?; + + if codes_hash.is_none() && blocks_hash.is_none() { + return Ok(()); + } + + if maybe_validator.is_none() && maybe_network_sender.is_none() { + return Ok(()); + } + + let code_requests: BTreeMap<_, _> = codes_hash + .and_then(|hash| sequencer.get_multisigned_code_commitments(hash)) + .map(|commitments| { + commitments + .into_iter() + .map(|c| (c.hash(), c.into())) + .collect() + }) + .unwrap_or_default(); + + let block_requests: BTreeMap<_, _> = blocks_hash + .and_then(|hash| sequencer.get_multisigned_block_commitments(hash)) + .map(|commitments| { + commitments + .into_iter() + .map(|c| (c.hash(), c.into())) + .collect() + }) + .unwrap_or_default(); + + if let Some(network_sender) = maybe_network_sender { + log::debug!("Request validation of aggregated commitments..."); + + let message = NetworkMessage::RequestCommitmentsValidation { + codes: code_requests.clone(), + blocks: block_requests.clone(), + }; + network_sender.publish_message(message.encode()); + } + + if let Some(validator) = maybe_validator { + log::debug!("Validating aggregated commitments on local validator..."); + + let origin = validator.address(); + + if let Some(aggregated_hash) = codes_hash { + let signature = + validator.validate_code_commitments(db.clone(), code_requests.into_values())?; + sequencer.receive_codes_signature(origin, aggregated_hash, signature)?; + } + + if let Some(aggregated_hash) = blocks_hash { + let signature = validator + .validate_block_commitments(db.clone(), block_requests.into_values())?; + sequencer.receive_blocks_signature(origin, aggregated_hash, signature)?; + } + } + + Ok(()) + } + + async fn process_approved_commitments( + maybe_sequencer: Option<&mut ethexe_sequencer::Sequencer>, + ) -> Result<()> { + let Some(sequencer) = maybe_sequencer else { + return Ok(()); + }; + + sequencer.submit_multisigned_commitments().await + } + + fn process_network_message( + message: GossipsubMessage, + db: Database, + maybe_validator: Option<&mut ethexe_validator::Validator>, + maybe_sequencer: Option<&mut ethexe_sequencer::Sequencer>, + maybe_network_sender: Option<&mut ethexe_network::NetworkSender>, + ) -> Result<()> { + let message = NetworkMessage::decode(&mut message.data.as_slice())?; + match message { + NetworkMessage::PublishCommitments { + origin, + codes, + blocks, + } => { + let Some(sequencer) = maybe_sequencer else { + return Ok(()); + }; + if let Some(aggregated) = codes { + sequencer.receive_code_commitments(origin, aggregated)?; + } + if let Some(aggregated) = blocks { + sequencer.receive_block_commitments(origin, aggregated)?; + } + Ok(()) + } + NetworkMessage::RequestCommitmentsValidation { codes, blocks } => { + let Some(validator) = maybe_validator else { + return Ok(()); + }; + let Some(network_sender) = maybe_network_sender else { + return Ok(()); + }; + + let codes_signature = if let Some(codes_hash) = codes + .is_empty() + .not() + .then(|| codes.keys().cloned().collect::>().hash()) + { + let signature = + validator.validate_code_commitments(db.clone(), codes.into_values())?; + Some((codes_hash, signature)) + } else { + None + }; + + let blocks_signature = if let Some(blocks_hash) = blocks + .is_empty() + .not() + .then(|| blocks.keys().cloned().collect::>().hash()) + { + let signature = + validator.validate_block_commitments(db.clone(), blocks.into_values())?; + Some((blocks_hash, signature)) + } else { + None + }; + + let message = NetworkMessage::ApproveCommitments { + origin: validator.address(), + codes: codes_signature, + blocks: blocks_signature, + }; + network_sender.publish_message(message.encode()); + + Ok(()) + } + NetworkMessage::ApproveCommitments { + origin, + codes, + blocks, + } => { + let Some(sequencer) = maybe_sequencer else { + return Ok(()); + }; + + if let Some((hash, signature)) = codes { + sequencer.receive_codes_signature(origin, hash, signature)?; + } + + if let Some((hash, signature)) = blocks { + sequencer.receive_blocks_signature(origin, hash, signature)?; + } + + Ok(()) + } + } + } } pub async fn maybe_await(f: Option) -> F::Output { diff --git a/ethexe/common/src/db.rs b/ethexe/common/src/db.rs index 6f32eab53bb..691999cc272 100644 --- a/ethexe/common/src/db.rs +++ b/ethexe/common/src/db.rs @@ -84,4 +84,7 @@ pub trait CodesStorage: Send + Sync { fn code_upload_info(&self, code_id: CodeId) -> Option; fn set_code_upload_info(&self, code_id: CodeId, info: CodeUploadInfo); + + fn code_approved(&self, code_id: CodeId) -> Option; + fn set_code_approved(&self, code_id: CodeId, rejected: bool); } diff --git a/ethexe/common/src/lib.rs b/ethexe/common/src/lib.rs index 0c676e74c1b..8ca99736461 100644 --- a/ethexe/common/src/lib.rs +++ b/ethexe/common/src/lib.rs @@ -63,3 +63,15 @@ pub struct BlockCommitment { pub allowed_prev_commitment_hash: H256, pub transitions: Vec, } + +#[derive(Debug, Clone, Default)] +pub struct Commitments { + pub codes: Vec, + pub blocks: Vec, +} + +impl From<(Vec, Vec)> for Commitments { + fn from((codes, blocks): (Vec, Vec)) -> Self { + Self { codes, blocks } + } +} diff --git a/ethexe/db/src/database.rs b/ethexe/db/src/database.rs index 3cdabbe80e2..789bca0bdbc 100644 --- a/ethexe/db/src/database.rs +++ b/ethexe/db/src/database.rs @@ -51,6 +51,7 @@ enum KeyPrefix { BlockOutcome = 5, BlockSmallMeta = 6, CodeUpload = 7, + CodeApproved = 8, } impl KeyPrefix { @@ -289,6 +290,19 @@ impl CodesStorage for Database { self.kv .put(&KeyPrefix::CodeUpload.one(code_id), info.encode()); } + + fn code_approved(&self, code_id: CodeId) -> Option { + self.kv + .get(&KeyPrefix::CodeApproved.one(code_id)) + .map(|data| { + bool::decode(&mut data.as_slice()).expect("Failed to decode data into `bool`") + }) + } + + fn set_code_approved(&self, code_id: CodeId, rejected: bool) { + self.kv + .put(&KeyPrefix::CodeApproved.one(code_id), rejected.encode()); + } } impl Database { diff --git a/ethexe/network/src/lib.rs b/ethexe/network/src/lib.rs index 970c19a275b..e909125b4d1 100644 --- a/ethexe/network/src/lib.rs +++ b/ethexe/network/src/lib.rs @@ -98,7 +98,7 @@ impl NetworkService { #[derive(Debug)] enum NetworkSenderEvent { - PublishCommitments { data: Vec }, + Message { data: Vec }, } /// Communication with [`NetworkEventLoop`] @@ -108,10 +108,10 @@ pub struct NetworkSender { } impl NetworkSender { - pub fn publish_commitments(&self, data: impl Into>) { + pub fn publish_message(&self, data: impl Into>) { let _res = self .tx - .send(NetworkSenderEvent::PublishCommitments { data: data.into() }); + .send(NetworkSenderEvent::Message { data: data.into() }); } } @@ -311,7 +311,7 @@ impl NetworkEventLoop { None => { log::trace!("network channel has been disconnected"); } - Some(NetworkSenderEvent::PublishCommitments { data }) => { + Some(NetworkSenderEvent::Message { data }) => { if let Err(e) = self .swarm .behaviour_mut() diff --git a/ethexe/processor/src/lib.rs b/ethexe/processor/src/lib.rs index 72d88c92d0a..977ed146f04 100644 --- a/ethexe/processor/src/lib.rs +++ b/ethexe/processor/src/lib.rs @@ -256,8 +256,10 @@ impl Processor { log::debug!("Processing upload code {code_id:?}"); if code_id != CodeId::generate(code) || self.handle_new_code(code)?.is_none() { + self.db.set_code_approved(code_id, false); Ok(vec![LocalOutcome::CodeRejected(code_id)]) } else { + self.db.set_code_approved(code_id, true); Ok(vec![LocalOutcome::CodeApproved(code_id)]) } } diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 2b7b0b41ef4..58ffe19b9ad 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -20,12 +20,14 @@ use anyhow::Result; use ethexe_common::{BlockCommitment, CodeCommitment, OutgoingMessage, StateTransition}; -use ethexe_signer::{hash, Address, PublicKey, Signature, Signer}; +use ethexe_signer::{Address, PublicKey, Signature, Signer}; +use futures::AsyncRead; use gprimitives::{MessageId, H256}; use parity_scale_codec::{Decode, Encode}; use std::{ collections::{HashMap, HashSet}, fmt, mem, + path::Iter, }; pub trait SeqHash { @@ -50,11 +52,17 @@ pub struct AggregatedQueue { last: H256, } +impl SeqHash for H256 { + fn hash(&self) -> H256 { + *self + } +} + // TODO: REMOVE THIS IMPL. SeqHash makes sense only for `ethexe_ethereum` types. // identity hashing impl SeqHash for CodeCommitment { fn hash(&self) -> H256 { - hash(&self.encode()) + ethexe_signer::hash(&self.encode()) } } @@ -89,7 +97,7 @@ impl SeqHash for StateTransition { outgoing_message.extend_from_slice(&reply_details.to_message_id().into_bytes()); outgoing_message.extend(&reply_details.to_reply_code().to_bytes()); - outgoing_bytes.extend_from_slice(hash(&outgoing_message).as_bytes()); + outgoing_bytes.extend_from_slice(ethexe_signer::hash(&outgoing_message).as_bytes()); } let mut message = @@ -98,9 +106,9 @@ impl SeqHash for StateTransition { message.extend_from_slice(&self.actor_id.into_bytes()[12..]); message.extend_from_slice(self.old_state_hash.as_bytes()); message.extend_from_slice(self.new_state_hash.as_bytes()); - message.extend_from_slice(hash(&outgoing_bytes).as_bytes()); + message.extend_from_slice(ethexe_signer::hash(&outgoing_bytes).as_bytes()); - hash(&message) + ethexe_signer::hash(&message) } } @@ -118,27 +126,31 @@ impl SeqHash for BlockCommitment { message.extend_from_slice(self.allowed_prev_commitment_hash.as_bytes()); message.extend_from_slice(self.transitions.hash().as_bytes()); - hash(&message) + ethexe_signer::hash(&message) } } -impl AggregatedCommitments { - pub fn hash(&self) -> H256 { - let mut array = Vec::new(); - for commitment in &self.commitments { - array.extend_from_slice(commitment.hash().as_ref()); - } - hash(&array) +impl SeqHash for &[T] { + fn hash(&self) -> H256 { + let buffer: Vec = self + .iter() + .map(SeqHash::hash) + .map(H256::to_fixed_bytes) + .flatten() + .collect(); + ethexe_signer::hash(&buffer) } } impl SeqHash for Vec { fn hash(&self) -> H256 { - let mut array = Vec::new(); - for commitment in self { - array.extend_from_slice(commitment.hash().as_ref()); - } - hash(&array) + self.as_slice().hash() + } +} + +impl SeqHash for AggregatedCommitments { + fn hash(&self) -> H256 { + self.commitments.hash() } } @@ -149,29 +161,45 @@ impl AggregatedCommitments { pub_key: PublicKey, router_address: Address, ) -> Result> { - let mut aggregated = AggregatedCommitments { - commitments, - signature: Signature::default(), - }; + let signature = + Self::sign_commitments(commitments.hash(), signer, pub_key, router_address)?; - let buffer = [ - [0x19, 0x00].as_ref(), - router_address.0.as_ref(), - aggregated.commitments.hash().as_ref(), - ] - .concat(); - - aggregated.signature = signer.sign_digest(pub_key, hash(&buffer).to_fixed_bytes())?; + Ok(AggregatedCommitments { + commitments, + signature, + }) + } - Ok(aggregated) + pub fn sign_commitments( + commitments_hash: H256, + signer: &Signer, + pub_key: PublicKey, + router_address: Address, + ) -> Result { + let buffer = Self::buffer(commitments_hash, router_address); + signer.sign_digest(pub_key, ethexe_signer::hash(&buffer).to_fixed_bytes()) } pub fn len(&self) -> usize { self.commitments.len() } - pub fn is_empty(&self) -> bool { - self.commitments.is_empty() + pub fn verify_origin(&self, router_address: Address, origin: Address) -> Result { + let buffer = Self::buffer(self.commitments.hash(), router_address); + Ok(self + .signature + .recover_digest(ethexe_signer::hash(&buffer).to_fixed_bytes())? + .to_address() + == origin) + } + + fn buffer(commitments_hash: H256, router_address: Address) -> Vec { + [ + [0x19, 0x00].as_ref(), + router_address.0.as_ref(), + commitments_hash.as_ref(), + ] + .concat() } } @@ -336,7 +364,7 @@ mod tests { impl SeqHash for MyComm { fn hash(&self) -> H256 { - hash(&self.0[..]) + ethexe_signer::hash(&self.0[..]) } } diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 56567b38686..bb2b8e60785 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -20,16 +20,18 @@ mod agro; -use agro::{Aggregator, MultisignedCommitments}; -use anyhow::Result; +use agro::MultisignedCommitments; +use anyhow::{anyhow, Result}; use ethexe_common::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; use ethexe_observer::Event; -use ethexe_signer::{Address, PublicKey, Signer}; -use std::mem; +use ethexe_signer::{Address, PublicKey, Signature, Signer}; +use gprimitives::{CodeId, H256}; +use parity_scale_codec::{Decode, Encode}; +use std::collections::{BTreeMap, HashSet}; use tokio::sync::watch; -pub use agro::AggregatedCommitments; +pub use agro::{AggregatedCommitments, SeqHash}; pub struct Config { pub ethereum_rpc: String, @@ -47,23 +49,102 @@ pub struct SequencerStatus { #[allow(unused)] pub struct Sequencer { signer: Signer, - ethereum_rpc: String, key: PublicKey, - codes_aggregation: Aggregator, - blocks_aggregation: Aggregator, ethereum: Ethereum, + + validators: HashSet
, + threshold: u64, + + code_commitments: BTreeMap, + block_commitments: BTreeMap, + + codes_aggregator: BTreeMap>, + blocks_aggregator: BTreeMap>, + status: SequencerStatus, status_sender: watch::Sender, } +#[derive(Debug, Clone, Encode, Decode)] +pub struct BlockCommitmentValidationRequest { + pub block_hash: H256, + pub allowed_pred_block_hash: H256, + pub allowed_prev_commitment_hash: H256, + pub transitions_hash: H256, +} + +impl From<&BlockCommitment> for BlockCommitmentValidationRequest { + fn from(commitment: &BlockCommitment) -> Self { + Self { + block_hash: commitment.block_hash, + allowed_pred_block_hash: commitment.allowed_pred_block_hash, + allowed_prev_commitment_hash: commitment.allowed_prev_commitment_hash, + transitions_hash: commitment.transitions.hash(), + } + } +} + +impl SeqHash for BlockCommitmentValidationRequest { + fn hash(&self) -> H256 { + [ + self.block_hash, + self.allowed_pred_block_hash, + self.allowed_prev_commitment_hash, + self.transitions_hash, + ] + .as_ref() + .hash() + } +} + +#[derive(Debug, Clone, Encode, Decode)] +pub struct CodeCommitmentValidationRequest { + pub code_id: CodeId, + pub approved: bool, +} + +impl From<&CodeCommitment> for CodeCommitmentValidationRequest { + fn from(commitment: &CodeCommitment) -> Self { + Self { + code_id: commitment.code_id, + approved: commitment.approved, + } + } +} + +impl SeqHash for CodeCommitmentValidationRequest { + fn hash(&self) -> H256 { + CodeCommitment { + code_id: self.code_id, + approved: self.approved, + } + .hash() + } +} + +#[derive(Debug, Clone, Encode, Decode)] +pub enum NetworkMessage { + PublishCommitments { + origin: Address, + codes: Option>, + blocks: Option>, + }, + RequestCommitmentsValidation { + codes: BTreeMap, + blocks: BTreeMap, + }, + ApproveCommitments { + origin: Address, + codes: Option<(H256, Signature)>, + blocks: Option<(H256, Signature)>, + }, +} + impl Sequencer { pub async fn new(config: &Config, signer: Signer) -> Result { let (status_sender, _status_receiver) = watch::channel(SequencerStatus::default()); Ok(Self { signer: signer.clone(), - ethereum_rpc: config.ethereum_rpc.clone(), - codes_aggregation: Aggregator::new(1), - blocks_aggregation: Aggregator::new(1), key: config.sign_tx_public, ethereum: Ethereum::new( &config.ethereum_rpc, @@ -72,6 +153,12 @@ impl Sequencer { config.sign_tx_public.to_address(), ) .await?, + validators: Default::default(), + threshold: 1, + code_commitments: BTreeMap::new(), + block_commitments: BTreeMap::new(), + codes_aggregator: BTreeMap::new(), + blocks_aggregator: BTreeMap::new(), status: SequencerStatus::default(), status_sender, }) @@ -79,75 +166,132 @@ impl Sequencer { // This function should never block. pub fn process_observer_event(&mut self, event: &Event) -> Result<()> { - self.update_status(|status| { - *status = SequencerStatus::default(); - }); match event { Event::Block(data) => { - log::debug!( - "Processing events for {:?} (parent: {:?})", - data.block_hash, - data.parent_hash - ); + log::debug!("Receive block {:?}", data.block_hash); - if self.codes_aggregation.len() > 0 { - log::debug!( - "Building on top of existing aggregation of {} commitments", - self.codes_aggregation.len() - ); - } - } - Event::CodeLoaded(data) => { - log::debug!( - "Observed code_hash#{:?}. Waiting for inclusion...", - data.code_id - ); + self.update_status(|status| { + *status = SequencerStatus::default(); + }); } + _ => {} } Ok(()) } - pub async fn process_block_timeout(&mut self) -> Result<()> { - log::debug!("Block timeout reached. Submitting aggregated commitments"); + fn pop_suitable_commitments( + commitments: &mut BTreeMap, + aggregator: &mut BTreeMap>, + threshold: u64, + ) -> Option { + let suitable_commitment_hashes: Vec<_> = commitments + .iter() + .filter_map(|(&hash, (_, amount))| (*amount >= threshold).then_some(hash)) + .collect(); + + if suitable_commitment_hashes.is_empty() { + return None; + } + + let mut suitable_commitments = Vec::new(); + for hash in suitable_commitment_hashes.iter() { + let (commitment, _) = commitments + .remove(hash) + .unwrap_or_else(|| unreachable!("Must be in the map")); + suitable_commitments.push(commitment); + } + + let hash = suitable_commitments.hash(); + + aggregator.insert( + hash, + MultisignedCommitments { + commitments: suitable_commitments, + sources: Vec::new(), + signatures: Vec::new(), + }, + ); + + Some(hash) + } + + pub fn process_collected_commitments(&mut self) -> Result<(Option, Option)> { + let codes_hash = Self::pop_suitable_commitments( + &mut self.code_commitments, + &mut self.codes_aggregator, + self.threshold, + ); + + let blocks_hash = Self::pop_suitable_commitments( + &mut self.block_commitments, + &mut self.blocks_aggregator, + self.threshold, + ); + + Ok((codes_hash, blocks_hash)) + } + + pub fn get_multisigned_code_commitments(&self, hash: H256) -> Option<&[CodeCommitment]> { + self.codes_aggregator + .get(&hash) + .map(|multisigned| multisigned.commitments.as_slice()) + } + + pub fn get_multisigned_block_commitments(&self, hash: H256) -> Option<&[BlockCommitment]> { + self.blocks_aggregator + .get(&hash) + .map(|multisigned| multisigned.commitments.as_slice()) + } + + fn process_multisigned_candidate( + aggregator: &mut BTreeMap>, + threshold: u64, + ) -> Option> { + let candidate = aggregator.iter().find_map(|(&hash, multisigned)| { + (multisigned.sources.len() >= threshold as usize).then_some(hash) + })?; + + let multisigned = aggregator + .remove(&candidate) + .unwrap_or_else(|| unreachable!("Must be in the map")); + + if multisigned.commitments.len() == 0 { + unreachable!("Guarantied to be not empty"); + } + + Some(multisigned) + } + pub async fn submit_multisigned_commitments(&mut self) -> Result<()> { let mut codes_future = None; let mut blocks_future = None; let mut code_commitments_len = 0; let mut block_commitments_len = 0; - let codes_aggregation = mem::replace(&mut self.codes_aggregation, Aggregator::new(1)); - let blocks_aggregation = mem::replace(&mut self.blocks_aggregation, Aggregator::new(1)); + let codes_candidate = + Self::process_multisigned_candidate(&mut self.codes_aggregator, self.threshold); + let blocks_candidate = + Self::process_multisigned_candidate(&mut self.blocks_aggregator, self.threshold); - if codes_aggregation.len() > 0 { + if let Some(candidate) = codes_candidate { log::debug!( "Collected some {0} code commitments. Trying to submit...", - codes_aggregation.len() + candidate.commitments.len() ); - if let Some(code_commitments) = codes_aggregation.find_root() { - log::debug!("Achieved consensus on code commitments. Submitting..."); - - code_commitments_len = code_commitments.commitments.len() as u64; - codes_future = Some(self.submit_codes_commitment(code_commitments)); - } else { - log::debug!("No consensus on code commitments found. Discarding..."); - } + code_commitments_len = candidate.commitments.len() as u64; + codes_future = Some(self.submit_codes_commitment(candidate)); }; - if blocks_aggregation.len() > 0 { + if let Some(candidate) = blocks_candidate { log::debug!( "Collected some {0} transition commitments. Trying to submit...", - blocks_aggregation.len() + candidate.commitments.len() ); - if let Some(block_commitments) = blocks_aggregation.find_root() { - log::debug!("Achieved consensus on transition commitments. Submitting..."); - block_commitments_len = block_commitments.commitments.len() as u64; - blocks_future = Some(self.submit_block_commitments(block_commitments)); - } else { - log::debug!("No consensus on code commitments found. Discarding..."); - } + block_commitments_len = candidate.commitments.len() as u64; + blocks_future = Some(self.submit_block_commitments(candidate)); }; match (codes_future, blocks_future) { @@ -220,26 +364,154 @@ impl Sequencer { Ok(()) } - pub fn receive_codes_commitment( + pub fn receive_code_commitments( &mut self, origin: Address, - commitments: AggregatedCommitments, + aggregated: AggregatedCommitments, ) -> Result<()> { - self.update_status(|status| { - status.aggregated_commitments += 1; - }); - log::debug!("Received codes commitment from {}", origin); - self.codes_aggregation.push(origin, commitments); + if !self.validators.contains(&origin) { + return Err(anyhow!("Unknown validator {origin}")); + } + + if !aggregated.verify_origin(self.ethereum.router().address(), origin)? { + return Err(anyhow!("Signature verification failed for {origin}")); + } + + let mut processed = HashSet::new(); + for commitment in aggregated.commitments { + let hash = commitment.hash(); + if processed.contains(&hash) { + continue; + } + processed.insert(hash); + let (_, signatures_amount) = self + .code_commitments + .entry(hash) + .or_insert_with(|| (commitment, 0)); + *signatures_amount += 1; + } + Ok(()) } - pub fn receive_block_commitment( + pub fn receive_block_commitments( &mut self, origin: Address, - commitments: AggregatedCommitments, + aggregated: AggregatedCommitments, ) -> Result<()> { log::debug!("Received transition commitment from {}", origin); - self.blocks_aggregation.push(origin, commitments); + if !self.validators.contains(&origin) { + return Err(anyhow!("Unknown validator {origin}")); + } + if !aggregated.verify_origin(self.ethereum.router().address(), origin)? { + return Err(anyhow!("Signature verification failed for {origin}")); + } + + let mut processed = HashSet::new(); + for commitment in aggregated.commitments { + let hash = commitment.hash(); + if processed.contains(&hash) { + continue; + } + processed.insert(hash); + let (_, signatures_amount) = self + .block_commitments + .entry(hash) + .or_insert_with(|| (commitment, 0)); + *signatures_amount += 1; + } + + Ok(()) + } + + fn receive_signature( + origin: Address, + aggregated_hash: H256, + signature: Signature, + validators: &HashSet
, + aggregator: &mut BTreeMap>>, + ) -> Result<()> { + if !validators.contains(&origin) { + return Err(anyhow!("Unknown validator {origin}")); + } + + if signature + .recover_digest(*aggregated_hash.as_fixed_bytes())? + .to_address() + != origin + { + return Err(anyhow!("Invalid signature")); + } + + let multisigned = aggregator + .get_mut(&aggregated_hash) + .ok_or(anyhow!("Aggregated commitment {aggregated_hash} not found"))? + .get_or_insert_with(|| MultisignedCommitments { + commitments: Default::default(), + sources: Vec::new(), + signatures: Vec::new(), + }); + + multisigned.sources.push(origin); + multisigned.signatures.push(signature); + + Ok(()) + } + + pub fn receive_codes_signature( + &mut self, + origin: Address, + aggregated_hash: H256, + signature: Signature, + ) -> Result<()> { + if !self.validators.contains(&origin) { + return Err(anyhow!("Unknown validator {origin}")); + } + if signature + .recover_digest(*aggregated_hash.as_fixed_bytes())? + .to_address() + != origin + { + return Err(anyhow!("Invalid signature")); + } + + let multisigned = self + .codes_aggregator + .get_mut(&aggregated_hash) + .ok_or(anyhow!("Aggregated commitment {aggregated_hash} not found"))?; + + multisigned.sources.push(origin); + multisigned.signatures.push(signature); + + Ok(()) + } + + pub fn receive_blocks_signature( + &mut self, + origin: Address, + aggregated_hash: H256, + signature: Signature, + ) -> Result<()> { + if !self.validators.contains(&origin) { + return Err(anyhow!("Unknown validator {origin}")); + } + + if signature + .recover_digest(*aggregated_hash.as_fixed_bytes())? + .to_address() + != origin + { + return Err(anyhow!("Invalid signature")); + } + + let multisigned = self + .blocks_aggregator + .get_mut(&aggregated_hash) + .ok_or(anyhow!("Aggregated commitment {aggregated_hash} not found"))?; + + multisigned.sources.push(origin); + multisigned.signatures.push(signature); + Ok(()) } diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index 7dd0505cf32..97866f63219 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -21,7 +21,10 @@ use anyhow::{anyhow, Context as _, Result}; use gprimitives::ActorId; use parity_scale_codec::{Decode, Encode}; -use secp256k1::Message; +use secp256k1::{ + ecdsa::{RecoverableSignature, RecoveryId}, + Message, +}; use sha3::Digest as _; use std::{fmt, fs, path::PathBuf, str::FromStr}; @@ -189,6 +192,27 @@ impl Default for Signature { } } +impl TryFrom for RecoverableSignature { + type Error = anyhow::Error; + + fn try_from(sig: Signature) -> Result { + RecoverableSignature::from_compact( + sig.0[..64].as_ref(), + RecoveryId::from_i32(sig.0[64] as i32)?, + ) + .map_err(Into::into) + } +} + +impl Signature { + pub fn recover_digest(&self, digest: [u8; 32]) -> Result { + let sig = self.clone().try_into()?; + let public_key = + secp256k1::global::SECP256K1.recover_ecdsa(&Message::from_digest(digest), &sig)?; + Ok(PublicKey::from_bytes(public_key.serialize())) + } +} + #[derive(Debug, Clone)] pub struct Signer { key_store: PathBuf, diff --git a/ethexe/validator/Cargo.toml b/ethexe/validator/Cargo.toml index d541bc536de..523907bf1c9 100644 --- a/ethexe/validator/Cargo.toml +++ b/ethexe/validator/Cargo.toml @@ -21,5 +21,6 @@ anyhow.workspace = true futures.workspace = true parity-scale-codec = { workspace = true, features = ["std", "derive"] } tempfile.workspace = true +uluru.workspace = true static_init = "1.0.3" diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index c067868de54..d0429320748 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -16,17 +16,22 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use anyhow::Result; -use ethexe_common::{BlockCommitment, CodeCommitment}; +use core::hash; + +use anyhow::{anyhow, Result}; +use ethexe_common::{ + db::{BlockMetaStorage, CodesStorage}, + BlockCommitment, CodeCommitment, Commitments, +}; use ethexe_network::NetworkSender; -use ethexe_sequencer::AggregatedCommitments; -use ethexe_signer::{Address, PublicKey, Signer}; +use ethexe_sequencer::{ + AggregatedCommitments, BlockCommitmentValidationRequest, CodeCommitmentValidationRequest, + NetworkMessage, SeqHash, +}; +use ethexe_signer::{Address, PublicKey, Signature, Signer}; +use gprimitives::H256; use parity_scale_codec::Encode; - -pub enum Commitment { - Code(CodeCommitment), - Block(BlockCommitment), -} +use uluru::LRUCache; pub struct Config { pub pub_key: PublicKey, @@ -36,9 +41,9 @@ pub struct Config { pub struct Validator { pub_key: PublicKey, signer: Signer, - current_codes: Vec, - current_blocks: Vec, router_address: Address, + signed_code_commitments: LRUCache, + signed_block_commitments: LRUCache, } impl Validator { @@ -46,69 +51,152 @@ impl Validator { Self { signer, pub_key: config.pub_key, - current_codes: vec![], - current_blocks: vec![], router_address: config.router_address, + signed_code_commitments: LRUCache::new(), + signed_block_commitments: LRUCache::new(), } } - pub fn has_codes_commit(&self) -> bool { - !self.current_codes.is_empty() - } - - pub fn has_transitions_commit(&self) -> bool { - !self.current_blocks.is_empty() - } - pub fn pub_key(&self) -> PublicKey { self.pub_key } - pub fn codes_aggregation(&mut self) -> Result> { - AggregatedCommitments::aggregate_commitments( - self.current_codes.clone(), - &self.signer, - self.pub_key, - self.router_address, - ) + pub fn address(&self) -> Address { + self.pub_key.to_address() } - pub fn blocks_aggregation(&mut self) -> Result> { + fn aggregate(&self, commitments: Vec) -> Result> { AggregatedCommitments::aggregate_commitments( - self.current_blocks.clone(), + commitments, &self.signer, self.pub_key, self.router_address, ) } - pub fn push_commitments(&mut self, commitments: Vec) -> Result<()> { - for commitment in commitments { - match commitment { - Commitment::Code(code_commitment) => self.current_codes.push(code_commitment), - Commitment::Block(block_commitment) => self.current_blocks.push(block_commitment), + pub fn aggregate_codes( + &mut self, + commitments: Vec, + ) -> Result> { + for commitment in commitments.iter() { + self.signed_code_commitments.insert(commitment.hash()); + } + self.aggregate(commitments) + } + + pub fn aggregate_blocks( + &mut self, + commitments: Vec, + ) -> Result> { + for commitment in commitments.iter() { + self.signed_block_commitments.insert(commitment.hash()); + } + self.aggregate(commitments) + } + + pub fn validate_code_commitments( + &mut self, + db: impl CodesStorage, + requests: impl IntoIterator, + ) -> Result { + let mut hashes = Vec::new(); + for request in requests.into_iter() { + if db + .code_approved(request.code_id) + .ok_or(anyhow!("code not found"))? + != request.approved + { + return Err(anyhow!("code not approved")); } + hashes.push(request.hash()); } - Ok(()) + AggregatedCommitments::::sign_commitments( + hashes.hash(), + &self.signer, + self.pub_key, + self.router_address, + ) } - pub fn publish_commitments(&mut self, sender: &mut NetworkSender) -> Result<()> { - let origin = self.pub_key.to_address(); + pub fn validate_block_commitments( + &mut self, + db: impl BlockMetaStorage, + requests: impl IntoIterator, + ) -> Result { + let mut hashes = Vec::new(); + for request in requests.into_iter() { + let BlockCommitmentValidationRequest { + block_hash, + allowed_pred_block_hash, + allowed_prev_commitment_hash, + transitions_hash, + } = request; + + if !db + .block_end_state_is_valid(block_hash) + .ok_or(anyhow!("block not found"))? + { + return Err(anyhow!("block is not validated")); + } - // broadcast (aggregated_code_commitments, aggregated_transitions_commitments) to the network peers - let commitments = (self.codes_aggregation()?, self.blocks_aggregation()?); - sender.publish_commitments((origin, commitments).encode()); + let outcomes = db + .block_outcome(block_hash) + .ok_or(anyhow!("block not found"))?; + let transitions_hash = outcomes + .iter() + .map(SeqHash::hash) + .collect::>() + .hash(); + if transitions_hash != transitions_hash { + return Err(anyhow!("block transitions hash mismatch")); + } - Ok(()) - } + if db + .block_prev_commitment(block_hash) + .ok_or(anyhow!("block not found"))? + != allowed_prev_commitment_hash + { + return Err(anyhow!("block prev commitment hash mismatch")); + } - pub fn clear(&mut self) { - self.current_codes.clear(); - self.current_blocks.clear(); - } + let allowed_predecessor_block_height = db + .block_header(allowed_pred_block_hash) + .ok_or(anyhow!("allowed pred block not found"))? + .height; + let block_height = db + .block_header(block_hash) + .ok_or(anyhow!("block not found"))? + .height; + + let mut block_hash = block_hash; + (0..allowed_predecessor_block_height.saturating_sub(block_height)) + .into_iter() + .find_map(|_| match block_hash { + allowed_pred_block_hash => Some(Ok(())), + _ => { + match db + .block_prev_commitment(block_hash) + .ok_or(anyhow!("block not found")) + { + Err(err) => Some(Err(err)), + Ok(parent) => { + block_hash = parent; + None + } + } + } + }) + .ok_or(anyhow!("allowed pred block is not in correct branch"))??; + + hashes.push(request.hash()); + } - pub fn address(&self) -> Address { - self.pub_key.to_address() + AggregatedCommitments::::sign_commitments( + hashes.hash(), + &self.signer, + self.pub_key, + self.router_address, + ) } } From b3b25ad35a3861c22b7e74268451c47a5b804714 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 2 Aug 2024 18:48:42 +0200 Subject: [PATCH 02/44] pass gpu-pre-commit --- Cargo.lock | 1 - ethexe/cli/src/service.rs | 21 +- ethexe/sequencer/src/agro.rs | 410 +++++++++++------------------------ ethexe/sequencer/src/lib.rs | 79 ++----- ethexe/validator/Cargo.toml | 1 - ethexe/validator/src/lib.rs | 31 +-- 6 files changed, 165 insertions(+), 378 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e7ad15f6993..bdec33ee7eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5150,7 +5150,6 @@ version = "1.4.2" dependencies = [ "anyhow", "ethexe-common", - "ethexe-network", "ethexe-sequencer", "ethexe-signer", "futures", diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 33a9adf5b8f..19fbaf62803 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -24,16 +24,13 @@ use crate::{ }; use anyhow::{anyhow, Ok, Result}; use ethexe_common::{ - db, events::BlockEvent, BlockCommitment, CodeCommitment, Commitments, StateTransition, + events::BlockEvent, BlockCommitment, CodeCommitment, Commitments, StateTransition, }; use ethexe_db::{BlockHeader, BlockMetaStorage, CodeUploadInfo, CodesStorage, Database}; use ethexe_network::GossipsubMessage; use ethexe_observer::{BlockData, CodeLoadedData}; use ethexe_processor::LocalOutcome; -use ethexe_sequencer::{ - AggregatedCommitments, BlockCommitmentValidationRequest, CodeCommitmentValidationRequest, - NetworkMessage, SeqHash, -}; +use ethexe_sequencer::{NetworkMessage, SeqHash}; use ethexe_signer::{PublicKey, Signer}; use futures::{future, stream::StreamExt, FutureExt}; use gprimitives::H256; @@ -590,22 +587,12 @@ impl Service { let code_requests: BTreeMap<_, _> = codes_hash .and_then(|hash| sequencer.get_multisigned_code_commitments(hash)) - .map(|commitments| { - commitments - .into_iter() - .map(|c| (c.hash(), c.into())) - .collect() - }) + .map(|commitments| commitments.iter().map(|c| (c.hash(), c.into())).collect()) .unwrap_or_default(); let block_requests: BTreeMap<_, _> = blocks_hash .and_then(|hash| sequencer.get_multisigned_block_commitments(hash)) - .map(|commitments| { - commitments - .into_iter() - .map(|c| (c.hash(), c.into())) - .collect() - }) + .map(|commitments| commitments.iter().map(|c| (c.hash(), c.into())).collect()) .unwrap_or_default(); if let Some(network_sender) = maybe_network_sender { diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 58ffe19b9ad..44d30abc87a 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -21,14 +21,9 @@ use anyhow::Result; use ethexe_common::{BlockCommitment, CodeCommitment, OutgoingMessage, StateTransition}; use ethexe_signer::{Address, PublicKey, Signature, Signer}; -use futures::AsyncRead; use gprimitives::{MessageId, H256}; use parity_scale_codec::{Decode, Encode}; -use std::{ - collections::{HashMap, HashSet}, - fmt, mem, - path::Iter, -}; +use std::{fmt, mem}; pub trait SeqHash { fn hash(&self) -> H256; @@ -40,18 +35,6 @@ pub struct AggregatedCommitments { pub signature: Signature, } -#[derive(Debug)] -pub struct LinkedAggregation { - pub aggregated: AggregatedCommitments, - pub previous: Option, -} - -#[derive(Debug)] -pub struct AggregatedQueue { - all_commitments: HashMap>, - last: H256, -} - impl SeqHash for H256 { fn hash(&self) -> H256 { *self @@ -135,8 +118,7 @@ impl SeqHash for &[T] { let buffer: Vec = self .iter() .map(SeqHash::hash) - .map(H256::to_fixed_bytes) - .flatten() + .flat_map(H256::to_fixed_bytes) .collect(); ethexe_signer::hash(&buffer) } @@ -184,6 +166,10 @@ impl AggregatedCommitments { self.commitments.len() } + pub fn is_empty(&self) -> bool { + self.commitments.is_empty() + } + pub fn verify_origin(&self, router_address: Address, origin: Address) -> Result { let buffer = Self::buffer(self.commitments.hash(), router_address); Ok(self @@ -203,48 +189,6 @@ impl AggregatedCommitments { } } -impl AggregatedQueue { - pub fn new(initial: AggregatedCommitments) -> Self { - let hash = initial.hash(); - let mut all_commitments = HashMap::new(); - all_commitments.insert( - hash, - LinkedAggregation { - aggregated: initial, - previous: None, - }, - ); - Self { - all_commitments, - last: hash, - } - } - - pub fn push(&mut self, commitment: AggregatedCommitments) { - let hash = commitment.hash(); - - let new_queue = LinkedAggregation { - aggregated: commitment, - previous: Some(self.last), - }; - self.last = hash; - - self.all_commitments.insert(hash, new_queue); - } - - pub fn get_signature(&self, commitment: H256) -> Option { - self.all_commitments - .get(&commitment) - .map(|c| c.aggregated.signature.clone()) - } - - pub fn previous(&self, commitment: H256) -> Option { - self.all_commitments - .get(&commitment) - .and_then(|c| c.previous) - } -} - #[derive(Clone)] pub struct MultisignedCommitments { pub commitments: Vec, @@ -262,219 +206,129 @@ impl fmt::Debug for MultisignedCommitments { } } -pub struct Aggregator { - threshold: usize, - - aggregated: HashMap>, - plain_commitments: HashMap>, - - rolling: Option, -} - -impl Aggregator { - pub fn new(threshold: usize) -> Self { - Self { - threshold, - aggregated: HashMap::new(), - plain_commitments: HashMap::new(), - rolling: None, - } - } - - pub fn push(&mut self, origin: Address, aggregated: AggregatedCommitments) { - let hash = aggregated.hash(); - - self.plain_commitments - .insert(hash, aggregated.commitments.clone()); - - self.aggregated - .entry(origin) - .and_modify(|q| { - q.push(aggregated.clone()); - }) - .or_insert_with(move || AggregatedQueue::new(aggregated)); - - self.rolling = Some(hash); - } - - pub fn len(&self) -> usize { - self.aggregated.len() - } - - pub fn find_root(self) -> Option> { - use std::collections::VecDeque; - - // Start only with the root - let mut candidates = VecDeque::new(); - let mut checked = HashSet::new(); - candidates.push_back(self.rolling?); - checked.insert(self.rolling?); - - while let Some(candidate_hash) = candidates.pop_front() { - // check if we can find `threshold` amount of this `candidate_hash` - let mut sources = vec![]; - let mut signatures = vec![]; - - for (source, queue) in self.aggregated.iter() { - if let Some(signature) = queue.get_signature(candidate_hash) { - sources.push(*source); - signatures.push(signature.clone()); - } - } - - if signatures.len() >= self.threshold { - // found our candidate - let plain_commitments = self.plain_commitments.get(&candidate_hash) - .expect("Plain commitments should be present, as they are always updated when Aggregator::push is invoked; qed"); - - let multi_signed = MultisignedCommitments { - commitments: plain_commitments.clone(), - sources, - signatures, - }; - - return Some(multi_signed); - } - - // else we try to find as many candidates as possible - for queue in self.aggregated.values() { - if let Some(previous) = queue.previous(candidate_hash) { - if checked.contains(&previous) { - continue; - } - candidates.push_back(previous); - checked.insert(previous); - } - } - } - - None - } -} - -#[cfg(test)] -mod tests { - - use super::*; - use ethexe_signer::{Address, Signature}; - use gear_core::ids::ActorId; - - #[derive(Clone, Debug)] - pub struct MyComm([u8; 2]); - - impl SeqHash for MyComm { - fn hash(&self) -> H256 { - ethexe_signer::hash(&self.0[..]) - } - } - - fn signer(id: u8) -> Address { - let mut array = [0; 20]; - array[0] = id; - Address(array) - } - - fn signature(id: u8) -> Signature { - let mut array = [0; 65]; - array[0] = id; - Signature::from(array) - } - - #[allow(unused)] - fn block_hash(id: u8) -> H256 { - let mut array = [0; 32]; - array[0] = id; - H256::from(array) - } - - #[allow(unused)] - fn pid(id: u8) -> ActorId { - let mut array = [0; 32]; - array[0] = id; - ActorId::from(array) - } - - #[allow(unused)] - fn state_id(id: u8) -> H256 { - let mut array = [0; 32]; - array[0] = id; - H256::from(array) - } - - fn gen_commitment( - signature_id: u8, - commitments: Vec<(u8, u8)>, - ) -> AggregatedCommitments { - let commitments = commitments - .into_iter() - .map(|v| MyComm([v.0, v.1])) - .collect(); - - AggregatedCommitments { - commitments, - signature: signature(signature_id), - } - } - - #[test] - fn simple() { - // aggregator with threshold 1 - let mut aggregator = Aggregator::new(1); - - aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); - - let root = aggregator - .find_root() - .expect("Failed to generate root commitment"); - - assert_eq!(root.signatures.len(), 1); - assert_eq!(root.commitments.len(), 1); - - // aggregator with threshold 1 - let mut aggregator = Aggregator::new(1); - - aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); - aggregator.push(signer(1), gen_commitment(1, vec![(1, 1), (2, 2)])); - - let root = aggregator - .find_root() - .expect("Failed to generate root commitment"); - - assert_eq!(root.signatures.len(), 1); - - // should be latest commitment - assert_eq!(root.commitments.len(), 2); - } - - #[test] - fn more_threshold() { - // aggregator with threshold 2 - let mut aggregator = Aggregator::new(2); - - aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); - aggregator.push(signer(2), gen_commitment(0, vec![(1, 1)])); - aggregator.push(signer(2), gen_commitment(0, vec![(1, 1), (2, 2)])); - - let root = aggregator - .find_root() - .expect("Failed to generate root commitment"); - - assert_eq!(root.signatures.len(), 2); - assert_eq!(root.commitments.len(), 1); // only (1, 1) is committed by both aggregators - - // aggregator with threshold 2 - let mut aggregator = Aggregator::new(2); - - aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); - aggregator.push(signer(2), gen_commitment(0, vec![(1, 1)])); - aggregator.push(signer(2), gen_commitment(0, vec![(1, 1), (2, 2)])); - aggregator.push(signer(1), gen_commitment(0, vec![(1, 1), (2, 2)])); - - let root = aggregator - .find_root() - .expect("Failed to generate root commitment"); - - assert_eq!(root.signatures.len(), 2); - assert_eq!(root.commitments.len(), 2); // both (1, 1) and (2, 2) is committed by both aggregators - } -} +// #[cfg(test)] +// mod tests { + +// use super::*; +// use ethexe_signer::{Address, Signature}; +// use gear_core::ids::ActorId; + +// #[derive(Clone, Debug)] +// pub struct MyComm([u8; 2]); + +// impl SeqHash for MyComm { +// fn hash(&self) -> H256 { +// ethexe_signer::hash(&self.0[..]) +// } +// } + +// fn signer(id: u8) -> Address { +// let mut array = [0; 20]; +// array[0] = id; +// Address(array) +// } + +// fn signature(id: u8) -> Signature { +// let mut array = [0; 65]; +// array[0] = id; +// Signature::from(array) +// } + +// #[allow(unused)] +// fn block_hash(id: u8) -> H256 { +// let mut array = [0; 32]; +// array[0] = id; +// H256::from(array) +// } + +// #[allow(unused)] +// fn pid(id: u8) -> ActorId { +// let mut array = [0; 32]; +// array[0] = id; +// ActorId::from(array) +// } + +// #[allow(unused)] +// fn state_id(id: u8) -> H256 { +// let mut array = [0; 32]; +// array[0] = id; +// H256::from(array) +// } + +// fn gen_commitment( +// signature_id: u8, +// commitments: Vec<(u8, u8)>, +// ) -> AggregatedCommitments { +// let commitments = commitments +// .into_iter() +// .map(|v| MyComm([v.0, v.1])) +// .collect(); + +// AggregatedCommitments { +// commitments, +// signature: signature(signature_id), +// } +// } + +// #[test] +// fn simple() { +// // aggregator with threshold 1 +// let mut aggregator = Aggregator::new(1); + +// aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); + +// let root = aggregator +// .find_root() +// .expect("Failed to generate root commitment"); + +// assert_eq!(root.signatures.len(), 1); +// assert_eq!(root.commitments.len(), 1); + +// // aggregator with threshold 1 +// let mut aggregator = Aggregator::new(1); + +// aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); +// aggregator.push(signer(1), gen_commitment(1, vec![(1, 1), (2, 2)])); + +// let root = aggregator +// .find_root() +// .expect("Failed to generate root commitment"); + +// assert_eq!(root.signatures.len(), 1); + +// // should be latest commitment +// assert_eq!(root.commitments.len(), 2); +// } + +// #[test] +// fn more_threshold() { +// // aggregator with threshold 2 +// let mut aggregator = Aggregator::new(2); + +// aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); +// aggregator.push(signer(2), gen_commitment(0, vec![(1, 1)])); +// aggregator.push(signer(2), gen_commitment(0, vec![(1, 1), (2, 2)])); + +// let root = aggregator +// .find_root() +// .expect("Failed to generate root commitment"); + +// assert_eq!(root.signatures.len(), 2); +// assert_eq!(root.commitments.len(), 1); // only (1, 1) is committed by both aggregators + +// // aggregator with threshold 2 +// let mut aggregator = Aggregator::new(2); + +// aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); +// aggregator.push(signer(2), gen_commitment(0, vec![(1, 1)])); +// aggregator.push(signer(2), gen_commitment(0, vec![(1, 1), (2, 2)])); +// aggregator.push(signer(1), gen_commitment(0, vec![(1, 1), (2, 2)])); + +// let root = aggregator +// .find_root() +// .expect("Failed to generate root commitment"); + +// assert_eq!(root.signatures.len(), 2); +// assert_eq!(root.commitments.len(), 2); // both (1, 1) and (2, 2) is committed by both aggregators +// } +// } diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index bb2b8e60785..27568c2da55 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -166,15 +166,12 @@ impl Sequencer { // This function should never block. pub fn process_observer_event(&mut self, event: &Event) -> Result<()> { - match event { - Event::Block(data) => { - log::debug!("Receive block {:?}", data.block_hash); + if let Event::Block(data) = event { + log::debug!("Receive block {:?}", data.block_hash); - self.update_status(|status| { - *status = SequencerStatus::default(); - }); - } - _ => {} + self.update_status(|status| { + *status = SequencerStatus::default(); + }); } Ok(()) @@ -256,7 +253,7 @@ impl Sequencer { .remove(&candidate) .unwrap_or_else(|| unreachable!("Must be in the map")); - if multisigned.commitments.len() == 0 { + if multisigned.commitments.is_empty() { unreachable!("Guarantied to be not empty"); } @@ -429,7 +426,7 @@ impl Sequencer { aggregated_hash: H256, signature: Signature, validators: &HashSet
, - aggregator: &mut BTreeMap>>, + aggregator: &mut BTreeMap>, ) -> Result<()> { if !validators.contains(&origin) { return Err(anyhow!("Unknown validator {origin}")); @@ -445,12 +442,7 @@ impl Sequencer { let multisigned = aggregator .get_mut(&aggregated_hash) - .ok_or(anyhow!("Aggregated commitment {aggregated_hash} not found"))? - .get_or_insert_with(|| MultisignedCommitments { - commitments: Default::default(), - sources: Vec::new(), - signatures: Vec::new(), - }); + .ok_or(anyhow!("Aggregated commitment {aggregated_hash} not found"))?; multisigned.sources.push(origin); multisigned.signatures.push(signature); @@ -464,26 +456,13 @@ impl Sequencer { aggregated_hash: H256, signature: Signature, ) -> Result<()> { - if !self.validators.contains(&origin) { - return Err(anyhow!("Unknown validator {origin}")); - } - if signature - .recover_digest(*aggregated_hash.as_fixed_bytes())? - .to_address() - != origin - { - return Err(anyhow!("Invalid signature")); - } - - let multisigned = self - .codes_aggregator - .get_mut(&aggregated_hash) - .ok_or(anyhow!("Aggregated commitment {aggregated_hash} not found"))?; - - multisigned.sources.push(origin); - multisigned.signatures.push(signature); - - Ok(()) + Self::receive_signature( + origin, + aggregated_hash, + signature, + &self.validators, + &mut self.codes_aggregator, + ) } pub fn receive_blocks_signature( @@ -492,27 +471,13 @@ impl Sequencer { aggregated_hash: H256, signature: Signature, ) -> Result<()> { - if !self.validators.contains(&origin) { - return Err(anyhow!("Unknown validator {origin}")); - } - - if signature - .recover_digest(*aggregated_hash.as_fixed_bytes())? - .to_address() - != origin - { - return Err(anyhow!("Invalid signature")); - } - - let multisigned = self - .blocks_aggregator - .get_mut(&aggregated_hash) - .ok_or(anyhow!("Aggregated commitment {aggregated_hash} not found"))?; - - multisigned.sources.push(origin); - multisigned.signatures.push(signature); - - Ok(()) + Self::receive_signature( + origin, + aggregated_hash, + signature, + &self.validators, + &mut self.blocks_aggregator, + ) } pub fn address(&self) -> Address { diff --git a/ethexe/validator/Cargo.toml b/ethexe/validator/Cargo.toml index 523907bf1c9..1988d5ac4a5 100644 --- a/ethexe/validator/Cargo.toml +++ b/ethexe/validator/Cargo.toml @@ -10,7 +10,6 @@ repository.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -ethexe-network.workspace = true ethexe-signer.workspace = true ethexe-sequencer.workspace = true ethexe-common.workspace = true diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index d0429320748..98b8c60cfc3 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -16,22 +16,16 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use core::hash; - use anyhow::{anyhow, Result}; use ethexe_common::{ db::{BlockMetaStorage, CodesStorage}, - BlockCommitment, CodeCommitment, Commitments, + BlockCommitment, CodeCommitment, }; -use ethexe_network::NetworkSender; use ethexe_sequencer::{ AggregatedCommitments, BlockCommitmentValidationRequest, CodeCommitmentValidationRequest, - NetworkMessage, SeqHash, + SeqHash, }; use ethexe_signer::{Address, PublicKey, Signature, Signer}; -use gprimitives::H256; -use parity_scale_codec::Encode; -use uluru::LRUCache; pub struct Config { pub pub_key: PublicKey, @@ -42,8 +36,6 @@ pub struct Validator { pub_key: PublicKey, signer: Signer, router_address: Address, - signed_code_commitments: LRUCache, - signed_block_commitments: LRUCache, } impl Validator { @@ -52,8 +44,6 @@ impl Validator { signer, pub_key: config.pub_key, router_address: config.router_address, - signed_code_commitments: LRUCache::new(), - signed_block_commitments: LRUCache::new(), } } @@ -75,22 +65,16 @@ impl Validator { } pub fn aggregate_codes( - &mut self, + &self, commitments: Vec, ) -> Result> { - for commitment in commitments.iter() { - self.signed_code_commitments.insert(commitment.hash()); - } self.aggregate(commitments) } pub fn aggregate_blocks( - &mut self, + &self, commitments: Vec, ) -> Result> { - for commitment in commitments.iter() { - self.signed_block_commitments.insert(commitment.hash()); - } self.aggregate(commitments) } @@ -143,12 +127,12 @@ impl Validator { let outcomes = db .block_outcome(block_hash) .ok_or(anyhow!("block not found"))?; - let transitions_hash = outcomes + let db_transitions_hash = outcomes .iter() .map(SeqHash::hash) .collect::>() .hash(); - if transitions_hash != transitions_hash { + if db_transitions_hash != transitions_hash { return Err(anyhow!("block transitions hash mismatch")); } @@ -171,9 +155,8 @@ impl Validator { let mut block_hash = block_hash; (0..allowed_predecessor_block_height.saturating_sub(block_height)) - .into_iter() .find_map(|_| match block_hash { - allowed_pred_block_hash => Some(Ok(())), + _ if block_hash == allowed_pred_block_hash => Some(Ok(())), _ => { match db .block_prev_commitment(block_hash) From 1083932c9481fe6ce173e92158db230c8d216185 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 2 Aug 2024 19:08:50 +0200 Subject: [PATCH 03/44] pass trusted validators list to sequencer --- ethexe/cli/src/args.rs | 3 +++ ethexe/cli/src/config.rs | 15 +++++++++++++++ ethexe/cli/src/service.rs | 3 +++ ethexe/cli/src/tests.rs | 1 + ethexe/sequencer/src/lib.rs | 3 ++- 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ethexe/cli/src/args.rs b/ethexe/cli/src/args.rs index ba0422075db..1a3e67b8151 100644 --- a/ethexe/cli/src/args.rs +++ b/ethexe/cli/src/args.rs @@ -108,6 +108,9 @@ pub struct Args { #[clap(flatten)] pub prometheus_params: Option, + /// Validators to use + pub validators: Option>, + #[command(subcommand)] pub extra_command: Option, } diff --git a/ethexe/cli/src/config.rs b/ethexe/cli/src/config.rs index cb3f8f7e34a..56b8420e0a2 100644 --- a/ethexe/cli/src/config.rs +++ b/ethexe/cli/src/config.rs @@ -125,6 +125,9 @@ pub struct Config { /// RPC port pub rpc_port: Option, + + /// Validators to use + pub validators: Vec
, } impl TryFrom for Config { @@ -185,6 +188,17 @@ impl TryFrom for Config { "random key for validator is only allowed with `--tmp` flag" ); + let mut validators = Vec::new(); + for res in args + .validators + .unwrap_or_default() + .into_iter() + .map(|s| Address::from_str(s.as_str())) + { + let address = res.map_err(|e| anyhow::anyhow!("invalid validator address: {}", e))?; + validators.push(address); + } + Ok(Config { node_name: args.node_name, ethereum_rpc: args.ethereum_rpc, @@ -206,6 +220,7 @@ impl TryFrom for Config { params.prometheus_config(DEFAULT_PROMETHEUS_PORT, "ethexe-dev".to_string()) }), rpc_port: args.rpc_port, + validators, }) } } diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 19fbaf62803..655f7144954 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -103,6 +103,7 @@ impl Service { ethereum_rpc: config.ethereum_rpc.clone(), sign_tx_public: key, router_address: config.ethereum_router_address, + validators: config.validators.clone(), }, signer.clone(), ) @@ -771,6 +772,7 @@ mod tests { "dev".to_string(), )), rpc_port: Some(9090), + validators: Default::default(), }) .await .unwrap(); @@ -793,6 +795,7 @@ mod tests { net_config: None, prometheus_config: None, rpc_port: None, + validators: Default::default(), }) .await .unwrap(); diff --git a/ethexe/cli/src/tests.rs b/ethexe/cli/src/tests.rs index a3333318f00..8b01c2eda98 100644 --- a/ethexe/cli/src/tests.rs +++ b/ethexe/cli/src/tests.rs @@ -252,6 +252,7 @@ impl TestEnv { ethereum_rpc: self.rpc_url.clone(), sign_tx_public: self.sequencer_public_key, router_address: self.router_address, + validators: vec![self.validator_public_key.to_address()], }, self.signer.clone(), ) diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 27568c2da55..56bd0e946b7 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -37,6 +37,7 @@ pub struct Config { pub ethereum_rpc: String, pub sign_tx_public: PublicKey, pub router_address: Address, + pub validators: Vec
, } #[derive(Debug, Clone, Copy, Default)] @@ -153,7 +154,7 @@ impl Sequencer { config.sign_tx_public.to_address(), ) .await?, - validators: Default::default(), + validators: config.validators.iter().cloned().collect(), threshold: 1, code_commitments: BTreeMap::new(), block_commitments: BTreeMap::new(), From 4ec76a71fa5b6c315e37143b474309b9c7a73643 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Sun, 4 Aug 2024 16:25:01 +0200 Subject: [PATCH 04/44] pass ping and ping_reorg --- Cargo.lock | 3 ++ Cargo.toml | 2 +- ethexe/sequencer/src/agro.rs | 10 +++++ ethexe/sequencer/src/lib.rs | 12 ++++-- ethexe/signer/src/lib.rs | 28 +++++++++++++- ethexe/validator/src/lib.rs | 71 ++++++++++++++++++++++-------------- 6 files changed, 92 insertions(+), 34 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bdec33ee7eb..f6fa1a3944c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -777,6 +777,9 @@ name = "anyhow" version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +dependencies = [ + "backtrace", +] [[package]] name = "approx" diff --git a/Cargo.toml b/Cargo.toml index e991dc76ee1..1eac73fd442 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -112,7 +112,7 @@ members = [ [workspace.dependencies] alloy = "0.1.4" -anyhow = "1.0.86" +anyhow = { version = "1.0.86", features = ["std", "backtrace"] } arbitrary = "1.3.2" async-recursion = "1.1.1" async-trait = "0.1.81" diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 44d30abc87a..9c49cbf782f 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -162,6 +162,16 @@ impl AggregatedCommitments { signer.sign_digest(pub_key, ethexe_signer::hash(&buffer).to_fixed_bytes()) } + pub fn recover_digest( + digest: H256, + signature: Signature, + router_address: Address, + ) -> Result
{ + let buffer = Self::buffer(digest, router_address); + let digest = ethexe_signer::hash(&buffer).to_fixed_bytes(); + signature.recover_digest(digest).map(|k| k.to_address()) + } + pub fn len(&self) -> usize { self.commitments.len() } diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 56bd0e946b7..acbf729f1bc 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -427,16 +427,18 @@ impl Sequencer { aggregated_hash: H256, signature: Signature, validators: &HashSet
, + router_address: Address, aggregator: &mut BTreeMap>, ) -> Result<()> { if !validators.contains(&origin) { return Err(anyhow!("Unknown validator {origin}")); } - if signature - .recover_digest(*aggregated_hash.as_fixed_bytes())? - .to_address() - != origin + if AggregatedCommitments::::recover_digest( + aggregated_hash, + signature.clone(), + router_address, + )? != origin { return Err(anyhow!("Invalid signature")); } @@ -462,6 +464,7 @@ impl Sequencer { aggregated_hash, signature, &self.validators, + self.ethereum.router().address(), &mut self.codes_aggregator, ) } @@ -477,6 +480,7 @@ impl Sequencer { aggregated_hash, signature, &self.validators, + self.ethereum.router().address(), &mut self.blocks_aggregator, ) } diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index 97866f63219..53f814294c9 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -198,7 +198,7 @@ impl TryFrom for RecoverableSignature { fn try_from(sig: Signature) -> Result { RecoverableSignature::from_compact( sig.0[..64].as_ref(), - RecoveryId::from_i32(sig.0[64] as i32)?, + RecoveryId::from_i32((sig.0[64] - 27) as i32)?, ) .map_err(Into::into) } @@ -349,6 +349,8 @@ impl Signer { #[cfg(test)] mod tests { + use std::env::temp_dir; + use super::*; use ethers::utils::keccak256; @@ -444,4 +446,28 @@ mod tests { .unwrap(); Address::try_from(id).expect_err("Must be incorrect ethereum address"); } + + #[test] + fn recover_digest() { + let private_key_hex = "4c0883a69102937d6231471b5dbb6204fe51296170827936ea5cce4b76994b0f"; + let message = b"hello world"; + + let key_store = temp_dir().join("signer-tests"); + let signer = Signer::new(key_store).expect("Failed to create signer"); + + let private_key = PrivateKey::from_str(private_key_hex).expect("Invalid private key hex"); + let public_key = signer.add_key(private_key).expect("Failed to add key"); + + let signature = signer + .sign(public_key, message) + .expect("Failed to sign message"); + + let hash = keccak256(message); + + let recovered_public_key = signature + .recover_digest(hash) + .expect("Failed to recover public key"); + + assert_eq!(recovered_public_key, public_key); + } } diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 98b8c60cfc3..562b0d2a853 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -26,6 +26,7 @@ use ethexe_sequencer::{ SeqHash, }; use ethexe_signer::{Address, PublicKey, Signature, Signer}; +use gprimitives::H256; pub struct Config { pub pub_key: PublicKey, @@ -90,7 +91,7 @@ impl Validator { .ok_or(anyhow!("code not found"))? != request.approved { - return Err(anyhow!("code not approved")); + return Err(anyhow!("approved mismatch")); } hashes.push(request.hash()); } @@ -144,33 +145,11 @@ impl Validator { return Err(anyhow!("block prev commitment hash mismatch")); } - let allowed_predecessor_block_height = db - .block_header(allowed_pred_block_hash) - .ok_or(anyhow!("allowed pred block not found"))? - .height; - let block_height = db - .block_header(block_hash) - .ok_or(anyhow!("block not found"))? - .height; - - let mut block_hash = block_hash; - (0..allowed_predecessor_block_height.saturating_sub(block_height)) - .find_map(|_| match block_hash { - _ if block_hash == allowed_pred_block_hash => Some(Ok(())), - _ => { - match db - .block_prev_commitment(block_hash) - .ok_or(anyhow!("block not found")) - { - Err(err) => Some(Err(err)), - Ok(parent) => { - block_hash = parent; - None - } - } - } - }) - .ok_or(anyhow!("allowed pred block is not in correct branch"))??; + if !Self::verify_is_predecessor(&db, allowed_pred_block_hash, block_hash, None)? { + return Err(anyhow!( + "{block_hash} is not a predecessor of {allowed_pred_block_hash}" + )); + } hashes.push(request.hash()); } @@ -182,4 +161,40 @@ impl Validator { self.router_address, ) } + + /// Verify whether `pred_hash` is a predecessor of `block_hash` in the chain. + fn verify_is_predecessor( + db: &impl BlockMetaStorage, + block_hash: H256, + pred_hash: H256, + max_distance: Option, + ) -> Result { + let pred_height = db + .block_header(pred_hash) + .ok_or(anyhow!("header not found for pred block: {pred_hash}"))? + .height; + + let block_height = db + .block_header(block_hash) + .ok_or(anyhow!("header not found for block: {block_hash}"))? + .height; + + let distance = block_height.saturating_sub(pred_height); + if max_distance.map(|d| d < distance).unwrap_or(false) { + return Err(anyhow!("distance is too large: {distance}")); + } + + let mut block_hash = block_hash; + for _ in 0..=distance { + if block_hash == pred_hash { + return Ok(true); + } + block_hash = db + .block_header(block_hash) + .ok_or(anyhow!("header not found for block: {block_hash}"))? + .parent_hash; + } + + Ok(false) + } } From bec63f4027d7d79478ff88d25c0e8798aeedab3b Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Sun, 4 Aug 2024 22:36:47 +0200 Subject: [PATCH 05/44] append as digest --- ethexe/cli/src/service.rs | 22 +++-- ethexe/common/src/lib.rs | 3 + ethexe/ethereum/src/lib.rs | 6 +- ethexe/sequencer/src/agro.rs | 132 +++------------------------- ethexe/sequencer/src/lib.rs | 146 +++++++++++++------------------ ethexe/signer/src/digest.rs | 154 +++++++++++++++++++++++++++++++++ ethexe/signer/src/lib.rs | 97 ++++----------------- ethexe/signer/src/signature.rs | 138 +++++++++++++++++++++++++++++ ethexe/validator/src/lib.rs | 46 +++++----- 9 files changed, 426 insertions(+), 318 deletions(-) create mode 100644 ethexe/signer/src/digest.rs create mode 100644 ethexe/signer/src/signature.rs diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 655f7144954..9275dedca2b 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -30,8 +30,8 @@ use ethexe_db::{BlockHeader, BlockMetaStorage, CodeUploadInfo, CodesStorage, Dat use ethexe_network::GossipsubMessage; use ethexe_observer::{BlockData, CodeLoadedData}; use ethexe_processor::LocalOutcome; -use ethexe_sequencer::{NetworkMessage, SeqHash}; -use ethexe_signer::{PublicKey, Signer}; +use ethexe_sequencer::NetworkMessage; +use ethexe_signer::{AsDigest, PublicKey, Signer}; use futures::{future, stream::StreamExt, FutureExt}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; @@ -588,12 +588,22 @@ impl Service { let code_requests: BTreeMap<_, _> = codes_hash .and_then(|hash| sequencer.get_multisigned_code_commitments(hash)) - .map(|commitments| commitments.iter().map(|c| (c.hash(), c.into())).collect()) + .map(|commitments| { + commitments + .iter() + .map(|c| (c.as_digest(), c.clone())) + .collect() + }) .unwrap_or_default(); let block_requests: BTreeMap<_, _> = blocks_hash .and_then(|hash| sequencer.get_multisigned_block_commitments(hash)) - .map(|commitments| commitments.iter().map(|c| (c.hash(), c.into())).collect()) + .map(|commitments| { + commitments + .iter() + .map(|c| (c.as_digest(), c.into())) + .collect() + }) .unwrap_or_default(); if let Some(network_sender) = maybe_network_sender { @@ -673,7 +683,7 @@ impl Service { let codes_signature = if let Some(codes_hash) = codes .is_empty() .not() - .then(|| codes.keys().cloned().collect::>().hash()) + .then(|| codes.keys().cloned().collect::>().as_digest()) { let signature = validator.validate_code_commitments(db.clone(), codes.into_values())?; @@ -685,7 +695,7 @@ impl Service { let blocks_signature = if let Some(blocks_hash) = blocks .is_empty() .not() - .then(|| blocks.keys().cloned().collect::>().hash()) + .then(|| blocks.keys().cloned().collect::>().as_digest()) { let signature = validator.validate_block_commitments(db.clone(), blocks.into_values())?; diff --git a/ethexe/common/src/lib.rs b/ethexe/common/src/lib.rs index 8ca99736461..f7049fc0cf1 100644 --- a/ethexe/common/src/lib.rs +++ b/ethexe/common/src/lib.rs @@ -33,6 +33,9 @@ use gear_core::{ use gprimitives::{MessageId, H256}; use parity_scale_codec::{Decode, Encode}; +pub use gear_core; +pub use gprimitives; + #[derive(Debug, Clone, Default, Encode, Decode)] pub struct CodeCommitment { pub code_id: CodeId, diff --git a/ethexe/ethereum/src/lib.rs b/ethexe/ethereum/src/lib.rs index eb0773afe11..c9b375ae2b5 100644 --- a/ethexe/ethereum/src/lib.rs +++ b/ethexe/ethereum/src/lib.rs @@ -156,7 +156,7 @@ impl SignerSync for Sender { .signer .raw_sign_digest(self.sender, hash.0) .map_err(|err| SignerError::Other(err.into()))?; - Ok(Signature::try_from(&signature.0[..])?) + Ok(Signature::try_from(signature.as_ref())?) } fn chain_id_sync(&self) -> Option { @@ -300,7 +300,7 @@ impl Router { commitments.into_iter().map(Into::into).collect(), signatures .into_iter() - .map(|signature| Bytes::copy_from_slice(&signature.0)) + .map(|signature| Bytes::copy_from_slice(signature.as_ref())) .collect(), ); let tx = builder.send().await?; @@ -319,7 +319,7 @@ impl Router { commitments.into_iter().map(Into::into).collect(), signatures .into_iter() - .map(|signature| Bytes::copy_from_slice(&signature.0)) + .map(|signature| Bytes::copy_from_slice(signature.as_ref())) .collect(), ) .gas(10_000_000); diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 0e6984f220d..2a07bac2593 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -19,123 +19,17 @@ //! Abstract commitment aggregator. use anyhow::Result; -use ethexe_common::{BlockCommitment, CodeCommitment, OutgoingMessage, StateTransition}; -use ethexe_signer::{Address, PublicKey, Signature, Signer}; -use gprimitives::{MessageId, H256}; +use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; use parity_scale_codec::{Decode, Encode}; use std::fmt; -pub trait SeqHash { - fn hash(&self) -> H256; -} - -#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq, Hash)] -pub struct AggregatedCommitments { +#[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] +pub struct AggregatedCommitments { pub commitments: Vec, pub signature: Signature, } -impl SeqHash for H256 { - fn hash(&self) -> H256 { - *self - } -} - -// TODO: REMOVE THIS IMPL. SeqHash makes sense only for `ethexe_ethereum` types. -// identity hashing -impl SeqHash for CodeCommitment { - fn hash(&self) -> H256 { - ethexe_signer::hash(&self.encode()) - } -} - -// TODO: REMOVE THIS IMPL. SeqHash makes sense only for `ethexe_ethereum` types. -impl SeqHash for StateTransition { - fn hash(&self) -> H256 { - let mut outgoing_bytes = - Vec::with_capacity(self.outgoing_messages.len() * size_of::()); - - for OutgoingMessage { - message_id, - destination, - payload, - value, - reply_details, - } in self.outgoing_messages.iter() - { - let reply_details = reply_details.unwrap_or_default(); - let mut outgoing_message = Vec::with_capacity( - size_of::() - + size_of::
() - + payload.inner().len() - + size_of::() - + size_of::() - + size_of::<[u8; 4]>(), - ); - - outgoing_message.extend_from_slice(&message_id.into_bytes()); - outgoing_message.extend_from_slice(&destination.into_bytes()[12..]); - outgoing_message.extend_from_slice(payload.inner()); - outgoing_message.extend_from_slice(&value.to_be_bytes()); - outgoing_message.extend_from_slice(&reply_details.to_message_id().into_bytes()); - outgoing_message.extend(&reply_details.to_reply_code().to_bytes()); - - outgoing_bytes.extend_from_slice(ethexe_signer::hash(&outgoing_message).as_bytes()); - } - - let mut message = Vec::with_capacity(size_of::
() + (3 * size_of::())); - - message.extend_from_slice(&self.actor_id.into_bytes()[12..]); - message.extend_from_slice(self.old_state_hash.as_bytes()); - message.extend_from_slice(self.new_state_hash.as_bytes()); - message.extend_from_slice(ethexe_signer::hash(&outgoing_bytes).as_bytes()); - - ethexe_signer::hash(&message) - } -} - -impl SeqHash for BlockCommitment { - fn hash(&self) -> H256 { - let mut message = Vec::with_capacity( - size_of::() - + size_of::() - + size_of::() - + self.transitions.len() * size_of::(), - ); - - message.extend_from_slice(self.block_hash.as_bytes()); - message.extend_from_slice(self.allowed_pred_block_hash.as_bytes()); - message.extend_from_slice(self.allowed_prev_commitment_hash.as_bytes()); - message.extend_from_slice(self.transitions.hash().as_bytes()); - - ethexe_signer::hash(&message) - } -} - -impl SeqHash for &[T] { - fn hash(&self) -> H256 { - let buffer: Vec = self - .iter() - .map(SeqHash::hash) - .flat_map(H256::to_fixed_bytes) - .collect(); - ethexe_signer::hash(&buffer) - } -} - -impl SeqHash for Vec { - fn hash(&self) -> H256 { - self.as_slice().hash() - } -} - -impl SeqHash for AggregatedCommitments { - fn hash(&self) -> H256 { - self.commitments.hash() - } -} - -impl AggregatedCommitments { +impl AggregatedCommitments { pub fn aggregate_commitments( commitments: Vec, signer: &Signer, @@ -143,7 +37,7 @@ impl AggregatedCommitments { router_address: Address, ) -> Result> { let signature = - Self::sign_commitments(commitments.hash(), signer, pub_key, router_address)?; + Self::sign_commitments(commitments.as_digest(), signer, pub_key, router_address)?; Ok(AggregatedCommitments { commitments, @@ -152,7 +46,7 @@ impl AggregatedCommitments { } pub fn sign_commitments( - commitments_hash: H256, + commitments_hash: Digest, signer: &Signer, pub_key: PublicKey, router_address: Address, @@ -162,13 +56,15 @@ impl AggregatedCommitments { } pub fn recover_digest( - digest: H256, + digest: Digest, signature: Signature, router_address: Address, ) -> Result
{ let buffer = Self::buffer(digest, router_address); let digest = ethexe_signer::hash(&buffer).to_fixed_bytes(); - signature.recover_digest(digest).map(|k| k.to_address()) + signature + .recover_from_digest(digest) + .map(|k| k.to_address()) } pub fn len(&self) -> usize { @@ -180,19 +76,19 @@ impl AggregatedCommitments { } pub fn verify_origin(&self, router_address: Address, origin: Address) -> Result { - let buffer = Self::buffer(self.commitments.hash(), router_address); + let buffer = Self::buffer(self.commitments.as_digest(), router_address); Ok(self .signature - .recover_digest(ethexe_signer::hash(&buffer).to_fixed_bytes())? + .recover_from_digest(ethexe_signer::hash(&buffer).to_fixed_bytes())? .to_address() == origin) } - fn buffer(commitments_hash: H256, router_address: Address) -> Vec { + fn buffer(digest: Digest, router_address: Address) -> Vec { [ [0x19, 0x00].as_ref(), router_address.0.as_ref(), - commitments_hash.as_ref(), + digest.as_ref(), ] .concat() } diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index acbf729f1bc..8665375943c 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -25,13 +25,13 @@ use anyhow::{anyhow, Result}; use ethexe_common::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; use ethexe_observer::Event; -use ethexe_signer::{Address, PublicKey, Signature, Signer}; -use gprimitives::{CodeId, H256}; +use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; +use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; use std::collections::{BTreeMap, HashSet}; use tokio::sync::watch; -pub use agro::{AggregatedCommitments, SeqHash}; +pub use agro::AggregatedCommitments; pub struct Config { pub ethereum_rpc: String, @@ -56,11 +56,11 @@ pub struct Sequencer { validators: HashSet
, threshold: u64, - code_commitments: BTreeMap, - block_commitments: BTreeMap, + code_commitments: BTreeMap, + block_commitments: BTreeMap, - codes_aggregator: BTreeMap>, - blocks_aggregator: BTreeMap>, + codes_aggregator: BTreeMap>, + blocks_aggregator: BTreeMap>, status: SequencerStatus, status_sender: watch::Sender, @@ -71,7 +71,7 @@ pub struct BlockCommitmentValidationRequest { pub block_hash: H256, pub allowed_pred_block_hash: H256, pub allowed_prev_commitment_hash: H256, - pub transitions_hash: H256, + pub transitions_digest: Digest, } impl From<&BlockCommitment> for BlockCommitmentValidationRequest { @@ -80,46 +80,21 @@ impl From<&BlockCommitment> for BlockCommitmentValidationRequest { block_hash: commitment.block_hash, allowed_pred_block_hash: commitment.allowed_pred_block_hash, allowed_prev_commitment_hash: commitment.allowed_prev_commitment_hash, - transitions_hash: commitment.transitions.hash(), + transitions_digest: commitment.transitions.as_digest(), } } } -impl SeqHash for BlockCommitmentValidationRequest { - fn hash(&self) -> H256 { - [ - self.block_hash, - self.allowed_pred_block_hash, - self.allowed_prev_commitment_hash, - self.transitions_hash, - ] - .as_ref() - .hash() - } -} - -#[derive(Debug, Clone, Encode, Decode)] -pub struct CodeCommitmentValidationRequest { - pub code_id: CodeId, - pub approved: bool, -} +impl AsDigest for BlockCommitmentValidationRequest { + fn as_digest(&self) -> Digest { + let mut message = Vec::with_capacity(3 * size_of::() + size_of::()); -impl From<&CodeCommitment> for CodeCommitmentValidationRequest { - fn from(commitment: &CodeCommitment) -> Self { - Self { - code_id: commitment.code_id, - approved: commitment.approved, - } - } -} + message.extend_from_slice(self.block_hash.as_bytes()); + message.extend_from_slice(self.allowed_pred_block_hash.as_bytes()); + message.extend_from_slice(self.allowed_prev_commitment_hash.as_bytes()); + message.extend_from_slice(&self.transitions_digest); -impl SeqHash for CodeCommitmentValidationRequest { - fn hash(&self) -> H256 { - CodeCommitment { - code_id: self.code_id, - approved: self.approved, - } - .hash() + message.as_digest() } } @@ -131,13 +106,13 @@ pub enum NetworkMessage { blocks: Option>, }, RequestCommitmentsValidation { - codes: BTreeMap, - blocks: BTreeMap, + codes: BTreeMap, + blocks: BTreeMap, }, ApproveCommitments { origin: Address, - codes: Option<(H256, Signature)>, - blocks: Option<(H256, Signature)>, + codes: Option<(Digest, Signature)>, + blocks: Option<(Digest, Signature)>, }, } @@ -178,11 +153,11 @@ impl Sequencer { Ok(()) } - fn pop_suitable_commitments( - commitments: &mut BTreeMap, - aggregator: &mut BTreeMap>, + fn pop_suitable_commitments( + commitments: &mut BTreeMap, + aggregator: &mut BTreeMap>, threshold: u64, - ) -> Option { + ) -> Option { let suitable_commitment_hashes: Vec<_> = commitments .iter() .filter_map(|(&hash, (_, amount))| (*amount >= threshold).then_some(hash)) @@ -200,10 +175,10 @@ impl Sequencer { suitable_commitments.push(commitment); } - let hash = suitable_commitments.hash(); + let digest = suitable_commitments.as_digest(); aggregator.insert( - hash, + digest, MultisignedCommitments { commitments: suitable_commitments, sources: Vec::new(), @@ -211,43 +186,43 @@ impl Sequencer { }, ); - Some(hash) + Some(digest) } - pub fn process_collected_commitments(&mut self) -> Result<(Option, Option)> { - let codes_hash = Self::pop_suitable_commitments( + pub fn process_collected_commitments(&mut self) -> Result<(Option, Option)> { + let codes_digest = Self::pop_suitable_commitments( &mut self.code_commitments, &mut self.codes_aggregator, self.threshold, ); - let blocks_hash = Self::pop_suitable_commitments( + let blocks_digest = Self::pop_suitable_commitments( &mut self.block_commitments, &mut self.blocks_aggregator, self.threshold, ); - Ok((codes_hash, blocks_hash)) + Ok((codes_digest, blocks_digest)) } - pub fn get_multisigned_code_commitments(&self, hash: H256) -> Option<&[CodeCommitment]> { + pub fn get_multisigned_code_commitments(&self, digest: Digest) -> Option<&[CodeCommitment]> { self.codes_aggregator - .get(&hash) + .get(&digest) .map(|multisigned| multisigned.commitments.as_slice()) } - pub fn get_multisigned_block_commitments(&self, hash: H256) -> Option<&[BlockCommitment]> { + pub fn get_multisigned_block_commitments(&self, digest: Digest) -> Option<&[BlockCommitment]> { self.blocks_aggregator - .get(&hash) + .get(&digest) .map(|multisigned| multisigned.commitments.as_slice()) } - fn process_multisigned_candidate( - aggregator: &mut BTreeMap>, + fn process_multisigned_candidate( + aggregator: &mut BTreeMap>, threshold: u64, ) -> Option> { - let candidate = aggregator.iter().find_map(|(&hash, multisigned)| { - (multisigned.sources.len() >= threshold as usize).then_some(hash) + let candidate = aggregator.iter().find_map(|(&digest, multisigned)| { + (multisigned.sources.len() >= threshold as usize).then_some(digest) })?; let multisigned = aggregator @@ -377,14 +352,14 @@ impl Sequencer { let mut processed = HashSet::new(); for commitment in aggregated.commitments { - let hash = commitment.hash(); - if processed.contains(&hash) { + let digest = commitment.as_digest(); + if processed.contains(&digest) { continue; } - processed.insert(hash); + processed.insert(digest); let (_, signatures_amount) = self .code_commitments - .entry(hash) + .entry(digest) .or_insert_with(|| (commitment, 0)); *signatures_amount += 1; } @@ -407,14 +382,14 @@ impl Sequencer { let mut processed = HashSet::new(); for commitment in aggregated.commitments { - let hash = commitment.hash(); - if processed.contains(&hash) { + let digest = commitment.as_digest(); + if processed.contains(&digest) { continue; } - processed.insert(hash); + processed.insert(digest); let (_, signatures_amount) = self .block_commitments - .entry(hash) + .entry(digest) .or_insert_with(|| (commitment, 0)); *signatures_amount += 1; } @@ -422,30 +397,27 @@ impl Sequencer { Ok(()) } - fn receive_signature( + fn receive_signature( origin: Address, - aggregated_hash: H256, + digest: Digest, signature: Signature, validators: &HashSet
, router_address: Address, - aggregator: &mut BTreeMap>, + aggregator: &mut BTreeMap>, ) -> Result<()> { if !validators.contains(&origin) { return Err(anyhow!("Unknown validator {origin}")); } - if AggregatedCommitments::::recover_digest( - aggregated_hash, - signature.clone(), - router_address, - )? != origin + if AggregatedCommitments::::recover_digest(digest, signature.clone(), router_address)? + != origin { return Err(anyhow!("Invalid signature")); } let multisigned = aggregator - .get_mut(&aggregated_hash) - .ok_or(anyhow!("Aggregated commitment {aggregated_hash} not found"))?; + .get_mut(&digest) + .ok_or(anyhow!("Aggregated commitment {digest:?} not found"))?; multisigned.sources.push(origin); multisigned.signatures.push(signature); @@ -456,12 +428,12 @@ impl Sequencer { pub fn receive_codes_signature( &mut self, origin: Address, - aggregated_hash: H256, + digest: Digest, signature: Signature, ) -> Result<()> { Self::receive_signature( origin, - aggregated_hash, + digest, signature, &self.validators, self.ethereum.router().address(), @@ -472,12 +444,12 @@ impl Sequencer { pub fn receive_blocks_signature( &mut self, origin: Address, - aggregated_hash: H256, + digest: Digest, signature: Signature, ) -> Result<()> { Self::receive_signature( origin, - aggregated_hash, + digest, signature, &self.validators, self.ethereum.router().address(), diff --git a/ethexe/signer/src/digest.rs b/ethexe/signer/src/digest.rs new file mode 100644 index 00000000000..244ac5efc7f --- /dev/null +++ b/ethexe/signer/src/digest.rs @@ -0,0 +1,154 @@ +use ethexe_common::{BlockCommitment, CodeCommitment, OutgoingMessage, StateTransition}; +use gprimitives::{MessageId, H256}; +use parity_scale_codec::Encode; +use sha3::Digest as _; + +use crate::Address; + +pub type Digest = [u8; 32]; + +pub trait AsDigest { + fn as_digest(&self) -> Digest; +} + +impl AsDigest for Digest { + fn as_digest(&self) -> Digest { + *self + } +} + +impl AsDigest for [T] { + fn as_digest(&self) -> Digest { + let mut message = Vec::with_capacity(self.len() * size_of::()); + + for item in self.iter() { + message.extend_from_slice(item.as_digest().as_ref()); + } + + message.as_digest() + } +} + +impl AsDigest for Vec { + fn as_digest(&self) -> Digest { + self.as_slice().as_digest() + } +} + +impl AsDigest for [u8] { + fn as_digest(&self) -> Digest { + sha3::Keccak256::digest(self).into() + } +} + +impl AsDigest for CodeCommitment { + fn as_digest(&self) -> Digest { + self.encode().as_digest() + } +} + +impl AsDigest for StateTransition { + fn as_digest(&self) -> Digest { + let mut outgoing_bytes = + Vec::with_capacity(self.outgoing_messages.len() * size_of::()); + + for OutgoingMessage { + message_id, + destination, + payload, + value, + reply_details, + } in self.outgoing_messages.iter() + { + let reply_details = reply_details.unwrap_or_default(); + let mut outgoing_message = Vec::with_capacity( + size_of::() + + size_of::
() + + payload.inner().len() + + size_of::() + + size_of::() + + size_of::<[u8; 4]>(), + ); + + outgoing_message.extend_from_slice(&message_id.into_bytes()); + outgoing_message.extend_from_slice(&destination.into_bytes()[12..]); + outgoing_message.extend_from_slice(payload.inner()); + outgoing_message.extend_from_slice(&value.to_be_bytes()); + outgoing_message.extend_from_slice(&reply_details.to_message_id().into_bytes()); + outgoing_message.extend(&reply_details.to_reply_code().to_bytes()); + + outgoing_bytes.extend_from_slice(outgoing_message.as_digest().as_ref()); + } + + let mut message = + Vec::with_capacity(size_of::
() + 2 * size_of::() + size_of::()); + + message.extend_from_slice(&self.actor_id.into_bytes()[12..]); + message.extend_from_slice(self.old_state_hash.as_bytes()); + message.extend_from_slice(self.new_state_hash.as_bytes()); + message.extend_from_slice(outgoing_bytes.as_digest().as_ref()); + + message.as_digest() + } +} + +impl AsDigest for BlockCommitment { + fn as_digest(&self) -> Digest { + let mut message = Vec::with_capacity( + size_of::() + + size_of::() + + size_of::() + + self.transitions.len() * size_of::(), + ); + + message.extend_from_slice(self.block_hash.as_bytes()); + message.extend_from_slice(self.allowed_pred_block_hash.as_bytes()); + message.extend_from_slice(self.allowed_prev_commitment_hash.as_bytes()); + message.extend_from_slice(self.transitions.as_digest().as_ref()); + + message.as_digest() + } +} + +#[cfg(test)] +mod tests { + use std::vec; + + use ethexe_common::gear_core::message::Payload; + use gprimitives::{ActorId, CodeId}; + + use super::*; + + #[test] + fn as_digest() { + let _digest = CodeCommitment { + code_id: CodeId::from(0), + approved: true, + } + .as_digest(); + + let state_transition = StateTransition { + actor_id: ActorId::from(0), + old_state_hash: H256::from([0; 32]), + new_state_hash: H256::from([1; 32]), + outgoing_messages: vec![OutgoingMessage { + message_id: MessageId::from(0), + destination: ActorId::from(0), + payload: Payload::try_from(b"Hello, World!".to_vec()).unwrap(), + value: 0, + reply_details: None, + }], + }; + let _digest = state_transition.as_digest(); + + let transitions = vec![state_transition.clone(), state_transition]; + + let block_commitment = BlockCommitment { + block_hash: H256::from([0; 32]), + allowed_pred_block_hash: H256::from([1; 32]), + allowed_prev_commitment_hash: H256::from([2; 32]), + transitions: transitions.clone(), + }; + let _digest = block_commitment.as_digest(); + } +} diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index 53f814294c9..284dd4b651f 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -18,14 +18,17 @@ //! Signer library for ethexe. -use anyhow::{anyhow, Context as _, Result}; +mod digest; +mod signature; + +pub use digest::{AsDigest, Digest}; +pub use signature::Signature; + +use anyhow::{anyhow, Result}; use gprimitives::ActorId; use parity_scale_codec::{Decode, Encode}; -use secp256k1::{ - ecdsa::{RecoverableSignature, RecoveryId}, - Message, -}; use sha3::Digest as _; +use signature::RawSignature; use std::{fmt, fs, path::PathBuf, str::FromStr}; #[derive(Debug, Clone, Copy, Eq, PartialEq)] @@ -62,9 +65,6 @@ impl TryFrom for Address { } } -#[derive(Clone, Encode, Decode, PartialEq, Eq, Hash)] -pub struct Signature(pub [u8; 65]); - pub struct Hash([u8; 32]); impl From for gprimitives::H256 { @@ -150,24 +150,6 @@ impl fmt::Debug for Address { } } -impl fmt::Debug for Signature { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "0x{}", self.to_hex()) - } -} - -impl Signature { - pub fn to_hex(&self) -> String { - hex::encode(self.0) - } -} - -impl From<[u8; 65]> for Signature { - fn from(bytes: [u8; 65]) -> Self { - Self(bytes) - } -} - impl fmt::Display for PublicKey { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", self.to_hex()) @@ -180,39 +162,6 @@ impl fmt::Display for Address { } } -impl fmt::Display for Signature { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", self.to_hex()) - } -} - -impl Default for Signature { - fn default() -> Self { - Signature([0u8; 65]) - } -} - -impl TryFrom for RecoverableSignature { - type Error = anyhow::Error; - - fn try_from(sig: Signature) -> Result { - RecoverableSignature::from_compact( - sig.0[..64].as_ref(), - RecoveryId::from_i32((sig.0[64] - 27) as i32)?, - ) - .map_err(Into::into) - } -} - -impl Signature { - pub fn recover_digest(&self, digest: [u8; 32]) -> Result { - let sig = self.clone().try_into()?; - let public_key = - secp256k1::global::SECP256K1.recover_ecdsa(&Message::from_digest(digest), &sig)?; - Ok(PublicKey::from_bytes(public_key.serialize())) - } -} - #[derive(Debug, Clone)] pub struct Signer { key_store: PathBuf, @@ -225,30 +174,16 @@ impl Signer { Ok(Self { key_store }) } - pub fn raw_sign_digest(&self, public_key: PublicKey, digest: [u8; 32]) -> Result { - let secret_key = self.get_private_key(public_key)?; - - let secp_secret_key = secp256k1::SecretKey::from_slice(&secret_key.0) - .with_context(|| "Invalid secret key format for {:?}")?; - - let message = Message::from_digest(digest); - - let recsig = - secp256k1::global::SECP256K1.sign_ecdsa_recoverable(&message, &secp_secret_key); - - let mut r = Signature::default(); - let (recid, sig) = recsig.serialize_compact(); - r.0[..64].copy_from_slice(&sig); - r.0[64] = recid.to_i32() as u8; + pub fn raw_sign_digest(&self, public_key: PublicKey, digest: [u8; 32]) -> Result { + let private_key = self.get_private_key(public_key)?; - Ok(r) + RawSignature::create_for_digest(private_key, digest) } pub fn sign_digest(&self, public_key: PublicKey, digest: [u8; 32]) -> Result { - let mut r = self.raw_sign_digest(public_key, digest)?; - r.0[64] += 27; + let private_key = self.get_private_key(public_key)?; - Ok(r) + Signature::create_for_digest(private_key, digest) } pub fn sign(&self, public_key: PublicKey, data: &[u8]) -> Result { @@ -382,7 +317,7 @@ mod tests { let hash = keccak256(message); // Recover the address using the signature - let ethers_sig = ethers::core::types::Signature::try_from(&signature.0[..]) + let ethers_sig = ethers::core::types::Signature::try_from(signature.as_ref()) .expect("failed to parse sig"); let recovered_address = ethers_sig.recover(hash).expect("Failed to recover address"); @@ -419,7 +354,7 @@ mod tests { let hash = keccak256(message); // Recover the address using the signature - let ethers_sig = ethers::core::types::Signature::try_from(&signature.0[..]) + let ethers_sig = ethers::core::types::Signature::try_from(signature.as_ref()) .expect("failed to parse sig"); let recovered_address = ethers_sig.recover(hash).expect("Failed to recover address"); @@ -465,7 +400,7 @@ mod tests { let hash = keccak256(message); let recovered_public_key = signature - .recover_digest(hash) + .recover_from_digest(hash) .expect("Failed to recover public key"); assert_eq!(recovered_public_key, public_key); diff --git a/ethexe/signer/src/signature.rs b/ethexe/signer/src/signature.rs new file mode 100644 index 00000000000..cea64749f7d --- /dev/null +++ b/ethexe/signer/src/signature.rs @@ -0,0 +1,138 @@ +use crate::{digest::AsDigest, PrivateKey, PublicKey}; +use anyhow::{Context, Result}; +use parity_scale_codec::{Decode, Encode}; +use secp256k1::{ + ecdsa::{RecoverableSignature, RecoveryId}, + Message, +}; +use std::fmt; + +pub struct RawSignature([u8; 65]); + +impl RawSignature { + pub fn create_for_digest(private_key: PrivateKey, digest: [u8; 32]) -> Result { + let secp_secret_key = secp256k1::SecretKey::from_slice(&private_key.0) + .with_context(|| "Invalid secret key format for {:?}")?; + + let message = Message::from_digest(digest); + + let recoverable = + secp256k1::global::SECP256K1.sign_ecdsa_recoverable(&message, &secp_secret_key); + + let (id, signature) = recoverable.serialize_compact(); + let mut bytes = [0u8; 65]; + bytes[..64].copy_from_slice(signature.as_ref()); + bytes[64] = id.to_i32() as u8; + Ok(RawSignature(bytes)) + } +} + +impl From for [u8; 65] { + fn from(sig: RawSignature) -> [u8; 65] { + sig.0 + } +} + +impl AsRef<[u8]> for RawSignature { + fn as_ref(&self) -> &[u8] { + &self.0 + } +} + +impl From for RawSignature { + fn from(mut sig: Signature) -> RawSignature { + sig.0[64] -= 27; + RawSignature(sig.0) + } +} + +#[derive(Clone, Encode, Decode, PartialEq, Eq)] +pub struct Signature([u8; 65]); + +impl Signature { + pub fn to_hex(&self) -> String { + hex::encode(self.0) + } + + pub fn recover_from_digest(&self, digest: [u8; 32]) -> Result { + let sig = self.clone().try_into()?; + let public_key = + secp256k1::global::SECP256K1.recover_ecdsa(&Message::from_digest(digest), &sig)?; + Ok(PublicKey::from_bytes(public_key.serialize())) + } + + pub fn create_for_digest(private_key: PrivateKey, digest: [u8; 32]) -> Result { + let raw_signature = RawSignature::create_for_digest(private_key, digest)?; + Ok(raw_signature.into()) + } +} + +impl From for Signature { + fn from(mut sig: RawSignature) -> Self { + sig.0[64] += 27; + Signature(sig.0) + } +} + +impl From for [u8; 65] { + fn from(sig: Signature) -> [u8; 65] { + sig.0 + } +} + +impl AsRef<[u8]> for Signature { + fn as_ref(&self) -> &[u8] { + &self.0 + } +} + +impl fmt::Debug for Signature { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "0x{}", self.to_hex()) + } +} + +impl fmt::Display for Signature { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.to_hex()) + } +} + +impl Default for Signature { + fn default() -> Self { + Signature([0u8; 65]) + } +} + +impl TryFrom for RecoverableSignature { + type Error = anyhow::Error; + + fn try_from(sig: Signature) -> Result { + RecoverableSignature::from_compact( + sig.0[..64].as_ref(), + RecoveryId::from_i32((sig.0[64] - 27) as i32)?, + ) + .map_err(Into::into) + } +} + +pub struct SignedData { + pub data: D, + signature: Signature, +} + +impl SignedData { + pub fn create(data: D, private_key: PrivateKey) -> Result { + let digest = data.as_digest(); + let signature = Signature::create_for_digest(private_key, digest)?; + Ok(SignedData { data, signature }) + } + + pub fn signature(&self) -> &Signature { + &self.signature + } + + pub fn into_parts(self) -> (D, Signature) { + (self.data, self.signature) + } +} diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 562b0d2a853..665126cdd67 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -16,16 +16,15 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +use std::ops::Not; + use anyhow::{anyhow, Result}; use ethexe_common::{ db::{BlockMetaStorage, CodesStorage}, BlockCommitment, CodeCommitment, }; -use ethexe_sequencer::{ - AggregatedCommitments, BlockCommitmentValidationRequest, CodeCommitmentValidationRequest, - SeqHash, -}; -use ethexe_signer::{Address, PublicKey, Signature, Signer}; +use ethexe_sequencer::{AggregatedCommitments, BlockCommitmentValidationRequest}; +use ethexe_signer::{Address, AsDigest, PublicKey, Signature, Signer}; use gprimitives::H256; pub struct Config { @@ -56,7 +55,7 @@ impl Validator { self.pub_key.to_address() } - fn aggregate(&self, commitments: Vec) -> Result> { + fn aggregate(&self, commitments: Vec) -> Result> { AggregatedCommitments::aggregate_commitments( commitments, &self.signer, @@ -82,9 +81,9 @@ impl Validator { pub fn validate_code_commitments( &mut self, db: impl CodesStorage, - requests: impl IntoIterator, + requests: impl IntoIterator, ) -> Result { - let mut hashes = Vec::new(); + let mut digests = Vec::new(); for request in requests.into_iter() { if db .code_approved(request.code_id) @@ -93,11 +92,11 @@ impl Validator { { return Err(anyhow!("approved mismatch")); } - hashes.push(request.hash()); + digests.push(request.as_digest()); } AggregatedCommitments::::sign_commitments( - hashes.hash(), + digests.as_digest(), &self.signer, self.pub_key, self.router_address, @@ -109,53 +108,54 @@ impl Validator { db: impl BlockMetaStorage, requests: impl IntoIterator, ) -> Result { - let mut hashes = Vec::new(); + let mut digests = Vec::new(); for request in requests.into_iter() { let BlockCommitmentValidationRequest { block_hash, allowed_pred_block_hash, allowed_prev_commitment_hash, - transitions_hash, + transitions_digest: transitions_hash, } = request; - if !db + if db .block_end_state_is_valid(block_hash) .ok_or(anyhow!("block not found"))? + .not() { return Err(anyhow!("block is not validated")); } - let outcomes = db + if db .block_outcome(block_hash) - .ok_or(anyhow!("block not found"))?; - let db_transitions_hash = outcomes + .ok_or(anyhow!("block not found"))? .iter() - .map(SeqHash::hash) + .map(AsDigest::as_digest) .collect::>() - .hash(); - if db_transitions_hash != transitions_hash { + .as_digest() + .ne(&transitions_hash) + { return Err(anyhow!("block transitions hash mismatch")); } if db .block_prev_commitment(block_hash) .ok_or(anyhow!("block not found"))? - != allowed_prev_commitment_hash + .ne(&allowed_prev_commitment_hash) { return Err(anyhow!("block prev commitment hash mismatch")); } - if !Self::verify_is_predecessor(&db, allowed_pred_block_hash, block_hash, None)? { + if Self::verify_is_predecessor(&db, allowed_pred_block_hash, block_hash, None)?.not() { return Err(anyhow!( "{block_hash} is not a predecessor of {allowed_pred_block_hash}" )); } - hashes.push(request.hash()); + digests.push(request.as_digest()); } AggregatedCommitments::::sign_commitments( - hashes.hash(), + digests.as_digest(), &self.signer, self.pub_key, self.router_address, From 0e0de5e5a97a2ba12d5038677114b335ccc8c24d Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Sun, 4 Aug 2024 22:55:36 +0200 Subject: [PATCH 06/44] sequencer refactoring --- ethexe/sequencer/src/lib.rs | 292 ++++++++++++++++++------------------ 1 file changed, 147 insertions(+), 145 deletions(-) diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 8665375943c..4bdd6bd610a 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -28,7 +28,10 @@ use ethexe_observer::Event; use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; -use std::collections::{BTreeMap, HashSet}; +use std::{ + collections::{BTreeMap, HashSet}, + ops::Not, +}; use tokio::sync::watch; pub use agro::AggregatedCommitments; @@ -153,42 +156,6 @@ impl Sequencer { Ok(()) } - fn pop_suitable_commitments( - commitments: &mut BTreeMap, - aggregator: &mut BTreeMap>, - threshold: u64, - ) -> Option { - let suitable_commitment_hashes: Vec<_> = commitments - .iter() - .filter_map(|(&hash, (_, amount))| (*amount >= threshold).then_some(hash)) - .collect(); - - if suitable_commitment_hashes.is_empty() { - return None; - } - - let mut suitable_commitments = Vec::new(); - for hash in suitable_commitment_hashes.iter() { - let (commitment, _) = commitments - .remove(hash) - .unwrap_or_else(|| unreachable!("Must be in the map")); - suitable_commitments.push(commitment); - } - - let digest = suitable_commitments.as_digest(); - - aggregator.insert( - digest, - MultisignedCommitments { - commitments: suitable_commitments, - sources: Vec::new(), - signatures: Vec::new(), - }, - ); - - Some(digest) - } - pub fn process_collected_commitments(&mut self) -> Result<(Option, Option)> { let codes_digest = Self::pop_suitable_commitments( &mut self.code_commitments, @@ -205,37 +172,6 @@ impl Sequencer { Ok((codes_digest, blocks_digest)) } - pub fn get_multisigned_code_commitments(&self, digest: Digest) -> Option<&[CodeCommitment]> { - self.codes_aggregator - .get(&digest) - .map(|multisigned| multisigned.commitments.as_slice()) - } - - pub fn get_multisigned_block_commitments(&self, digest: Digest) -> Option<&[BlockCommitment]> { - self.blocks_aggregator - .get(&digest) - .map(|multisigned| multisigned.commitments.as_slice()) - } - - fn process_multisigned_candidate( - aggregator: &mut BTreeMap>, - threshold: u64, - ) -> Option> { - let candidate = aggregator.iter().find_map(|(&digest, multisigned)| { - (multisigned.sources.len() >= threshold as usize).then_some(digest) - })?; - - let multisigned = aggregator - .remove(&candidate) - .unwrap_or_else(|| unreachable!("Must be in the map")); - - if multisigned.commitments.is_empty() { - unreachable!("Guarantied to be not empty"); - } - - Some(multisigned) - } - pub async fn submit_multisigned_commitments(&mut self) -> Result<()> { let mut codes_future = None; let mut blocks_future = None; @@ -286,6 +222,141 @@ impl Sequencer { Ok(()) } + pub fn receive_code_commitments( + &mut self, + origin: Address, + aggregated: AggregatedCommitments, + ) -> Result<()> { + Self::receive_commitments( + origin, + aggregated, + &self.validators, + self.ethereum.router().address(), + &mut self.code_commitments, + ) + } + + pub fn receive_block_commitments( + &mut self, + origin: Address, + aggregated: AggregatedCommitments, + ) -> Result<()> { + Self::receive_commitments( + origin, + aggregated, + &self.validators, + self.ethereum.router().address(), + &mut self.block_commitments, + ) + } + + pub fn receive_codes_signature( + &mut self, + origin: Address, + digest: Digest, + signature: Signature, + ) -> Result<()> { + Self::receive_signature( + origin, + digest, + signature, + &self.validators, + self.ethereum.router().address(), + &mut self.codes_aggregator, + ) + } + + pub fn receive_blocks_signature( + &mut self, + origin: Address, + digest: Digest, + signature: Signature, + ) -> Result<()> { + Self::receive_signature( + origin, + digest, + signature, + &self.validators, + self.ethereum.router().address(), + &mut self.blocks_aggregator, + ) + } + + pub fn address(&self) -> Address { + self.key.to_address() + } + + pub fn get_status_receiver(&self) -> watch::Receiver { + self.status_sender.subscribe() + } + + pub fn get_multisigned_code_commitments(&self, digest: Digest) -> Option<&[CodeCommitment]> { + self.codes_aggregator + .get(&digest) + .map(|multisigned| multisigned.commitments.as_slice()) + } + + pub fn get_multisigned_block_commitments(&self, digest: Digest) -> Option<&[BlockCommitment]> { + self.blocks_aggregator + .get(&digest) + .map(|multisigned| multisigned.commitments.as_slice()) + } + + fn pop_suitable_commitments( + commitments: &mut BTreeMap, + aggregator: &mut BTreeMap>, + threshold: u64, + ) -> Option { + let suitable_commitment_hashes: Vec<_> = commitments + .iter() + .filter_map(|(&hash, (_, amount))| (*amount >= threshold).then_some(hash)) + .collect(); + + if suitable_commitment_hashes.is_empty() { + return None; + } + + let mut suitable_commitments = Vec::new(); + for hash in suitable_commitment_hashes.iter() { + let (commitment, _) = commitments + .remove(hash) + .unwrap_or_else(|| unreachable!("Must be in the map")); + suitable_commitments.push(commitment); + } + + let digest = suitable_commitments.as_digest(); + + aggregator.insert( + digest, + MultisignedCommitments { + commitments: suitable_commitments, + sources: Vec::new(), + signatures: Vec::new(), + }, + ); + + Some(digest) + } + + fn process_multisigned_candidate( + aggregator: &mut BTreeMap>, + threshold: u64, + ) -> Option> { + let candidate = aggregator.iter().find_map(|(&digest, multisigned)| { + (multisigned.sources.len() >= threshold as usize).then_some(digest) + })?; + + let multisigned = aggregator + .remove(&candidate) + .unwrap_or_else(|| unreachable!("Must be in the map")); + + if multisigned.commitments.is_empty() { + unreachable!("Guarantied to be not empty"); + } + + Some(multisigned) + } + async fn submit_codes_commitment( &self, signed_commitments: MultisignedCommitments, @@ -337,46 +408,18 @@ impl Sequencer { Ok(()) } - pub fn receive_code_commitments( - &mut self, + fn receive_commitments( origin: Address, - aggregated: AggregatedCommitments, + aggregated: AggregatedCommitments, + validators: &HashSet
, + router_address: Address, + commitments_storage: &mut BTreeMap, ) -> Result<()> { - if !self.validators.contains(&origin) { + if validators.contains(&origin).not() { return Err(anyhow!("Unknown validator {origin}")); } - if !aggregated.verify_origin(self.ethereum.router().address(), origin)? { - return Err(anyhow!("Signature verification failed for {origin}")); - } - - let mut processed = HashSet::new(); - for commitment in aggregated.commitments { - let digest = commitment.as_digest(); - if processed.contains(&digest) { - continue; - } - processed.insert(digest); - let (_, signatures_amount) = self - .code_commitments - .entry(digest) - .or_insert_with(|| (commitment, 0)); - *signatures_amount += 1; - } - - Ok(()) - } - - pub fn receive_block_commitments( - &mut self, - origin: Address, - aggregated: AggregatedCommitments, - ) -> Result<()> { - log::debug!("Received transition commitment from {}", origin); - if !self.validators.contains(&origin) { - return Err(anyhow!("Unknown validator {origin}")); - } - if !aggregated.verify_origin(self.ethereum.router().address(), origin)? { + if aggregated.verify_origin(router_address, origin)?.not() { return Err(anyhow!("Signature verification failed for {origin}")); } @@ -387,8 +430,7 @@ impl Sequencer { continue; } processed.insert(digest); - let (_, signatures_amount) = self - .block_commitments + let (_, signatures_amount) = commitments_storage .entry(digest) .or_insert_with(|| (commitment, 0)); *signatures_amount += 1; @@ -425,46 +467,6 @@ impl Sequencer { Ok(()) } - pub fn receive_codes_signature( - &mut self, - origin: Address, - digest: Digest, - signature: Signature, - ) -> Result<()> { - Self::receive_signature( - origin, - digest, - signature, - &self.validators, - self.ethereum.router().address(), - &mut self.codes_aggregator, - ) - } - - pub fn receive_blocks_signature( - &mut self, - origin: Address, - digest: Digest, - signature: Signature, - ) -> Result<()> { - Self::receive_signature( - origin, - digest, - signature, - &self.validators, - self.ethereum.router().address(), - &mut self.blocks_aggregator, - ) - } - - pub fn address(&self) -> Address { - self.key.to_address() - } - - pub fn get_status_receiver(&self) -> watch::Receiver { - self.status_sender.subscribe() - } - fn update_status(&mut self, update_fn: F) where F: FnOnce(&mut SequencerStatus), From b36f21e598bd7fc13d9ecf90e6489dfc30bee707 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Sun, 4 Aug 2024 23:19:52 +0200 Subject: [PATCH 07/44] sequencer refactoring 2 --- ethexe/sequencer/src/agro.rs | 35 ++++++++++++++++------------------- ethexe/sequencer/src/lib.rs | 33 ++++++++++++++++----------------- 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 2a07bac2593..60bad791952 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -46,24 +46,29 @@ impl AggregatedCommitments { } pub fn sign_commitments( - commitments_hash: Digest, + commitments_digest: Digest, signer: &Signer, pub_key: PublicKey, router_address: Address, ) -> Result { - let buffer = Self::buffer(commitments_hash, router_address); - signer.sign_digest(pub_key, ethexe_signer::hash(&buffer).to_fixed_bytes()) + signer.sign_digest(pub_key, Self::digest(commitments_digest, router_address)) + } + + pub fn recover(&self, router_address: Address) -> Result
{ + Self::recover_digest( + self.commitments.as_digest(), + &self.signature, + router_address, + ) } pub fn recover_digest( - digest: Digest, - signature: Signature, + commitments_digest: Digest, + signature: &Signature, router_address: Address, ) -> Result
{ - let buffer = Self::buffer(digest, router_address); - let digest = ethexe_signer::hash(&buffer).to_fixed_bytes(); signature - .recover_from_digest(digest) + .recover_from_digest(Self::digest(commitments_digest, router_address)) .map(|k| k.to_address()) } @@ -75,22 +80,14 @@ impl AggregatedCommitments { self.commitments.is_empty() } - pub fn verify_origin(&self, router_address: Address, origin: Address) -> Result { - let buffer = Self::buffer(self.commitments.as_digest(), router_address); - Ok(self - .signature - .recover_from_digest(ethexe_signer::hash(&buffer).to_fixed_bytes())? - .to_address() - == origin) - } - - fn buffer(digest: Digest, router_address: Address) -> Vec { + fn digest(commitments_digest: Digest, router_address: Address) -> Digest { [ [0x19, 0x00].as_ref(), router_address.0.as_ref(), - digest.as_ref(), + commitments_digest.as_ref(), ] .concat() + .as_digest() } } diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 4bdd6bd610a..53add8c71d6 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -59,8 +59,8 @@ pub struct Sequencer { validators: HashSet
, threshold: u64, - code_commitments: BTreeMap, - block_commitments: BTreeMap, + code_commitments: BTreeMap)>, + block_commitments: BTreeMap)>, codes_aggregator: BTreeMap>, blocks_aggregator: BTreeMap>, @@ -303,28 +303,29 @@ impl Sequencer { } fn pop_suitable_commitments( - commitments: &mut BTreeMap, + commitments: &mut BTreeMap)>, aggregator: &mut BTreeMap>, threshold: u64, ) -> Option { - let suitable_commitment_hashes: Vec<_> = commitments + let suitable_digests: Vec<_> = commitments .iter() - .filter_map(|(&hash, (_, amount))| (*amount >= threshold).then_some(hash)) + .filter_map(|(&hash, (_, set))| (set.len() as u64 >= threshold).then_some(hash)) .collect(); - if suitable_commitment_hashes.is_empty() { + if suitable_digests.is_empty() { return None; } let mut suitable_commitments = Vec::new(); - for hash in suitable_commitment_hashes.iter() { + for hash in suitable_digests.iter() { let (commitment, _) = commitments .remove(hash) .unwrap_or_else(|| unreachable!("Must be in the map")); suitable_commitments.push(commitment); } - let digest = suitable_commitments.as_digest(); + let digest = suitable_digests.as_digest(); + debug_assert_eq!(digest, suitable_commitments.as_digest()); aggregator.insert( digest, @@ -413,27 +414,26 @@ impl Sequencer { aggregated: AggregatedCommitments, validators: &HashSet
, router_address: Address, - commitments_storage: &mut BTreeMap, + commitments_storage: &mut BTreeMap)>, ) -> Result<()> { if validators.contains(&origin).not() { return Err(anyhow!("Unknown validator {origin}")); } - if aggregated.verify_origin(router_address, origin)?.not() { + if aggregated.recover(router_address)? != origin { return Err(anyhow!("Signature verification failed for {origin}")); } let mut processed = HashSet::new(); for commitment in aggregated.commitments { let digest = commitment.as_digest(); - if processed.contains(&digest) { + if !processed.insert(digest) { continue; } - processed.insert(digest); - let (_, signatures_amount) = commitments_storage + let (_, set) = commitments_storage .entry(digest) - .or_insert_with(|| (commitment, 0)); - *signatures_amount += 1; + .or_insert_with(|| (commitment, HashSet::new())); + set.insert(origin); } Ok(()) @@ -451,8 +451,7 @@ impl Sequencer { return Err(anyhow!("Unknown validator {origin}")); } - if AggregatedCommitments::::recover_digest(digest, signature.clone(), router_address)? - != origin + if AggregatedCommitments::::recover_digest(digest, &signature, router_address)? != origin { return Err(anyhow!("Invalid signature")); } From 10f68282c2c112b7f607f4ef63ee9a6db77b202a Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Tue, 6 Aug 2024 17:44:42 +0200 Subject: [PATCH 08/44] change to commitments candidate --- Cargo.lock | 1 + ethexe/cli/src/service.rs | 24 ++-- ethexe/sequencer/Cargo.toml | 3 + ethexe/sequencer/src/agro.rs | 249 +++++++++++++---------------------- ethexe/sequencer/src/lib.rs | 201 +++++++++++++++++----------- ethexe/validator/src/lib.rs | 6 +- 6 files changed, 234 insertions(+), 250 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5c06f91d8c1..5045b14ae92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5124,6 +5124,7 @@ dependencies = [ "gprimitives", "log", "parity-scale-codec", + "tempfile", "tokio", ] diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 9275dedca2b..be8551b8e42 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -587,23 +587,13 @@ impl Service { } let code_requests: BTreeMap<_, _> = codes_hash - .and_then(|hash| sequencer.get_multisigned_code_commitments(hash)) - .map(|commitments| { - commitments - .iter() - .map(|c| (c.as_digest(), c.clone())) - .collect() - }) + .and_then(|hash| sequencer.get_candidate_code_commitments(hash)) + .map(|commitments| commitments.map(|c| (c.as_digest(), c.clone())).collect()) .unwrap_or_default(); let block_requests: BTreeMap<_, _> = blocks_hash - .and_then(|hash| sequencer.get_multisigned_block_commitments(hash)) - .map(|commitments| { - commitments - .iter() - .map(|c| (c.as_digest(), c.into())) - .collect() - }) + .and_then(|hash| sequencer.get_candidate_block_commitments(hash)) + .map(|commitments| commitments.map(|c| (c.as_digest(), c.into())).collect()) .unwrap_or_default(); if let Some(network_sender) = maybe_network_sender { @@ -617,7 +607,11 @@ impl Service { } if let Some(validator) = maybe_validator { - log::debug!("Validating aggregated commitments on local validator..."); + log::debug!( + "Validate local ({}) code commitments and ({}) block commitments...", + code_requests.len(), + block_requests.len() + ); let origin = validator.address(); diff --git a/ethexe/sequencer/Cargo.toml b/ethexe/sequencer/Cargo.toml index 2a1bdd6d6a4..8548f705177 100644 --- a/ethexe/sequencer/Cargo.toml +++ b/ethexe/sequencer/Cargo.toml @@ -23,3 +23,6 @@ log.workspace = true anyhow.workspace = true futures.workspace = true tokio.workspace = true + +[dev-dependencies] +tempfile.workspace = true diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 60bad791952..7ecaa792a1b 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -36,8 +36,7 @@ impl AggregatedCommitments { pub_key: PublicKey, router_address: Address, ) -> Result> { - let signature = - Self::sign_commitments(commitments.as_digest(), signer, pub_key, router_address)?; + let signature = sign_digest(commitments.as_digest(), signer, pub_key, router_address)?; Ok(AggregatedCommitments { commitments, @@ -45,33 +44,14 @@ impl AggregatedCommitments { }) } - pub fn sign_commitments( - commitments_digest: Digest, - signer: &Signer, - pub_key: PublicKey, - router_address: Address, - ) -> Result { - signer.sign_digest(pub_key, Self::digest(commitments_digest, router_address)) - } - pub fn recover(&self, router_address: Address) -> Result
{ - Self::recover_digest( + recover_from_digest( self.commitments.as_digest(), &self.signature, router_address, ) } - pub fn recover_digest( - commitments_digest: Digest, - signature: &Signature, - router_address: Address, - ) -> Result
{ - signature - .recover_from_digest(Self::digest(commitments_digest, router_address)) - .map(|k| k.to_address()) - } - pub fn len(&self) -> usize { self.commitments.len() } @@ -79,16 +59,35 @@ impl AggregatedCommitments { pub fn is_empty(&self) -> bool { self.commitments.is_empty() } +} - fn digest(commitments_digest: Digest, router_address: Address) -> Digest { - [ - [0x19, 0x00].as_ref(), - router_address.0.as_ref(), - commitments_digest.as_ref(), - ] - .concat() - .as_digest() - } +pub fn sign_digest( + commitments_digest: Digest, + signer: &Signer, + pub_key: PublicKey, + router_address: Address, +) -> Result { + signer.sign_digest(pub_key, digest(commitments_digest, router_address)) +} + +pub fn recover_from_digest( + commitments_digest: Digest, + signature: &Signature, + router_address: Address, +) -> Result
{ + signature + .recover_from_digest(digest(commitments_digest, router_address)) + .map(|k| k.to_address()) +} + +fn digest(commitments_digest: Digest, router_address: Address) -> Digest { + [ + [0x19, 0x00].as_ref(), + router_address.0.as_ref(), + commitments_digest.as_ref(), + ] + .concat() + .as_digest() } #[derive(Clone)] @@ -108,129 +107,65 @@ impl fmt::Debug for MultisignedCommitments { } } -// #[cfg(test)] -// mod tests { - -// use super::*; -// use ethexe_signer::{Address, Signature}; -// use gear_core::ids::ActorId; - -// #[derive(Clone, Debug)] -// pub struct MyComm([u8; 2]); - -// impl SeqHash for MyComm { -// fn hash(&self) -> H256 { -// ethexe_signer::hash(&self.0[..]) -// } -// } - -// fn signer(id: u8) -> Address { -// let mut array = [0; 20]; -// array[0] = id; -// Address(array) -// } - -// fn signature(id: u8) -> Signature { -// let mut array = [0; 65]; -// array[0] = id; -// Signature::from(array) -// } - -// #[allow(unused)] -// fn block_hash(id: u8) -> H256 { -// let mut array = [0; 32]; -// array[0] = id; -// H256::from(array) -// } - -// #[allow(unused)] -// fn pid(id: u8) -> ActorId { -// let mut array = [0; 32]; -// array[0] = id; -// ActorId::from(array) -// } - -// #[allow(unused)] -// fn state_id(id: u8) -> H256 { -// let mut array = [0; 32]; -// array[0] = id; -// H256::from(array) -// } - -// fn gen_commitment( -// signature_id: u8, -// commitments: Vec<(u8, u8)>, -// ) -> AggregatedCommitments { -// let commitments = commitments -// .into_iter() -// .map(|v| MyComm([v.0, v.1])) -// .collect(); - -// AggregatedCommitments { -// commitments, -// signature: signature(signature_id), -// } -// } - -// #[test] -// fn simple() { -// // aggregator with threshold 1 -// let mut aggregator = Aggregator::new(1); - -// aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); - -// let root = aggregator -// .find_root() -// .expect("Failed to generate root commitment"); - -// assert_eq!(root.signatures.len(), 1); -// assert_eq!(root.commitments.len(), 1); - -// // aggregator with threshold 1 -// let mut aggregator = Aggregator::new(1); - -// aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); -// aggregator.push(signer(1), gen_commitment(1, vec![(1, 1), (2, 2)])); - -// let root = aggregator -// .find_root() -// .expect("Failed to generate root commitment"); - -// assert_eq!(root.signatures.len(), 1); - -// // should be latest commitment -// assert_eq!(root.commitments.len(), 2); -// } - -// #[test] -// fn more_threshold() { -// // aggregator with threshold 2 -// let mut aggregator = Aggregator::new(2); - -// aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); -// aggregator.push(signer(2), gen_commitment(0, vec![(1, 1)])); -// aggregator.push(signer(2), gen_commitment(0, vec![(1, 1), (2, 2)])); - -// let root = aggregator -// .find_root() -// .expect("Failed to generate root commitment"); - -// assert_eq!(root.signatures.len(), 2); -// assert_eq!(root.commitments.len(), 1); // only (1, 1) is committed by both aggregators - -// // aggregator with threshold 2 -// let mut aggregator = Aggregator::new(2); - -// aggregator.push(signer(1), gen_commitment(0, vec![(1, 1)])); -// aggregator.push(signer(2), gen_commitment(0, vec![(1, 1)])); -// aggregator.push(signer(2), gen_commitment(0, vec![(1, 1), (2, 2)])); -// aggregator.push(signer(1), gen_commitment(0, vec![(1, 1), (2, 2)])); - -// let root = aggregator -// .find_root() -// .expect("Failed to generate root commitment"); - -// assert_eq!(root.signatures.len(), 2); -// assert_eq!(root.commitments.len(), 2); // both (1, 1) and (2, 2) is committed by both aggregators -// } -// } +#[cfg(test)] +mod tests { + use super::*; + use ethexe_signer::PrivateKey; + use std::str::FromStr; + + #[derive(Clone, Debug)] + pub struct MyComm([u8; 2]); + + impl AsDigest for MyComm { + fn as_digest(&self) -> Digest { + self.0.as_digest() + } + } + + #[test] + fn test_sign_digest() { + let key_store = tempfile::tempdir().unwrap(); + let signer = Signer::new(key_store.path().to_path_buf()).unwrap(); + + let private_key = PrivateKey::from_str( + "4c0883a69102937d6231471b5dbb6204fe51296170827936ea5cce4b76994b0f", + ) + .unwrap(); + let pub_key = signer.add_key(private_key).unwrap(); + + let router_address = Address([0x01; 20]); + let commitments = vec![MyComm([1, 2]), MyComm([3, 4])]; + + let digest = commitments.as_digest(); + let signature = sign_digest(digest, &signer, pub_key, router_address).unwrap(); + let recovered = recover_from_digest(digest, &signature, router_address).unwrap(); + + assert_eq!(recovered, pub_key.to_address()); + } + + #[test] + fn test_aggregated_commitments() { + let key_store = tempfile::tempdir().unwrap(); + let signer = Signer::new(key_store.path().to_path_buf()).unwrap(); + + let private_key = PrivateKey::from_str( + "4c0883a69102937d6231471b5dbb6204fe51296170827936ea5cce4b76994b0f", + ) + .unwrap(); + let pub_key = signer.add_key(private_key).unwrap(); + + let router_address = Address([0x01; 20]); + let commitments = vec![MyComm([1, 2]), MyComm([3, 4])]; + + let agg = AggregatedCommitments::aggregate_commitments( + commitments, + &signer, + pub_key, + router_address, + ) + .unwrap(); + let recovered = agg.recover(router_address).unwrap(); + + assert_eq!(recovered, pub_key.to_address()); + } +} diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 53add8c71d6..e91777ec788 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -18,7 +18,7 @@ //! Sequencer for ethexe. -mod agro; +pub mod agro; use agro::MultisignedCommitments; use anyhow::{anyhow, Result}; @@ -29,7 +29,7 @@ use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; use std::{ - collections::{BTreeMap, HashSet}, + collections::{BTreeMap, BTreeSet, HashMap, HashSet}, ops::Not, }; use tokio::sync::watch; @@ -50,20 +50,22 @@ pub struct SequencerStatus { pub submitted_block_commitments: u64, } -#[allow(unused)] +type CommitmentsMap = BTreeMap)>; +type MultisignedDigests = (BTreeSet, HashMap); +type Candidate = (Digest, MultisignedDigests); + pub struct Sequencer { - signer: Signer, key: PublicKey, ethereum: Ethereum, validators: HashSet
, threshold: u64, - code_commitments: BTreeMap)>, - block_commitments: BTreeMap)>, + code_commitments: CommitmentsMap, + block_commitments: CommitmentsMap, - codes_aggregator: BTreeMap>, - blocks_aggregator: BTreeMap>, + codes_candidate: Option, + blocks_candidate: Option, status: SequencerStatus, status_sender: watch::Sender, @@ -122,8 +124,7 @@ pub enum NetworkMessage { impl Sequencer { pub async fn new(config: &Config, signer: Signer) -> Result { let (status_sender, _status_receiver) = watch::channel(SequencerStatus::default()); - Ok(Self { - signer: signer.clone(), + Ok(Sequencer { key: config.sign_tx_public, ethereum: Ethereum::new( &config.ethereum_rpc, @@ -134,11 +135,11 @@ impl Sequencer { .await?, validators: config.validators.iter().cloned().collect(), threshold: 1, - code_commitments: BTreeMap::new(), - block_commitments: BTreeMap::new(), - codes_aggregator: BTreeMap::new(), - blocks_aggregator: BTreeMap::new(), - status: SequencerStatus::default(), + code_commitments: Default::default(), + block_commitments: Default::default(), + codes_candidate: Default::default(), + blocks_candidate: Default::default(), + status: Default::default(), status_sender, }) } @@ -148,6 +149,9 @@ impl Sequencer { if let Event::Block(data) = event { log::debug!("Receive block {:?}", data.block_hash); + self.codes_candidate = None; + self.blocks_candidate = None; + self.update_status(|status| { *status = SequencerStatus::default(); }); @@ -157,15 +161,19 @@ impl Sequencer { } pub fn process_collected_commitments(&mut self) -> Result<(Option, Option)> { - let codes_digest = Self::pop_suitable_commitments( - &mut self.code_commitments, - &mut self.codes_aggregator, + if self.codes_candidate.is_some() || self.blocks_candidate.is_some() { + return Err(anyhow!("Previous commitments candidate are not submitted")); + } + + let codes_digest = Self::set_candidate_commitments( + &self.code_commitments, + &mut self.codes_candidate, self.threshold, ); - let blocks_digest = Self::pop_suitable_commitments( - &mut self.block_commitments, - &mut self.blocks_aggregator, + let blocks_digest = Self::set_candidate_commitments( + &self.block_commitments, + &mut self.blocks_candidate, self.threshold, ); @@ -178,10 +186,17 @@ impl Sequencer { let mut code_commitments_len = 0; let mut block_commitments_len = 0; - let codes_candidate = - Self::process_multisigned_candidate(&mut self.codes_aggregator, self.threshold); - let blocks_candidate = - Self::process_multisigned_candidate(&mut self.blocks_aggregator, self.threshold); + let codes_candidate = Self::process_multisigned_candidate( + &mut self.codes_candidate, + &mut self.code_commitments, + self.threshold, + ); + + let blocks_candidate = Self::process_multisigned_candidate( + &mut self.blocks_candidate, + &mut self.block_commitments, + self.threshold, + ); if let Some(candidate) = codes_candidate { log::debug!( @@ -262,7 +277,7 @@ impl Sequencer { signature, &self.validators, self.ethereum.router().address(), - &mut self.codes_aggregator, + self.codes_candidate.as_mut(), ) } @@ -278,7 +293,7 @@ impl Sequencer { signature, &self.validators, self.ethereum.router().address(), - &mut self.blocks_aggregator, + self.blocks_candidate.as_mut(), ) } @@ -290,72 +305,106 @@ impl Sequencer { self.status_sender.subscribe() } - pub fn get_multisigned_code_commitments(&self, digest: Digest) -> Option<&[CodeCommitment]> { - self.codes_aggregator - .get(&digest) - .map(|multisigned| multisigned.commitments.as_slice()) + pub fn get_candidate_code_commitments( + &self, + digest: Digest, + ) -> Option + '_> { + Self::get_candidate_commitments(digest, &self.codes_candidate, &self.code_commitments) } - pub fn get_multisigned_block_commitments(&self, digest: Digest) -> Option<&[BlockCommitment]> { - self.blocks_aggregator - .get(&digest) - .map(|multisigned| multisigned.commitments.as_slice()) + pub fn get_candidate_block_commitments( + &self, + digest: Digest, + ) -> Option + '_> { + Self::get_candidate_commitments(digest, &self.blocks_candidate, &self.block_commitments) } - fn pop_suitable_commitments( - commitments: &mut BTreeMap)>, - aggregator: &mut BTreeMap>, + fn get_candidate_commitments<'a, C>( + digest: Digest, + candidate: &'a Option, + commitments: &'a CommitmentsMap, + ) -> Option + 'a> { + let Some((candidate_digest, (digests, _))) = candidate else { + return None; + }; + + if *candidate_digest != digest { + return None; + } + + Some(digests.iter().map(|digest| { + commitments + .get(digest) + .map(|(commitment, _)| commitment) + .unwrap_or_else(|| { + unreachable!("Guarantied by `Sequencer` implementation to be in the map") + }) + })) + } + + fn set_candidate_commitments( + commitments: &CommitmentsMap, + candidate: &mut Option, threshold: u64, ) -> Option { let suitable_digests: Vec<_> = commitments .iter() - .filter_map(|(&hash, (_, set))| (set.len() as u64 >= threshold).then_some(hash)) + .filter_map(|(&digest, (_, set))| (set.len() as u64 >= threshold).then_some(digest)) .collect(); if suitable_digests.is_empty() { return None; } - let mut suitable_commitments = Vec::new(); - for hash in suitable_digests.iter() { - let (commitment, _) = commitments - .remove(hash) - .unwrap_or_else(|| unreachable!("Must be in the map")); - suitable_commitments.push(commitment); - } - let digest = suitable_digests.as_digest(); - debug_assert_eq!(digest, suitable_commitments.as_digest()); - aggregator.insert( + *candidate = Some(( digest, - MultisignedCommitments { - commitments: suitable_commitments, - sources: Vec::new(), - signatures: Vec::new(), - }, - ); + (suitable_digests.into_iter().collect(), HashMap::new()), + )); Some(digest) } fn process_multisigned_candidate( - aggregator: &mut BTreeMap>, + candidate: &mut Option, + commitments: &mut CommitmentsMap, threshold: u64, ) -> Option> { - let candidate = aggregator.iter().find_map(|(&digest, multisigned)| { - (multisigned.sources.len() >= threshold as usize).then_some(digest) - })?; + if candidate + .as_ref() + .map(|(_digest, (_, sigs))| threshold > sigs.len() as u64) + .unwrap_or(true) + { + return None; + } - let multisigned = aggregator - .remove(&candidate) - .unwrap_or_else(|| unreachable!("Must be in the map")); + let (_, (digests, signatures)) = candidate.take()?; - if multisigned.commitments.is_empty() { - unreachable!("Guarantied to be not empty"); + if digests.is_empty() { + unreachable!("Guarantied by `Sequencer` implementation to be not empty"); } - Some(multisigned) + let commitments: Vec<_> = digests + .iter() + .map(|digest| { + commitments + .remove(digest) + .map(|(commitment, _)| commitment) + .unwrap_or_else(|| { + unreachable!("Guarantied by `Sequencer` implementation to be in the map"); + }) + }) + .collect(); + + let sources = signatures.keys().cloned().collect(); + let signatures = signatures.values().cloned().collect(); + + Some(MultisignedCommitments { + commitments, + sources, + signatures, + }) } async fn submit_codes_commitment( @@ -439,29 +488,31 @@ impl Sequencer { Ok(()) } - fn receive_signature( + fn receive_signature( origin: Address, digest: Digest, signature: Signature, validators: &HashSet
, router_address: Address, - aggregator: &mut BTreeMap>, + candidate: Option<&mut Candidate>, ) -> Result<()> { + let Some((candidate_digest, (_, signatures))) = candidate else { + return Err(anyhow!("No candidate found")); + }; + + if *candidate_digest != digest { + return Err(anyhow!("Digest mismatch")); + } + if !validators.contains(&origin) { return Err(anyhow!("Unknown validator {origin}")); } - if AggregatedCommitments::::recover_digest(digest, &signature, router_address)? != origin - { + if agro::recover_from_digest(digest, &signature, router_address)? != origin { return Err(anyhow!("Invalid signature")); } - let multisigned = aggregator - .get_mut(&digest) - .ok_or(anyhow!("Aggregated commitment {digest:?} not found"))?; - - multisigned.sources.push(origin); - multisigned.signatures.push(signature); + signatures.insert(origin, signature); Ok(()) } diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 665126cdd67..20947477920 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -23,7 +23,7 @@ use ethexe_common::{ db::{BlockMetaStorage, CodesStorage}, BlockCommitment, CodeCommitment, }; -use ethexe_sequencer::{AggregatedCommitments, BlockCommitmentValidationRequest}; +use ethexe_sequencer::{agro, AggregatedCommitments, BlockCommitmentValidationRequest}; use ethexe_signer::{Address, AsDigest, PublicKey, Signature, Signer}; use gprimitives::H256; @@ -95,7 +95,7 @@ impl Validator { digests.push(request.as_digest()); } - AggregatedCommitments::::sign_commitments( + agro::sign_digest( digests.as_digest(), &self.signer, self.pub_key, @@ -154,7 +154,7 @@ impl Validator { digests.push(request.as_digest()); } - AggregatedCommitments::::sign_commitments( + agro::sign_digest( digests.as_digest(), &self.signer, self.pub_key, From 43b3a8f4e5d808f8a9bee00081725c26003a9374 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Tue, 6 Aug 2024 18:16:36 +0200 Subject: [PATCH 09/44] make self struct Digest --- ethexe/ethereum/src/lib.rs | 2 +- ethexe/sequencer/src/lib.rs | 2 +- ethexe/signer/src/digest.rs | 33 +++++++++++++++++++++++++++++--- ethexe/signer/src/lib.rs | 8 ++++---- ethexe/signer/src/signature.rs | 35 +++++++--------------------------- 5 files changed, 43 insertions(+), 37 deletions(-) diff --git a/ethexe/ethereum/src/lib.rs b/ethexe/ethereum/src/lib.rs index c9b375ae2b5..930643492fd 100644 --- a/ethexe/ethereum/src/lib.rs +++ b/ethexe/ethereum/src/lib.rs @@ -154,7 +154,7 @@ impl SignerSync for Sender { fn sign_hash_sync(&self, hash: &B256) -> SignerResult { let signature = self .signer - .raw_sign_digest(self.sender, hash.0) + .raw_sign_digest(self.sender, hash.0.into()) .map_err(|err| SignerError::Other(err.into()))?; Ok(Signature::try_from(signature.as_ref())?) } diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index e91777ec788..3f5ba4d5cef 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -97,7 +97,7 @@ impl AsDigest for BlockCommitmentValidationRequest { message.extend_from_slice(self.block_hash.as_bytes()); message.extend_from_slice(self.allowed_pred_block_hash.as_bytes()); message.extend_from_slice(self.allowed_prev_commitment_hash.as_bytes()); - message.extend_from_slice(&self.transitions_digest); + message.extend_from_slice(self.transitions_digest.as_ref()); message.as_digest() } diff --git a/ethexe/signer/src/digest.rs b/ethexe/signer/src/digest.rs index 244ac5efc7f..7acbd387440 100644 --- a/ethexe/signer/src/digest.rs +++ b/ethexe/signer/src/digest.rs @@ -1,11 +1,38 @@ +use core::fmt; use ethexe_common::{BlockCommitment, CodeCommitment, OutgoingMessage, StateTransition}; use gprimitives::{MessageId, H256}; -use parity_scale_codec::Encode; +use parity_scale_codec::{Decode, Encode}; use sha3::Digest as _; use crate::Address; -pub type Digest = [u8; 32]; +#[derive( + Clone, + Copy, + PartialOrd, + Ord, + PartialEq, + Eq, + Hash, + Encode, + Decode, + derive_more::From, + derive_more::Into, + derive_more::AsRef, +)] +pub struct Digest([u8; 32]); + +impl fmt::Debug for Digest { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "0x{}", hex::encode(self.0)) + } +} + +impl fmt::Display for Digest { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "0x{}", hex::encode(self.0)) + } +} pub trait AsDigest { fn as_digest(&self) -> Digest; @@ -37,7 +64,7 @@ impl AsDigest for Vec { impl AsDigest for [u8] { fn as_digest(&self) -> Digest { - sha3::Keccak256::digest(self).into() + Digest(sha3::Keccak256::digest(self).into()) } } diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index 284dd4b651f..25f46297ff6 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -174,20 +174,20 @@ impl Signer { Ok(Self { key_store }) } - pub fn raw_sign_digest(&self, public_key: PublicKey, digest: [u8; 32]) -> Result { + pub fn raw_sign_digest(&self, public_key: PublicKey, digest: Digest) -> Result { let private_key = self.get_private_key(public_key)?; RawSignature::create_for_digest(private_key, digest) } - pub fn sign_digest(&self, public_key: PublicKey, digest: [u8; 32]) -> Result { + pub fn sign_digest(&self, public_key: PublicKey, digest: Digest) -> Result { let private_key = self.get_private_key(public_key)?; Signature::create_for_digest(private_key, digest) } pub fn sign(&self, public_key: PublicKey, data: &[u8]) -> Result { - self.sign_digest(public_key, sha3::Keccak256::digest(data).into()) + self.sign_digest(public_key, data.as_digest()) } pub fn sign_with_addr(&self, address: Address, data: &[u8]) -> Result { @@ -400,7 +400,7 @@ mod tests { let hash = keccak256(message); let recovered_public_key = signature - .recover_from_digest(hash) + .recover_from_digest(hash.into()) .expect("Failed to recover public key"); assert_eq!(recovered_public_key, public_key); diff --git a/ethexe/signer/src/signature.rs b/ethexe/signer/src/signature.rs index cea64749f7d..b22785b94c5 100644 --- a/ethexe/signer/src/signature.rs +++ b/ethexe/signer/src/signature.rs @@ -1,4 +1,4 @@ -use crate::{digest::AsDigest, PrivateKey, PublicKey}; +use crate::{Digest, PrivateKey, PublicKey}; use anyhow::{Context, Result}; use parity_scale_codec::{Decode, Encode}; use secp256k1::{ @@ -10,11 +10,11 @@ use std::fmt; pub struct RawSignature([u8; 65]); impl RawSignature { - pub fn create_for_digest(private_key: PrivateKey, digest: [u8; 32]) -> Result { + pub fn create_for_digest(private_key: PrivateKey, digest: Digest) -> Result { let secp_secret_key = secp256k1::SecretKey::from_slice(&private_key.0) .with_context(|| "Invalid secret key format for {:?}")?; - let message = Message::from_digest(digest); + let message = Message::from_digest(digest.into()); let recoverable = secp256k1::global::SECP256K1.sign_ecdsa_recoverable(&message, &secp_secret_key); @@ -54,14 +54,14 @@ impl Signature { hex::encode(self.0) } - pub fn recover_from_digest(&self, digest: [u8; 32]) -> Result { + pub fn recover_from_digest(&self, digest: Digest) -> Result { let sig = self.clone().try_into()?; - let public_key = - secp256k1::global::SECP256K1.recover_ecdsa(&Message::from_digest(digest), &sig)?; + let public_key = secp256k1::global::SECP256K1 + .recover_ecdsa(&Message::from_digest(digest.into()), &sig)?; Ok(PublicKey::from_bytes(public_key.serialize())) } - pub fn create_for_digest(private_key: PrivateKey, digest: [u8; 32]) -> Result { + pub fn create_for_digest(private_key: PrivateKey, digest: Digest) -> Result { let raw_signature = RawSignature::create_for_digest(private_key, digest)?; Ok(raw_signature.into()) } @@ -115,24 +115,3 @@ impl TryFrom for RecoverableSignature { .map_err(Into::into) } } - -pub struct SignedData { - pub data: D, - signature: Signature, -} - -impl SignedData { - pub fn create(data: D, private_key: PrivateKey) -> Result { - let digest = data.as_digest(); - let signature = Signature::create_for_digest(private_key, digest)?; - Ok(SignedData { data, signature }) - } - - pub fn signature(&self) -> &Signature { - &self.signature - } - - pub fn into_parts(self) -> (D, Signature) { - (self.data, self.signature) - } -} From 090a329b6eb76df5b29873c6454df89c05379c69 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 7 Aug 2024 11:47:17 +0200 Subject: [PATCH 10/44] remove Multisigned struct --- ethexe/sequencer/src/agro.rs | 18 ------------ ethexe/sequencer/src/lib.rs | 55 +++++++++++------------------------- 2 files changed, 17 insertions(+), 56 deletions(-) diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 7ecaa792a1b..c95ee3b68ab 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -21,7 +21,6 @@ use anyhow::Result; use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; use parity_scale_codec::{Decode, Encode}; -use std::fmt; #[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] pub struct AggregatedCommitments { @@ -90,23 +89,6 @@ fn digest(commitments_digest: Digest, router_address: Address) -> Digest { .as_digest() } -#[derive(Clone)] -pub struct MultisignedCommitments { - pub commitments: Vec, - pub sources: Vec
, - pub signatures: Vec, -} - -impl fmt::Debug for MultisignedCommitments { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!( - f, - "MultisignedCommitments {{ commitments: {:?}, sources: {:?}, signatures: {:?} }}", - self.commitments, self.sources, self.signatures - ) - } -} - #[cfg(test)] mod tests { use super::*; diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 3f5ba4d5cef..a3bf498d16a 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -20,7 +20,6 @@ pub mod agro; -use agro::MultisignedCommitments; use anyhow::{anyhow, Result}; use ethexe_common::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; @@ -51,6 +50,7 @@ pub struct SequencerStatus { } type CommitmentsMap = BTreeMap)>; +type MultisignedCommitments = (BTreeMap, HashMap); type MultisignedDigests = (BTreeSet, HashMap); type Candidate = (Digest, MultisignedDigests); @@ -199,22 +199,16 @@ impl Sequencer { ); if let Some(candidate) = codes_candidate { - log::debug!( - "Collected some {0} code commitments. Trying to submit...", - candidate.commitments.len() - ); + code_commitments_len = candidate.0.len() as u64; + log::debug!("Collected {code_commitments_len} code commitments. Trying to submit..."); - code_commitments_len = candidate.commitments.len() as u64; codes_future = Some(self.submit_codes_commitment(candidate)); }; if let Some(candidate) = blocks_candidate { - log::debug!( - "Collected some {0} transition commitments. Trying to submit...", - candidate.commitments.len() - ); + block_commitments_len = candidate.0.len() as u64; + log::debug!("Collected {block_commitments_len} block commitments. Trying to submit...",); - block_commitments_len = candidate.commitments.len() as u64; blocks_future = Some(self.submit_block_commitments(candidate)); }; @@ -385,40 +379,29 @@ impl Sequencer { unreachable!("Guarantied by `Sequencer` implementation to be not empty"); } - let commitments: Vec<_> = digests + let commitments = digests .iter() .map(|digest| { commitments .remove(digest) - .map(|(commitment, _)| commitment) + .map(|(commitment, _)| (*digest, commitment)) .unwrap_or_else(|| { unreachable!("Guarantied by `Sequencer` implementation to be in the map"); }) }) .collect(); - let sources = signatures.keys().cloned().collect(); - let signatures = signatures.values().cloned().collect(); - - Some(MultisignedCommitments { - commitments, - sources, - signatures, - }) + Some((commitments, signatures)) } async fn submit_codes_commitment( &self, - signed_commitments: MultisignedCommitments, + commitments: MultisignedCommitments, ) -> Result<()> { - log::debug!("Code commitment to submit: {signed_commitments:?}"); + let codes = commitments.0.into_values().map(Into::into).collect(); + let (origins, signatures): (Vec<_>, _) = commitments.1.into_iter().unzip(); - let codes = signed_commitments - .commitments - .into_iter() - .map(Into::into) - .collect::>(); - let signatures = signed_commitments.signatures; + log::debug!("Code commitments to submit: {codes:?}, signed by: {origins:?}",); let router = self.ethereum.router(); if let Err(e) = router.commit_codes(codes, signatures).await { @@ -431,19 +414,15 @@ impl Sequencer { async fn submit_block_commitments( &self, - signed_commitments: MultisignedCommitments, + commitments: MultisignedCommitments, ) -> Result<()> { - log::debug!("Transition commitment to submit: {signed_commitments:?}"); + let blocks = commitments.0.into_values().map(Into::into).collect(); + let (origins, signatures): (Vec<_>, _) = commitments.1.into_iter().unzip(); - let block_commitments = signed_commitments - .commitments - .into_iter() - .map(Into::into) - .collect::>(); - let signatures = signed_commitments.signatures; + log::debug!("Block commitments to submit: {blocks:?}, signed by: {origins:?}",); let router = self.ethereum.router(); - match router.commit_blocks(block_commitments, signatures).await { + match router.commit_blocks(blocks, signatures).await { Err(e) => { // TODO: return error? log::error!("Failed to commit transitions: {e}"); From e836d179b347cc9b357e7039b0a6c6c613da7ebd Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 7 Aug 2024 23:21:50 +0200 Subject: [PATCH 11/44] append sequencer tests --- ethexe/sequencer/src/agro.rs | 72 +++- ethexe/sequencer/src/lib.rs | 639 +++++++++++++++++++++++++++++++-- ethexe/signer/src/lib.rs | 2 +- ethexe/signer/src/signature.rs | 5 +- ethexe/validator/src/lib.rs | 20 +- 5 files changed, 668 insertions(+), 70 deletions(-) diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index c95ee3b68ab..21a81785530 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -19,9 +19,50 @@ //! Abstract commitment aggregator. use anyhow::Result; -use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; +use ethexe_signer::{Address, AsDigest, Digest, PrivateKey, PublicKey, Signature, Signer}; use parity_scale_codec::{Decode, Encode}; +pub trait CommitmentsDigestSigner { + fn sign_commitments_digest( + &self, + commitments_digest: Digest, + pub_key: PublicKey, + router_address: Address, + ) -> Result; + + fn recover_from_commitments_digest( + commitments_digest: Digest, + signature: &Signature, + router_address: Address, + ) -> Result
{ + recover_from_commitments_digest(commitments_digest, signature, router_address) + } +} + +impl CommitmentsDigestSigner for Signer { + fn sign_commitments_digest( + &self, + commitments_digest: Digest, + pub_key: PublicKey, + router_address: Address, + ) -> Result { + let digest = to_router_digest(commitments_digest, router_address); + self.sign_digest(pub_key, digest) + } +} + +impl CommitmentsDigestSigner for PrivateKey { + fn sign_commitments_digest( + &self, + commitments_digest: Digest, + _pub_key: PublicKey, + router_address: Address, + ) -> Result { + let digest = to_router_digest(commitments_digest, router_address); + Signature::create_for_digest(*self, digest) + } +} + #[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] pub struct AggregatedCommitments { pub commitments: Vec, @@ -31,11 +72,12 @@ pub struct AggregatedCommitments { impl AggregatedCommitments { pub fn aggregate_commitments( commitments: Vec, - signer: &Signer, + signer: &impl CommitmentsDigestSigner, pub_key: PublicKey, router_address: Address, ) -> Result> { - let signature = sign_digest(commitments.as_digest(), signer, pub_key, router_address)?; + let signature = + signer.sign_commitments_digest(commitments.as_digest(), pub_key, router_address)?; Ok(AggregatedCommitments { commitments, @@ -44,7 +86,7 @@ impl AggregatedCommitments { } pub fn recover(&self, router_address: Address) -> Result
{ - recover_from_digest( + recover_from_commitments_digest( self.commitments.as_digest(), &self.signature, router_address, @@ -60,26 +102,17 @@ impl AggregatedCommitments { } } -pub fn sign_digest( - commitments_digest: Digest, - signer: &Signer, - pub_key: PublicKey, - router_address: Address, -) -> Result { - signer.sign_digest(pub_key, digest(commitments_digest, router_address)) -} - -pub fn recover_from_digest( +fn recover_from_commitments_digest( commitments_digest: Digest, signature: &Signature, router_address: Address, ) -> Result
{ signature - .recover_from_digest(digest(commitments_digest, router_address)) + .recover_from_digest(to_router_digest(commitments_digest, router_address)) .map(|k| k.to_address()) } -fn digest(commitments_digest: Digest, router_address: Address) -> Digest { +fn to_router_digest(commitments_digest: Digest, router_address: Address) -> Digest { [ [0x19, 0x00].as_ref(), router_address.0.as_ref(), @@ -119,8 +152,11 @@ mod tests { let commitments = vec![MyComm([1, 2]), MyComm([3, 4])]; let digest = commitments.as_digest(); - let signature = sign_digest(digest, &signer, pub_key, router_address).unwrap(); - let recovered = recover_from_digest(digest, &signature, router_address).unwrap(); + let signature = signer + .sign_commitments_digest(digest, pub_key, router_address) + .unwrap(); + let recovered = + recover_from_commitments_digest(digest, &signature, router_address).unwrap(); assert_eq!(recovered, pub_key.to_address()); } diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index a3bf498d16a..7ac438c3317 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -20,6 +20,7 @@ pub mod agro; +use agro::CommitmentsDigestSigner; use anyhow::{anyhow, Result}; use ethexe_common::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; @@ -28,7 +29,7 @@ use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; use std::{ - collections::{BTreeMap, BTreeSet, HashMap, HashSet}, + collections::{BTreeMap, BTreeSet, HashSet}, ops::Not, }; use tokio::sync::watch; @@ -49,10 +50,31 @@ pub struct SequencerStatus { pub submitted_block_commitments: u64, } -type CommitmentsMap = BTreeMap)>; -type MultisignedCommitments = (BTreeMap, HashMap); -type MultisignedDigests = (BTreeSet, HashMap); -type Candidate = (Digest, MultisignedDigests); +#[derive(Debug, Clone, PartialEq, Eq)] +struct CommitmentAndOrigins { + commitment: C, + origins: BTreeSet
, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +struct MultisignedCommitments { + commitments: BTreeMap, + signatures: BTreeMap, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +struct MultisignedDigests { + digests: BTreeSet, + signatures: BTreeMap, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +struct Candidate { + digest: Digest, + multisigned: MultisignedDigests, +} + +type CommitmentsMap = BTreeMap>; pub struct Sequencer { key: PublicKey, @@ -199,14 +221,14 @@ impl Sequencer { ); if let Some(candidate) = codes_candidate { - code_commitments_len = candidate.0.len() as u64; + code_commitments_len = candidate.commitments.len() as u64; log::debug!("Collected {code_commitments_len} code commitments. Trying to submit..."); codes_future = Some(self.submit_codes_commitment(candidate)); }; if let Some(candidate) = blocks_candidate { - block_commitments_len = candidate.0.len() as u64; + block_commitments_len = candidate.commitments.len() as u64; log::debug!("Collected {block_commitments_len} block commitments. Trying to submit...",); blocks_future = Some(self.submit_block_commitments(candidate)); @@ -318,18 +340,18 @@ impl Sequencer { candidate: &'a Option, commitments: &'a CommitmentsMap, ) -> Option + 'a> { - let Some((candidate_digest, (digests, _))) = candidate else { + let Some(candidate) = candidate else { return None; }; - if *candidate_digest != digest { + if candidate.digest != digest { return None; } - Some(digests.iter().map(|digest| { + Some(candidate.multisigned.digests.iter().map(|digest| { commitments .get(digest) - .map(|(commitment, _)| commitment) + .map(|c| &c.commitment) .unwrap_or_else(|| { unreachable!("Guarantied by `Sequencer` implementation to be in the map") }) @@ -343,7 +365,7 @@ impl Sequencer { ) -> Option { let suitable_digests: Vec<_> = commitments .iter() - .filter_map(|(&digest, (_, set))| (set.len() as u64 >= threshold).then_some(digest)) + .filter_map(|(digest, c)| (c.origins.len() as u64 >= threshold).then_some(*digest)) .collect(); if suitable_digests.is_empty() { @@ -352,10 +374,13 @@ impl Sequencer { let digest = suitable_digests.as_digest(); - *candidate = Some(( + *candidate = Some(Candidate { digest, - (suitable_digests.into_iter().collect(), HashMap::new()), - )); + multisigned: MultisignedDigests { + digests: suitable_digests.into_iter().collect(), + signatures: Default::default(), + }, + }); Some(digest) } @@ -367,39 +392,46 @@ impl Sequencer { ) -> Option> { if candidate .as_ref() - .map(|(_digest, (_, sigs))| threshold > sigs.len() as u64) + .map(|c| threshold > c.multisigned.signatures.len() as u64) .unwrap_or(true) { return None; } - let (_, (digests, signatures)) = candidate.take()?; + let Candidate { multisigned, .. } = candidate.take()?; - if digests.is_empty() { + if multisigned.digests.is_empty() { unreachable!("Guarantied by `Sequencer` implementation to be not empty"); } - let commitments = digests + let commitments = multisigned + .digests .iter() .map(|digest| { commitments .remove(digest) - .map(|(commitment, _)| (*digest, commitment)) + .map(|c| (*digest, c.commitment)) .unwrap_or_else(|| { unreachable!("Guarantied by `Sequencer` implementation to be in the map"); }) }) .collect(); - Some((commitments, signatures)) + Some(MultisignedCommitments { + commitments, + signatures: multisigned.signatures, + }) } async fn submit_codes_commitment( &self, - commitments: MultisignedCommitments, + MultisignedCommitments { + commitments, + signatures, + }: MultisignedCommitments, ) -> Result<()> { - let codes = commitments.0.into_values().map(Into::into).collect(); - let (origins, signatures): (Vec<_>, _) = commitments.1.into_iter().unzip(); + let codes = commitments.into_values().map(Into::into).collect(); + let (origins, signatures): (Vec<_>, _) = signatures.into_iter().unzip(); log::debug!("Code commitments to submit: {codes:?}, signed by: {origins:?}",); @@ -414,10 +446,13 @@ impl Sequencer { async fn submit_block_commitments( &self, - commitments: MultisignedCommitments, + MultisignedCommitments { + commitments, + signatures, + }: MultisignedCommitments, ) -> Result<()> { - let blocks = commitments.0.into_values().map(Into::into).collect(); - let (origins, signatures): (Vec<_>, _) = commitments.1.into_iter().unzip(); + let blocks = commitments.into_values().map(Into::into).collect(); + let (origins, signatures): (Vec<_>, _) = signatures.into_iter().unzip(); log::debug!("Block commitments to submit: {blocks:?}, signed by: {origins:?}",); @@ -442,7 +477,7 @@ impl Sequencer { aggregated: AggregatedCommitments, validators: &HashSet
, router_address: Address, - commitments_storage: &mut BTreeMap)>, + commitments_storage: &mut CommitmentsMap, ) -> Result<()> { if validators.contains(&origin).not() { return Err(anyhow!("Unknown validator {origin}")); @@ -458,10 +493,14 @@ impl Sequencer { if !processed.insert(digest) { continue; } - let (_, set) = commitments_storage + commitments_storage .entry(digest) - .or_insert_with(|| (commitment, HashSet::new())); - set.insert(origin); + .or_insert_with(|| CommitmentAndOrigins { + commitment, + origins: Default::default(), + }) + .origins + .insert(origin); } Ok(()) @@ -469,17 +508,17 @@ impl Sequencer { fn receive_signature( origin: Address, - digest: Digest, + commitments_digest: Digest, signature: Signature, validators: &HashSet
, router_address: Address, candidate: Option<&mut Candidate>, ) -> Result<()> { - let Some((candidate_digest, (_, signatures))) = candidate else { + let Some(candidate) = candidate else { return Err(anyhow!("No candidate found")); }; - if *candidate_digest != digest { + if candidate.digest != commitments_digest { return Err(anyhow!("Digest mismatch")); } @@ -487,11 +526,13 @@ impl Sequencer { return Err(anyhow!("Unknown validator {origin}")); } - if agro::recover_from_digest(digest, &signature, router_address)? != origin { + if Signer::recover_from_commitments_digest(commitments_digest, &signature, router_address)? + != origin + { return Err(anyhow!("Invalid signature")); } - signatures.insert(origin, signature); + candidate.multisigned.signatures.insert(origin, signature); Ok(()) } @@ -505,3 +546,529 @@ impl Sequencer { let _ = self.status_sender.send_replace(status); } } + +#[cfg(test)] +mod tests { + use super::*; + use ethexe_signer::PrivateKey; + + #[derive(Clone, Copy, Debug, PartialEq, Eq)] + struct TestComm([u8; 2]); + + impl AsDigest for TestComm { + fn as_digest(&self) -> Digest { + self.0.as_digest() + } + } + + #[test] + fn test_receive_signature() { + let router_address = Address([1; 20]); + + let validators_private_keys = [PrivateKey([1; 32]), PrivateKey([2; 32])]; + let validators: HashSet<_> = validators_private_keys + .iter() + .cloned() + .map(|key| PublicKey::from(key).to_address()) + .collect(); + + let validator1_private_key = validators_private_keys[0]; + let validator1_pub_key = PublicKey::from(validator1_private_key); + let validator1 = validator1_pub_key.to_address(); + + let commitments = [TestComm([0, 1]), TestComm([2, 3])]; + let commitments_digest = commitments.as_digest(); + let aggregated = AggregatedCommitments::aggregate_commitments( + commitments.to_vec(), + &validator1_private_key, + validator1_pub_key, + router_address, + ) + .unwrap(); + let signature = aggregated.signature; + + Sequencer::receive_signature( + validator1, + commitments_digest, + signature, + &validators, + router_address, + None, + ) + .expect_err("No candidate is provided"); + + let mut signatures: BTreeMap<_, _> = Default::default(); + let digests: BTreeSet<_> = commitments.iter().map(AsDigest::as_digest).collect(); + let mut candidate = Candidate { + digest: commitments_digest, + multisigned: MultisignedDigests { + digests: digests.clone(), + signatures: signatures.clone(), + }, + }; + + Sequencer::receive_signature( + validator1, + Digest::from([1; 32]), + signature, + &validators, + router_address, + Some(&mut candidate), + ) + .expect_err("Incorrect digest has been provided"); + + Sequencer::receive_signature( + Address([3; 20]), + commitments_digest, + signature, + &validators, + router_address, + Some(&mut candidate), + ) + .expect_err("Unknown validator has been provided"); + + Sequencer::receive_signature( + validator1, + commitments_digest, + Signature::create_for_digest(validator1_private_key, Digest::from([1; 32])).unwrap(), + &validators, + router_address, + Some(&mut candidate), + ) + .expect_err("Signature verification must fail"); + + Sequencer::receive_signature( + validator1, + commitments_digest, + signature, + &validators, + router_address, + Some(&mut candidate), + ) + .unwrap(); + + signatures.insert(validator1, signature); + assert_eq!( + candidate, + Candidate { + digest: commitments_digest, + multisigned: MultisignedDigests { + digests: digests.clone(), + signatures: signatures.clone(), + }, + } + ); + + let validator2_private_key = validators_private_keys[1]; + let validator2_pub_key = PublicKey::from(validator2_private_key); + let validator2 = validator2_pub_key.to_address(); + + let aggregated = AggregatedCommitments::aggregate_commitments( + commitments.to_vec(), + &validator2_private_key, + validator2_pub_key, + router_address, + ) + .unwrap(); + let signature = aggregated.signature; + + Sequencer::receive_signature( + validator2, + commitments_digest, + signature, + &validators, + router_address, + Some(&mut candidate), + ) + .unwrap(); + + signatures.insert(validator2, signature); + assert_eq!( + candidate, + Candidate { + digest: commitments_digest, + multisigned: MultisignedDigests { + digests, + signatures, + }, + } + ); + } + + #[test] + fn test_receive_commitments() { + let router_address = Address([1; 20]); + + let validators_private_keys = [PrivateKey([1; 32]), PrivateKey([2; 32])]; + let validators: HashSet<_> = validators_private_keys + .iter() + .cloned() + .map(|key| PublicKey::from(key).to_address()) + .collect(); + + let validator1_private_key = validators_private_keys[0]; + let validator1_pub_key = PublicKey::from(validator1_private_key); + let validator1 = validator1_pub_key.to_address(); + + let commitments = [TestComm([0, 1]), TestComm([2, 3])]; + let aggregated = AggregatedCommitments::aggregate_commitments( + commitments.to_vec(), + &validator1_private_key, + validator1_pub_key, + router_address, + ) + .unwrap(); + + let mut expected_commitments_storage = CommitmentsMap::new(); + let mut commitments_storage = CommitmentsMap::new(); + + Sequencer::receive_commitments( + Address([3; 20]), + aggregated.clone(), + &validators, + router_address, + &mut commitments_storage, + ) + .expect_err("Unknown validator has been provided"); + + let private_key = PrivateKey([3; 32]); + let incorrect_aggregated = AggregatedCommitments::aggregate_commitments( + commitments.to_vec(), + &private_key, + private_key.into(), + router_address, + ) + .unwrap(); + Sequencer::receive_commitments( + validator1, + incorrect_aggregated, + &validators, + router_address, + &mut commitments_storage, + ) + .expect_err("Signature verification must fail"); + + Sequencer::receive_commitments( + validator1, + aggregated.clone(), + &validators, + router_address, + &mut commitments_storage, + ) + .unwrap(); + + expected_commitments_storage.insert( + commitments[0].as_digest(), + CommitmentAndOrigins { + commitment: commitments[0], + origins: [validator1].iter().cloned().collect(), + }, + ); + expected_commitments_storage.insert( + commitments[1].as_digest(), + CommitmentAndOrigins { + commitment: commitments[1], + origins: [validator1].iter().cloned().collect(), + }, + ); + assert_eq!(expected_commitments_storage, commitments_storage); + + let validator2_private_key = validators_private_keys[1]; + let validator2_pub_key = PublicKey::from(validator2_private_key); + let validator2 = validator2_pub_key.to_address(); + + let aggregated = AggregatedCommitments::aggregate_commitments( + commitments.to_vec(), + &validator2_private_key, + validator2_pub_key, + router_address, + ) + .unwrap(); + + Sequencer::receive_commitments( + validator2, + aggregated, + &validators, + router_address, + &mut commitments_storage, + ) + .unwrap(); + + expected_commitments_storage + .get_mut(&commitments[0].as_digest()) + .unwrap() + .origins + .insert(validator2); + expected_commitments_storage + .get_mut(&commitments[1].as_digest()) + .unwrap() + .origins + .insert(validator2); + assert_eq!(expected_commitments_storage, commitments_storage); + } + + #[test] + fn test_set_candidate_commitments() { + let mut candidate = None; + let threshold = 2; + + let mut commitments = BTreeMap::new(); + assert_eq!( + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), + None + ); + assert_eq!(candidate, None); + + let commitment1 = TestComm([0, 1]); + commitments.insert( + commitment1.as_digest(), + CommitmentAndOrigins { + commitment: commitment1, + origins: Default::default(), + }, + ); + assert_eq!( + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), + None + ); + assert_eq!(candidate, None); + + commitments + .get_mut(&commitment1.as_digest()) + .unwrap() + .origins + .insert(Address([1; 20])); + assert_eq!( + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), + None + ); + assert_eq!(candidate, None); + + commitments + .get_mut(&commitment1.as_digest()) + .unwrap() + .origins + .insert(Address([2; 20])); + assert_eq!( + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), + Some([commitment1].as_digest()) + ); + assert_eq!( + candidate, + Some(Candidate { + digest: [commitment1].as_digest(), + multisigned: MultisignedDigests { + digests: [commitment1.as_digest()].iter().cloned().collect(), + signatures: Default::default(), + }, + }) + ); + + let commitment2 = TestComm([2, 3]); + commitments.insert( + commitment2.as_digest(), + CommitmentAndOrigins { + commitment: commitment2, + origins: [Address([3; 20]), Address([4; 20])] + .iter() + .cloned() + .collect(), + }, + ); + assert_eq!( + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), + Some([commitment1, commitment2].as_digest()) + ); + assert_eq!( + candidate, + Some(Candidate { + digest: [commitment1, commitment2].as_digest(), + multisigned: MultisignedDigests { + digests: [commitment1.as_digest(), commitment2.as_digest()] + .iter() + .cloned() + .collect(), + signatures: Default::default(), + }, + }) + ); + + let commitment3 = TestComm([4, 5]); + commitments.insert( + commitment3.as_digest(), + CommitmentAndOrigins { + commitment: commitment3, + origins: [Address([5; 20])].iter().cloned().collect(), + }, + ); + assert_eq!( + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), + Some([commitment1, commitment2].as_digest()) + ); + assert_eq!( + candidate, + Some(Candidate { + digest: [commitment1, commitment2].as_digest(), + multisigned: MultisignedDigests { + digests: [commitment1.as_digest(), commitment2.as_digest()] + .iter() + .cloned() + .collect(), + signatures: Default::default(), + }, + }) + ); + } + + #[test] + #[should_panic(expected = "Guarantied by `Sequencer` implementation to be in the map")] + fn test_process_multisigned_candidate_empty_map() { + let candidate = Candidate { + digest: [1; 32].into(), + multisigned: MultisignedDigests { + digests: [[2; 32]].map(Into::into).into_iter().collect(), + signatures: Default::default(), + }, + }; + Sequencer::process_multisigned_candidate::( + &mut Some(candidate), + &mut Default::default(), + 0, + ); + } + + #[test] + #[should_panic(expected = "Guarantied by `Sequencer` implementation to be not empty")] + fn test_process_multisigned_candidate_empty_digests() { + let candidate = Candidate { + digest: [1; 32].into(), + multisigned: MultisignedDigests { + digests: Default::default(), + signatures: Default::default(), + }, + }; + Sequencer::process_multisigned_candidate::( + &mut Some(candidate), + &mut Default::default(), + 0, + ); + } + + // #[test] + // fn test_process_multisigned_candidate() { + // // Test candidate is None + // assert_eq!( + // Sequencer::process_multisigned_candidate::(&mut None, &mut Default::default(), 0), + // None + // ); + + // // Test not enough signatures + // let mut candidate = Some(Candidate { + // digest: [1; 32].into(), + // multisigned: MultisignedDigests { + // digests: [[2; 32]].map(Into::into).into_iter().collect(), + // signatures: Default::default(), + // }, + // }); + // assert_eq!( + // Sequencer::process_multisigned_candidate(&mut candidate, &mut Default::default(), 2), + // None + // ); + + // let mut candidate = None; + // let threshold = 2; + + // let mut commitments = CommitmentsMap::new(); + // let origins: BTreeSet<_> = [[1; 20], [2; 20]].map(Address).into_iter().collect(); + + // let commitment = TestComm([0, 1]); + // commitments.insert( + // commitment1.as_digest(), + // CommitmentAndOrigins { + // commitment: commitment1, + // origins: Default::default(), + // }, + // ); + + // let commitment2 = TestComm([2, 3]); + // commitments.insert( + // commitment2.as_digest(), + // CommitmentAndOrigins { + // commitment: commitment2, + // origins: Default::default(), + // }, + // ); + + // let x = catch_unwind(|| { + // Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments, threshold) + // }) + // assert_eq!( + // Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments, threshold), + // None + // ); + // assert_eq!(candidate, None); + + // let commitment1 = TestComm([0, 1]); + // commitments.insert( + // commitment1.as_digest(), + // CommitmentAndOrigins { + // commitment: commitment1, + // }, + // ); + + // let commitment2 = TestComm([2, 3]); + // commitments.insert( + // commitment2.as_digest(), + // CommitmentAndOrigins { + // commitment: commitment2, + // origins: [[1; 20], [2; 20]].map(Address).into_iter().collect(), + // }, + // ); + + // let commitment3 = TestComm([4, 5]); + // commitments.insert( + // commitment3.as_digest(), + // CommitmentAndOrigins { + // commitment: commitment3, + // origins: [[1; 20], [2; 20]].map(Address).into_iter().collect(), + // }, + // ); + + // assert_eq!( + // Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments, threshold), + // None + // ); + // assert_eq!(candidate, None); + + // commitments + // .get_mut(&commitment1.as_digest()) + // .unwrap() + // .origins + // .insert(Address([3; 20])); + // assert_eq!( + // Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments, threshold), + // None + // ); + // assert_eq!(candidate, None); + + // commitments + // .get_mut(&commitment1.as_digest()) + // .unwrap() + // .origins + // .insert(Address([4; 20])); + // assert_eq!( + // Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments, threshold), + // Some(MultisignedCommitments { + // commitments: [ + // (commitment1.as_digest(), commitment1), + // (commitment2.as_digest(), commitment2) + // ] + // .iter() + // .cloned() + // .collect(), + // signatures: Default::default(), + // }) + // ); + // assert_eq!(candidate, None); + // } +} diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index 25f46297ff6..45faf39b1e0 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -47,7 +47,7 @@ impl From for PublicKey { } } -#[derive(Encode, Decode, Default, Clone, Copy, PartialEq, Eq, Hash)] +#[derive(Encode, Decode, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct Address(pub [u8; 20]); impl TryFrom for Address { diff --git a/ethexe/signer/src/signature.rs b/ethexe/signer/src/signature.rs index b22785b94c5..7063d86a2c3 100644 --- a/ethexe/signer/src/signature.rs +++ b/ethexe/signer/src/signature.rs @@ -7,6 +7,7 @@ use secp256k1::{ }; use std::fmt; +#[derive(Clone, Copy, PartialEq, Eq)] pub struct RawSignature([u8; 65]); impl RawSignature { @@ -46,7 +47,7 @@ impl From for RawSignature { } } -#[derive(Clone, Encode, Decode, PartialEq, Eq)] +#[derive(Clone, Copy, Encode, Decode, PartialEq, Eq)] pub struct Signature([u8; 65]); impl Signature { @@ -55,7 +56,7 @@ impl Signature { } pub fn recover_from_digest(&self, digest: Digest) -> Result { - let sig = self.clone().try_into()?; + let sig = (*self).try_into()?; let public_key = secp256k1::global::SECP256K1 .recover_ecdsa(&Message::from_digest(digest.into()), &sig)?; Ok(PublicKey::from_bytes(public_key.serialize())) diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 20947477920..fd3b40c7b9e 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -23,7 +23,9 @@ use ethexe_common::{ db::{BlockMetaStorage, CodesStorage}, BlockCommitment, CodeCommitment, }; -use ethexe_sequencer::{agro, AggregatedCommitments, BlockCommitmentValidationRequest}; +use ethexe_sequencer::{ + agro::CommitmentsDigestSigner, AggregatedCommitments, BlockCommitmentValidationRequest, +}; use ethexe_signer::{Address, AsDigest, PublicKey, Signature, Signer}; use gprimitives::H256; @@ -95,12 +97,8 @@ impl Validator { digests.push(request.as_digest()); } - agro::sign_digest( - digests.as_digest(), - &self.signer, - self.pub_key, - self.router_address, - ) + self.signer + .sign_commitments_digest(digests.as_digest(), self.pub_key, self.router_address) } pub fn validate_block_commitments( @@ -154,12 +152,8 @@ impl Validator { digests.push(request.as_digest()); } - agro::sign_digest( - digests.as_digest(), - &self.signer, - self.pub_key, - self.router_address, - ) + self.signer + .sign_commitments_digest(digests.as_digest(), self.pub_key, self.router_address) } /// Verify whether `pred_hash` is a predecessor of `block_hash` in the chain. From 45c0d08e50b5b980dde34f13260a9096f9e720aa Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 8 Aug 2024 12:02:52 +0200 Subject: [PATCH 12/44] append sequencer tests --- ethexe/sequencer/src/lib.rs | 192 ++++++++++++++---------------------- 1 file changed, 75 insertions(+), 117 deletions(-) diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 7ac438c3317..0d2f5672423 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -954,121 +954,79 @@ mod tests { ); } - // #[test] - // fn test_process_multisigned_candidate() { - // // Test candidate is None - // assert_eq!( - // Sequencer::process_multisigned_candidate::(&mut None, &mut Default::default(), 0), - // None - // ); - - // // Test not enough signatures - // let mut candidate = Some(Candidate { - // digest: [1; 32].into(), - // multisigned: MultisignedDigests { - // digests: [[2; 32]].map(Into::into).into_iter().collect(), - // signatures: Default::default(), - // }, - // }); - // assert_eq!( - // Sequencer::process_multisigned_candidate(&mut candidate, &mut Default::default(), 2), - // None - // ); - - // let mut candidate = None; - // let threshold = 2; - - // let mut commitments = CommitmentsMap::new(); - // let origins: BTreeSet<_> = [[1; 20], [2; 20]].map(Address).into_iter().collect(); - - // let commitment = TestComm([0, 1]); - // commitments.insert( - // commitment1.as_digest(), - // CommitmentAndOrigins { - // commitment: commitment1, - // origins: Default::default(), - // }, - // ); - - // let commitment2 = TestComm([2, 3]); - // commitments.insert( - // commitment2.as_digest(), - // CommitmentAndOrigins { - // commitment: commitment2, - // origins: Default::default(), - // }, - // ); - - // let x = catch_unwind(|| { - // Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments, threshold) - // }) - // assert_eq!( - // Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments, threshold), - // None - // ); - // assert_eq!(candidate, None); - - // let commitment1 = TestComm([0, 1]); - // commitments.insert( - // commitment1.as_digest(), - // CommitmentAndOrigins { - // commitment: commitment1, - // }, - // ); - - // let commitment2 = TestComm([2, 3]); - // commitments.insert( - // commitment2.as_digest(), - // CommitmentAndOrigins { - // commitment: commitment2, - // origins: [[1; 20], [2; 20]].map(Address).into_iter().collect(), - // }, - // ); - - // let commitment3 = TestComm([4, 5]); - // commitments.insert( - // commitment3.as_digest(), - // CommitmentAndOrigins { - // commitment: commitment3, - // origins: [[1; 20], [2; 20]].map(Address).into_iter().collect(), - // }, - // ); - - // assert_eq!( - // Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments, threshold), - // None - // ); - // assert_eq!(candidate, None); - - // commitments - // .get_mut(&commitment1.as_digest()) - // .unwrap() - // .origins - // .insert(Address([3; 20])); - // assert_eq!( - // Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments, threshold), - // None - // ); - // assert_eq!(candidate, None); - - // commitments - // .get_mut(&commitment1.as_digest()) - // .unwrap() - // .origins - // .insert(Address([4; 20])); - // assert_eq!( - // Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments, threshold), - // Some(MultisignedCommitments { - // commitments: [ - // (commitment1.as_digest(), commitment1), - // (commitment2.as_digest(), commitment2) - // ] - // .iter() - // .cloned() - // .collect(), - // signatures: Default::default(), - // }) - // ); - // assert_eq!(candidate, None); - // } + #[test] + fn test_process_multisigned_candidate() { + // Test candidate is None + assert_eq!( + Sequencer::process_multisigned_candidate::( + &mut None, + &mut Default::default(), + 0 + ), + None + ); + + // Test not enough signatures + let mut candidate = Some(Candidate { + digest: [1; 32].into(), + multisigned: MultisignedDigests { + digests: Default::default(), + signatures: Default::default(), + }, + }); + assert_eq!( + Sequencer::process_multisigned_candidate( + &mut candidate, + &mut CommitmentsMap::::new(), + 2 + ), + None + ); + + let mut commitments_map = CommitmentsMap::new(); + let validators_private_keys = [PrivateKey([1; 32]), PrivateKey([2; 32])]; + let validators_pub_keys = validators_private_keys.map(PublicKey::from); + let origins: BTreeSet<_> = validators_pub_keys + .map(|k| k.to_address()) + .into_iter() + .collect(); + + let commitments = [TestComm([0, 1]), TestComm([2, 3]), TestComm([4, 5])]; + commitments.iter().for_each(|commitment| { + commitments_map.insert( + commitment.as_digest(), + CommitmentAndOrigins { + commitment: *commitment, + origins: origins.clone(), + }, + ); + }); + + Sequencer::set_candidate_commitments(&commitments_map, &mut candidate, 2).unwrap(); + + let mut candidate = candidate.unwrap(); + let router_address = Address([1; 20]); + let signatures = [0, 1].map(|i| { + AggregatedCommitments::aggregate_commitments( + commitments.to_vec(), + &validators_private_keys[i], + validators_pub_keys[i], + router_address, + ) + .unwrap() + .signature + }); + candidate.multisigned.signatures = [0, 1] + .map(|i| (validators_pub_keys[i].to_address(), signatures[i])) + .into_iter() + .collect(); + + let mut candidate = Some(candidate); + assert!( + Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments_map, 2) + .is_some(), + ); + assert!(commitments_map.is_empty()); + assert_eq!(candidate, None); + } } From c32d7945951e268ee94dfd15fcc97b5a14a69a39 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 8 Aug 2024 12:49:29 +0200 Subject: [PATCH 13/44] test_verify_is_predecessor --- Cargo.lock | 1 + ethexe/sequencer/src/lib.rs | 7 ++-- ethexe/validator/Cargo.toml | 3 ++ ethexe/validator/src/lib.rs | 65 ++++++++++++++++++++++++++++++++++++- 4 files changed, 71 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5045b14ae92..29606557aa1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5163,6 +5163,7 @@ version = "1.4.2" dependencies = [ "anyhow", "ethexe-common", + "ethexe-db", "ethexe-sequencer", "ethexe-signer", "futures", diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 0d2f5672423..80bedf220f5 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -18,9 +18,10 @@ //! Sequencer for ethexe. -pub mod agro; +mod agro; + +pub use agro::{AggregatedCommitments, CommitmentsDigestSigner}; -use agro::CommitmentsDigestSigner; use anyhow::{anyhow, Result}; use ethexe_common::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; @@ -34,8 +35,6 @@ use std::{ }; use tokio::sync::watch; -pub use agro::AggregatedCommitments; - pub struct Config { pub ethereum_rpc: String, pub sign_tx_public: PublicKey, diff --git a/ethexe/validator/Cargo.toml b/ethexe/validator/Cargo.toml index 1988d5ac4a5..a92315d8690 100644 --- a/ethexe/validator/Cargo.toml +++ b/ethexe/validator/Cargo.toml @@ -23,3 +23,6 @@ tempfile.workspace = true uluru.workspace = true static_init = "1.0.3" + +#[dev-dependencies] +ethexe-db.workspace = true diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index fd3b40c7b9e..23e2e38a991 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -24,7 +24,7 @@ use ethexe_common::{ BlockCommitment, CodeCommitment, }; use ethexe_sequencer::{ - agro::CommitmentsDigestSigner, AggregatedCommitments, BlockCommitmentValidationRequest, + AggregatedCommitments, BlockCommitmentValidationRequest, CommitmentsDigestSigner, }; use ethexe_signer::{Address, AsDigest, PublicKey, Signature, Signer}; use gprimitives::H256; @@ -192,3 +192,66 @@ impl Validator { Ok(false) } } + +#[cfg(test)] +mod tests { + use super::*; + use ethexe_db::BlockHeader; + + #[test] + fn test_verify_is_predecessor() { + let db = ethexe_db::Database::from_one(ðexe_db::MemDb::default()); + + let blocks = [H256::random(), H256::random(), H256::random()]; + db.set_block_header( + blocks[0], + BlockHeader { + height: 100, + timestamp: 100, + parent_hash: H256::zero(), + }, + ); + db.set_block_header( + blocks[1], + BlockHeader { + height: 101, + timestamp: 101, + parent_hash: blocks[0], + }, + ); + db.set_block_header( + blocks[2], + BlockHeader { + height: 102, + timestamp: 102, + parent_hash: blocks[1], + }, + ); + + Validator::verify_is_predecessor(&db, blocks[1], H256::random(), None) + .expect_err("Unknown pred block is provided"); + + Validator::verify_is_predecessor(&db, H256::random(), blocks[0], None) + .expect_err("Unknown block is provided"); + + Validator::verify_is_predecessor(&db, blocks[2], blocks[0], Some(1)) + .expect_err("Distance is too large"); + + // Another chain block + let block3 = H256::random(); + db.set_block_header( + block3, + BlockHeader { + height: 1, + timestamp: 1, + parent_hash: blocks[0], + }, + ); + Validator::verify_is_predecessor(&db, blocks[2], block3, None) + .expect_err("Block is from other chain with incorrect height"); + + assert!(Validator::verify_is_predecessor(&db, blocks[2], blocks[0], None).unwrap()); + assert!(Validator::verify_is_predecessor(&db, blocks[2], blocks[0], Some(2)).unwrap()); + assert!(!Validator::verify_is_predecessor(&db, blocks[1], blocks[2], Some(1)).unwrap()); + } +} From e0772e9db67083338e70c0a68a599e34df58c561 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 8 Aug 2024 12:55:06 +0200 Subject: [PATCH 14/44] refactoring --- ethexe/cli/src/service.rs | 23 +++++++++- ethexe/sequencer/src/lib.rs | 86 ++++++++----------------------------- ethexe/validator/src/lib.rs | 47 ++++++++++++++++---- 3 files changed, 77 insertions(+), 79 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index be8551b8e42..bac103a4e5c 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -30,8 +30,9 @@ use ethexe_db::{BlockHeader, BlockMetaStorage, CodeUploadInfo, CodesStorage, Dat use ethexe_network::GossipsubMessage; use ethexe_observer::{BlockData, CodeLoadedData}; use ethexe_processor::LocalOutcome; -use ethexe_sequencer::NetworkMessage; -use ethexe_signer::{AsDigest, PublicKey, Signer}; +use ethexe_sequencer::AggregatedCommitments; +use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; +use ethexe_validator::BlockCommitmentValidationRequest; use futures::{future, stream::StreamExt, FutureExt}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; @@ -54,6 +55,24 @@ pub struct Service { rpc: Option, } +#[derive(Debug, Clone, Encode, Decode)] +pub enum NetworkMessage { + PublishCommitments { + origin: Address, + codes: Option>, + blocks: Option>, + }, + RequestCommitmentsValidation { + codes: BTreeMap, + blocks: BTreeMap, + }, + ApproveCommitments { + origin: Address, + codes: Option<(Digest, Signature)>, + blocks: Option<(Digest, Signature)>, + }, +} + impl Service { pub async fn new(config: &Config) -> Result { let rocks_db = ethexe_db::RocksDatabase::open(config.database_path.clone())?; diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 80bedf220f5..002f7d599bb 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -27,14 +27,29 @@ use ethexe_common::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; use ethexe_observer::Event; use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; -use gprimitives::H256; -use parity_scale_codec::{Decode, Encode}; use std::{ collections::{BTreeMap, BTreeSet, HashSet}, ops::Not, }; use tokio::sync::watch; +pub struct Sequencer { + key: PublicKey, + ethereum: Ethereum, + + validators: HashSet
, + threshold: u64, + + code_commitments: CommitmentsMap, + block_commitments: CommitmentsMap, + + codes_candidate: Option, + blocks_candidate: Option, + + status: SequencerStatus, + status_sender: watch::Sender, +} + pub struct Config { pub ethereum_rpc: String, pub sign_tx_public: PublicKey, @@ -75,73 +90,6 @@ struct Candidate { type CommitmentsMap = BTreeMap>; -pub struct Sequencer { - key: PublicKey, - ethereum: Ethereum, - - validators: HashSet
, - threshold: u64, - - code_commitments: CommitmentsMap, - block_commitments: CommitmentsMap, - - codes_candidate: Option, - blocks_candidate: Option, - - status: SequencerStatus, - status_sender: watch::Sender, -} - -#[derive(Debug, Clone, Encode, Decode)] -pub struct BlockCommitmentValidationRequest { - pub block_hash: H256, - pub allowed_pred_block_hash: H256, - pub allowed_prev_commitment_hash: H256, - pub transitions_digest: Digest, -} - -impl From<&BlockCommitment> for BlockCommitmentValidationRequest { - fn from(commitment: &BlockCommitment) -> Self { - Self { - block_hash: commitment.block_hash, - allowed_pred_block_hash: commitment.allowed_pred_block_hash, - allowed_prev_commitment_hash: commitment.allowed_prev_commitment_hash, - transitions_digest: commitment.transitions.as_digest(), - } - } -} - -impl AsDigest for BlockCommitmentValidationRequest { - fn as_digest(&self) -> Digest { - let mut message = Vec::with_capacity(3 * size_of::() + size_of::()); - - message.extend_from_slice(self.block_hash.as_bytes()); - message.extend_from_slice(self.allowed_pred_block_hash.as_bytes()); - message.extend_from_slice(self.allowed_prev_commitment_hash.as_bytes()); - message.extend_from_slice(self.transitions_digest.as_ref()); - - message.as_digest() - } -} - -#[derive(Debug, Clone, Encode, Decode)] -pub enum NetworkMessage { - PublishCommitments { - origin: Address, - codes: Option>, - blocks: Option>, - }, - RequestCommitmentsValidation { - codes: BTreeMap, - blocks: BTreeMap, - }, - ApproveCommitments { - origin: Address, - codes: Option<(Digest, Signature)>, - blocks: Option<(Digest, Signature)>, - }, -} - impl Sequencer { pub async fn new(config: &Config, signer: Signer) -> Result { let (status_sender, _status_receiver) = watch::channel(SequencerStatus::default()); diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 23e2e38a991..1b787ca9a1f 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -23,21 +23,52 @@ use ethexe_common::{ db::{BlockMetaStorage, CodesStorage}, BlockCommitment, CodeCommitment, }; -use ethexe_sequencer::{ - AggregatedCommitments, BlockCommitmentValidationRequest, CommitmentsDigestSigner, -}; -use ethexe_signer::{Address, AsDigest, PublicKey, Signature, Signer}; +use ethexe_sequencer::{AggregatedCommitments, CommitmentsDigestSigner}; +use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; use gprimitives::H256; +use parity_scale_codec::{Decode, Encode}; + +pub struct Validator { + pub_key: PublicKey, + signer: Signer, + router_address: Address, +} pub struct Config { pub pub_key: PublicKey, pub router_address: Address, } -pub struct Validator { - pub_key: PublicKey, - signer: Signer, - router_address: Address, +#[derive(Debug, Clone, Encode, Decode)] +pub struct BlockCommitmentValidationRequest { + pub block_hash: H256, + pub allowed_pred_block_hash: H256, + pub allowed_prev_commitment_hash: H256, + pub transitions_digest: Digest, +} + +impl From<&BlockCommitment> for BlockCommitmentValidationRequest { + fn from(commitment: &BlockCommitment) -> Self { + Self { + block_hash: commitment.block_hash, + allowed_pred_block_hash: commitment.allowed_pred_block_hash, + allowed_prev_commitment_hash: commitment.allowed_prev_commitment_hash, + transitions_digest: commitment.transitions.as_digest(), + } + } +} + +impl AsDigest for BlockCommitmentValidationRequest { + fn as_digest(&self) -> Digest { + let mut message = Vec::with_capacity(3 * size_of::() + size_of::()); + + message.extend_from_slice(self.block_hash.as_bytes()); + message.extend_from_slice(self.allowed_pred_block_hash.as_bytes()); + message.extend_from_slice(self.allowed_prev_commitment_hash.as_bytes()); + message.extend_from_slice(self.transitions_digest.as_ref()); + + message.as_digest() + } } impl Validator { From 1fd98a0778e08ad8b093653a30f7af731a8444a6 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 8 Aug 2024 16:53:24 +0200 Subject: [PATCH 15/44] sequencer methods refactoring --- ethexe/cli/src/service.rs | 90 ++++++++++++------------- ethexe/sequencer/src/lib.rs | 130 ++++++++++++++---------------------- 2 files changed, 91 insertions(+), 129 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 2b8256a44e1..abdd51f3d2f 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -36,7 +36,7 @@ use ethexe_validator::BlockCommitmentValidationRequest; use futures::{future, stream::StreamExt, FutureExt}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; -use std::{collections::BTreeMap, future::Future, ops::Not, sync::Arc, time::Duration}; +use std::{future::Future, ops::Not, sync::Arc, time::Duration}; /// ethexe service. pub struct Service { @@ -63,8 +63,8 @@ pub enum NetworkMessage { blocks: Option>, }, RequestCommitmentsValidation { - codes: BTreeMap, - blocks: BTreeMap, + codes: Vec, + blocks: Vec, }, ApproveCommitments { origin: Address, @@ -441,7 +441,7 @@ impl Service { }; let mut collection_round_timer: Option<_> = None; - let mut submission_round_timer: Option<_> = None; + let mut validation_round_timer: Option<_> = None; let mut roles = "Observer".to_string(); if let Some(seq) = sequencer.as_ref() { @@ -478,7 +478,7 @@ impl Service { collection_round_timer = Some(tokio::time::sleep(block_time / 4)); } _ = maybe_await(collection_round_timer.take()) => { - log::debug!("Reach timeout after block event..."); + log::debug!("Collection round timeout, process collected commitments..."); Self::process_collected_commitments( db.clone(), @@ -487,10 +487,10 @@ impl Service { network_sender.as_mut() )?; - submission_round_timer = Some(tokio::time::sleep(block_time / 4)); + validation_round_timer = Some(tokio::time::sleep(block_time / 4)); } - _ = maybe_await(submission_round_timer.take()) => { - log::debug!("Reach timeout after collecting commitments..."); + _ = maybe_await(validation_round_timer.take()) => { + log::debug!("Validation round timeout, process validated commitments..."); Self::process_approved_commitments(sequencer.as_mut()).await?; } @@ -598,25 +598,21 @@ impl Service { return Ok(()); }; - let (codes_hash, blocks_hash) = sequencer.process_collected_commitments()?; - - if codes_hash.is_none() && blocks_hash.is_none() { - return Ok(()); - } + sequencer.process_collected_commitments()?; if maybe_validator.is_none() && maybe_network_sender.is_none() { return Ok(()); } - let code_requests: BTreeMap<_, _> = codes_hash - .and_then(|hash| sequencer.get_candidate_code_commitments(hash)) - .map(|commitments| commitments.map(|c| (c.as_digest(), c.clone())).collect()) - .unwrap_or_default(); + let code_requests: Vec<_> = sequencer + .get_candidate_code_commitments() + .cloned() + .collect(); - let block_requests: BTreeMap<_, _> = blocks_hash - .and_then(|hash| sequencer.get_candidate_block_commitments(hash)) - .map(|commitments| commitments.map(|c| (c.as_digest(), c.into())).collect()) - .unwrap_or_default(); + let block_requests: Vec<_> = sequencer + .get_candidate_block_commitments() + .map(BlockCommitmentValidationRequest::from) + .collect(); if let Some(network_sender) = maybe_network_sender { log::debug!("Request validation of aggregated commitments..."); @@ -637,16 +633,16 @@ impl Service { let origin = validator.address(); - if let Some(aggregated_hash) = codes_hash { - let signature = - validator.validate_code_commitments(db.clone(), code_requests.into_values())?; - sequencer.receive_codes_signature(origin, aggregated_hash, signature)?; + if code_requests.is_empty().not() { + let digest = code_requests.as_digest(); + let signature = validator.validate_code_commitments(db.clone(), code_requests)?; + sequencer.receive_codes_signature(origin, digest, signature)?; } - if let Some(aggregated_hash) = blocks_hash { - let signature = validator - .validate_block_commitments(db.clone(), block_requests.into_values())?; - sequencer.receive_blocks_signature(origin, aggregated_hash, signature)?; + if block_requests.is_empty().not() { + let digest = block_requests.as_digest(); + let signature = validator.validate_block_commitments(db.clone(), block_requests)?; + sequencer.receive_blocks_signature(origin, digest, signature)?; } } @@ -696,34 +692,30 @@ impl Service { return Ok(()); }; - let codes_signature = if let Some(codes_hash) = codes + let codes = codes .is_empty() .not() - .then(|| codes.keys().cloned().collect::>().as_digest()) - { - let signature = - validator.validate_code_commitments(db.clone(), codes.into_values())?; - Some((codes_hash, signature)) - } else { - None - }; + .then(|| { + let digest = codes.as_digest(); + let signature = validator.validate_code_commitments(db.clone(), codes)?; + Ok((digest, signature)) + }) + .transpose()?; - let blocks_signature = if let Some(blocks_hash) = blocks + let blocks = blocks .is_empty() .not() - .then(|| blocks.keys().cloned().collect::>().as_digest()) - { - let signature = - validator.validate_block_commitments(db.clone(), blocks.into_values())?; - Some((blocks_hash, signature)) - } else { - None - }; + .then(|| { + let digest = blocks.as_digest(); + let signature = validator.validate_block_commitments(db.clone(), blocks)?; + Ok((digest, signature)) + }) + .transpose()?; let message = NetworkMessage::ApproveCommitments { origin: validator.address(), - codes: codes_signature, - blocks: blocks_signature, + codes, + blocks, }; network_sender.publish_message(message.encode()); diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 002f7d599bb..ff64a1598ae 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -118,35 +118,37 @@ impl Sequencer { if let Event::Block(data) = event { log::debug!("Receive block {:?}", data.block_hash); - self.codes_candidate = None; - self.blocks_candidate = None; - self.update_status(|status| { *status = SequencerStatus::default(); }); } + // Presently, sequencer resets candidates for each observer event, + // because each observer event resets ethexe service rounds. + self.codes_candidate = None; + self.blocks_candidate = None; + Ok(()) } - pub fn process_collected_commitments(&mut self) -> Result<(Option, Option)> { + pub fn process_collected_commitments(&mut self) -> Result<()> { if self.codes_candidate.is_some() || self.blocks_candidate.is_some() { return Err(anyhow!("Previous commitments candidate are not submitted")); } - let codes_digest = Self::set_candidate_commitments( + Self::set_candidate_commitments( &self.code_commitments, &mut self.codes_candidate, self.threshold, ); - let blocks_digest = Self::set_candidate_commitments( + Self::set_candidate_commitments( &self.block_commitments, &mut self.blocks_candidate, self.threshold, ); - Ok((codes_digest, blocks_digest)) + Ok(()) } pub async fn submit_multisigned_commitments(&mut self) -> Result<()> { @@ -268,68 +270,51 @@ impl Sequencer { self.status_sender.subscribe() } - pub fn get_candidate_code_commitments( - &self, - digest: Digest, - ) -> Option + '_> { - Self::get_candidate_commitments(digest, &self.codes_candidate, &self.code_commitments) + pub fn get_candidate_code_commitments(&self) -> impl Iterator + '_ { + Self::get_candidate_commitments(&self.codes_candidate, &self.code_commitments) } - pub fn get_candidate_block_commitments( - &self, - digest: Digest, - ) -> Option + '_> { - Self::get_candidate_commitments(digest, &self.blocks_candidate, &self.block_commitments) + pub fn get_candidate_block_commitments(&self) -> impl Iterator + '_ { + Self::get_candidate_commitments(&self.blocks_candidate, &self.block_commitments) } fn get_candidate_commitments<'a, C>( - digest: Digest, candidate: &'a Option, commitments: &'a CommitmentsMap, - ) -> Option + 'a> { - let Some(candidate) = candidate else { - return None; - }; - - if candidate.digest != digest { - return None; - } - - Some(candidate.multisigned.digests.iter().map(|digest| { - commitments - .get(digest) - .map(|c| &c.commitment) - .unwrap_or_else(|| { - unreachable!("Guarantied by `Sequencer` implementation to be in the map") - }) - })) + ) -> impl Iterator + 'a { + candidate.iter().flat_map(|candidate| { + candidate.multisigned.digests.iter().map(|digest| { + commitments + .get(digest) + .map(|c| &c.commitment) + .unwrap_or_else(|| { + unreachable!("Guarantied by `Sequencer` implementation to be in the map") + }) + }) + }) } fn set_candidate_commitments( commitments: &CommitmentsMap, candidate: &mut Option, threshold: u64, - ) -> Option { + ) { let suitable_digests: Vec<_> = commitments .iter() .filter_map(|(digest, c)| (c.origins.len() as u64 >= threshold).then_some(*digest)) .collect(); if suitable_digests.is_empty() { - return None; + return; } - let digest = suitable_digests.as_digest(); - *candidate = Some(Candidate { - digest, + digest: suitable_digests.as_digest(), multisigned: MultisignedDigests { digests: suitable_digests.into_iter().collect(), signatures: Default::default(), }, }); - - Some(digest) } fn process_multisigned_candidate( @@ -760,10 +745,7 @@ mod tests { let threshold = 2; let mut commitments = BTreeMap::new(); - assert_eq!( - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), - None - ); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); assert_eq!(candidate, None); let commitment1 = TestComm([0, 1]); @@ -774,10 +756,7 @@ mod tests { origins: Default::default(), }, ); - assert_eq!( - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), - None - ); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); assert_eq!(candidate, None); commitments @@ -785,10 +764,7 @@ mod tests { .unwrap() .origins .insert(Address([1; 20])); - assert_eq!( - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), - None - ); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); assert_eq!(candidate, None); commitments @@ -796,10 +772,7 @@ mod tests { .unwrap() .origins .insert(Address([2; 20])); - assert_eq!( - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), - Some([commitment1].as_digest()) - ); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); assert_eq!( candidate, Some(Candidate { @@ -822,10 +795,7 @@ mod tests { .collect(), }, ); - assert_eq!( - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), - Some([commitment1, commitment2].as_digest()) - ); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); assert_eq!( candidate, Some(Candidate { @@ -848,10 +818,7 @@ mod tests { origins: [Address([5; 20])].iter().cloned().collect(), }, ); - assert_eq!( - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold), - Some([commitment1, commitment2].as_digest()) - ); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); assert_eq!( candidate, Some(Candidate { @@ -949,23 +916,26 @@ mod tests { ); }); - Sequencer::set_candidate_commitments(&commitments_map, &mut candidate, 2).unwrap(); + Sequencer::set_candidate_commitments(&commitments_map, &mut candidate, 2); let mut candidate = candidate.unwrap(); let router_address = Address([1; 20]); - let signatures = [0, 1].map(|i| { - AggregatedCommitments::aggregate_commitments( - commitments.to_vec(), - &validators_private_keys[i], - validators_pub_keys[i], - router_address, - ) - .unwrap() - .signature - }); - candidate.multisigned.signatures = [0, 1] - .map(|i| (validators_pub_keys[i].to_address(), signatures[i])) - .into_iter() + candidate.multisigned.signatures = validators_private_keys + .iter() + .zip(validators_pub_keys.iter()) + .map(|(private_key, pub_key)| { + ( + pub_key.to_address(), + AggregatedCommitments::aggregate_commitments( + commitments.to_vec(), + private_key, + *pub_key, + router_address, + ) + .unwrap() + .signature, + ) + }) .collect(); let mut candidate = Some(candidate); From f306b2ecc38c4e0d1d551bcd6640ba084de2a63b Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 8 Aug 2024 19:50:34 +0200 Subject: [PATCH 16/44] fixes before review --- Cargo.lock | 4 ---- Cargo.toml | 2 +- ethexe/cli/src/args.rs | 2 +- ethexe/cli/src/config.rs | 2 +- ethexe/cli/src/service.rs | 28 +++++++++++++--------------- ethexe/common/src/lib.rs | 12 ------------ ethexe/signer/src/digest.rs | 26 ++++++++++++++++++++++---- ethexe/signer/src/lib.rs | 12 ------------ ethexe/signer/src/signature.rs | 26 ++++++++++++++++++++------ ethexe/validator/Cargo.toml | 1 - ethexe/validator/src/lib.rs | 16 +--------------- 11 files changed, 59 insertions(+), 72 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e0d90de0631..42e8451598c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -777,9 +777,6 @@ name = "anyhow" version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" -dependencies = [ - "backtrace", -] [[package]] name = "approx" @@ -5181,7 +5178,6 @@ dependencies = [ "parity-scale-codec", "static_init", "tempfile", - "uluru", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 02d3bcbda48..bdd141d536b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -113,7 +113,7 @@ members = [ [workspace.dependencies] alloy = "0.1.4" -anyhow = { version = "1.0.86", features = ["std", "backtrace"] } +anyhow = "1.0.86" arbitrary = "1.3.2" async-recursion = "1.1.1" async-trait = "0.1.81" diff --git a/ethexe/cli/src/args.rs b/ethexe/cli/src/args.rs index 1a3e67b8151..0c647c5bae4 100644 --- a/ethexe/cli/src/args.rs +++ b/ethexe/cli/src/args.rs @@ -108,7 +108,7 @@ pub struct Args { #[clap(flatten)] pub prometheus_params: Option, - /// Validators to use + /// Validators set pub validators: Option>, #[command(subcommand)] diff --git a/ethexe/cli/src/config.rs b/ethexe/cli/src/config.rs index 56b8420e0a2..c2c8be461de 100644 --- a/ethexe/cli/src/config.rs +++ b/ethexe/cli/src/config.rs @@ -126,7 +126,7 @@ pub struct Config { /// RPC port pub rpc_port: Option, - /// Validators to use + /// Validators set pub validators: Vec
, } diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index abdd51f3d2f..8e0b53ae94f 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -23,9 +23,7 @@ use crate::{ metrics::MetricsService, }; use anyhow::{anyhow, Ok, Result}; -use ethexe_common::{ - events::BlockEvent, BlockCommitment, CodeCommitment, Commitments, StateTransition, -}; +use ethexe_common::{events::BlockEvent, BlockCommitment, CodeCommitment, StateTransition}; use ethexe_db::{BlockHeader, BlockMetaStorage, CodeUploadInfo, CodesStorage, Database}; use ethexe_network::GossipsubMessage; use ethexe_observer::{BlockData, CodeLoadedData}; @@ -358,7 +356,7 @@ impl Service { processor: &mut ethexe_processor::Processor, maybe_sequencer: &mut Option, observer_event: ethexe_observer::Event, - ) -> Result { + ) -> Result<(Vec, Vec)> { if let Some(sequencer) = maybe_sequencer { sequencer.process_observer_event(&observer_event)?; } @@ -373,7 +371,7 @@ impl Service { ); let commitments = Self::process_block_event(db, query, processor, block_data).await?; - Ok((Vec::new(), commitments).into()) + Ok((Vec::new(), commitments)) } ethexe_observer::Event::CodeLoaded(CodeLoadedData { code_id, code, .. }) => { let outcomes = processor.process_upload_code(code_id, code.as_slice())?; @@ -391,7 +389,7 @@ impl Service { _ => unreachable!("Only code outcomes are expected here"), }) .collect(); - Ok((commitments, Vec::new()).into()) + Ok((commitments, Vec::new())) } } } @@ -460,7 +458,7 @@ impl Service { break; }; - let commitments = Self::process_observer_event( + let (code_commitments, block_commitments) = Self::process_observer_event( &db, &mut query, &mut processor, @@ -469,7 +467,8 @@ impl Service { ).await?; Self::post_process_commitments( - commitments, + code_commitments, + block_commitments, validator.as_mut(), sequencer.as_mut(), network_sender.as_mut(), @@ -529,7 +528,8 @@ impl Service { } async fn post_process_commitments( - commitments: Commitments, + code_commitments: Vec, + block_commitments: Vec, maybe_validator: Option<&mut ethexe_validator::Validator>, maybe_sequencer: Option<&mut ethexe_sequencer::Sequencer>, maybe_network_sender: Option<&mut ethexe_network::NetworkSender>, @@ -539,17 +539,15 @@ impl Service { }; let origin = validator.address(); - let aggregated_codes = commitments - .codes + let aggregated_codes = code_commitments .is_empty() .not() - .then(|| validator.aggregate_codes(commitments.codes)) + .then(|| validator.aggregate(code_commitments)) .transpose()?; - let aggregated_blocks = commitments - .blocks + let aggregated_blocks = block_commitments .is_empty() .not() - .then(|| validator.aggregate_blocks(commitments.blocks)) + .then(|| validator.aggregate(block_commitments)) .transpose()?; if aggregated_codes.is_none() && aggregated_blocks.is_none() { diff --git a/ethexe/common/src/lib.rs b/ethexe/common/src/lib.rs index f7049fc0cf1..43f7f01bf54 100644 --- a/ethexe/common/src/lib.rs +++ b/ethexe/common/src/lib.rs @@ -66,15 +66,3 @@ pub struct BlockCommitment { pub allowed_prev_commitment_hash: H256, pub transitions: Vec, } - -#[derive(Debug, Clone, Default)] -pub struct Commitments { - pub codes: Vec, - pub blocks: Vec, -} - -impl From<(Vec, Vec)> for Commitments { - fn from((codes, blocks): (Vec, Vec)) -> Self { - Self { codes, blocks } - } -} diff --git a/ethexe/signer/src/digest.rs b/ethexe/signer/src/digest.rs index 7acbd387440..0d5b0a1e6b1 100644 --- a/ethexe/signer/src/digest.rs +++ b/ethexe/signer/src/digest.rs @@ -1,3 +1,23 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Keccak256 digest type. Implements AsDigest hashing for ethexe common types. + use core::fmt; use ethexe_common::{BlockCommitment, CodeCommitment, OutgoingMessage, StateTransition}; use gprimitives::{MessageId, H256}; @@ -34,6 +54,7 @@ impl fmt::Display for Digest { } } +/// Trait for hashing types into a Digest using Keccak256. pub trait AsDigest { fn as_digest(&self) -> Digest; } @@ -122,10 +143,7 @@ impl AsDigest for StateTransition { impl AsDigest for BlockCommitment { fn as_digest(&self) -> Digest { let mut message = Vec::with_capacity( - size_of::() - + size_of::() - + size_of::() - + self.transitions.len() * size_of::(), + 3 * size_of::() + self.transitions.len() * size_of::(), ); message.extend_from_slice(self.block_hash.as_bytes()); diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index 45faf39b1e0..1191360a6c3 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -65,18 +65,6 @@ impl TryFrom for Address { } } -pub struct Hash([u8; 32]); - -impl From for gprimitives::H256 { - fn from(source: Hash) -> gprimitives::H256 { - gprimitives::H256::from_slice(&source.0) - } -} - -pub fn hash(data: &[u8]) -> gprimitives::H256 { - Hash(<[u8; 32]>::from(sha3::Keccak256::digest(data))).into() -} - fn strip_prefix(s: &str) -> &str { if let Some(s) = s.strip_prefix("0x") { s diff --git a/ethexe/signer/src/signature.rs b/ethexe/signer/src/signature.rs index 7063d86a2c3..1b7c53867cf 100644 --- a/ethexe/signer/src/signature.rs +++ b/ethexe/signer/src/signature.rs @@ -1,3 +1,23 @@ +// This file is part of Gear. +// +// Copyright (C) 2024 Gear Technologies Inc. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Secp256k1 signature types and utilities. + use crate::{Digest, PrivateKey, PublicKey}; use anyhow::{Context, Result}; use parity_scale_codec::{Decode, Encode}; @@ -99,12 +119,6 @@ impl fmt::Display for Signature { } } -impl Default for Signature { - fn default() -> Self { - Signature([0u8; 65]) - } -} - impl TryFrom for RecoverableSignature { type Error = anyhow::Error; diff --git a/ethexe/validator/Cargo.toml b/ethexe/validator/Cargo.toml index a92315d8690..9aa0a60a1e6 100644 --- a/ethexe/validator/Cargo.toml +++ b/ethexe/validator/Cargo.toml @@ -20,7 +20,6 @@ anyhow.workspace = true futures.workspace = true parity-scale-codec = { workspace = true, features = ["std", "derive"] } tempfile.workspace = true -uluru.workspace = true static_init = "1.0.3" diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 1b787ca9a1f..61fb47ebbc5 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -88,7 +88,7 @@ impl Validator { self.pub_key.to_address() } - fn aggregate(&self, commitments: Vec) -> Result> { + pub fn aggregate(&self, commitments: Vec) -> Result> { AggregatedCommitments::aggregate_commitments( commitments, &self.signer, @@ -97,20 +97,6 @@ impl Validator { ) } - pub fn aggregate_codes( - &self, - commitments: Vec, - ) -> Result> { - self.aggregate(commitments) - } - - pub fn aggregate_blocks( - &self, - commitments: Vec, - ) -> Result> { - self.aggregate(commitments) - } - pub fn validate_code_commitments( &mut self, db: impl CodesStorage, From bcd5cdc44194855e927ab66a3817a8cd948ae9ea Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 8 Aug 2024 20:05:05 +0200 Subject: [PATCH 17/44] a little more refactoring before review --- ethexe/cli/src/service.rs | 23 ++++++++++++++--------- ethexe/validator/src/lib.rs | 6 +++--- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 8e0b53ae94f..ba74d7f783b 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -480,7 +480,7 @@ impl Service { log::debug!("Collection round timeout, process collected commitments..."); Self::process_collected_commitments( - db.clone(), + &db, validator.as_mut(), sequencer.as_mut(), network_sender.as_mut() @@ -500,7 +500,7 @@ impl Service { let _ = Self::process_network_message( message, - db.clone(), + &db, validator.as_mut(), sequencer.as_mut(), network_sender.as_mut(), @@ -538,7 +538,10 @@ impl Service { return Ok(()); }; - let origin = validator.address(); + if maybe_network_sender.is_none() && maybe_sequencer.is_none() { + return Ok(()); + } + let aggregated_codes = code_commitments .is_empty() .not() @@ -554,6 +557,8 @@ impl Service { return Ok(()); } + let origin = validator.address(); + if let Some(network_sender) = maybe_network_sender { log::debug!("Publishing commitments to network..."); network_sender.publish_message( @@ -587,7 +592,7 @@ impl Service { } fn process_collected_commitments( - db: Database, + db: &Database, maybe_validator: Option<&mut ethexe_validator::Validator>, maybe_sequencer: Option<&mut ethexe_sequencer::Sequencer>, maybe_network_sender: Option<&mut ethexe_network::NetworkSender>, @@ -633,13 +638,13 @@ impl Service { if code_requests.is_empty().not() { let digest = code_requests.as_digest(); - let signature = validator.validate_code_commitments(db.clone(), code_requests)?; + let signature = validator.validate_code_commitments(db, code_requests)?; sequencer.receive_codes_signature(origin, digest, signature)?; } if block_requests.is_empty().not() { let digest = block_requests.as_digest(); - let signature = validator.validate_block_commitments(db.clone(), block_requests)?; + let signature = validator.validate_block_commitments(db, block_requests)?; sequencer.receive_blocks_signature(origin, digest, signature)?; } } @@ -659,7 +664,7 @@ impl Service { fn process_network_message( message: GossipsubMessage, - db: Database, + db: &Database, maybe_validator: Option<&mut ethexe_validator::Validator>, maybe_sequencer: Option<&mut ethexe_sequencer::Sequencer>, maybe_network_sender: Option<&mut ethexe_network::NetworkSender>, @@ -695,7 +700,7 @@ impl Service { .not() .then(|| { let digest = codes.as_digest(); - let signature = validator.validate_code_commitments(db.clone(), codes)?; + let signature = validator.validate_code_commitments(db, codes)?; Ok((digest, signature)) }) .transpose()?; @@ -705,7 +710,7 @@ impl Service { .not() .then(|| { let digest = blocks.as_digest(); - let signature = validator.validate_block_commitments(db.clone(), blocks)?; + let signature = validator.validate_block_commitments(db, blocks)?; Ok((digest, signature)) }) .transpose()?; diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 61fb47ebbc5..4058b9019ef 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -99,7 +99,7 @@ impl Validator { pub fn validate_code_commitments( &mut self, - db: impl CodesStorage, + db: &impl CodesStorage, requests: impl IntoIterator, ) -> Result { let mut digests = Vec::new(); @@ -120,7 +120,7 @@ impl Validator { pub fn validate_block_commitments( &mut self, - db: impl BlockMetaStorage, + db: &impl BlockMetaStorage, requests: impl IntoIterator, ) -> Result { let mut digests = Vec::new(); @@ -160,7 +160,7 @@ impl Validator { return Err(anyhow!("block prev commitment hash mismatch")); } - if Self::verify_is_predecessor(&db, allowed_pred_block_hash, block_hash, None)?.not() { + if Self::verify_is_predecessor(db, allowed_pred_block_hash, block_hash, None)?.not() { return Err(anyhow!( "{block_hash} is not a predecessor of {allowed_pred_block_hash}" )); From bd79beacca2e4fec2dfc158c2620d5c3cad5de50 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 9 Aug 2024 18:25:25 +0200 Subject: [PATCH 18/44] MultisignedCommitmentDigests --- ethexe/cli/src/service.rs | 14 +- ethexe/common/src/db.rs | 2 +- ethexe/db/src/database.rs | 4 +- ethexe/sequencer/src/agro.rs | 93 ++++++++- ethexe/sequencer/src/lib.rs | 376 ++++++++++++----------------------- ethexe/validator/src/lib.rs | 258 ++++++++++++++++++------ 6 files changed, 427 insertions(+), 320 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index ba74d7f783b..ab3ae6cad63 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -498,13 +498,17 @@ impl Service { continue; }; - let _ = Self::process_network_message( + let result = Self::process_network_message( message, &db, validator.as_mut(), sequencer.as_mut(), network_sender.as_mut(), ); + + if let Err(err) = result { + log::warn!("Failed to process network message: {:?}", err); + } } _ = maybe_await(network_handle.as_mut()) => { log::info!("`NetworkWorker` has terminated, shutting down..."); @@ -733,12 +737,12 @@ impl Service { return Ok(()); }; - if let Some((hash, signature)) = codes { - sequencer.receive_codes_signature(origin, hash, signature)?; + if let Some((digest, signature)) = codes { + sequencer.receive_codes_signature(origin, digest, signature)?; } - if let Some((hash, signature)) = blocks { - sequencer.receive_blocks_signature(origin, hash, signature)?; + if let Some((digest, signature)) = blocks { + sequencer.receive_blocks_signature(origin, digest, signature)?; } Ok(()) diff --git a/ethexe/common/src/db.rs b/ethexe/common/src/db.rs index 7ca40c5adc9..b36a973a8d0 100644 --- a/ethexe/common/src/db.rs +++ b/ethexe/common/src/db.rs @@ -89,5 +89,5 @@ pub trait CodesStorage: Send + Sync { fn set_code_upload_info(&self, code_id: CodeId, info: CodeUploadInfo); fn code_approved(&self, code_id: CodeId) -> Option; - fn set_code_approved(&self, code_id: CodeId, rejected: bool); + fn set_code_approved(&self, code_id: CodeId, approved: bool); } diff --git a/ethexe/db/src/database.rs b/ethexe/db/src/database.rs index f197dde6edf..9e2ee127028 100644 --- a/ethexe/db/src/database.rs +++ b/ethexe/db/src/database.rs @@ -315,9 +315,9 @@ impl CodesStorage for Database { }) } - fn set_code_approved(&self, code_id: CodeId, rejected: bool) { + fn set_code_approved(&self, code_id: CodeId, approved: bool) { self.kv - .put(&KeyPrefix::CodeApproved.one(code_id), rejected.encode()); + .put(&KeyPrefix::CodeApproved.one(code_id), approved.encode()); } } diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 21a81785530..f0f7768f861 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -18,6 +18,8 @@ //! Abstract commitment aggregator. +use std::collections::{BTreeMap, BTreeSet}; + use anyhow::Result; use ethexe_signer::{Address, AsDigest, Digest, PrivateKey, PublicKey, Signature, Signer}; use parity_scale_codec::{Decode, Encode}; @@ -29,14 +31,6 @@ pub trait CommitmentsDigestSigner { pub_key: PublicKey, router_address: Address, ) -> Result; - - fn recover_from_commitments_digest( - commitments_digest: Digest, - signature: &Signature, - router_address: Address, - ) -> Result
{ - recover_from_commitments_digest(commitments_digest, signature, router_address) - } } impl CommitmentsDigestSigner for Signer { @@ -102,6 +96,89 @@ impl AggregatedCommitments { } } +pub struct MultisignedCommitmentDigests { + digest: Digest, + digests: Vec, + signatures: BTreeMap, +} + +impl MultisignedCommitmentDigests { + pub fn new(digests: BTreeSet) -> Self { + let digests: Vec<_> = digests.into_iter().collect(); + Self { + digest: digests.as_digest(), + digests, + signatures: BTreeMap::new(), + } + } + + pub fn append_signature_with_check( + &mut self, + digest: Digest, + signature: Signature, + origin: Address, + router_address: Address, + ) -> Result<()> { + if self.digest != digest { + return Err(anyhow::anyhow!("Aggregated commitments digest mismatch")); + } + + if recover_from_commitments_digest(digest, &signature, router_address)? != origin { + return Err(anyhow::anyhow!("Invalid signature")); + } + + self.signatures.insert(origin, signature); + + Ok(()) + } + + pub fn digests(&self) -> &[Digest] { + self.digests.as_slice() + } + + pub fn signatures(&self) -> &BTreeMap { + &self.signatures + } +} + +pub struct MultisignedCommitments { + commitments: Vec, + signatures: BTreeMap, +} + +impl MultisignedCommitments { + pub fn from_multisigned_digests( + multisigned: MultisignedCommitmentDigests, + mut get_commitment: impl FnMut(Digest) -> Option, + ) -> Result { + let MultisignedCommitmentDigests { + digests, + signatures, + .. + } = multisigned; + + let mut commitments = Vec::new(); + for digest in digests { + let commitment = get_commitment(digest) + .ok_or_else(|| anyhow::anyhow!("Missing commitment for {digest}"))?; + commitments.push(commitment); + } + + Ok(Self { + commitments, + signatures, + }) + } + + pub fn commitments(&self) -> &[C] { + &self.commitments + } + + pub fn into_parts(self) -> (Vec, BTreeMap) { + (self.commitments, self.signatures) + } +} + fn recover_from_commitments_digest( commitments_digest: Digest, signature: &Signature, diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index ff64a1598ae..46e1f08eed6 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -21,6 +21,7 @@ mod agro; pub use agro::{AggregatedCommitments, CommitmentsDigestSigner}; +use agro::{MultisignedCommitmentDigests, MultisignedCommitments}; use anyhow::{anyhow, Result}; use ethexe_common::{BlockCommitment, CodeCommitment}; @@ -43,8 +44,8 @@ pub struct Sequencer { code_commitments: CommitmentsMap, block_commitments: CommitmentsMap, - codes_candidate: Option, - blocks_candidate: Option, + codes_candidate: Option, + blocks_candidate: Option, status: SequencerStatus, status_sender: watch::Sender, @@ -70,24 +71,6 @@ struct CommitmentAndOrigins { origins: BTreeSet
, } -#[derive(Debug, Clone, PartialEq, Eq)] -struct MultisignedCommitments { - commitments: BTreeMap, - signatures: BTreeMap, -} - -#[derive(Debug, Clone, PartialEq, Eq)] -struct MultisignedDigests { - digests: BTreeSet, - signatures: BTreeMap, -} - -#[derive(Debug, Clone, PartialEq, Eq)] -struct Candidate { - digest: Digest, - multisigned: MultisignedDigests, -} - type CommitmentsMap = BTreeMap>; impl Sequencer { @@ -170,14 +153,14 @@ impl Sequencer { ); if let Some(candidate) = codes_candidate { - code_commitments_len = candidate.commitments.len() as u64; + code_commitments_len = candidate.commitments().len() as u64; log::debug!("Collected {code_commitments_len} code commitments. Trying to submit..."); codes_future = Some(self.submit_codes_commitment(candidate)); }; if let Some(candidate) = blocks_candidate { - block_commitments_len = candidate.commitments.len() as u64; + block_commitments_len = candidate.commitments().len() as u64; log::debug!("Collected {block_commitments_len} block commitments. Trying to submit...",); blocks_future = Some(self.submit_block_commitments(candidate)); @@ -279,11 +262,13 @@ impl Sequencer { } fn get_candidate_commitments<'a, C>( - candidate: &'a Option, + candidate: &'a Option, commitments: &'a CommitmentsMap, ) -> impl Iterator + 'a { - candidate.iter().flat_map(|candidate| { - candidate.multisigned.digests.iter().map(|digest| { + candidate + .iter() + .flat_map(|candidate| candidate.digests().iter()) + .map(|digest| { commitments .get(digest) .map(|c| &c.commitment) @@ -291,15 +276,14 @@ impl Sequencer { unreachable!("Guarantied by `Sequencer` implementation to be in the map") }) }) - }) } fn set_candidate_commitments( commitments: &CommitmentsMap, - candidate: &mut Option, + candidate: &mut Option, threshold: u64, ) { - let suitable_digests: Vec<_> = commitments + let suitable_digests: BTreeSet<_> = commitments .iter() .filter_map(|(digest, c)| (c.origins.len() as u64 >= threshold).then_some(*digest)) .collect(); @@ -308,61 +292,38 @@ impl Sequencer { return; } - *candidate = Some(Candidate { - digest: suitable_digests.as_digest(), - multisigned: MultisignedDigests { - digests: suitable_digests.into_iter().collect(), - signatures: Default::default(), - }, - }); + *candidate = Some(MultisignedCommitmentDigests::new(suitable_digests)); } fn process_multisigned_candidate( - candidate: &mut Option, + candidate: &mut Option, commitments: &mut CommitmentsMap, threshold: u64, ) -> Option> { if candidate .as_ref() - .map(|c| threshold > c.multisigned.signatures.len() as u64) + .map(|c| threshold > c.signatures().len() as u64) .unwrap_or(true) { return None; } - let Candidate { multisigned, .. } = candidate.take()?; - - if multisigned.digests.is_empty() { - unreachable!("Guarantied by `Sequencer` implementation to be not empty"); - } - - let commitments = multisigned - .digests - .iter() - .map(|digest| { - commitments - .remove(digest) - .map(|c| (*digest, c.commitment)) - .unwrap_or_else(|| { - unreachable!("Guarantied by `Sequencer` implementation to be in the map"); - }) - }) - .collect(); - - Some(MultisignedCommitments { - commitments, - signatures: multisigned.signatures, + let candidate = candidate.take()?; + let multisigned = MultisignedCommitments::from_multisigned_digests(candidate, |digest| { + commitments.remove(&digest).map(|c| c.commitment) }) + .unwrap_or_else(|_| { + unreachable!("Guarantied by `Sequencer` implementation to be in the map"); + }); + + Some(multisigned) } async fn submit_codes_commitment( &self, - MultisignedCommitments { - commitments, - signatures, - }: MultisignedCommitments, + multisigned: MultisignedCommitments, ) -> Result<()> { - let codes = commitments.into_values().map(Into::into).collect(); + let (codes, signatures) = multisigned.into_parts(); let (origins, signatures): (Vec<_>, _) = signatures.into_iter().unzip(); log::debug!("Code commitments to submit: {codes:?}, signed by: {origins:?}",); @@ -378,12 +339,9 @@ impl Sequencer { async fn submit_block_commitments( &self, - MultisignedCommitments { - commitments, - signatures, - }: MultisignedCommitments, + multisigned: MultisignedCommitments, ) -> Result<()> { - let blocks = commitments.into_values().map(Into::into).collect(); + let (blocks, signatures) = multisigned.into_parts(); let (origins, signatures): (Vec<_>, _) = signatures.into_iter().unzip(); log::debug!("Block commitments to submit: {blocks:?}, signed by: {origins:?}",); @@ -444,29 +402,17 @@ impl Sequencer { signature: Signature, validators: &HashSet
, router_address: Address, - candidate: Option<&mut Candidate>, + candidate: Option<&mut MultisignedCommitmentDigests>, ) -> Result<()> { let Some(candidate) = candidate else { return Err(anyhow!("No candidate found")); }; - if candidate.digest != commitments_digest { - return Err(anyhow!("Digest mismatch")); - } - if !validators.contains(&origin) { return Err(anyhow!("Unknown validator {origin}")); } - if Signer::recover_from_commitments_digest(commitments_digest, &signature, router_address)? - != origin - { - return Err(anyhow!("Invalid signature")); - } - - candidate.multisigned.signatures.insert(origin, signature); - - Ok(()) + candidate.append_signature_with_check(commitments_digest, signature, origin, router_address) } fn update_status(&mut self, update_fn: F) @@ -531,13 +477,8 @@ mod tests { let mut signatures: BTreeMap<_, _> = Default::default(); let digests: BTreeSet<_> = commitments.iter().map(AsDigest::as_digest).collect(); - let mut candidate = Candidate { - digest: commitments_digest, - multisigned: MultisignedDigests { - digests: digests.clone(), - signatures: signatures.clone(), - }, - }; + let expected_digests: Vec<_> = digests.iter().cloned().collect(); + let mut candidate = MultisignedCommitmentDigests::new(digests); Sequencer::receive_signature( validator1, @@ -580,16 +521,8 @@ mod tests { .unwrap(); signatures.insert(validator1, signature); - assert_eq!( - candidate, - Candidate { - digest: commitments_digest, - multisigned: MultisignedDigests { - digests: digests.clone(), - signatures: signatures.clone(), - }, - } - ); + assert_eq!(expected_digests.as_slice(), candidate.digests()); + assert_eq!(&signatures, candidate.signatures()); let validator2_private_key = validators_private_keys[1]; let validator2_pub_key = PublicKey::from(validator2_private_key); @@ -615,16 +548,8 @@ mod tests { .unwrap(); signatures.insert(validator2, signature); - assert_eq!( - candidate, - Candidate { - digest: commitments_digest, - multisigned: MultisignedDigests { - digests, - signatures, - }, - } - ); + assert_eq!(expected_digests.as_slice(), candidate.digests()); + assert_eq!(&signatures, candidate.signatures()); } #[test] @@ -746,121 +671,89 @@ mod tests { let mut commitments = BTreeMap::new(); Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - assert_eq!(candidate, None); + assert!(candidate.is_none()); let commitment1 = TestComm([0, 1]); - commitments.insert( - commitment1.as_digest(), - CommitmentAndOrigins { - commitment: commitment1, - origins: Default::default(), - }, - ); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - assert_eq!(candidate, None); - - commitments - .get_mut(&commitment1.as_digest()) - .unwrap() - .origins - .insert(Address([1; 20])); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - assert_eq!(candidate, None); + let commitment2 = TestComm([2, 3]); + let commitment3 = TestComm([4, 5]); - commitments - .get_mut(&commitment1.as_digest()) - .unwrap() - .origins - .insert(Address([2; 20])); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - assert_eq!( - candidate, - Some(Candidate { - digest: [commitment1].as_digest(), - multisigned: MultisignedDigests { - digests: [commitment1.as_digest()].iter().cloned().collect(), - signatures: Default::default(), + { + commitments.insert( + commitment1.as_digest(), + CommitmentAndOrigins { + commitment: commitment1, + origins: Default::default(), }, - }) - ); + ); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); + assert!(candidate.is_none()); + } - let commitment2 = TestComm([2, 3]); - commitments.insert( - commitment2.as_digest(), - CommitmentAndOrigins { - commitment: commitment2, - origins: [Address([3; 20]), Address([4; 20])] - .iter() - .cloned() - .collect(), - }, - ); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - assert_eq!( - candidate, - Some(Candidate { - digest: [commitment1, commitment2].as_digest(), - multisigned: MultisignedDigests { - digests: [commitment1.as_digest(), commitment2.as_digest()] + { + commitments + .get_mut(&commitment1.as_digest()) + .unwrap() + .origins + .insert(Address([1; 20])); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); + assert!(candidate.is_none()); + } + + { + commitments + .get_mut(&commitment1.as_digest()) + .unwrap() + .origins + .insert(Address([2; 20])); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); + let candidate = candidate.as_ref().unwrap(); + assert_eq!(candidate.digests(), [commitment1.as_digest()].as_slice()); + assert!(candidate.signatures().is_empty()); + } + + { + commitments.insert( + commitment2.as_digest(), + CommitmentAndOrigins { + commitment: commitment2, + origins: [Address([3; 20]), Address([4; 20])] .iter() .cloned() .collect(), - signatures: Default::default(), }, - }) - ); + ); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); + let candidate = candidate.as_ref().unwrap(); + assert_eq!( + candidate.digests(), + [commitment1.as_digest(), commitment2.as_digest()].as_slice() + ); + assert!(candidate.signatures().is_empty()); + } - let commitment3 = TestComm([4, 5]); - commitments.insert( - commitment3.as_digest(), - CommitmentAndOrigins { - commitment: commitment3, - origins: [Address([5; 20])].iter().cloned().collect(), - }, - ); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - assert_eq!( - candidate, - Some(Candidate { - digest: [commitment1, commitment2].as_digest(), - multisigned: MultisignedDigests { - digests: [commitment1.as_digest(), commitment2.as_digest()] - .iter() - .cloned() - .collect(), - signatures: Default::default(), + { + commitments.insert( + commitment3.as_digest(), + CommitmentAndOrigins { + commitment: commitment3, + origins: [Address([5; 20])].iter().cloned().collect(), }, - }) - ); + ); + Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); + let candidate = candidate.as_ref().unwrap(); + assert_eq!( + candidate.digests(), + [commitment1.as_digest(), commitment2.as_digest()].as_slice() + ); + assert!(candidate.signatures().is_empty()); + } } #[test] #[should_panic(expected = "Guarantied by `Sequencer` implementation to be in the map")] fn test_process_multisigned_candidate_empty_map() { - let candidate = Candidate { - digest: [1; 32].into(), - multisigned: MultisignedDigests { - digests: [[2; 32]].map(Into::into).into_iter().collect(), - signatures: Default::default(), - }, - }; - Sequencer::process_multisigned_candidate::( - &mut Some(candidate), - &mut Default::default(), - 0, - ); - } - - #[test] - #[should_panic(expected = "Guarantied by `Sequencer` implementation to be not empty")] - fn test_process_multisigned_candidate_empty_digests() { - let candidate = Candidate { - digest: [1; 32].into(), - multisigned: MultisignedDigests { - digests: Default::default(), - signatures: Default::default(), - }, - }; + let candidate = + MultisignedCommitmentDigests::new([[2; 32]].map(Into::into).into_iter().collect()); Sequencer::process_multisigned_candidate::( &mut Some(candidate), &mut Default::default(), @@ -871,31 +764,21 @@ mod tests { #[test] fn test_process_multisigned_candidate() { // Test candidate is None - assert_eq!( - Sequencer::process_multisigned_candidate::( - &mut None, - &mut Default::default(), - 0 - ), - None - ); + assert!(Sequencer::process_multisigned_candidate::( + &mut None, + &mut Default::default(), + 0 + ) + .is_none()); // Test not enough signatures - let mut candidate = Some(Candidate { - digest: [1; 32].into(), - multisigned: MultisignedDigests { - digests: Default::default(), - signatures: Default::default(), - }, - }); - assert_eq!( - Sequencer::process_multisigned_candidate( - &mut candidate, - &mut CommitmentsMap::::new(), - 2 - ), - None - ); + let mut candidate = Some(MultisignedCommitmentDigests::new(Default::default())); + assert!(Sequencer::process_multisigned_candidate( + &mut candidate, + &mut CommitmentsMap::::new(), + 2 + ) + .is_none()); let mut commitments_map = CommitmentsMap::new(); let validators_private_keys = [PrivateKey([1; 32]), PrivateKey([2; 32])]; @@ -918,25 +801,24 @@ mod tests { Sequencer::set_candidate_commitments(&commitments_map, &mut candidate, 2); - let mut candidate = candidate.unwrap(); + let mut candidate = candidate.expect("Must be set"); let router_address = Address([1; 20]); - candidate.multisigned.signatures = validators_private_keys + validators_private_keys .iter() .zip(validators_pub_keys.iter()) - .map(|(private_key, pub_key)| { - ( - pub_key.to_address(), - AggregatedCommitments::aggregate_commitments( - commitments.to_vec(), - private_key, - *pub_key, + .for_each(|(private_key, pub_key)| { + let commitments_digest = commitments.to_vec().as_digest(); + candidate + .append_signature_with_check( + commitments_digest, + private_key + .sign_commitments_digest(commitments_digest, *pub_key, router_address) + .unwrap(), + pub_key.to_address(), router_address, ) - .unwrap() - .signature, - ) - }) - .collect(); + .unwrap(); + }); let mut candidate = Some(candidate); assert!( @@ -944,6 +826,6 @@ mod tests { .is_some(), ); assert!(commitments_map.is_empty()); - assert_eq!(candidate, None); + assert!(candidate.is_none()); } } diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 4058b9019ef..a017a5273c0 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -102,20 +102,15 @@ impl Validator { db: &impl CodesStorage, requests: impl IntoIterator, ) -> Result { - let mut digests = Vec::new(); + let mut commitment_digests = Vec::new(); for request in requests.into_iter() { - if db - .code_approved(request.code_id) - .ok_or(anyhow!("code not found"))? - != request.approved - { - return Err(anyhow!("approved mismatch")); - } - digests.push(request.as_digest()); + commitment_digests.push(request.as_digest()); + Self::validate_code_commitment(db, request)?; } + let commitments_digest = commitment_digests.as_digest(); self.signer - .sign_commitments_digest(digests.as_digest(), self.pub_key, self.router_address) + .sign_commitments_digest(commitments_digest, self.pub_key, self.router_address) } pub fn validate_block_commitments( @@ -123,54 +118,81 @@ impl Validator { db: &impl BlockMetaStorage, requests: impl IntoIterator, ) -> Result { - let mut digests = Vec::new(); + let mut commitment_digests = Vec::new(); for request in requests.into_iter() { - let BlockCommitmentValidationRequest { - block_hash, - allowed_pred_block_hash, - allowed_prev_commitment_hash, - transitions_digest: transitions_hash, - } = request; - - if db - .block_end_state_is_valid(block_hash) - .ok_or(anyhow!("block not found"))? - .not() - { - return Err(anyhow!("block is not validated")); - } + commitment_digests.push(request.as_digest()); + Self::validate_block_commitment(db, request)?; + } - if db - .block_outcome(block_hash) - .ok_or(anyhow!("block not found"))? - .iter() - .map(AsDigest::as_digest) - .collect::>() - .as_digest() - .ne(&transitions_hash) - { - return Err(anyhow!("block transitions hash mismatch")); - } + let commitments_digest = commitment_digests.as_digest(); + self.signer + .sign_commitments_digest(commitments_digest, self.pub_key, self.router_address) + } - if db - .block_prev_commitment(block_hash) - .ok_or(anyhow!("block not found"))? - .ne(&allowed_prev_commitment_hash) - { - return Err(anyhow!("block prev commitment hash mismatch")); - } + fn validate_code_commitment(db: &impl CodesStorage, request: CodeCommitment) -> Result<()> { + let CodeCommitment { code_id, approved } = request; + if db + .code_approved(code_id) + .ok_or(anyhow!("Code {code_id} is not processed by this node"))? + .ne(&approved) + { + return Err(anyhow!("Requested and local code approval mismatch")); + } + Ok(()) + } - if Self::verify_is_predecessor(db, allowed_pred_block_hash, block_hash, None)?.not() { - return Err(anyhow!( - "{block_hash} is not a predecessor of {allowed_pred_block_hash}" - )); - } + fn validate_block_commitment( + db: &impl BlockMetaStorage, + request: BlockCommitmentValidationRequest, + ) -> Result<()> { + let BlockCommitmentValidationRequest { + block_hash, + allowed_pred_block_hash, + allowed_prev_commitment_hash, + transitions_digest, + } = request; + + if db + .block_end_state_is_valid(block_hash) + .unwrap_or(false) + .not() + { + return Err(anyhow!( + "Requested block {block_hash} is not processed by this node" + )); + } - digests.push(request.as_digest()); + if db + .block_outcome(block_hash) + .ok_or(anyhow!("Cannot get from db outcome for block {block_hash}"))? + .iter() + .map(AsDigest::as_digest) + .collect::>() + .as_digest() + .ne(&transitions_digest) + { + return Err(anyhow!("Requested and local transitions digest mismatch")); } - self.signer - .sign_commitments_digest(digests.as_digest(), self.pub_key, self.router_address) + if db + .block_prev_commitment(block_hash) + .ok_or(anyhow!( + "Cannot get from db previous commitment block for block {block_hash}" + ))? + .ne(&allowed_prev_commitment_hash) + { + return Err(anyhow!( + "Requested and local previous commitment block hash mismatch" + )); + } + + if Self::verify_is_predecessor(db, allowed_pred_block_hash, block_hash, None)?.not() { + return Err(anyhow!( + "{block_hash} is not a predecessor of {allowed_pred_block_hash}" + )); + } + + Ok(()) } /// Verify whether `pred_hash` is a predecessor of `block_hash` in the chain. @@ -180,17 +202,24 @@ impl Validator { pred_hash: H256, max_distance: Option, ) -> Result { + if block_hash == pred_hash { + return Ok(true); + } + + let block_header = db + .block_header(block_hash) + .ok_or(anyhow!("header not found for block: {block_hash}"))?; + + if block_header.parent_hash == pred_hash { + return Ok(true); + } + let pred_height = db .block_header(pred_hash) .ok_or(anyhow!("header not found for pred block: {pred_hash}"))? .height; - let block_height = db - .block_header(block_hash) - .ok_or(anyhow!("header not found for block: {block_hash}"))? - .height; - - let distance = block_height.saturating_sub(pred_height); + let distance = block_header.height.saturating_sub(pred_height); if max_distance.map(|d| d < distance).unwrap_or(false) { return Err(anyhow!("distance is too large: {distance}")); } @@ -214,6 +243,120 @@ impl Validator { mod tests { use super::*; use ethexe_db::BlockHeader; + use gprimitives::CodeId; + + #[test] + fn test_validate_code_commitments() { + let db = ethexe_db::Database::from_one(ðexe_db::MemDb::default()); + + let code_id = CodeId::from(H256::random()); + + Validator::validate_code_commitment( + &db, + CodeCommitment { + code_id, + approved: true, + }, + ) + .expect_err("Code is not in db"); + + db.set_code_approved(code_id, true); + Validator::validate_code_commitment( + &db, + CodeCommitment { + code_id, + approved: false, + }, + ) + .expect_err("Approval mismatch"); + + Validator::validate_code_commitment( + &db, + CodeCommitment { + code_id, + approved: true, + }, + ) + .unwrap(); + } + + #[test] + fn test_validate_block_commitment() { + let db = ethexe_db::Database::from_one(ðexe_db::MemDb::default()); + + let block_hash = H256::random(); + let pred_block_hash = H256::random(); + let prev_commitment_hash = H256::random(); + let transitions = vec![]; + let transitions_digest = transitions.as_digest(); + + db.set_block_end_state_is_valid(block_hash, true); + db.set_block_outcome(block_hash, transitions); + db.set_block_prev_commitment(block_hash, prev_commitment_hash); + db.set_block_header( + block_hash, + BlockHeader { + height: 100, + timestamp: 100, + parent_hash: pred_block_hash, + }, + ); + + Validator::validate_block_commitment( + &db, + BlockCommitmentValidationRequest { + block_hash, + allowed_pred_block_hash: block_hash, + allowed_prev_commitment_hash: prev_commitment_hash, + transitions_digest, + }, + ) + .unwrap(); + + Validator::validate_block_commitment( + &db, + BlockCommitmentValidationRequest { + block_hash, + allowed_pred_block_hash: H256::random(), + allowed_prev_commitment_hash: prev_commitment_hash, + transitions_digest, + }, + ) + .expect_err("Unknown pred block is provided"); + + Validator::validate_block_commitment( + &db, + BlockCommitmentValidationRequest { + block_hash, + allowed_pred_block_hash: block_hash, + allowed_prev_commitment_hash: H256::random(), + transitions_digest, + }, + ) + .expect_err("Unknown prev commitment is provided"); + + Validator::validate_block_commitment( + &db, + BlockCommitmentValidationRequest { + block_hash, + allowed_pred_block_hash: block_hash, + allowed_prev_commitment_hash: prev_commitment_hash, + transitions_digest: Digest::from([2; 32]), + }, + ) + .expect_err("Transitions digest mismatch"); + + Validator::validate_block_commitment( + &db, + BlockCommitmentValidationRequest { + block_hash: H256::random(), + allowed_pred_block_hash: block_hash, + allowed_prev_commitment_hash: prev_commitment_hash, + transitions_digest, + }, + ) + .expect_err("Block is not processed by this node"); + } #[test] fn test_verify_is_predecessor() { @@ -270,5 +413,6 @@ mod tests { assert!(Validator::verify_is_predecessor(&db, blocks[2], blocks[0], None).unwrap()); assert!(Validator::verify_is_predecessor(&db, blocks[2], blocks[0], Some(2)).unwrap()); assert!(!Validator::verify_is_predecessor(&db, blocks[1], blocks[2], Some(1)).unwrap()); + assert!(Validator::verify_is_predecessor(&db, blocks[1], blocks[1], None).unwrap()); } } From 31afda1bb7f29eb9ff4e38d6e1d8a8d95d98a0c1 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Mon, 12 Aug 2024 12:49:54 +0200 Subject: [PATCH 19/44] remove origin from requests --- ethexe/cli/src/service.rs | 43 +++++------------- ethexe/sequencer/src/agro.rs | 7 ++- ethexe/sequencer/src/lib.rs | 85 +++++++++--------------------------- 3 files changed, 35 insertions(+), 100 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index ab3ae6cad63..f439ae1df50 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -29,7 +29,7 @@ use ethexe_network::GossipsubMessage; use ethexe_observer::{BlockData, CodeLoadedData}; use ethexe_processor::LocalOutcome; use ethexe_sequencer::AggregatedCommitments; -use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; +use ethexe_signer::{AsDigest, Digest, PublicKey, Signature, Signer}; use ethexe_validator::BlockCommitmentValidationRequest; use futures::{future, stream::StreamExt, FutureExt}; use gprimitives::H256; @@ -56,7 +56,6 @@ pub struct Service { #[derive(Debug, Clone, Encode, Decode)] pub enum NetworkMessage { PublishCommitments { - origin: Address, codes: Option>, blocks: Option>, }, @@ -65,7 +64,6 @@ pub enum NetworkMessage { blocks: Vec, }, ApproveCommitments { - origin: Address, codes: Option<(Digest, Signature)>, blocks: Option<(Digest, Signature)>, }, @@ -561,13 +559,10 @@ impl Service { return Ok(()); } - let origin = validator.address(); - if let Some(network_sender) = maybe_network_sender { log::debug!("Publishing commitments to network..."); network_sender.publish_message( NetworkMessage::PublishCommitments { - origin, codes: aggregated_codes.clone(), blocks: aggregated_blocks.clone(), } @@ -581,14 +576,14 @@ impl Service { "Received ({}) signed code commitments from local validator...", aggregated.len() ); - sequencer.receive_code_commitments(origin, aggregated)?; + sequencer.receive_code_commitments(aggregated)?; } if let Some(aggregated) = aggregated_blocks { log::debug!( "Received ({}) signed block commitments from local validator...", aggregated.len() ); - sequencer.receive_block_commitments(origin, aggregated)?; + sequencer.receive_block_commitments(aggregated)?; } } @@ -638,18 +633,16 @@ impl Service { block_requests.len() ); - let origin = validator.address(); - if code_requests.is_empty().not() { let digest = code_requests.as_digest(); let signature = validator.validate_code_commitments(db, code_requests)?; - sequencer.receive_codes_signature(origin, digest, signature)?; + sequencer.receive_codes_signature(digest, signature)?; } if block_requests.is_empty().not() { let digest = block_requests.as_digest(); let signature = validator.validate_block_commitments(db, block_requests)?; - sequencer.receive_blocks_signature(origin, digest, signature)?; + sequencer.receive_blocks_signature(digest, signature)?; } } @@ -675,19 +668,15 @@ impl Service { ) -> Result<()> { let message = NetworkMessage::decode(&mut message.data.as_slice())?; match message { - NetworkMessage::PublishCommitments { - origin, - codes, - blocks, - } => { + NetworkMessage::PublishCommitments { codes, blocks } => { let Some(sequencer) = maybe_sequencer else { return Ok(()); }; if let Some(aggregated) = codes { - sequencer.receive_code_commitments(origin, aggregated)?; + sequencer.receive_code_commitments(aggregated)?; } if let Some(aggregated) = blocks { - sequencer.receive_block_commitments(origin, aggregated)?; + sequencer.receive_block_commitments(aggregated)?; } Ok(()) } @@ -719,30 +708,22 @@ impl Service { }) .transpose()?; - let message = NetworkMessage::ApproveCommitments { - origin: validator.address(), - codes, - blocks, - }; + let message = NetworkMessage::ApproveCommitments { codes, blocks }; network_sender.publish_message(message.encode()); Ok(()) } - NetworkMessage::ApproveCommitments { - origin, - codes, - blocks, - } => { + NetworkMessage::ApproveCommitments { codes, blocks } => { let Some(sequencer) = maybe_sequencer else { return Ok(()); }; if let Some((digest, signature)) = codes { - sequencer.receive_codes_signature(origin, digest, signature)?; + sequencer.receive_codes_signature(digest, signature)?; } if let Some((digest, signature)) = blocks { - sequencer.receive_blocks_signature(origin, digest, signature)?; + sequencer.receive_blocks_signature(digest, signature)?; } Ok(()) diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index f0f7768f861..4dd86ccd746 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -116,16 +116,15 @@ impl MultisignedCommitmentDigests { &mut self, digest: Digest, signature: Signature, - origin: Address, router_address: Address, + check_origin: impl FnOnce(Address) -> Result<()>, ) -> Result<()> { if self.digest != digest { return Err(anyhow::anyhow!("Aggregated commitments digest mismatch")); } - if recover_from_commitments_digest(digest, &signature, router_address)? != origin { - return Err(anyhow::anyhow!("Invalid signature")); - } + let origin = recover_from_commitments_digest(digest, &signature, router_address)?; + check_origin(origin)?; self.signatures.insert(origin, signature); diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 46e1f08eed6..3a3df6db114 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -21,8 +21,8 @@ mod agro; pub use agro::{AggregatedCommitments, CommitmentsDigestSigner}; -use agro::{MultisignedCommitmentDigests, MultisignedCommitments}; +use agro::{MultisignedCommitmentDigests, MultisignedCommitments}; use anyhow::{anyhow, Result}; use ethexe_common::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; @@ -187,11 +187,9 @@ impl Sequencer { pub fn receive_code_commitments( &mut self, - origin: Address, aggregated: AggregatedCommitments, ) -> Result<()> { Self::receive_commitments( - origin, aggregated, &self.validators, self.ethereum.router().address(), @@ -201,11 +199,9 @@ impl Sequencer { pub fn receive_block_commitments( &mut self, - origin: Address, aggregated: AggregatedCommitments, ) -> Result<()> { Self::receive_commitments( - origin, aggregated, &self.validators, self.ethereum.router().address(), @@ -213,14 +209,8 @@ impl Sequencer { ) } - pub fn receive_codes_signature( - &mut self, - origin: Address, - digest: Digest, - signature: Signature, - ) -> Result<()> { + pub fn receive_codes_signature(&mut self, digest: Digest, signature: Signature) -> Result<()> { Self::receive_signature( - origin, digest, signature, &self.validators, @@ -229,14 +219,8 @@ impl Sequencer { ) } - pub fn receive_blocks_signature( - &mut self, - origin: Address, - digest: Digest, - signature: Signature, - ) -> Result<()> { + pub fn receive_blocks_signature(&mut self, digest: Digest, signature: Signature) -> Result<()> { Self::receive_signature( - origin, digest, signature, &self.validators, @@ -363,28 +347,20 @@ impl Sequencer { } fn receive_commitments( - origin: Address, aggregated: AggregatedCommitments, validators: &HashSet
, router_address: Address, commitments_storage: &mut CommitmentsMap, ) -> Result<()> { - if validators.contains(&origin).not() { - return Err(anyhow!("Unknown validator {origin}")); - } + let origin = aggregated.recover(router_address)?; - if aggregated.recover(router_address)? != origin { - return Err(anyhow!("Signature verification failed for {origin}")); + if validators.contains(&origin).not() { + return Err(anyhow!("Unknown validator {origin} or invalid signature")); } - let mut processed = HashSet::new(); for commitment in aggregated.commitments { - let digest = commitment.as_digest(); - if !processed.insert(digest) { - continue; - } commitments_storage - .entry(digest) + .entry(commitment.as_digest()) .or_insert_with(|| CommitmentAndOrigins { commitment, origins: Default::default(), @@ -397,7 +373,6 @@ impl Sequencer { } fn receive_signature( - origin: Address, commitments_digest: Digest, signature: Signature, validators: &HashSet
, @@ -408,11 +383,17 @@ impl Sequencer { return Err(anyhow!("No candidate found")); }; - if !validators.contains(&origin) { - return Err(anyhow!("Unknown validator {origin}")); - } - - candidate.append_signature_with_check(commitments_digest, signature, origin, router_address) + candidate.append_signature_with_check( + commitments_digest, + signature, + router_address, + |origin| { + validators + .contains(&origin) + .then_some(()) + .ok_or_else(|| anyhow!("Unknown validator {origin} or invalid signature")) + }, + ) } fn update_status(&mut self, update_fn: F) @@ -428,6 +409,7 @@ impl Sequencer { #[cfg(test)] mod tests { use super::*; + use anyhow::Ok; use ethexe_signer::PrivateKey; #[derive(Clone, Copy, Debug, PartialEq, Eq)] @@ -466,7 +448,6 @@ mod tests { let signature = aggregated.signature; Sequencer::receive_signature( - validator1, commitments_digest, signature, &validators, @@ -481,7 +462,6 @@ mod tests { let mut candidate = MultisignedCommitmentDigests::new(digests); Sequencer::receive_signature( - validator1, Digest::from([1; 32]), signature, &validators, @@ -491,17 +471,6 @@ mod tests { .expect_err("Incorrect digest has been provided"); Sequencer::receive_signature( - Address([3; 20]), - commitments_digest, - signature, - &validators, - router_address, - Some(&mut candidate), - ) - .expect_err("Unknown validator has been provided"); - - Sequencer::receive_signature( - validator1, commitments_digest, Signature::create_for_digest(validator1_private_key, Digest::from([1; 32])).unwrap(), &validators, @@ -511,7 +480,6 @@ mod tests { .expect_err("Signature verification must fail"); Sequencer::receive_signature( - validator1, commitments_digest, signature, &validators, @@ -538,7 +506,6 @@ mod tests { let signature = aggregated.signature; Sequencer::receive_signature( - validator2, commitments_digest, signature, &validators, @@ -579,15 +546,6 @@ mod tests { let mut expected_commitments_storage = CommitmentsMap::new(); let mut commitments_storage = CommitmentsMap::new(); - Sequencer::receive_commitments( - Address([3; 20]), - aggregated.clone(), - &validators, - router_address, - &mut commitments_storage, - ) - .expect_err("Unknown validator has been provided"); - let private_key = PrivateKey([3; 32]); let incorrect_aggregated = AggregatedCommitments::aggregate_commitments( commitments.to_vec(), @@ -597,7 +555,6 @@ mod tests { ) .unwrap(); Sequencer::receive_commitments( - validator1, incorrect_aggregated, &validators, router_address, @@ -606,7 +563,6 @@ mod tests { .expect_err("Signature verification must fail"); Sequencer::receive_commitments( - validator1, aggregated.clone(), &validators, router_address, @@ -643,7 +599,6 @@ mod tests { .unwrap(); Sequencer::receive_commitments( - validator2, aggregated, &validators, router_address, @@ -814,8 +769,8 @@ mod tests { private_key .sign_commitments_digest(commitments_digest, *pub_key, router_address) .unwrap(), - pub_key.to_address(), router_address, + |_| Ok(()), ) .unwrap(); }); From d40f21dee71d1c61efc400b9c6598873f2323c5a Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Mon, 12 Aug 2024 14:01:42 +0200 Subject: [PATCH 20/44] remove CommitmentsDigestSigner --- Cargo.lock | 3 +- ethexe/cli/src/service.rs | 2 +- ethexe/sequencer/Cargo.toml | 3 -- ethexe/sequencer/src/agro.rs | 69 ++++++++++++------------------------ ethexe/sequencer/src/lib.rs | 68 ++++++++++++++++++----------------- ethexe/signer/Cargo.toml | 1 + ethexe/signer/src/lib.rs | 7 ++++ ethexe/validator/Cargo.toml | 1 - ethexe/validator/src/lib.rs | 18 +++++++--- 9 files changed, 81 insertions(+), 91 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 42e8451598c..b801b9f0b92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5130,7 +5130,6 @@ dependencies = [ "gprimitives", "log", "parity-scale-codec", - "tempfile", "tokio", ] @@ -5147,6 +5146,7 @@ dependencies = [ "parity-scale-codec", "secp256k1 0.29.0", "sha3", + "tempfile", ] [[package]] @@ -5177,7 +5177,6 @@ dependencies = [ "log", "parity-scale-codec", "static_init", - "tempfile", ] [[package]] diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index f439ae1df50..347f7b5c074 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -28,7 +28,7 @@ use ethexe_db::{BlockHeader, BlockMetaStorage, CodeUploadInfo, CodesStorage, Dat use ethexe_network::GossipsubMessage; use ethexe_observer::{BlockData, CodeLoadedData}; use ethexe_processor::LocalOutcome; -use ethexe_sequencer::AggregatedCommitments; +use ethexe_sequencer::agro::AggregatedCommitments; use ethexe_signer::{AsDigest, Digest, PublicKey, Signature, Signer}; use ethexe_validator::BlockCommitmentValidationRequest; use futures::{future, stream::StreamExt, FutureExt}; diff --git a/ethexe/sequencer/Cargo.toml b/ethexe/sequencer/Cargo.toml index 8548f705177..2a1bdd6d6a4 100644 --- a/ethexe/sequencer/Cargo.toml +++ b/ethexe/sequencer/Cargo.toml @@ -23,6 +23,3 @@ log.workspace = true anyhow.workspace = true futures.workspace = true tokio.workspace = true - -[dev-dependencies] -tempfile.workspace = true diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 4dd86ccd746..940a2c4983a 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -21,42 +21,9 @@ use std::collections::{BTreeMap, BTreeSet}; use anyhow::Result; -use ethexe_signer::{Address, AsDigest, Digest, PrivateKey, PublicKey, Signature, Signer}; +use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; use parity_scale_codec::{Decode, Encode}; -pub trait CommitmentsDigestSigner { - fn sign_commitments_digest( - &self, - commitments_digest: Digest, - pub_key: PublicKey, - router_address: Address, - ) -> Result; -} - -impl CommitmentsDigestSigner for Signer { - fn sign_commitments_digest( - &self, - commitments_digest: Digest, - pub_key: PublicKey, - router_address: Address, - ) -> Result { - let digest = to_router_digest(commitments_digest, router_address); - self.sign_digest(pub_key, digest) - } -} - -impl CommitmentsDigestSigner for PrivateKey { - fn sign_commitments_digest( - &self, - commitments_digest: Digest, - _pub_key: PublicKey, - router_address: Address, - ) -> Result { - let digest = to_router_digest(commitments_digest, router_address); - Signature::create_for_digest(*self, digest) - } -} - #[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] pub struct AggregatedCommitments { pub commitments: Vec, @@ -66,12 +33,12 @@ pub struct AggregatedCommitments { impl AggregatedCommitments { pub fn aggregate_commitments( commitments: Vec, - signer: &impl CommitmentsDigestSigner, + signer: &Signer, pub_key: PublicKey, router_address: Address, ) -> Result> { let signature = - signer.sign_commitments_digest(commitments.as_digest(), pub_key, router_address)?; + sign_commitments_digest(commitments.as_digest(), signer, pub_key, router_address)?; Ok(AggregatedCommitments { commitments, @@ -96,7 +63,7 @@ impl AggregatedCommitments { } } -pub struct MultisignedCommitmentDigests { +pub(crate) struct MultisignedCommitmentDigests { digest: Digest, digests: Vec, signatures: BTreeMap, @@ -140,7 +107,7 @@ impl MultisignedCommitmentDigests { } } -pub struct MultisignedCommitments { +pub(crate) struct MultisignedCommitments { commitments: Vec, signatures: BTreeMap, } @@ -178,6 +145,16 @@ impl MultisignedCommitments { } } +pub fn sign_commitments_digest( + commitments_digest: Digest, + signer: &Signer, + pub_key: PublicKey, + router_address: Address, +) -> Result { + let digest = to_router_digest(commitments_digest, router_address); + signer.sign_digest(pub_key, digest) +} + fn recover_from_commitments_digest( commitments_digest: Digest, signature: &Signature, @@ -215,8 +192,7 @@ mod tests { #[test] fn test_sign_digest() { - let key_store = tempfile::tempdir().unwrap(); - let signer = Signer::new(key_store.path().to_path_buf()).unwrap(); + let signer = Signer::tmp(); let private_key = PrivateKey::from_str( "4c0883a69102937d6231471b5dbb6204fe51296170827936ea5cce4b76994b0f", @@ -227,20 +203,19 @@ mod tests { let router_address = Address([0x01; 20]); let commitments = vec![MyComm([1, 2]), MyComm([3, 4])]; - let digest = commitments.as_digest(); - let signature = signer - .sign_commitments_digest(digest, pub_key, router_address) - .unwrap(); + let commitments_digest = commitments.as_digest(); + let signature = + sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); let recovered = - recover_from_commitments_digest(digest, &signature, router_address).unwrap(); + recover_from_commitments_digest(commitments_digest, &signature, router_address) + .unwrap(); assert_eq!(recovered, pub_key.to_address()); } #[test] fn test_aggregated_commitments() { - let key_store = tempfile::tempdir().unwrap(); - let signer = Signer::new(key_store.path().to_path_buf()).unwrap(); + let signer = Signer::tmp(); let private_key = PrivateKey::from_str( "4c0883a69102937d6231471b5dbb6204fe51296170827936ea5cce4b76994b0f", diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 3a3df6db114..d7567de2fdd 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -18,11 +18,9 @@ //! Sequencer for ethexe. -mod agro; +pub mod agro; -pub use agro::{AggregatedCommitments, CommitmentsDigestSigner}; - -use agro::{MultisignedCommitmentDigests, MultisignedCommitments}; +use agro::{AggregatedCommitments, MultisignedCommitmentDigests, MultisignedCommitments}; use anyhow::{anyhow, Result}; use ethexe_common::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; @@ -423,13 +421,15 @@ mod tests { #[test] fn test_receive_signature() { + let signer = Signer::tmp(); + let router_address = Address([1; 20]); let validators_private_keys = [PrivateKey([1; 32]), PrivateKey([2; 32])]; let validators: HashSet<_> = validators_private_keys .iter() .cloned() - .map(|key| PublicKey::from(key).to_address()) + .map(|key| signer.add_key(key).unwrap().to_address()) .collect(); let validator1_private_key = validators_private_keys[0]; @@ -438,14 +438,13 @@ mod tests { let commitments = [TestComm([0, 1]), TestComm([2, 3])]; let commitments_digest = commitments.as_digest(); - let aggregated = AggregatedCommitments::aggregate_commitments( - commitments.to_vec(), - &validator1_private_key, + let signature = agro::sign_commitments_digest( + commitments_digest, + &signer, validator1_pub_key, router_address, ) .unwrap(); - let signature = aggregated.signature; Sequencer::receive_signature( commitments_digest, @@ -496,14 +495,13 @@ mod tests { let validator2_pub_key = PublicKey::from(validator2_private_key); let validator2 = validator2_pub_key.to_address(); - let aggregated = AggregatedCommitments::aggregate_commitments( - commitments.to_vec(), - &validator2_private_key, + let signature = agro::sign_commitments_digest( + commitments_digest, + &signer, validator2_pub_key, router_address, ) .unwrap(); - let signature = aggregated.signature; Sequencer::receive_signature( commitments_digest, @@ -521,13 +519,15 @@ mod tests { #[test] fn test_receive_commitments() { + let signer = Signer::tmp(); + let router_address = Address([1; 20]); let validators_private_keys = [PrivateKey([1; 32]), PrivateKey([2; 32])]; let validators: HashSet<_> = validators_private_keys .iter() .cloned() - .map(|key| PublicKey::from(key).to_address()) + .map(|key| signer.add_key(key).unwrap().to_address()) .collect(); let validator1_private_key = validators_private_keys[0]; @@ -537,7 +537,7 @@ mod tests { let commitments = [TestComm([0, 1]), TestComm([2, 3])]; let aggregated = AggregatedCommitments::aggregate_commitments( commitments.to_vec(), - &validator1_private_key, + &signer, validator1_pub_key, router_address, ) @@ -547,10 +547,11 @@ mod tests { let mut commitments_storage = CommitmentsMap::new(); let private_key = PrivateKey([3; 32]); + let pub_key = signer.add_key(private_key).unwrap(); let incorrect_aggregated = AggregatedCommitments::aggregate_commitments( commitments.to_vec(), - &private_key, - private_key.into(), + &signer, + pub_key, router_address, ) .unwrap(); @@ -592,7 +593,7 @@ mod tests { let aggregated = AggregatedCommitments::aggregate_commitments( commitments.to_vec(), - &validator2_private_key, + &signer, validator2_pub_key, router_address, ) @@ -718,6 +719,8 @@ mod tests { #[test] fn test_process_multisigned_candidate() { + let signer = Signer::tmp(); + // Test candidate is None assert!(Sequencer::process_multisigned_candidate::( &mut None, @@ -737,7 +740,7 @@ mod tests { let mut commitments_map = CommitmentsMap::new(); let validators_private_keys = [PrivateKey([1; 32]), PrivateKey([2; 32])]; - let validators_pub_keys = validators_private_keys.map(PublicKey::from); + let validators_pub_keys = validators_private_keys.map(|key| signer.add_key(key).unwrap()); let origins: BTreeSet<_> = validators_pub_keys .map(|k| k.to_address()) .into_iter() @@ -758,22 +761,23 @@ mod tests { let mut candidate = candidate.expect("Must be set"); let router_address = Address([1; 20]); - validators_private_keys - .iter() - .zip(validators_pub_keys.iter()) - .for_each(|(private_key, pub_key)| { - let commitments_digest = commitments.to_vec().as_digest(); - candidate - .append_signature_with_check( + validators_pub_keys.iter().for_each(|pub_key| { + let commitments_digest = commitments.to_vec().as_digest(); + candidate + .append_signature_with_check( + commitments_digest, + agro::sign_commitments_digest( commitments_digest, - private_key - .sign_commitments_digest(commitments_digest, *pub_key, router_address) - .unwrap(), + &signer, + *pub_key, router_address, - |_| Ok(()), ) - .unwrap(); - }); + .unwrap(), + router_address, + |_| Ok(()), + ) + .unwrap(); + }); let mut candidate = Some(candidate); assert!( diff --git a/ethexe/signer/Cargo.toml b/ethexe/signer/Cargo.toml index 5de814f625a..c2833494d12 100644 --- a/ethexe/signer/Cargo.toml +++ b/ethexe/signer/Cargo.toml @@ -17,6 +17,7 @@ anyhow.workspace = true hex = { workspace = true, features = ["alloc"] } parity-scale-codec = { workspace = true, features = ["std", "derive"] } derive_more.workspace = true +tempfile.workspace = true secp256k1 = { version = "0.29", features = ["rand", "global-context", "hashes-std", "rand-std", "recovery"] } sha3 = { version = "0.10.0", default-features = false } diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index 1191360a6c3..aeb7694d00f 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -162,6 +162,13 @@ impl Signer { Ok(Self { key_store }) } + pub fn tmp() -> Self { + let temp_dir = tempfile::tempdir().expect("Cannot create temp dir for keys"); + Self { + key_store: temp_dir.into_path(), + } + } + pub fn raw_sign_digest(&self, public_key: PublicKey, digest: Digest) -> Result { let private_key = self.get_private_key(public_key)?; diff --git a/ethexe/validator/Cargo.toml b/ethexe/validator/Cargo.toml index 9aa0a60a1e6..e513f5837cd 100644 --- a/ethexe/validator/Cargo.toml +++ b/ethexe/validator/Cargo.toml @@ -19,7 +19,6 @@ log.workspace = true anyhow.workspace = true futures.workspace = true parity-scale-codec = { workspace = true, features = ["std", "derive"] } -tempfile.workspace = true static_init = "1.0.3" diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index a017a5273c0..4b33f01af88 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -23,7 +23,7 @@ use ethexe_common::{ db::{BlockMetaStorage, CodesStorage}, BlockCommitment, CodeCommitment, }; -use ethexe_sequencer::{AggregatedCommitments, CommitmentsDigestSigner}; +use ethexe_sequencer::agro::{self, AggregatedCommitments}; use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; @@ -109,8 +109,12 @@ impl Validator { } let commitments_digest = commitment_digests.as_digest(); - self.signer - .sign_commitments_digest(commitments_digest, self.pub_key, self.router_address) + agro::sign_commitments_digest( + commitments_digest, + &self.signer, + self.pub_key, + self.router_address, + ) } pub fn validate_block_commitments( @@ -125,8 +129,12 @@ impl Validator { } let commitments_digest = commitment_digests.as_digest(); - self.signer - .sign_commitments_digest(commitments_digest, self.pub_key, self.router_address) + agro::sign_commitments_digest( + commitments_digest, + &self.signer, + self.pub_key, + self.router_address, + ) } fn validate_code_commitment(db: &impl CodesStorage, request: CodeCommitment) -> Result<()> { From 64fd25d78305d02595d352a2ca48005394ad7d3f Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Mon, 12 Aug 2024 14:15:03 +0200 Subject: [PATCH 21/44] change get_commitment result --- ethexe/sequencer/src/agro.rs | 17 +++++------------ ethexe/sequencer/src/lib.rs | 10 ++++++---- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 940a2c4983a..bec09649c57 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -115,25 +115,18 @@ pub(crate) struct MultisignedCommitments { impl MultisignedCommitments { pub fn from_multisigned_digests( multisigned: MultisignedCommitmentDigests, - mut get_commitment: impl FnMut(Digest) -> Option, - ) -> Result { + get_commitment: impl FnMut(Digest) -> C, + ) -> Self { let MultisignedCommitmentDigests { digests, signatures, .. } = multisigned; - let mut commitments = Vec::new(); - for digest in digests { - let commitment = get_commitment(digest) - .ok_or_else(|| anyhow::anyhow!("Missing commitment for {digest}"))?; - commitments.push(commitment); - } - - Ok(Self { - commitments, + Self { + commitments: digests.into_iter().map(get_commitment).collect(), signatures, - }) + } } pub fn commitments(&self) -> &[C] { diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index d7567de2fdd..2abaf51ee27 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -292,10 +292,12 @@ impl Sequencer { let candidate = candidate.take()?; let multisigned = MultisignedCommitments::from_multisigned_digests(candidate, |digest| { - commitments.remove(&digest).map(|c| c.commitment) - }) - .unwrap_or_else(|_| { - unreachable!("Guarantied by `Sequencer` implementation to be in the map"); + commitments + .remove(&digest) + .map(|c| c.commitment) + .unwrap_or_else(|| { + unreachable!("Guarantied by `Sequencer` implementation to be in the map"); + }) }); Some(multisigned) From 168ba9e9950da4ef9f8fd07a799a712a2de7f209 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 14 Aug 2024 12:10:56 +0200 Subject: [PATCH 22/44] fix after master merge --- ethexe/signer/src/digest.rs | 8 ++--- ethexe/validator/src/lib.rs | 59 ++++++++++++++++++++++++++----------- 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/ethexe/signer/src/digest.rs b/ethexe/signer/src/digest.rs index 616bb731501..9c14f754c12 100644 --- a/ethexe/signer/src/digest.rs +++ b/ethexe/signer/src/digest.rs @@ -108,10 +108,10 @@ impl AsDigest for StateTransition { + size_of::() // valueToReceive + size_of::() - // valueClaimsBytes digest + // digest(valueClaimsBytes) + size_of::() - // messagesHashesBytes digest - + size_of::(); + // digest(messagesHashesBytes) + + size_of::(); let mut state_transition_bytes = Vec::with_capacity(state_transition_size); @@ -200,7 +200,7 @@ impl AsDigest for BlockCommitment { // predBlockHash + size_of::() // hash(transitionsHashesBytes) - + size_of::(); + + size_of::(); let mut block_commitment_bytes = Vec::with_capacity(block_commitment_size); diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index eaded57dd5d..3d189c1b36d 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -41,8 +41,8 @@ pub struct Config { #[derive(Debug, Clone, Encode, Decode)] pub struct BlockCommitmentValidationRequest { pub block_hash: H256, - pub allowed_pred_block_hash: H256, - pub allowed_prev_commitment_hash: H256, + pub prev_commitment_hash: H256, + pub pred_block_hash: H256, pub transitions_digest: Digest, } @@ -50,8 +50,8 @@ impl From<&BlockCommitment> for BlockCommitmentValidationRequest { fn from(commitment: &BlockCommitment) -> Self { Self { block_hash: commitment.block_hash, - allowed_pred_block_hash: commitment.pred_block_hash, - allowed_prev_commitment_hash: commitment.prev_commitment_hash, + prev_commitment_hash: commitment.prev_commitment_hash, + pred_block_hash: commitment.pred_block_hash, transitions_digest: commitment.transitions.as_digest(), } } @@ -62,8 +62,8 @@ impl AsDigest for BlockCommitmentValidationRequest { let mut message = Vec::with_capacity(3 * size_of::() + size_of::()); message.extend_from_slice(self.block_hash.as_bytes()); - message.extend_from_slice(self.allowed_pred_block_hash.as_bytes()); - message.extend_from_slice(self.allowed_prev_commitment_hash.as_bytes()); + message.extend_from_slice(self.prev_commitment_hash.as_bytes()); + message.extend_from_slice(self.pred_block_hash.as_bytes()); message.extend_from_slice(self.transitions_digest.as_ref()); message.as_digest() @@ -154,8 +154,8 @@ impl Validator { ) -> Result<()> { let BlockCommitmentValidationRequest { block_hash, - allowed_pred_block_hash, - allowed_prev_commitment_hash, + pred_block_hash: allowed_pred_block_hash, + prev_commitment_hash: allowed_prev_commitment_hash, transitions_digest, } = request; @@ -249,9 +249,32 @@ impl Validator { #[cfg(test)] mod tests { use super::*; + use ethexe_common::router::StateTransition; use ethexe_db::BlockHeader; use gprimitives::CodeId; + #[test] + fn block_validation_request_digest() { + let transition = StateTransition { + actor_id: H256::random().0.into(), + new_state_hash: H256::random(), + value_to_receive: 123, + value_claims: vec![], + messages: vec![], + }; + let commitment = BlockCommitment { + block_hash: H256::random(), + prev_commitment_hash: H256::random(), + pred_block_hash: H256::random(), + transitions: vec![transition.clone(), transition], + }; + + assert_eq!( + commitment.as_digest(), + BlockCommitmentValidationRequest::from(&commitment).as_digest() + ); + } + #[test] fn test_validate_code_commitments() { let db = ethexe_db::Database::from_one(ðexe_db::MemDb::default(), [0; 20]); @@ -313,8 +336,8 @@ mod tests { &db, BlockCommitmentValidationRequest { block_hash, - allowed_pred_block_hash: block_hash, - allowed_prev_commitment_hash: prev_commitment_hash, + pred_block_hash: block_hash, + prev_commitment_hash, transitions_digest, }, ) @@ -324,8 +347,8 @@ mod tests { &db, BlockCommitmentValidationRequest { block_hash, - allowed_pred_block_hash: H256::random(), - allowed_prev_commitment_hash: prev_commitment_hash, + pred_block_hash: H256::random(), + prev_commitment_hash, transitions_digest, }, ) @@ -335,8 +358,8 @@ mod tests { &db, BlockCommitmentValidationRequest { block_hash, - allowed_pred_block_hash: block_hash, - allowed_prev_commitment_hash: H256::random(), + pred_block_hash: block_hash, + prev_commitment_hash: H256::random(), transitions_digest, }, ) @@ -346,8 +369,8 @@ mod tests { &db, BlockCommitmentValidationRequest { block_hash, - allowed_pred_block_hash: block_hash, - allowed_prev_commitment_hash: prev_commitment_hash, + pred_block_hash: block_hash, + prev_commitment_hash, transitions_digest: Digest::from([2; 32]), }, ) @@ -357,8 +380,8 @@ mod tests { &db, BlockCommitmentValidationRequest { block_hash: H256::random(), - allowed_pred_block_hash: block_hash, - allowed_prev_commitment_hash: prev_commitment_hash, + pred_block_hash: block_hash, + prev_commitment_hash, transitions_digest, }, ) From 00fd15fc047e7e4ac795a83982667abaf7d44a44 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 14 Aug 2024 12:43:20 +0200 Subject: [PATCH 23/44] append tests for multisigned --- ethexe/sequencer/src/agro.rs | 68 +++++++++++++++++++++++++++++++++++- ethexe/validator/src/lib.rs | 1 + 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index bec09649c57..d3db19396a5 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -174,7 +174,7 @@ mod tests { use ethexe_signer::PrivateKey; use std::str::FromStr; - #[derive(Clone, Debug)] + #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct MyComm([u8; 2]); impl AsDigest for MyComm { @@ -230,4 +230,70 @@ mod tests { assert_eq!(recovered, pub_key.to_address()); } + + #[test] + fn test_multisigned_commitment_digests() { + let signer = Signer::tmp(); + + let private_key = PrivateKey([1; 32]); + let pub_key = signer.add_key(private_key).unwrap(); + + let router_address = Address([0x01; 20]); + let commitments = [MyComm([1, 2]), MyComm([3, 4])]; + let digests = commitments.map(|c| c.as_digest()); + + let mut multisigned = MultisignedCommitmentDigests::new(digests.into_iter().collect()); + assert_eq!(multisigned.digests(), digests.as_slice()); + assert_eq!(multisigned.signatures().len(), 0); + + let commitments_digest = commitments.as_digest(); + let signature = + sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); + + multisigned + .append_signature_with_check(commitments_digest, signature, router_address, |_| Ok(())) + .unwrap(); + assert_eq!(multisigned.digests(), digests.as_slice()); + assert_eq!(multisigned.signatures().len(), 1); + } + + #[test] + fn test_multisigned_commitments() { + let signer = Signer::tmp(); + + let private_key = PrivateKey([1; 32]); + let pub_key = signer.add_key(private_key).unwrap(); + + let router_address = Address([1; 20]); + let commitments = [MyComm([1, 2]), MyComm([3, 4])]; + let digests = commitments.map(|c| c.as_digest()); + let mut commitments_map: BTreeMap<_, _> = commitments + .into_iter() + .map(|c| (c.as_digest(), c)) + .collect(); + + let mut multisigned = MultisignedCommitmentDigests::new(digests.into_iter().collect()); + let commitments_digest = commitments.as_digest(); + let signature = + sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); + + multisigned + .append_signature_with_check(commitments_digest, signature, router_address, |_| Ok(())) + .unwrap(); + + let multisigned_commitments = + MultisignedCommitments::from_multisigned_digests(multisigned, |d| { + commitments_map.remove(&d).unwrap() + }); + + assert_eq!(multisigned_commitments.commitments(), commitments); + + let parts = multisigned_commitments.into_parts(); + assert_eq!(parts.0.as_slice(), commitments.as_slice()); + assert_eq!(parts.1.len(), 1); + parts.1.into_iter().for_each(|(k, v)| { + assert_eq!(k, pub_key.to_address()); + assert_eq!(v, signature); + }); + } } diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 3d189c1b36d..016c63189cc 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -262,6 +262,7 @@ mod tests { value_claims: vec![], messages: vec![], }; + let commitment = BlockCommitment { block_hash: H256::random(), prev_commitment_hash: H256::random(), From cd936fcd75ebe5f9c4a271612d0ecc273419b76f Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 16 Aug 2024 12:40:22 +0200 Subject: [PATCH 24/44] rename code_approved -> code_valid --- ethexe/common/src/db.rs | 4 ++-- ethexe/db/src/database.rs | 10 +++++----- ethexe/processor/src/lib.rs | 4 ++-- ethexe/validator/src/lib.rs | 10 +++++----- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ethexe/common/src/db.rs b/ethexe/common/src/db.rs index 75bf64d4f49..02bacc6617c 100644 --- a/ethexe/common/src/db.rs +++ b/ethexe/common/src/db.rs @@ -88,6 +88,6 @@ pub trait CodesStorage: Send + Sync { fn code_blob_tx(&self, code_id: CodeId) -> Option; fn set_code_blob_tx(&self, code_id: CodeId, blob_tx_hash: H256); - fn code_approved(&self, code_id: CodeId) -> Option; - fn set_code_approved(&self, code_id: CodeId, approved: bool); + fn code_valid(&self, code_id: CodeId) -> Option; + fn set_code_valid(&self, code_id: CodeId, valid: bool); } diff --git a/ethexe/db/src/database.rs b/ethexe/db/src/database.rs index 95836b75913..0376dbd1fe2 100644 --- a/ethexe/db/src/database.rs +++ b/ethexe/db/src/database.rs @@ -52,7 +52,7 @@ enum KeyPrefix { CodeUpload = 7, LatestValidBlock = 8, BlockHeader = 9, - CodeApproved = 10, + CodeValid = 10, } impl KeyPrefix { @@ -327,17 +327,17 @@ impl CodesStorage for Database { .put(&KeyPrefix::CodeUpload.one(code_id), blob_tx_hash.encode()); } - fn code_approved(&self, code_id: CodeId) -> Option { + fn code_valid(&self, code_id: CodeId) -> Option { self.kv - .get(&KeyPrefix::CodeApproved.one(code_id)) + .get(&KeyPrefix::CodeValid.one(code_id)) .map(|data| { bool::decode(&mut data.as_slice()).expect("Failed to decode data into `bool`") }) } - fn set_code_approved(&self, code_id: CodeId, approved: bool) { + fn set_code_valid(&self, code_id: CodeId, approved: bool) { self.kv - .put(&KeyPrefix::CodeApproved.one(code_id), approved.encode()); + .put(&KeyPrefix::CodeValid.one(code_id), approved.encode()); } } diff --git a/ethexe/processor/src/lib.rs b/ethexe/processor/src/lib.rs index 447141b96ab..29860c065dc 100644 --- a/ethexe/processor/src/lib.rs +++ b/ethexe/processor/src/lib.rs @@ -273,10 +273,10 @@ impl Processor { log::debug!("Processing upload code {code_id:?}"); if code_id != CodeId::generate(code) || self.handle_new_code(code)?.is_none() { - self.db.set_code_approved(code_id, false); + self.db.set_code_valid(code_id, false); Ok(vec![LocalOutcome::CodeRejected(code_id)]) } else { - self.db.set_code_approved(code_id, true); + self.db.set_code_valid(code_id, true); Ok(vec![LocalOutcome::CodeApproved(code_id)]) } } diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 016c63189cc..4f7d565c08f 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -139,11 +139,11 @@ impl Validator { fn validate_code_commitment(db: &impl CodesStorage, request: CodeCommitment) -> Result<()> { let CodeCommitment { id: code_id, valid } = request; if db - .code_approved(code_id) - .ok_or(anyhow!("Code {code_id} is not processed by this node"))? + .code_valid(code_id) + .ok_or(anyhow!("Code {code_id} is not validated by this node"))? .ne(&valid) { - return Err(anyhow!("Requested and local code approval mismatch")); + return Err(anyhow!("Requested and local code validation results mismatch")); } Ok(()) } @@ -291,7 +291,7 @@ mod tests { ) .expect_err("Code is not in db"); - db.set_code_approved(code_id, true); + db.set_code_valid(code_id, true); Validator::validate_code_commitment( &db, CodeCommitment { @@ -299,7 +299,7 @@ mod tests { valid: false, }, ) - .expect_err("Approval mismatch"); + .expect_err("Code validation result mismatch"); Validator::validate_code_commitment( &db, From cdb5aa7ed54bfec394f880b84200136ecd75c1f1 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Fri, 16 Aug 2024 12:46:08 +0200 Subject: [PATCH 25/44] fmt --- ethexe/db/src/database.rs | 8 +++----- ethexe/validator/src/lib.rs | 4 +++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ethexe/db/src/database.rs b/ethexe/db/src/database.rs index 0376dbd1fe2..0d292c7fdbf 100644 --- a/ethexe/db/src/database.rs +++ b/ethexe/db/src/database.rs @@ -328,11 +328,9 @@ impl CodesStorage for Database { } fn code_valid(&self, code_id: CodeId) -> Option { - self.kv - .get(&KeyPrefix::CodeValid.one(code_id)) - .map(|data| { - bool::decode(&mut data.as_slice()).expect("Failed to decode data into `bool`") - }) + self.kv.get(&KeyPrefix::CodeValid.one(code_id)).map(|data| { + bool::decode(&mut data.as_slice()).expect("Failed to decode data into `bool`") + }) } fn set_code_valid(&self, code_id: CodeId, approved: bool) { diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 4f7d565c08f..df698852390 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -143,7 +143,9 @@ impl Validator { .ok_or(anyhow!("Code {code_id} is not validated by this node"))? .ne(&valid) { - return Err(anyhow!("Requested and local code validation results mismatch")); + return Err(anyhow!( + "Requested and local code validation results mismatch" + )); } Ok(()) } From 7b2bb9b9c1e92a3ec6692e780471d23eb5a3a11b Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 21 Aug 2024 15:34:57 +0200 Subject: [PATCH 26/44] fix bugs --- ethexe/cli/src/service.rs | 116 ++++++++++--- ethexe/cli/src/tests.rs | 1 + ethexe/sequencer/src/agro.rs | 26 ++- ethexe/sequencer/src/lib.rs | 313 +++++++++++++++++++++-------------- 4 files changed, 307 insertions(+), 149 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 2b1c58c1f4b..d0b72afadcd 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -38,7 +38,13 @@ use ethexe_validator::BlockCommitmentValidationRequest; use futures::{future, stream::StreamExt, FutureExt}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; -use std::{future::Future, ops::Not, sync::Arc, time::Duration}; +use std::{ + future::Future, + ops::Not, + sync::Arc, + time::{Duration, Instant}, +}; +use utils::*; /// ethexe service. pub struct Service { @@ -123,6 +129,7 @@ impl Service { validators: config.validators.clone(), }, signer.clone(), + Box::new(db.clone()), ) .await?, ) @@ -439,9 +446,6 @@ impl Service { None }; - let mut collection_round_timer: Option<_> = None; - let mut validation_round_timer: Option<_> = None; - let mut roles = "Observer".to_string(); if let Some(seq) = sequencer.as_ref() { roles.push_str(&format!(", Sequencer ({})", seq.address())); @@ -451,6 +455,9 @@ impl Service { } log::info!("⚙️ Node service starting, roles: [{}]", roles); + let mut collection_round_timer = RoundTimer::new(block_time / 4); + let mut validation_round_timer = RoundTimer::new(block_time / 4); + loop { tokio::select! { observer_event = observer_events.next() => { @@ -459,6 +466,8 @@ impl Service { break; }; + let is_block_event = matches!(observer_event, ObserverEvent::Block(_)); + let (code_commitments, block_commitments) = Self::process_observer_event( &db, &mut query, @@ -475,9 +484,12 @@ impl Service { network_sender.as_mut(), ).await?; - collection_round_timer = Some(tokio::time::sleep(block_time / 4)); + if is_block_event { + collection_round_timer.start(); + validation_round_timer.stop(); + } } - _ = maybe_await(collection_round_timer.take()) => { + _ = collection_round_timer.wait() => { log::debug!("Collection round timeout, process collected commitments..."); Self::process_collected_commitments( @@ -487,12 +499,15 @@ impl Service { network_sender.as_mut() )?; - validation_round_timer = Some(tokio::time::sleep(block_time / 4)); + collection_round_timer.stop(); + validation_round_timer.start(); } - _ = maybe_await(validation_round_timer.take()) => { + _ = validation_round_timer.wait() => { log::debug!("Validation round timeout, process validated commitments..."); Self::process_approved_commitments(sequencer.as_mut()).await?; + + validation_round_timer.stop(); } message = maybe_await(gossipsub_stream.as_mut().map(|stream| stream.next())) => { let Some(message) = message else { @@ -508,7 +523,7 @@ impl Service { ); if let Err(err) = result { - log::warn!("Failed to process network message: {:?}", err); + log::warn!("Failed to process network message: {err}"); } } _ = maybe_await(network_handle.as_mut()) => { @@ -603,7 +618,10 @@ impl Service { return Ok(()); }; - sequencer.process_collected_commitments()?; + if let Err(err) = sequencer.process_collected_commitments() { + log::warn!("Sequencer failed to process collected commitments: {err}"); + return Ok(()); + } if maybe_validator.is_none() && maybe_network_sender.is_none() { return Ok(()); @@ -631,21 +649,38 @@ impl Service { if let Some(validator) = maybe_validator { log::debug!( - "Validate local ({}) code commitments and ({}) block commitments...", + "Validate collected ({}) code commitments and ({}) block commitments...", code_requests.len(), block_requests.len() ); + // Because sequencer can collect commitments from different sources, + // it's possible that some of collected commitments validation will fail + // on local validator. So we just print warning in this case. + if code_requests.is_empty().not() { let digest = code_requests.as_digest(); - let signature = validator.validate_code_commitments(db, code_requests)?; - sequencer.receive_codes_signature(digest, signature)?; + + match validator.validate_code_commitments(db, code_requests) { + Result::Ok(signature) => { + sequencer.receive_codes_signature(digest, signature)? + } + Result::Err(err) => { + log::warn!("Collected code commitments validation failed: {err}") + } + } } if block_requests.is_empty().not() { let digest = block_requests.as_digest(); - let signature = validator.validate_block_commitments(db, block_requests)?; - sequencer.receive_blocks_signature(digest, signature)?; + match validator.validate_block_commitments(db, block_requests) { + Result::Ok(signature) => { + sequencer.receive_blocks_signature(digest, signature)? + } + Result::Err(err) => { + log::warn!("Collected block commitments validation failed: {err}") + } + } } } @@ -735,11 +770,52 @@ impl Service { } } -pub async fn maybe_await(f: Option) -> F::Output { - if let Some(f) = f { - f.await - } else { - future::pending().await +mod utils { + use super::*; + + pub(crate) struct RoundTimer { + round_duration: Duration, + started: Option, + } + + impl RoundTimer { + pub fn new(round_duration: Duration) -> Self { + Self { + round_duration, + started: None, + } + } + + pub fn start(&mut self) { + self.started = Some(Instant::now()); + } + + pub fn stop(&mut self) { + self.started = None; + } + + pub async fn wait(&self) { + maybe_await(self.remaining().map(|rem| tokio::time::sleep(rem))).await; + } + + fn remaining(&self) -> Option { + self.started.map(|started| { + let elapsed = started.elapsed(); + if elapsed < self.round_duration { + self.round_duration - elapsed + } else { + Duration::ZERO + } + }) + } + } + + pub(crate) async fn maybe_await(f: Option) -> F::Output { + if let Some(f) = f { + f.await + } else { + future::pending().await + } } } diff --git a/ethexe/cli/src/tests.rs b/ethexe/cli/src/tests.rs index 30722ce3523..d28e5b9d29b 100644 --- a/ethexe/cli/src/tests.rs +++ b/ethexe/cli/src/tests.rs @@ -257,6 +257,7 @@ impl TestEnv { validators: vec![self.validator_public_key.to_address()], }, self.signer.clone(), + Box::new(self.db.clone()), ) .await?; diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index d3db19396a5..fa4d5b1866f 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -18,11 +18,10 @@ //! Abstract commitment aggregator. -use std::collections::{BTreeMap, BTreeSet}; - use anyhow::Result; use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; use parity_scale_codec::{Decode, Encode}; +use std::collections::BTreeMap; #[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] pub struct AggregatedCommitments { @@ -70,13 +69,22 @@ pub(crate) struct MultisignedCommitmentDigests { } impl MultisignedCommitmentDigests { - pub fn new(digests: BTreeSet) -> Self { - let digests: Vec<_> = digests.into_iter().collect(); - Self { + pub fn new(mut digests: Vec) -> Result { + let len = digests.len(); + if len == 0 { + return Err(anyhow::anyhow!("Empty commitments digests")); + } + + digests.dedup(); + if digests.len() != len { + return Err(anyhow::anyhow!("Duplicate commitments digests")); + } + + Ok(Self { digest: digests.as_digest(), digests, signatures: BTreeMap::new(), - } + }) } pub fn append_signature_with_check( @@ -242,7 +250,8 @@ mod tests { let commitments = [MyComm([1, 2]), MyComm([3, 4])]; let digests = commitments.map(|c| c.as_digest()); - let mut multisigned = MultisignedCommitmentDigests::new(digests.into_iter().collect()); + let mut multisigned = + MultisignedCommitmentDigests::new(digests.into_iter().collect()).unwrap(); assert_eq!(multisigned.digests(), digests.as_slice()); assert_eq!(multisigned.signatures().len(), 0); @@ -272,7 +281,8 @@ mod tests { .map(|c| (c.as_digest(), c)) .collect(); - let mut multisigned = MultisignedCommitmentDigests::new(digests.into_iter().collect()); + let mut multisigned = + MultisignedCommitmentDigests::new(digests.into_iter().collect()).unwrap(); let commitments_digest = commitments.as_digest(); let signature = sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index d0405e1200f..b04df4e8cac 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -22,12 +22,16 @@ pub mod agro; use agro::{AggregatedCommitments, MultisignedCommitmentDigests, MultisignedCommitments}; use anyhow::{anyhow, Result}; -use ethexe_common::router::{BlockCommitment, CodeCommitment}; +use ethexe_common::{ + db::BlockMetaStorage, + router::{BlockCommitment, CodeCommitment}, +}; use ethexe_ethereum::Ethereum; use ethexe_observer::Event; use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; +use gprimitives::H256; use std::{ - collections::{BTreeMap, BTreeSet, HashSet}, + collections::{BTreeMap, BTreeSet, HashSet, VecDeque}, ops::Not, }; use tokio::sync::watch; @@ -36,6 +40,8 @@ pub struct Sequencer { key: PublicKey, ethereum: Ethereum, + db: Box, + validators: HashSet
, threshold: u64, @@ -44,6 +50,7 @@ pub struct Sequencer { codes_candidate: Option, blocks_candidate: Option, + chain_head: Option, status: SequencerStatus, status_sender: watch::Sender, @@ -72,7 +79,11 @@ struct CommitmentAndOrigins { type CommitmentsMap = BTreeMap>; impl Sequencer { - pub async fn new(config: &Config, signer: Signer) -> Result { + pub async fn new( + config: &Config, + signer: Signer, + db: Box, + ) -> Result { let (status_sender, _status_receiver) = watch::channel(SequencerStatus::default()); Ok(Sequencer { key: config.sign_tx_public, @@ -83,27 +94,32 @@ impl Sequencer { config.sign_tx_public.to_address(), ) .await?, + db, validators: config.validators.iter().cloned().collect(), threshold: 1, code_commitments: Default::default(), block_commitments: Default::default(), codes_candidate: Default::default(), blocks_candidate: Default::default(), + chain_head: Default::default(), status: Default::default(), status_sender, }) } // This function should never block. - pub fn process_observer_event(&mut self, _event: &Event) -> Result<()> { - self.update_status(|status| { - *status = SequencerStatus::default(); - }); + pub fn process_observer_event(&mut self, event: &Event) -> Result<()> { + if let Event::Block(block_data) = event { + // Reset status, candidates and chain-head each block event + + self.update_status(|status| { + *status = SequencerStatus::default(); + }); - // Presently, sequencer resets candidates for each observer event, - // because each observer event resets ethexe service rounds. - self.codes_candidate = None; - self.blocks_candidate = None; + self.codes_candidate = None; + self.blocks_candidate = None; + self.chain_head = Some(block_data.block_hash); + } Ok(()) } @@ -113,17 +129,28 @@ impl Sequencer { return Err(anyhow!("Previous commitments candidate are not submitted")); } - Self::set_candidate_commitments( - &self.code_commitments, - &mut self.codes_candidate, - self.threshold, - ); + let Some(chain_head) = self.chain_head else { + return Err(anyhow!("No chain head is set")); + }; - Self::set_candidate_commitments( + self.codes_candidate = + Self::code_commitments_candidate(&self.code_commitments, self.threshold); + + let last_not_empty_block = if self.db.block_is_empty(chain_head).ok_or(anyhow!( + "Failed to get block emptiness status for {chain_head}" + ))? { + self.db.block_prev_commitment(chain_head).ok_or(anyhow!( + "Failed to get previous commitment for {chain_head}" + ))? + } else { + chain_head + }; + + self.blocks_candidate = Self::block_commitments_candidate( &self.block_commitments, - &mut self.blocks_candidate, + last_not_empty_block, self.threshold, - ); + )?; Ok(()) } @@ -256,21 +283,65 @@ impl Sequencer { }) } - fn set_candidate_commitments( - commitments: &CommitmentsMap, - candidate: &mut Option, + fn block_commitments_candidate( + commitments: &CommitmentsMap, + from_block: H256, threshold: u64, - ) { - let suitable_digests: BTreeSet<_> = commitments + ) -> Result> { + let suitable_commitments: BTreeMap<_, _> = commitments .iter() - .filter_map(|(digest, c)| (c.origins.len() as u64 >= threshold).then_some(*digest)) + .filter_map(|(digest, c)| { + (c.origins.len() as u64 >= threshold) + .then_some((c.commitment.block_hash, (digest, &c.commitment))) + }) .collect(); - if suitable_digests.is_empty() { - return; + let mut candidate = VecDeque::new(); + let mut block_hash = from_block; + loop { + let Some((digest, commitment)) = suitable_commitments.get(&block_hash) else { + break; + }; + + candidate.push_front(**digest); + + block_hash = commitment.prev_commitment_hash; + } + + if candidate.is_empty() { + return Ok(None); } - *candidate = Some(MultisignedCommitmentDigests::new(suitable_digests)); + let candidate = MultisignedCommitmentDigests::new(candidate.into_iter().collect()) + .unwrap_or_else(|err| { + unreachable!( + "Guarantied by impl to be non-empty and without duplicates, but get: {err}" + ); + }); + + Ok(Some(candidate)) + } + + fn code_commitments_candidate( + commitments: &CommitmentsMap, + threshold: u64, + ) -> Option { + let suitable_commitment_digests: Vec<_> = commitments + .iter() + .filter_map(|(&digest, c)| (c.origins.len() as u64 >= threshold).then_some(digest)) + .collect(); + + if suitable_commitment_digests.is_empty() { + return None; + } + + Some( + MultisignedCommitmentDigests::new(suitable_commitment_digests).unwrap_or_else(|err| { + unreachable!( + "Guarantied by impl to be non-empty and without duplicates, but get: {err}" + ); + }), + ) } fn process_multisigned_candidate( @@ -454,9 +525,8 @@ mod tests { .expect_err("No candidate is provided"); let mut signatures: BTreeMap<_, _> = Default::default(); - let digests: BTreeSet<_> = commitments.iter().map(AsDigest::as_digest).collect(); - let expected_digests: Vec<_> = digests.iter().cloned().collect(); - let mut candidate = MultisignedCommitmentDigests::new(digests); + let digests: Vec<_> = commitments.iter().map(AsDigest::as_digest).collect(); + let mut candidate = MultisignedCommitmentDigests::new(digests.clone()).unwrap(); Sequencer::receive_signature( Digest::from([1; 32]), @@ -486,7 +556,7 @@ mod tests { .unwrap(); signatures.insert(validator1, signature); - assert_eq!(expected_digests.as_slice(), candidate.digests()); + assert_eq!(digests.as_slice(), candidate.digests()); assert_eq!(&signatures, candidate.signatures()); let validator2_private_key = validators_private_keys[1]; @@ -511,7 +581,7 @@ mod tests { .unwrap(); signatures.insert(validator2, signature); - assert_eq!(expected_digests.as_slice(), candidate.digests()); + assert_eq!(digests.as_slice(), candidate.digests()); assert_eq!(&signatures, candidate.signatures()); } @@ -619,95 +689,91 @@ mod tests { } #[test] - fn test_set_candidate_commitments() { - let mut candidate = None; + fn test_code_commitments_candidate() { let threshold = 2; let mut commitments = BTreeMap::new(); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - assert!(candidate.is_none()); - - let commitment1 = TestComm([0, 1]); - let commitment2 = TestComm([2, 3]); - let commitment3 = TestComm([4, 5]); - { - commitments.insert( - commitment1.as_digest(), - CommitmentAndOrigins { - commitment: commitment1, - origins: Default::default(), - }, - ); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - assert!(candidate.is_none()); - } + let commitment1 = CodeCommitment { + id: H256::random().0.into(), + valid: true, + }; + let commitment2 = CodeCommitment { + id: H256::random().0.into(), + valid: true, + }; + let commitment3 = CodeCommitment { + id: H256::random().0.into(), + valid: false, + }; - { - commitments - .get_mut(&commitment1.as_digest()) - .unwrap() - .origins - .insert(Address([1; 20])); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - assert!(candidate.is_none()); - } + let candidate = Sequencer::code_commitments_candidate(&commitments, threshold); + assert!(candidate.is_none()); - { - commitments - .get_mut(&commitment1.as_digest()) - .unwrap() - .origins - .insert(Address([2; 20])); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - let candidate = candidate.as_ref().unwrap(); - assert_eq!(candidate.digests(), [commitment1.as_digest()].as_slice()); - assert!(candidate.signatures().is_empty()); - } + commitments.insert( + commitment1.as_digest(), + CommitmentAndOrigins { + commitment: commitment1.clone(), + origins: Default::default(), + }, + ); + let candidate = Sequencer::code_commitments_candidate(&commitments, threshold); + assert!(candidate.is_none()); - { - commitments.insert( - commitment2.as_digest(), - CommitmentAndOrigins { - commitment: commitment2, - origins: [Address([3; 20]), Address([4; 20])] - .iter() - .cloned() - .collect(), - }, - ); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - let candidate = candidate.as_ref().unwrap(); - assert_eq!( - candidate.digests(), - [commitment1.as_digest(), commitment2.as_digest()].as_slice() - ); - assert!(candidate.signatures().is_empty()); - } + commitments + .get_mut(&commitment1.as_digest()) + .unwrap() + .origins + .insert(Address([1; 20])); + let candidate = Sequencer::code_commitments_candidate(&commitments, threshold); + assert!(candidate.is_none()); - { - commitments.insert( - commitment3.as_digest(), - CommitmentAndOrigins { - commitment: commitment3, - origins: [Address([5; 20])].iter().cloned().collect(), - }, - ); - Sequencer::set_candidate_commitments(&commitments, &mut candidate, threshold); - let candidate = candidate.as_ref().unwrap(); - assert_eq!( - candidate.digests(), - [commitment1.as_digest(), commitment2.as_digest()].as_slice() - ); - assert!(candidate.signatures().is_empty()); - } + commitments + .get_mut(&commitment1.as_digest()) + .unwrap() + .origins + .insert(Address([2; 20])); + let candidate = Sequencer::code_commitments_candidate(&commitments, threshold) + .expect("Must have candidate"); + assert_eq!(candidate.digests(), [commitment1.as_digest()].as_slice()); + assert!(candidate.signatures().is_empty()); + + commitments.insert( + commitment2.as_digest(), + CommitmentAndOrigins { + commitment: commitment2.clone(), + origins: [Address([3; 20]), Address([4; 20])] + .iter() + .cloned() + .collect(), + }, + ); + let candidate = Sequencer::code_commitments_candidate(&commitments, threshold) + .expect("Must have candidate"); + let mut expected_digests = [commitment1.as_digest(), commitment2.as_digest()]; + expected_digests.sort(); + assert_eq!(candidate.digests(), expected_digests.as_slice()); + assert!(candidate.signatures().is_empty()); + + commitments.insert( + commitment3.as_digest(), + CommitmentAndOrigins { + commitment: commitment3, + origins: [Address([5; 20])].iter().cloned().collect(), + }, + ); + let candidate = Sequencer::code_commitments_candidate(&commitments, threshold) + .expect("Must have candidate"); + assert_eq!(candidate.digests(), expected_digests.as_slice()); + assert!(candidate.signatures().is_empty()); } #[test] #[should_panic(expected = "Guarantied by `Sequencer` implementation to be in the map")] fn test_process_multisigned_candidate_empty_map() { let candidate = - MultisignedCommitmentDigests::new([[2; 32]].map(Into::into).into_iter().collect()); + MultisignedCommitmentDigests::new([[2; 32]].map(Into::into).into_iter().collect()) + .unwrap(); Sequencer::process_multisigned_candidate::( &mut Some(candidate), &mut Default::default(), @@ -728,7 +794,8 @@ mod tests { .is_none()); // Test not enough signatures - let mut candidate = Some(MultisignedCommitmentDigests::new(Default::default())); + let mut candidate = + Some(MultisignedCommitmentDigests::new(vec![b"gear".as_digest()]).unwrap()); assert!(Sequencer::process_multisigned_candidate( &mut candidate, &mut CommitmentsMap::::new(), @@ -736,7 +803,6 @@ mod tests { ) .is_none()); - let mut commitments_map = CommitmentsMap::new(); let validators_private_keys = [PrivateKey([1; 32]), PrivateKey([2; 32])]; let validators_pub_keys = validators_private_keys.map(|key| signer.add_key(key).unwrap()); let origins: BTreeSet<_> = validators_pub_keys @@ -745,19 +811,23 @@ mod tests { .collect(); let commitments = [TestComm([0, 1]), TestComm([2, 3]), TestComm([4, 5])]; - commitments.iter().for_each(|commitment| { - commitments_map.insert( - commitment.as_digest(), - CommitmentAndOrigins { - commitment: *commitment, - origins: origins.clone(), - }, - ); - }); + let mut commitments_map = commitments + .iter() + .map(|commitment| { + ( + commitment.as_digest(), + CommitmentAndOrigins { + commitment: *commitment, + origins: origins.clone(), + }, + ) + }) + .collect(); - Sequencer::set_candidate_commitments(&commitments_map, &mut candidate, 2); + let mut candidate = + MultisignedCommitmentDigests::new(commitments.iter().map(|c| c.as_digest()).collect()) + .unwrap(); - let mut candidate = candidate.expect("Must be set"); let router_address = Address([1; 20]); validators_pub_keys.iter().for_each(|pub_key| { let commitments_digest = commitments.to_vec().as_digest(); @@ -778,6 +848,7 @@ mod tests { }); let mut candidate = Some(candidate); + assert!( Sequencer::process_multisigned_candidate(&mut candidate, &mut commitments_map, 2) .is_some(), From b3add53d6edcf7e99288586f71ba3841a79603c7 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 21 Aug 2024 15:50:32 +0200 Subject: [PATCH 27/44] remove db from sequencer --- ethexe/cli/src/service.rs | 27 ++++++++++++++++++++---- ethexe/cli/src/tests.rs | 1 - ethexe/sequencer/src/lib.rs | 41 ++++++++----------------------------- 3 files changed, 32 insertions(+), 37 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index d0b72afadcd..a2791efeb87 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -129,7 +129,6 @@ impl Service { validators: config.validators.clone(), }, signer.clone(), - Box::new(db.clone()), ) .await?, ) @@ -618,10 +617,30 @@ impl Service { return Ok(()); }; - if let Err(err) = sequencer.process_collected_commitments() { - log::warn!("Sequencer failed to process collected commitments: {err}"); + let Some(chain_head) = sequencer.chain_head() else { + return Err(anyhow!("Chain head is not set in sequencer")); + }; + + // If chain head is not yet processed by this node, this is normal situation, + // so we just skip this round for sequencer. + + let Some(block_is_empty) = db.block_is_empty(chain_head) else { + log::warn!("Failed to get block emptiness status for {chain_head}"); return Ok(()); - } + }; + + let last_not_empty_block = match block_is_empty { + true => match db.block_prev_commitment(chain_head) { + Some(prev_commitment) => prev_commitment, + None => { + log::warn!("Failed to get previous commitment for {chain_head}"); + return Ok(()); + } + }, + false => chain_head, + }; + + sequencer.process_collected_commitments(last_not_empty_block)?; if maybe_validator.is_none() && maybe_network_sender.is_none() { return Ok(()); diff --git a/ethexe/cli/src/tests.rs b/ethexe/cli/src/tests.rs index d28e5b9d29b..30722ce3523 100644 --- a/ethexe/cli/src/tests.rs +++ b/ethexe/cli/src/tests.rs @@ -257,7 +257,6 @@ impl TestEnv { validators: vec![self.validator_public_key.to_address()], }, self.signer.clone(), - Box::new(self.db.clone()), ) .await?; diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index b04df4e8cac..f63bd1397bb 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -22,10 +22,7 @@ pub mod agro; use agro::{AggregatedCommitments, MultisignedCommitmentDigests, MultisignedCommitments}; use anyhow::{anyhow, Result}; -use ethexe_common::{ - db::BlockMetaStorage, - router::{BlockCommitment, CodeCommitment}, -}; +use ethexe_common::router::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; use ethexe_observer::Event; use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; @@ -40,8 +37,6 @@ pub struct Sequencer { key: PublicKey, ethereum: Ethereum, - db: Box, - validators: HashSet
, threshold: u64, @@ -79,11 +74,7 @@ struct CommitmentAndOrigins { type CommitmentsMap = BTreeMap>; impl Sequencer { - pub async fn new( - config: &Config, - signer: Signer, - db: Box, - ) -> Result { + pub async fn new(config: &Config, signer: Signer) -> Result { let (status_sender, _status_receiver) = watch::channel(SequencerStatus::default()); Ok(Sequencer { key: config.sign_tx_public, @@ -94,7 +85,6 @@ impl Sequencer { config.sign_tx_public.to_address(), ) .await?, - db, validators: config.validators.iter().cloned().collect(), threshold: 1, code_commitments: Default::default(), @@ -107,6 +97,10 @@ impl Sequencer { }) } + pub fn chain_head(&self) -> Option { + self.chain_head + } + // This function should never block. pub fn process_observer_event(&mut self, event: &Event) -> Result<()> { if let Event::Block(block_data) = event { @@ -124,33 +118,16 @@ impl Sequencer { Ok(()) } - pub fn process_collected_commitments(&mut self) -> Result<()> { + pub fn process_collected_commitments(&mut self, from_block: H256) -> Result<()> { if self.codes_candidate.is_some() || self.blocks_candidate.is_some() { return Err(anyhow!("Previous commitments candidate are not submitted")); } - let Some(chain_head) = self.chain_head else { - return Err(anyhow!("No chain head is set")); - }; - self.codes_candidate = Self::code_commitments_candidate(&self.code_commitments, self.threshold); - let last_not_empty_block = if self.db.block_is_empty(chain_head).ok_or(anyhow!( - "Failed to get block emptiness status for {chain_head}" - ))? { - self.db.block_prev_commitment(chain_head).ok_or(anyhow!( - "Failed to get previous commitment for {chain_head}" - ))? - } else { - chain_head - }; - - self.blocks_candidate = Self::block_commitments_candidate( - &self.block_commitments, - last_not_empty_block, - self.threshold, - )?; + self.blocks_candidate = + Self::block_commitments_candidate(&self.block_commitments, from_block, self.threshold)?; Ok(()) } From dc3d92eec89bb3368d921fae03d5b905bab57238 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 21 Aug 2024 16:29:06 +0200 Subject: [PATCH 28/44] append test for block_commitments_candidate --- ethexe/sequencer/src/lib.rs | 93 +++++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 4 deletions(-) diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index f63bd1397bb..b058f57ff53 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -127,7 +127,7 @@ impl Sequencer { Self::code_commitments_candidate(&self.code_commitments, self.threshold); self.blocks_candidate = - Self::block_commitments_candidate(&self.block_commitments, from_block, self.threshold)?; + Self::block_commitments_candidate(&self.block_commitments, from_block, self.threshold); Ok(()) } @@ -264,7 +264,7 @@ impl Sequencer { commitments: &CommitmentsMap, from_block: H256, threshold: u64, - ) -> Result> { + ) -> Option { let suitable_commitments: BTreeMap<_, _> = commitments .iter() .filter_map(|(digest, c)| { @@ -286,7 +286,7 @@ impl Sequencer { } if candidate.is_empty() { - return Ok(None); + return None; } let candidate = MultisignedCommitmentDigests::new(candidate.into_iter().collect()) @@ -296,7 +296,7 @@ impl Sequencer { ); }); - Ok(Some(candidate)) + Some(candidate) } fn code_commitments_candidate( @@ -665,6 +665,91 @@ mod tests { assert_eq!(expected_commitments_storage, commitments_storage); } + #[test] + fn test_block_commitments_candidate() { + let threshold = 2; + + let mut commitments = BTreeMap::new(); + + let commitment1 = BlockCommitment { + block_hash: H256::random(), + prev_commitment_hash: H256::random(), + pred_block_hash: H256::random(), + transitions: Default::default(), + }; + let commitment2 = BlockCommitment { + block_hash: H256::random(), + prev_commitment_hash: commitment1.block_hash, + pred_block_hash: H256::random(), + transitions: Default::default(), + }; + let commitment3 = BlockCommitment { + block_hash: H256::random(), + prev_commitment_hash: commitment1.block_hash, + pred_block_hash: H256::random(), + transitions: Default::default(), + }; + + let candidate = + Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, threshold); + assert!(candidate.is_none()); + + commitments.insert( + commitment1.as_digest(), + CommitmentAndOrigins { + commitment: commitment1.clone(), + origins: Default::default(), + }, + ); + let candidate = + Sequencer::block_commitments_candidate(&commitments, H256::random(), threshold); + assert!(candidate.is_none()); + + let candidate = + Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, 0) + .expect("Must have candidate"); + assert_eq!(candidate.digests(), [commitment1.as_digest()].as_slice()); + + commitments + .get_mut(&commitment1.as_digest()) + .unwrap() + .origins + .extend([Address([1; 20]), Address([2; 20])]); + commitments.insert( + commitment2.as_digest(), + CommitmentAndOrigins { + commitment: commitment2.clone(), + origins: [[1; 20], [2; 20]].map(Address).iter().cloned().collect(), + }, + ); + commitments.insert( + commitment3.as_digest(), + CommitmentAndOrigins { + commitment: commitment3.clone(), + origins: [[1; 20], [2; 20]].map(Address).iter().cloned().collect(), + }, + ); + + let candidate = + Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, threshold) + .expect("Must have candidate"); + assert_eq!(candidate.digests(), [commitment1.as_digest()].as_slice()); + + let candidate = + Sequencer::block_commitments_candidate(&commitments, commitment2.block_hash, threshold) + .expect("Must have candidate"); + let mut expected_digests = [commitment1.as_digest(), commitment2.as_digest()]; + expected_digests.sort(); + assert_eq!(candidate.digests(), expected_digests.as_slice()); + + let candidate = + Sequencer::block_commitments_candidate(&commitments, commitment3.block_hash, threshold) + .expect("Must have candidate"); + let mut expected_digests = [commitment1.as_digest(), commitment3.as_digest()]; + expected_digests.sort(); + assert_eq!(candidate.digests(), expected_digests.as_slice()); + } + #[test] fn test_code_commitments_candidate() { let threshold = 2; From b125eb9f2b7a1b961a7ea3195980d8aeff717d25 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 21 Aug 2024 23:39:19 +0200 Subject: [PATCH 29/44] remove validators arg and query info from router --- ethexe/cli/src/args.rs | 3 --- ethexe/cli/src/config.rs | 15 --------------- ethexe/cli/src/service.rs | 24 ++++++++++++++++++------ ethexe/cli/src/tests.rs | 1 + ethexe/ethereum/src/router/mod.rs | 18 ++++++++++++++++++ ethexe/sequencer/src/lib.rs | 8 +++++++- 6 files changed, 44 insertions(+), 25 deletions(-) diff --git a/ethexe/cli/src/args.rs b/ethexe/cli/src/args.rs index 89fd81fd265..7b015efd3d2 100644 --- a/ethexe/cli/src/args.rs +++ b/ethexe/cli/src/args.rs @@ -108,9 +108,6 @@ pub struct Args { #[clap(flatten)] pub prometheus_params: Option, - /// Validators set - pub validators: Option>, - #[command(subcommand)] pub extra_command: Option, } diff --git a/ethexe/cli/src/config.rs b/ethexe/cli/src/config.rs index c2c8be461de..cb3f8f7e34a 100644 --- a/ethexe/cli/src/config.rs +++ b/ethexe/cli/src/config.rs @@ -125,9 +125,6 @@ pub struct Config { /// RPC port pub rpc_port: Option, - - /// Validators set - pub validators: Vec
, } impl TryFrom for Config { @@ -188,17 +185,6 @@ impl TryFrom for Config { "random key for validator is only allowed with `--tmp` flag" ); - let mut validators = Vec::new(); - for res in args - .validators - .unwrap_or_default() - .into_iter() - .map(|s| Address::from_str(s.as_str())) - { - let address = res.map_err(|e| anyhow::anyhow!("invalid validator address: {}", e))?; - validators.push(address); - } - Ok(Config { node_name: args.node_name, ethereum_rpc: args.ethereum_rpc, @@ -220,7 +206,6 @@ impl TryFrom for Config { params.prometheus_config(DEFAULT_PROMETHEUS_PORT, "ethexe-dev".to_string()) }), rpc_port: args.rpc_port, - validators, }) } } diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index a2791efeb87..74e6da23352 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -102,8 +102,17 @@ impl Service { .await?; let router_query = RouterQuery::new(&config.ethereum_rpc, ethereum_router_address).await?; + let genesis_block_hash = router_query.genesis_block_hash().await?; - log::info!("👶 Genesis block hash: {genesis_block_hash}"); + log::info!("👶 Genesis block hash: {genesis_block_hash:?}"); + + let validators = router_query.validators().await?; + log::info!("👥 Validators set: {validators:?}"); + + let threshold_percentage = router_query.threshold_percentage().await?; + // See Router.sol validatorsThreshold impl + let threshold = (validators.len() as u64 * threshold_percentage + 9999) / 10000; + log::info!("🔒 Multisig threshold: {threshold} / {}", validators.len()); let query = ethexe_observer::Query::new( Arc::new(db.clone()), @@ -126,7 +135,8 @@ impl Service { ethereum_rpc: config.ethereum_rpc.clone(), sign_tx_public: key, router_address: config.ethereum_router_address, - validators: config.validators.clone(), + validators, + threshold, }, signer.clone(), ) @@ -522,6 +532,8 @@ impl Service { ); if let Err(err) = result { + // TODO: slash peer/validator in case of error #+_+_+ + // TODO: consider error log as temporary solution #+_+_+ log::warn!("Failed to process network message: {err}"); } } @@ -850,6 +862,8 @@ mod tests { #[tokio::test] async fn basics() { + gear_utils::init_default_logger(); + let tmp_dir = tempdir().unwrap(); let tmp_dir = tmp_dir.path().to_path_buf(); @@ -860,7 +874,7 @@ mod tests { node_name: "test".to_string(), ethereum_rpc: "ws://54.67.75.1:8546".into(), ethereum_beacon_rpc: "http://localhost:5052".into(), - ethereum_router_address: "0x05069E9045Ca0D2B72840c6A21C7bE588E02089A" + ethereum_router_address: "0xa9e7B594e18e28b1Cc0FA4000D92ded887CB356F" .parse() .expect("infallible"), max_commitment_depth: 1000, @@ -876,7 +890,6 @@ mod tests { "dev".to_string(), )), rpc_port: Some(9090), - validators: Default::default(), }) .await .unwrap(); @@ -886,7 +899,7 @@ mod tests { node_name: "test".to_string(), ethereum_rpc: "wss://ethereum-holesky-rpc.publicnode.com".into(), ethereum_beacon_rpc: "http://localhost:5052".into(), - ethereum_router_address: "0x05069E9045Ca0D2B72840c6A21C7bE588E02089A" + ethereum_router_address: "0xa9e7B594e18e28b1Cc0FA4000D92ded887CB356F" .parse() .expect("infallible"), max_commitment_depth: 1000, @@ -899,7 +912,6 @@ mod tests { net_config: None, prometheus_config: None, rpc_port: None, - validators: Default::default(), }) .await .unwrap(); diff --git a/ethexe/cli/src/tests.rs b/ethexe/cli/src/tests.rs index 30722ce3523..6bfd49a189f 100644 --- a/ethexe/cli/src/tests.rs +++ b/ethexe/cli/src/tests.rs @@ -255,6 +255,7 @@ impl TestEnv { sign_tx_public: self.sequencer_public_key, router_address: self.router_address, validators: vec![self.validator_public_key.to_address()], + threshold: 1, }, self.signer.clone(), ) diff --git a/ethexe/ethereum/src/router/mod.rs b/ethexe/ethereum/src/router/mod.rs index 7bd1210ecaa..2a9be2be8e6 100644 --- a/ethexe/ethereum/src/router/mod.rs +++ b/ethexe/ethereum/src/router/mod.rs @@ -236,4 +236,22 @@ impl RouterQuery { .map(|res| H256(*res._0)) .map_err(Into::into) } + + pub async fn validators(&self) -> Result> { + self.0 + .validators() + .call() + .await + .map(|res| res._0.into_iter().map(|v| LocalAddress(v.into())).collect()) + .map_err(Into::into) + } + + pub async fn threshold_percentage(&self) -> Result { + self.0 + .signingThresholdPercentage() + .call() + .await + .map(|res| res._0.to()) + .map_err(Into::into) + } } diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index b058f57ff53..9e2630edd77 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -56,6 +56,7 @@ pub struct Config { pub sign_tx_public: PublicKey, pub router_address: Address, pub validators: Vec
, + pub threshold: u64, } #[derive(Debug, Clone, Copy, Default)] @@ -86,7 +87,7 @@ impl Sequencer { ) .await?, validators: config.validators.iter().cloned().collect(), - threshold: 1, + threshold: config.threshold, code_commitments: Default::default(), block_commitments: Default::default(), codes_candidate: Default::default(), @@ -118,6 +119,11 @@ impl Sequencer { Ok(()) } + /// Process collected by sequencer commitments and prepare them for submission. + /// + /// `from_block` is the block hash, + /// from which the sequencer should start collecting block commitments list. + /// If `from_block` is not collected yet by the sequencer, then nothing will be done. pub fn process_collected_commitments(&mut self, from_block: H256) -> Result<()> { if self.codes_candidate.is_some() || self.blocks_candidate.is_some() { return Err(anyhow!("Previous commitments candidate are not submitted")); From 0544c4854bf5f98049313b06669c24ed12d97788 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 21 Aug 2024 23:51:24 +0200 Subject: [PATCH 30/44] return digest from commitments validation --- ethexe/cli/src/service.rs | 21 +++++---------------- ethexe/validator/src/lib.rs | 6 ++++-- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 74e6da23352..10e7c069eae 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -33,7 +33,7 @@ use ethexe_network::GossipsubMessage; use ethexe_observer::{BlockData, Event as ObserverEvent}; use ethexe_processor::LocalOutcome; use ethexe_sequencer::agro::AggregatedCommitments; -use ethexe_signer::{AsDigest, Digest, PublicKey, Signature, Signer}; +use ethexe_signer::{Digest, PublicKey, Signature, Signer}; use ethexe_validator::BlockCommitmentValidationRequest; use futures::{future, stream::StreamExt, FutureExt}; use gprimitives::H256; @@ -690,10 +690,8 @@ impl Service { // on local validator. So we just print warning in this case. if code_requests.is_empty().not() { - let digest = code_requests.as_digest(); - match validator.validate_code_commitments(db, code_requests) { - Result::Ok(signature) => { + Result::Ok((digest, signature)) => { sequencer.receive_codes_signature(digest, signature)? } Result::Err(err) => { @@ -703,9 +701,8 @@ impl Service { } if block_requests.is_empty().not() { - let digest = block_requests.as_digest(); match validator.validate_block_commitments(db, block_requests) { - Result::Ok(signature) => { + Result::Ok((digest, signature)) => { sequencer.receive_blocks_signature(digest, signature)? } Result::Err(err) => { @@ -760,21 +757,13 @@ impl Service { let codes = codes .is_empty() .not() - .then(|| { - let digest = codes.as_digest(); - let signature = validator.validate_code_commitments(db, codes)?; - Ok((digest, signature)) - }) + .then(|| validator.validate_code_commitments(db, codes)) .transpose()?; let blocks = blocks .is_empty() .not() - .then(|| { - let digest = blocks.as_digest(); - let signature = validator.validate_block_commitments(db, blocks)?; - Ok((digest, signature)) - }) + .then(|| validator.validate_block_commitments(db, blocks)) .transpose()?; let message = NetworkMessage::ApproveCommitments { codes, blocks }; diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index df698852390..93b529b38c8 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -100,7 +100,7 @@ impl Validator { &mut self, db: &impl CodesStorage, requests: impl IntoIterator, - ) -> Result { + ) -> Result<(Digest, Signature)> { let mut commitment_digests = Vec::new(); for request in requests.into_iter() { commitment_digests.push(request.as_digest()); @@ -114,13 +114,14 @@ impl Validator { self.pub_key, self.router_address, ) + .map(|signature| (commitments_digest, signature)) } pub fn validate_block_commitments( &mut self, db: &impl BlockMetaStorage, requests: impl IntoIterator, - ) -> Result { + ) -> Result<(Digest, Signature)> { let mut commitment_digests = Vec::new(); for request in requests.into_iter() { commitment_digests.push(request.as_digest()); @@ -134,6 +135,7 @@ impl Validator { self.pub_key, self.router_address, ) + .map(|signature| (commitments_digest, signature)) } fn validate_code_commitment(db: &impl CodesStorage, request: CodeCommitment) -> Result<()> { From de887dac05a501b92b508d6add8dc6a37d98b904 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 22 Aug 2024 00:13:45 +0200 Subject: [PATCH 31/44] append TODO with issues --- ethexe/cli/src/service.rs | 5 +++-- ethexe/sequencer/src/lib.rs | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 10e7c069eae..1037d85159f 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -63,6 +63,7 @@ pub struct Service { rpc: Option, } +// TODO: consider to move this to another module #4176 #[derive(Debug, Clone, Encode, Decode)] pub enum NetworkMessage { PublishCommitments { @@ -532,8 +533,8 @@ impl Service { ); if let Err(err) = result { - // TODO: slash peer/validator in case of error #+_+_+ - // TODO: consider error log as temporary solution #+_+_+ + // TODO: slash peer/validator in case of error #4175 + // TODO: consider error log as temporary solution #4175 log::warn!("Failed to process network message: {err}"); } } diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 9e2630edd77..565a4ffa430 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -61,6 +61,7 @@ pub struct Config { #[derive(Debug, Clone, Copy, Default)] pub struct SequencerStatus { + // TODO: change this to code and blocks commitments in the commitments map #4177 pub aggregated_commitments: u64, pub submitted_code_commitments: u64, pub submitted_block_commitments: u64, From a604e9338fb2e96f25c7c51218bbd29132021350 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 22 Aug 2024 11:19:11 +0200 Subject: [PATCH 32/44] fix after merge --- ethexe/ethereum/Mirror.json | 2 +- ethexe/ethereum/MirrorProxy.json | 2 +- ethexe/ethereum/Router.json | 2 +- ethexe/ethereum/TransparentUpgradeableProxy.json | 2 +- ethexe/ethereum/WrappedVara.json | 2 +- ethexe/ethereum/src/router/mod.rs | 4 ++-- ethexe/network/src/lib.rs | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ethexe/ethereum/Mirror.json b/ethexe/ethereum/Mirror.json index 21f9aadf07d..6aafca49f70 100644 --- a/ethexe/ethereum/Mirror.json +++ b/ethexe/ethereum/Mirror.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"claimValue","inputs":[{"name":"_claimedId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executableBalanceBurned","inputs":[{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executableBalanceTopUp","inputs":[{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"initMessage","inputs":[{"name":"source","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"executableBalance","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"messageSent","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"replySent","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyTo","type":"bytes32","internalType":"bytes32"},{"name":"replyCode","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sendMessage","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"sendReply","inputs":[{"name":"_repliedTo","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"stateHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"updateState","inputs":[{"name":"newStateHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"valueClaimed","inputs":[{"name":"claimedId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExecutableBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Message","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageQueueingRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Reply","inputs":[{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyQueueingRequested","inputs":[{"name":"repliedTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"StateChanged","inputs":[{"name":"stateHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValueClaimed","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"ValueClaimingRequested","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234601557610c2f908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806314503e51146106df57806329336f3914610610578063701da98e146105f4578063704ed542146105a25780638ea59e1d1461054157806391d5a64c14610500578063affed0e0146104e3578063c2df60091461044d578063c78bde7714610386578063d56242221461023f578063dca4a37314610201578063de1dd2e0146100d85763f887ea40146100a8575f80fd5b346100d4575f3660031901126100d45760206100c2610958565b6040516001600160a01b039091168152f35b5f80fd5b346100d45760803660031901126100d4576100f161076b565b60243567ffffffffffffffff81116100d4576101327f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c69136906004016107c3565b926101fc61013e610781565b6101466107ad565b956101626001600160a01b0361015a610958565b1633146107f1565b7f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206001546101918161092b565b6001556040513060601b6bffffffffffffffffffffffff191683820190815260148101929092526101cf81603484015b03601f198101835282610854565b519020986001600160801b0360405191168152a16040516001600160a01b039094169693948594856108fd565b0390a2005b346100d45760203660031901126100d45761023d61021d610797565b6102306001600160a01b0361015a610958565b610238610958565b6109c3565b005b60403660031901126100d45760043567ffffffffffffffff81116100d45761026b9036906004016107c3565b602435916001600160801b03831683036100d45760049260206001600160a01b03610294610958565b16604051958680926337792e1d60e11b82525afa90811561037b576102ed6102e8827f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6946020985f9161034e575b506108a9565b610aee565b6001546102f98161092b565b6001556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261032d81603484016101c1565b51902093610343604051928392329688856108fd565b0390a2604051908152f35b61036e9150893d8b11610374575b6103668183610854565b81019061088a565b896102e2565b503d61035c565b6040513d5f823e3d90fd5b346100d45760a03660031901126100d45761039f61076b565b60243567ffffffffffffffff81116100d4576103bf9036906004016107c3565b91906103c9610781565b926084359363ffffffff60e01b85168095036100d4577fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c69361041a9082906102386001600160a01b0361015a610958565b6001600160801b036104396040519485946060865260608601916108dd565b9116602083015260643560408301520390a2005b346100d45760803660031901126100d457610466610755565b60443567ffffffffffffffff81116100d4576104a77f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117739136906004016107c3565b90926101fc6104b46107ad565b6104c76001600160a01b0361015a610958565b6040516001600160a01b039093169592938493600435856108fd565b346100d4575f3660031901126100d4576020600154604051908152f35b346100d45760203660031901126100d45760405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203292a2005b346100d45760203660031901126100d4576004356105686001600160a01b0361015a610958565b805f540361057257005b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930925f55604051908152a1005b60203660031901126100d4577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206105d9610797565b6105e281610aee565b6001600160801b0360405191168152a1005b346100d4575f3660031901126100d45760205f54604051908152f35b60603660031901126100d45760243567ffffffffffffffff81116100d45761063d600491369083016107c3565b610648929192610781565b9060206001600160a01b0361065b610958565b16604051948580926337792e1d60e11b82525afa92831561037b576102e8837fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f956106ac935f916106c057506108a9565b6101fc6040519283923296600435856108fd565b6106d9915060203d602011610374576103668183610854565b886102e2565b346100d45760603660031901126100d4577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783604061071b610755565b61073c610726610781565b9182906102386001600160a01b0361015a610958565b6001600160801b038251916004358352166020820152a1005b602435906001600160a01b03821682036100d457565b600435906001600160a01b03821682036100d457565b604435906001600160801b03821682036100d457565b600435906001600160801b03821682036100d457565b606435906001600160801b03821682036100d457565b9181601f840112156100d45782359167ffffffffffffffff83116100d457602083818601950101116100d457565b156107f857565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b90601f8019910116810190811067ffffffffffffffff82111761087657604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126100d457516001600160801b03811681036100d45790565b906001600160801b03809116911601906001600160801b0382116108c957565b634e487b7160e01b5f52601160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610924916001600160801b039397969786526060602087015260608601916108dd565b9416910152565b5f1981146108c95760010190565b908160209103126100d457516001600160a01b03811681036100d45790565b6040516303e21fa960e61b8152602081600481305afa90811561037b575f9161097f575090565b6109a1915060203d6020116109a4575b6109998183610854565b810190610939565b90565b503d61098f565b908160209103126100d4575180151581036100d45790565b60049160206001600160a01b036109d8610958565b166040519485809263088f50cf60e41b82525afa92831561037b575f93610ac4575b506001600160801b031680610a0e57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af190811561037b575f91610a95575b5015610a5957565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b610ab7915060203d602011610abd575b610aaf8183610854565b8101906109ab565b5f610a51565b503d610aa5565b6001600160801b03919350610ae79060203d6020116109a4576109998183610854565b92906109fa565b6001600160a01b03610afe610958565b60405163088f50cf60e41b8152911691602082600481865afa801561037b576001600160801b03935f6064926020958291610bdc575b5060405196879586946323b872dd60e01b8652326004870152602486015216604484015260018060a01b03165af190811561037b575f91610bbd575b5015610b7857565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b610bd6915060203d602011610abd57610aaf8183610854565b5f610b70565b610bf39150863d88116109a4576109998183610854565b5f610b3456fea2646970667358221220068a46b87e539288ce60019b9091c4d5423d905301f7d59bfe482cb2aafe3dad64736f6c634300081a0033","sourceMap":"285:3800:79:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806314503e51146106df57806329336f3914610610578063701da98e146105f4578063704ed542146105a25780638ea59e1d1461054157806391d5a64c14610500578063affed0e0146104e3578063c2df60091461044d578063c78bde7714610386578063d56242221461023f578063dca4a37314610201578063de1dd2e0146100d85763f887ea40146100a8575f80fd5b346100d4575f3660031901126100d45760206100c2610958565b6040516001600160a01b039091168152f35b5f80fd5b346100d45760803660031901126100d4576100f161076b565b60243567ffffffffffffffff81116100d4576101327f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c69136906004016107c3565b926101fc61013e610781565b6101466107ad565b956101626001600160a01b0361015a610958565b1633146107f1565b7f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206001546101918161092b565b6001556040513060601b6bffffffffffffffffffffffff191683820190815260148101929092526101cf81603484015b03601f198101835282610854565b519020986001600160801b0360405191168152a16040516001600160a01b039094169693948594856108fd565b0390a2005b346100d45760203660031901126100d45761023d61021d610797565b6102306001600160a01b0361015a610958565b610238610958565b6109c3565b005b60403660031901126100d45760043567ffffffffffffffff81116100d45761026b9036906004016107c3565b602435916001600160801b03831683036100d45760049260206001600160a01b03610294610958565b16604051958680926337792e1d60e11b82525afa90811561037b576102ed6102e8827f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6946020985f9161034e575b506108a9565b610aee565b6001546102f98161092b565b6001556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261032d81603484016101c1565b51902093610343604051928392329688856108fd565b0390a2604051908152f35b61036e9150893d8b11610374575b6103668183610854565b81019061088a565b896102e2565b503d61035c565b6040513d5f823e3d90fd5b346100d45760a03660031901126100d45761039f61076b565b60243567ffffffffffffffff81116100d4576103bf9036906004016107c3565b91906103c9610781565b926084359363ffffffff60e01b85168095036100d4577fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c69361041a9082906102386001600160a01b0361015a610958565b6001600160801b036104396040519485946060865260608601916108dd565b9116602083015260643560408301520390a2005b346100d45760803660031901126100d457610466610755565b60443567ffffffffffffffff81116100d4576104a77f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117739136906004016107c3565b90926101fc6104b46107ad565b6104c76001600160a01b0361015a610958565b6040516001600160a01b039093169592938493600435856108fd565b346100d4575f3660031901126100d4576020600154604051908152f35b346100d45760203660031901126100d45760405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203292a2005b346100d45760203660031901126100d4576004356105686001600160a01b0361015a610958565b805f540361057257005b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930925f55604051908152a1005b60203660031901126100d4577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206105d9610797565b6105e281610aee565b6001600160801b0360405191168152a1005b346100d4575f3660031901126100d45760205f54604051908152f35b60603660031901126100d45760243567ffffffffffffffff81116100d45761063d600491369083016107c3565b610648929192610781565b9060206001600160a01b0361065b610958565b16604051948580926337792e1d60e11b82525afa92831561037b576102e8837fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f956106ac935f916106c057506108a9565b6101fc6040519283923296600435856108fd565b6106d9915060203d602011610374576103668183610854565b886102e2565b346100d45760603660031901126100d4577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783604061071b610755565b61073c610726610781565b9182906102386001600160a01b0361015a610958565b6001600160801b038251916004358352166020820152a1005b602435906001600160a01b03821682036100d457565b600435906001600160a01b03821682036100d457565b604435906001600160801b03821682036100d457565b600435906001600160801b03821682036100d457565b606435906001600160801b03821682036100d457565b9181601f840112156100d45782359167ffffffffffffffff83116100d457602083818601950101116100d457565b156107f857565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b90601f8019910116810190811067ffffffffffffffff82111761087657604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126100d457516001600160801b03811681036100d45790565b906001600160801b03809116911601906001600160801b0382116108c957565b634e487b7160e01b5f52601160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610924916001600160801b039397969786526060602087015260608601916108dd565b9416910152565b5f1981146108c95760010190565b908160209103126100d457516001600160a01b03811681036100d45790565b6040516303e21fa960e61b8152602081600481305afa90811561037b575f9161097f575090565b6109a1915060203d6020116109a4575b6109998183610854565b810190610939565b90565b503d61098f565b908160209103126100d4575180151581036100d45790565b60049160206001600160a01b036109d8610958565b166040519485809263088f50cf60e41b82525afa92831561037b575f93610ac4575b506001600160801b031680610a0e57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af190811561037b575f91610a95575b5015610a5957565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b610ab7915060203d602011610abd575b610aaf8183610854565b8101906109ab565b5f610a51565b503d610aa5565b6001600160801b03919350610ae79060203d6020116109a4576109998183610854565b92906109fa565b6001600160a01b03610afe610958565b60405163088f50cf60e41b8152911691602082600481865afa801561037b576001600160801b03935f6064926020958291610bdc575b5060405196879586946323b872dd60e01b8652326004870152602486015216604484015260018060a01b03165af190811561037b575f91610bbd575b5015610b7857565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b610bd6915060203d602011610abd57610aaf8183610854565b5f610b70565b610bf39150863d88116109a4576109998183610854565b5f610b3456fea2646970667358221220068a46b87e539288ce60019b9091c4d5423d905301f7d59bfe482cb2aafe3dad64736f6c634300081a0033","sourceMap":"285:3800:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;3193:52;285:3800;;;;;;:::i;:::-;;3193:52;285:3800;;:::i;:::-;;;:::i;:::-;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;:::-;285:3800;3298:10;:22;3290:81;:::i;:::-;3128:50;285:3800;3029:7;285:3800;3029:7;;;:::i;:::-;;285:3800;;;3094:4;285:3800;;-1:-1:-1;;285:3800:79;3069:42;;;285:3800;;;;;;;;;;3069:42;285:3800;;;;3069:42;;869:40;;3069:42;;;;;;:::i;:::-;285:3800;3059:53;;285:3800;-1:-1:-1;;;;;285:3800:79;;;;;;3128:50;285:3800;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;3193:52;:::i;:::-;;;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;2768:5;285:3800;;:::i;:::-;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;2758:8;;:::i;:::-;2768:5;:::i;:::-;285:3800;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;-1:-1:-1;;;;;766:8:79;;:::i;:::-;285:3800;;;;;;;;;;758:27;;;;;;;;;818:16;;758:27;926:57;758:27;285:3800;758:27;285:3800;758:27;;;285:3800;818:16;;:::i;:::-;;:::i;:::-;901:7;285:3800;901:7;;;:::i;:::-;;285:3800;;;894:4;285:3800;;-1:-1:-1;;285:3800:79;869:40;;;285:3800;;;;;;;;;;869:40;285:3800;;;;869:40;285:3800;869:40;285:3800;859:51;;285:3800;926:57;285:3800;;955:9;;;;926:57;;;;:::i;:::-;;;;285:3800;;;;;;758:27;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;285:3800;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;2415:41;;2393:5;;285:3800;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;2393:5::-;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2415:41;;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;2150:40;285:3800;;;;;;:::i;:::-;;;2150:40;285:3800;;:::i;:::-;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;285:3800;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;2150:40;:::i;285:3800::-;;;;;;-1:-1:-1;;285:3800:79;;;;;420:20;285:3800;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;1442:45;285:3800;1477:9;1442:45;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;285:3800;;;1802:25;1798:123;;285:3800;1798:123;285:3800;;1887:23;285:3800;;;;;;;;1887:23;285:3800;;;;-1:-1:-1;;285:3800:79;;;;1621:39;285:3800;;;:::i;:::-;1598:6;;;:::i;:::-;-1:-1:-1;;;;;285:3800:79;;;;;;1621:39;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1149:8:79;;:::i;:::-;285:3800;;;;;;;;;;1141:27;;;;;;;;;1201:16;1141:27;1234:63;1141:27;1201:16;1141:27;285:3800;1141:27;;;1201:16;;:::i;:::-;1234:63;285:3800;;1269:9;;;;285:3800;;;1234:63;;:::i;1141:27::-;;;;285:3800;1141:27;285:3800;1141:27;;;;;;;:::i;:::-;;;;285:3800;;;;;;-1:-1:-1;;285:3800:79;;;;2624:30;285:3800;;;:::i;:::-;2602:5;285:3800;;:::i;:::-;;;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;2602:5::-;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;2624:30;285:3800;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;285:3800:79;;;;;;;;;;;;;;;;;-1:-1:-1;;;285:3800:79;;;;;;;;;;869:40;;285:3800;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;285:3800:79;;;;;-1:-1:-1;285:3800:79;;;;;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;:::o;:::-;;-1:-1:-1;;;;;285:3800:79;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;285:3800:79;;;;;;;;-1:-1:-1;;285:3800:79;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;-1:-1:-1;;285:3800:79;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;:::o;489:108::-;285:3800;;-1:-1:-1;;;554:36:79;;;285:3800;554:36;285:3800;575:4;554:36;;;;;;;-1:-1:-1;554:36:79;;;547:43;489:108;:::o;554:36::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;489:108;:::o;554:36::-;;;;;285:3800;;;;;;;;;;;;;;;;;;:::o;3767:316::-;3883:31;;;-1:-1:-1;;;;;3891:8:79;;:::i;:::-;285:3800;;;;;;;;;;3883:31;;;;;;;;;-1:-1:-1;3883:31:79;;;3767:316;285:3800;-1:-1:-1;;;;;285:3800:79;3930:10;3926:151;;3767:316;;;:::o;3926:151::-;285:3800;;-1:-1:-1;;;3971:40:79;;-1:-1:-1;;;;;285:3800:79;;;3883:31;3971:40;;285:3800;;;;;;;;;3883:31;;285:3800;;3971:40;;285:3800;;-1:-1:-1;;285:3800:79;3971:40;;;;;;;-1:-1:-1;3971:40:79;;;3926:151;285:3800;;;;3767:316::o;285:3800::-;;;-1:-1:-1;;;285:3800:79;;3883:31;;285:3800;;;;;;;;-1:-1:-1;;;3971:40:79;285:3800;;;;;;3971:40;;;;3883:31;3971:40;3883:31;3971:40;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3883:31;-1:-1:-1;;;;;3883:31:79;;;;;;;;;;;;;;;:::i;:::-;;;;;3429:332;-1:-1:-1;;;;;3519:8:79;;:::i;:::-;285:3800;;-1:-1:-1;;;3578:36:79;;285:3800;;;3578:36;285:3800;3578:36;285:3800;;3578:36;;;;;;-1:-1:-1;;;;;3578:36:79;-1:-1:-1;3641:58:79;3578:36;;;;;;;3429:332;285:3800;;;;;;;;;;;3641:58;;3666:9;3578:36;3641:58;;285:3800;;;;;;;;;;;;;;;;3641:58;;;;;;;-1:-1:-1;3641:58:79;;;3429:332;285:3800;;;;3429:332::o;285:3800::-;;;-1:-1:-1;;;285:3800:79;;3578:36;;285:3800;;;;;;;;;;;;;3641:58;;285:3800;3641:58;;;;3578:36;3641:58;3578:36;3641:58;;;;;;;:::i;:::-;;;;3578:36;;;;;;;;;;;;;;:::i;:::-;;;","linkReferences":{}},"methodIdentifiers":{"claimValue(bytes32)":"91d5a64c","executableBalanceBurned(uint128)":"dca4a373","executableBalanceTopUp(uint128)":"704ed542","initMessage(address,bytes,uint128,uint128)":"de1dd2e0","messageSent(bytes32,address,bytes,uint128)":"c2df6009","nonce()":"affed0e0","replySent(address,bytes,uint128,bytes32,bytes4)":"c78bde77","router()":"f887ea40","sendMessage(bytes,uint128)":"d5624222","sendReply(bytes32,bytes,uint128)":"29336f39","stateHash()":"701da98e","updateState(bytes32)":"8ea59e1d","valueClaimed(bytes32,address,uint128)":"14503e51"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ExecutableBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"Message\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"MessageQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"Reply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"repliedTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ReplyQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"name\":\"StateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ValueClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"ValueClaimingRequested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimedId\",\"type\":\"bytes32\"}],\"name\":\"claimValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceBurned\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceTopUp\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"executableBalance\",\"type\":\"uint128\"}],\"name\":\"initMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"messageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"replySent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_repliedTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendReply\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"}],\"name\":\"updateState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"valueClaimed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ExecutableBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's executable balance top up with his tokens. NOTE: It's event for NODES: it requires to top up balance of the program.\"},\"Message(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when the program sends outgoing message. NOTE: It's event for USERS: it informs about new message sent from program.\"},\"MessageQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new message is sent to be queued. NOTE: It's event for NODES: it requires to insert message in the program's queue.\"},\"Reply(bytes,uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program sends reply message. NOTE: It's event for USERS: it informs about new reply sent from program.\"},\"ReplyQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new reply is sent and requested to be verified and queued. NOTE: It's event for NODES: it requires to insert message in the program's queue, if message, exists.\"},\"StateChanged(bytes32)\":{\"details\":\"Emitted when the state hash of program is changed. NOTE: It's event for USERS: it informs about state changes.\"},\"ValueClaimed(bytes32,uint128)\":{\"details\":\"Emitted when a user succeed in claiming value request and receives balance. NOTE: It's event for USERS: it informs about value claimed.\"},\"ValueClaimingRequested(bytes32,address)\":{\"details\":\"Emitted when a reply's value is requested to be verified and claimed. NOTE: It's event for NODES: it requires to claim value from message, if exists.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Mirror.sol\":\"Mirror\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf\",\"dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde\",\"dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Mirror.sol\":{\"keccak256\":\"0x855debb1eedc59a930167ab2178bd306fdd9a780ad7ed95fdae0c2a344336c10\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b94e02729ecce1dab9019b3441840bb7ccebddba00d0c4f266ba490f44a78a77\",\"dweb:/ipfs/Qmf2ibL2SdGbU6bLvcTEm9dR3tr3hTYT6qrDkyVFWrTKV8\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ExecutableBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"Message","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"MessageQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"Reply","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"repliedTo","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ReplyQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"stateHash","type":"bytes32","indexed":false}],"type":"event","name":"StateChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ValueClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true}],"type":"event","name":"ValueClaimingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_claimedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"claimValue"},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"executableBalanceBurned"},{"inputs":[{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"executableBalanceTopUp"},{"inputs":[{"internalType":"address","name":"source","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"uint128","name":"executableBalance","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"initMessage"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"messageSent"},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"bytes32","name":"replyTo","type":"bytes32"},{"internalType":"bytes4","name":"replyCode","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"replySent"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_repliedTo","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendReply"},{"inputs":[],"stateMutability":"view","type":"function","name":"stateHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"newStateHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateState"},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"valueClaimed"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Mirror.sol":"Mirror"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6","urls":["bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf","dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL"],"license":"UNLICENSED"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3","urls":["bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde","dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Mirror.sol":{"keccak256":"0x855debb1eedc59a930167ab2178bd306fdd9a780ad7ed95fdae0c2a344336c10","urls":["bzz-raw://b94e02729ecce1dab9019b3441840bb7ccebddba00d0c4f266ba490f44a78a77","dweb:/ipfs/Qmf2ibL2SdGbU6bLvcTEm9dR3tr3hTYT6qrDkyVFWrTKV8"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[{"astId":53976,"contract":"src/Mirror.sol:Mirror","label":"stateHash","offset":0,"slot":"0","type":"t_bytes32"},{"astId":53978,"contract":"src/Mirror.sol:Mirror","label":"nonce","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/Mirror.sol","id":54340,"exportedSymbols":{"IMirror":[53636],"IMirrorProxy":[53644],"IRouter":[53951],"IWrappedVara":[53962],"Mirror":[54339]},"nodeType":"SourceUnit","src":"39:4047:79","nodes":[{"id":53964,"nodeType":"PragmaDirective","src":"39:24:79","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":53966,"nodeType":"ImportDirective","src":"65:48:79","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53645,"symbolAliases":[{"foreign":{"id":53965,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53644,"src":"73:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53968,"nodeType":"ImportDirective","src":"114:38:79","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53637,"symbolAliases":[{"foreign":{"id":53967,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"122:7:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53970,"nodeType":"ImportDirective","src":"153:38:79","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53952,"symbolAliases":[{"foreign":{"id":53969,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"161:7:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53972,"nodeType":"ImportDirective","src":"192:48:79","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53963,"symbolAliases":[{"foreign":{"id":53971,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"200:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54339,"nodeType":"ContractDefinition","src":"285:3800:79","nodes":[{"id":53976,"nodeType":"VariableDeclaration","src":"318:24:79","nodes":[],"baseFunctions":[53543],"constant":false,"functionSelector":"701da98e","mutability":"mutable","name":"stateHash","nameLocation":"333:9:79","scope":54339,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":53975,"name":"bytes32","nodeType":"ElementaryTypeName","src":"318:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":53978,"nodeType":"VariableDeclaration","src":"420:20:79","nodes":[],"baseFunctions":[53548],"constant":false,"functionSelector":"affed0e0","mutability":"mutable","name":"nonce","nameLocation":"435:5:79","scope":54339,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53977,"name":"uint256","nodeType":"ElementaryTypeName","src":"420:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":53993,"nodeType":"FunctionDefinition","src":"489:108:79","nodes":[],"body":{"id":53992,"nodeType":"Block","src":"537:60:79","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":53986,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"575:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":53985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"567:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":53984,"name":"address","nodeType":"ElementaryTypeName","src":"567:7:79","typeDescriptions":{}}},"id":53987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"567:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":53983,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53644,"src":"554:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorProxy_$53644_$","typeString":"type(contract IMirrorProxy)"}},"id":53988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"554:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorProxy_$53644","typeString":"contract IMirrorProxy"}},"id":53989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"582:6:79","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":53643,"src":"554:34:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":53990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"554:36:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":53982,"id":53991,"nodeType":"Return","src":"547:43:79"}]},"baseFunctions":[53553],"functionSelector":"f887ea40","implemented":true,"kind":"function","modifiers":[],"name":"router","nameLocation":"498:6:79","parameters":{"id":53979,"nodeType":"ParameterList","parameters":[],"src":"504:2:79"},"returnParameters":{"id":53982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":53993,"src":"528:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":53980,"name":"address","nodeType":"ElementaryTypeName","src":"528:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"527:9:79"},"scope":54339,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54042,"nodeType":"FunctionDefinition","src":"633:377:79","nodes":[],"body":{"id":54041,"nodeType":"Block","src":"730:280:79","nodes":[],"statements":[{"assignments":[54003],"declarations":[{"constant":false,"id":54003,"mutability":"mutable","name":"baseFee","nameLocation":"748:7:79","nodeType":"VariableDeclaration","scope":54041,"src":"740:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54002,"name":"uint128","nodeType":"ElementaryTypeName","src":"740:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":54010,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54005,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"766:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"766:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54004,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"758:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"758:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"776:7:79","memberName":"baseFee","nodeType":"MemberAccess","referencedDeclaration":53910,"src":"758:25:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":54009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"758:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"740:45:79"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54012,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54003,"src":"818:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":54013,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53997,"src":"828:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"818:16:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54011,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"795:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"795:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54016,"nodeType":"ExpressionStatement","src":"795:40:79"},{"assignments":[54018],"declarations":[{"constant":false,"id":54018,"mutability":"mutable","name":"id","nameLocation":"854:2:79","nodeType":"VariableDeclaration","scope":54041,"src":"846:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54017,"name":"bytes32","nodeType":"ElementaryTypeName","src":"846:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54030,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":54024,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"894:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":54023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"886:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54022,"name":"address","nodeType":"ElementaryTypeName","src":"886:7:79","typeDescriptions":{}}},"id":54025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"886:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"901:7:79","subExpression":{"id":54026,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53978,"src":"901:5:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54020,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"869:3:79","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"873:12:79","memberName":"encodePacked","nodeType":"MemberAccess","src":"869:16:79","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"869:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54019,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"859:9:79","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"859:51:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"846:64:79"},{"eventCall":{"arguments":[{"id":54032,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54018,"src":"951:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54033,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"955:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"958:6:79","memberName":"origin","nodeType":"MemberAccess","src":"955:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54035,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53995,"src":"966:8:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54036,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53997,"src":"976:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54031,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53486,"src":"926:24:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"926:57:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54038,"nodeType":"EmitStatement","src":"921:62:79"},{"expression":{"id":54039,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54018,"src":"1001:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54001,"id":54040,"nodeType":"Return","src":"994:9:79"}]},"baseFunctions":[53562],"functionSelector":"d5624222","implemented":true,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"642:11:79","parameters":{"id":53998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53995,"mutability":"mutable","name":"_payload","nameLocation":"669:8:79","nodeType":"VariableDeclaration","scope":54042,"src":"654:23:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":53994,"name":"bytes","nodeType":"ElementaryTypeName","src":"654:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":53997,"mutability":"mutable","name":"_value","nameLocation":"687:6:79","nodeType":"VariableDeclaration","scope":54042,"src":"679:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":53996,"name":"uint128","nodeType":"ElementaryTypeName","src":"679:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"653:41:79"},"returnParameters":{"id":54001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54000,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54042,"src":"721:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":53999,"name":"bytes32","nodeType":"ElementaryTypeName","src":"721:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"720:9:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54075,"nodeType":"FunctionDefinition","src":"1016:288:79","nodes":[],"body":{"id":54074,"nodeType":"Block","src":"1113:191:79","nodes":[],"statements":[{"assignments":[54052],"declarations":[{"constant":false,"id":54052,"mutability":"mutable","name":"baseFee","nameLocation":"1131:7:79","nodeType":"VariableDeclaration","scope":54074,"src":"1123:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54051,"name":"uint128","nodeType":"ElementaryTypeName","src":"1123:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":54059,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54054,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"1149:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1149:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54053,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"1141:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1159:7:79","memberName":"baseFee","nodeType":"MemberAccess","referencedDeclaration":53910,"src":"1141:25:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":54058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1123:45:79"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54061,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54052,"src":"1201:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":54062,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54048,"src":"1211:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1201:16:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54060,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"1178:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1178:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54065,"nodeType":"ExpressionStatement","src":"1178:40:79"},{"eventCall":{"arguments":[{"id":54067,"name":"_repliedTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54044,"src":"1257:10:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54068,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"1269:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1272:6:79","memberName":"origin","nodeType":"MemberAccess","src":"1269:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54070,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54046,"src":"1280:8:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54071,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54048,"src":"1290:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54066,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53497,"src":"1234:22:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1234:63:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54073,"nodeType":"EmitStatement","src":"1229:68:79"}]},"baseFunctions":[53571],"functionSelector":"29336f39","implemented":true,"kind":"function","modifiers":[],"name":"sendReply","nameLocation":"1025:9:79","parameters":{"id":54049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54044,"mutability":"mutable","name":"_repliedTo","nameLocation":"1043:10:79","nodeType":"VariableDeclaration","scope":54075,"src":"1035:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54043,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1035:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54046,"mutability":"mutable","name":"_payload","nameLocation":"1070:8:79","nodeType":"VariableDeclaration","scope":54075,"src":"1055:23:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54045,"name":"bytes","nodeType":"ElementaryTypeName","src":"1055:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54048,"mutability":"mutable","name":"_value","nameLocation":"1088:6:79","nodeType":"VariableDeclaration","scope":54075,"src":"1080:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54047,"name":"uint128","nodeType":"ElementaryTypeName","src":"1080:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1034:61:79"},"returnParameters":{"id":54050,"nodeType":"ParameterList","parameters":[],"src":"1113:0:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54087,"nodeType":"FunctionDefinition","src":"1310:184:79","nodes":[],"body":{"id":54086,"nodeType":"Block","src":"1359:135:79","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":54081,"name":"_claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54077,"src":"1465:10:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54082,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"1477:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1480:6:79","memberName":"origin","nodeType":"MemberAccess","src":"1477:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54080,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53504,"src":"1442:22:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":54084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54085,"nodeType":"EmitStatement","src":"1437:50:79"}]},"baseFunctions":[53576],"functionSelector":"91d5a64c","implemented":true,"kind":"function","modifiers":[],"name":"claimValue","nameLocation":"1319:10:79","parameters":{"id":54078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54077,"mutability":"mutable","name":"_claimedId","nameLocation":"1338:10:79","nodeType":"VariableDeclaration","scope":54087,"src":"1330:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54076,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1330:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1329:20:79"},"returnParameters":{"id":54079,"nodeType":"ParameterList","parameters":[],"src":"1359:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54101,"nodeType":"FunctionDefinition","src":"1500:167:79","nodes":[],"body":{"id":54100,"nodeType":"Block","src":"1565:102:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54093,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54089,"src":"1598:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54092,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"1575:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1575:30:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54095,"nodeType":"ExpressionStatement","src":"1575:30:79"},{"eventCall":{"arguments":[{"id":54097,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54089,"src":"1653:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54096,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53509,"src":"1621:31:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1621:39:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54099,"nodeType":"EmitStatement","src":"1616:44:79"}]},"baseFunctions":[53581],"functionSelector":"704ed542","implemented":true,"kind":"function","modifiers":[],"name":"executableBalanceTopUp","nameLocation":"1509:22:79","parameters":{"id":54090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54089,"mutability":"mutable","name":"_value","nameLocation":"1540:6:79","nodeType":"VariableDeclaration","scope":54101,"src":"1532:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54088,"name":"uint128","nodeType":"ElementaryTypeName","src":"1532:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1531:16:79"},"returnParameters":{"id":54091,"nodeType":"ParameterList","parameters":[],"src":"1565:0:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54122,"nodeType":"FunctionDefinition","src":"1725:202:79","nodes":[],"body":{"id":54121,"nodeType":"Block","src":"1788:139:79","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":54110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54108,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1802:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":54109,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54103,"src":"1815:12:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1802:25:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54120,"nodeType":"IfStatement","src":"1798:123:79","trueBody":{"id":54119,"nodeType":"Block","src":"1829:92:79","statements":[{"expression":{"id":54113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54111,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1843:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54112,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54103,"src":"1855:12:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1843:24:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54114,"nodeType":"ExpressionStatement","src":"1843:24:79"},{"eventCall":{"arguments":[{"id":54116,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1900:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":54115,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53475,"src":"1887:12:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":54117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1887:23:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54118,"nodeType":"EmitStatement","src":"1882:28:79"}]}}]},"baseFunctions":[53586],"functionSelector":"8ea59e1d","implemented":true,"kind":"function","modifiers":[{"id":54106,"kind":"modifierInvocation","modifierName":{"id":54105,"name":"onlyRouter","nameLocations":["1777:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"1777:10:79"},"nodeType":"ModifierInvocation","src":"1777:10:79"}],"name":"updateState","nameLocation":"1734:11:79","parameters":{"id":54104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54103,"mutability":"mutable","name":"newStateHash","nameLocation":"1754:12:79","nodeType":"VariableDeclaration","scope":54122,"src":"1746:20:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54102,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1746:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1745:22:79"},"returnParameters":{"id":54107,"nodeType":"ParameterList","parameters":[],"src":"1788:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54143,"nodeType":"FunctionDefinition","src":"1933:264:79","nodes":[],"body":{"id":54142,"nodeType":"Block","src":"2046:151:79","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":54136,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54124,"src":"2158:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54137,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54126,"src":"2162:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54138,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54128,"src":"2175:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54139,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54130,"src":"2184:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54135,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53520,"src":"2150:7:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2150:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54141,"nodeType":"EmitStatement","src":"2145:45:79"}]},"baseFunctions":[53597],"functionSelector":"c2df6009","implemented":true,"kind":"function","modifiers":[{"id":54133,"kind":"modifierInvocation","modifierName":{"id":54132,"name":"onlyRouter","nameLocations":["2035:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2035:10:79"},"nodeType":"ModifierInvocation","src":"2035:10:79"}],"name":"messageSent","nameLocation":"1942:11:79","parameters":{"id":54131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54124,"mutability":"mutable","name":"id","nameLocation":"1962:2:79","nodeType":"VariableDeclaration","scope":54143,"src":"1954:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54123,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1954:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54126,"mutability":"mutable","name":"destination","nameLocation":"1974:11:79","nodeType":"VariableDeclaration","scope":54143,"src":"1966:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54125,"name":"address","nodeType":"ElementaryTypeName","src":"1966:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54128,"mutability":"mutable","name":"payload","nameLocation":"2002:7:79","nodeType":"VariableDeclaration","scope":54143,"src":"1987:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54127,"name":"bytes","nodeType":"ElementaryTypeName","src":"1987:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54130,"mutability":"mutable","name":"value","nameLocation":"2019:5:79","nodeType":"VariableDeclaration","scope":54143,"src":"2011:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54129,"name":"uint128","nodeType":"ElementaryTypeName","src":"2011:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1953:72:79"},"returnParameters":{"id":54134,"nodeType":"ParameterList","parameters":[],"src":"2046:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54171,"nodeType":"FunctionDefinition","src":"2203:260:79","nodes":[],"body":{"id":54170,"nodeType":"Block","src":"2357:106:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54159,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54145,"src":"2380:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54160,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54149,"src":"2393:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54158,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2367:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2367:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54162,"nodeType":"ExpressionStatement","src":"2367:32:79"},{"eventCall":{"arguments":[{"id":54164,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54147,"src":"2421:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54165,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54149,"src":"2430:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":54166,"name":"replyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54151,"src":"2437:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54167,"name":"replyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54153,"src":"2446:9:79","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":54163,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53531,"src":"2415:5:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":54168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2415:41:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54169,"nodeType":"EmitStatement","src":"2410:46:79"}]},"baseFunctions":[53610],"functionSelector":"c78bde77","implemented":true,"kind":"function","modifiers":[{"id":54156,"kind":"modifierInvocation","modifierName":{"id":54155,"name":"onlyRouter","nameLocations":["2342:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2342:10:79"},"nodeType":"ModifierInvocation","src":"2342:10:79"}],"name":"replySent","nameLocation":"2212:9:79","parameters":{"id":54154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54145,"mutability":"mutable","name":"destination","nameLocation":"2230:11:79","nodeType":"VariableDeclaration","scope":54171,"src":"2222:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54144,"name":"address","nodeType":"ElementaryTypeName","src":"2222:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54147,"mutability":"mutable","name":"payload","nameLocation":"2258:7:79","nodeType":"VariableDeclaration","scope":54171,"src":"2243:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54146,"name":"bytes","nodeType":"ElementaryTypeName","src":"2243:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54149,"mutability":"mutable","name":"value","nameLocation":"2275:5:79","nodeType":"VariableDeclaration","scope":54171,"src":"2267:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54148,"name":"uint128","nodeType":"ElementaryTypeName","src":"2267:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":54151,"mutability":"mutable","name":"replyTo","nameLocation":"2290:7:79","nodeType":"VariableDeclaration","scope":54171,"src":"2282:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54150,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2282:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54153,"mutability":"mutable","name":"replyCode","nameLocation":"2306:9:79","nodeType":"VariableDeclaration","scope":54171,"src":"2299:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":54152,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2299:6:79","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2221:95:79"},"returnParameters":{"id":54157,"nodeType":"ParameterList","parameters":[],"src":"2357:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54193,"nodeType":"FunctionDefinition","src":"2469:192:79","nodes":[],"body":{"id":54192,"nodeType":"Block","src":"2566:95:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54183,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54175,"src":"2589:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54184,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54177,"src":"2602:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54182,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2576:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2576:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54186,"nodeType":"ExpressionStatement","src":"2576:32:79"},{"eventCall":{"arguments":[{"id":54188,"name":"claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54173,"src":"2637:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54189,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54177,"src":"2648:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54187,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53538,"src":"2624:12:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":54190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2624:30:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54191,"nodeType":"EmitStatement","src":"2619:35:79"}]},"baseFunctions":[53619],"functionSelector":"14503e51","implemented":true,"kind":"function","modifiers":[{"id":54180,"kind":"modifierInvocation","modifierName":{"id":54179,"name":"onlyRouter","nameLocations":["2555:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2555:10:79"},"nodeType":"ModifierInvocation","src":"2555:10:79"}],"name":"valueClaimed","nameLocation":"2478:12:79","parameters":{"id":54178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54173,"mutability":"mutable","name":"claimedId","nameLocation":"2499:9:79","nodeType":"VariableDeclaration","scope":54193,"src":"2491:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54172,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2491:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54175,"mutability":"mutable","name":"destination","nameLocation":"2518:11:79","nodeType":"VariableDeclaration","scope":54193,"src":"2510:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54174,"name":"address","nodeType":"ElementaryTypeName","src":"2510:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54177,"mutability":"mutable","name":"value","nameLocation":"2539:5:79","nodeType":"VariableDeclaration","scope":54193,"src":"2531:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54176,"name":"uint128","nodeType":"ElementaryTypeName","src":"2531:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2490:55:79"},"returnParameters":{"id":54181,"nodeType":"ParameterList","parameters":[],"src":"2566:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54207,"nodeType":"FunctionDefinition","src":"2667:114:79","nodes":[],"body":{"id":54206,"nodeType":"Block","src":"2735:46:79","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54201,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"2758:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2758:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54203,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54195,"src":"2768:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54200,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2745:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2745:29:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54205,"nodeType":"ExpressionStatement","src":"2745:29:79"}]},"baseFunctions":[53624],"functionSelector":"dca4a373","implemented":true,"kind":"function","modifiers":[{"id":54198,"kind":"modifierInvocation","modifierName":{"id":54197,"name":"onlyRouter","nameLocations":["2724:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2724:10:79"},"nodeType":"ModifierInvocation","src":"2724:10:79"}],"name":"executableBalanceBurned","nameLocation":"2676:23:79","parameters":{"id":54196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54195,"mutability":"mutable","name":"value","nameLocation":"2708:5:79","nodeType":"VariableDeclaration","scope":54207,"src":"2700:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54194,"name":"uint128","nodeType":"ElementaryTypeName","src":"2700:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2699:15:79"},"returnParameters":{"id":54199,"nodeType":"ParameterList","parameters":[],"src":"2735:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54250,"nodeType":"FunctionDefinition","src":"2787:465:79","nodes":[],"body":{"id":54249,"nodeType":"Block","src":"2930:322:79","nodes":[],"statements":[{"assignments":[54221],"declarations":[{"constant":false,"id":54221,"mutability":"mutable","name":"initNonce","nameLocation":"3017:9:79","nodeType":"VariableDeclaration","scope":54249,"src":"3009:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54220,"name":"uint256","nodeType":"ElementaryTypeName","src":"3009:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54224,"initialValue":{"id":54223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3029:7:79","subExpression":{"id":54222,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53978,"src":"3029:5:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3009:27:79"},{"assignments":[54226],"declarations":[{"constant":false,"id":54226,"mutability":"mutable","name":"id","nameLocation":"3054:2:79","nodeType":"VariableDeclaration","scope":54249,"src":"3046:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54225,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3046:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54237,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":54232,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3094:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":54231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3086:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54230,"name":"address","nodeType":"ElementaryTypeName","src":"3086:7:79","typeDescriptions":{}}},"id":54233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3086:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54234,"name":"initNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54221,"src":"3101:9:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54228,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3069:3:79","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3073:12:79","memberName":"encodePacked","nodeType":"MemberAccess","src":"3069:16:79","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3069:42:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54227,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3059:9:79","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3059:53:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3046:66:79"},{"eventCall":{"arguments":[{"id":54239,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54215,"src":"3160:17:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54238,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53509,"src":"3128:31:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3128:50:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54241,"nodeType":"EmitStatement","src":"3123:55:79"},{"eventCall":{"arguments":[{"id":54243,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54226,"src":"3218:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54244,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54209,"src":"3222:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54245,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54211,"src":"3230:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54246,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54213,"src":"3239:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54242,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53486,"src":"3193:24:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3193:52:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54248,"nodeType":"EmitStatement","src":"3188:57:79"}]},"baseFunctions":[53635],"functionSelector":"de1dd2e0","implemented":true,"kind":"function","modifiers":[{"id":54218,"kind":"modifierInvocation","modifierName":{"id":54217,"name":"onlyRouter","nameLocations":["2915:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2915:10:79"},"nodeType":"ModifierInvocation","src":"2915:10:79"}],"name":"initMessage","nameLocation":"2796:11:79","parameters":{"id":54216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54209,"mutability":"mutable","name":"source","nameLocation":"2816:6:79","nodeType":"VariableDeclaration","scope":54250,"src":"2808:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54208,"name":"address","nodeType":"ElementaryTypeName","src":"2808:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54211,"mutability":"mutable","name":"payload","nameLocation":"2839:7:79","nodeType":"VariableDeclaration","scope":54250,"src":"2824:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54210,"name":"bytes","nodeType":"ElementaryTypeName","src":"2824:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54213,"mutability":"mutable","name":"value","nameLocation":"2856:5:79","nodeType":"VariableDeclaration","scope":54250,"src":"2848:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54212,"name":"uint128","nodeType":"ElementaryTypeName","src":"2848:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":54215,"mutability":"mutable","name":"executableBalance","nameLocation":"2871:17:79","nodeType":"VariableDeclaration","scope":54250,"src":"2863:25:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54214,"name":"uint128","nodeType":"ElementaryTypeName","src":"2863:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2807:82:79"},"returnParameters":{"id":54219,"nodeType":"ParameterList","parameters":[],"src":"2930:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54263,"nodeType":"ModifierDefinition","src":"3258:131:79","nodes":[],"body":{"id":54262,"nodeType":"Block","src":"3280:109:79","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":54257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54253,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3298:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3302:6:79","memberName":"sender","nodeType":"MemberAccess","src":"3298:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54255,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3312:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3312:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3298:22:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6520666f72206f7065726174696f6e","id":54258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3322:48:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""},"value":"only router contract is eligible for operation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""}],"id":54252,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3290:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3290:81:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54260,"nodeType":"ExpressionStatement","src":"3290:81:79"},{"id":54261,"nodeType":"PlaceholderStatement","src":"3381:1:79"}]},"name":"onlyRouter","nameLocation":"3267:10:79","parameters":{"id":54251,"nodeType":"ParameterList","parameters":[],"src":"3277:2:79"},"virtual":false,"visibility":"internal"},{"id":54300,"nodeType":"FunctionDefinition","src":"3429:332:79","nodes":[],"body":{"id":54299,"nodeType":"Block","src":"3485:276:79","nodes":[],"statements":[{"assignments":[54269],"declarations":[{"constant":false,"id":54269,"mutability":"mutable","name":"routerAddress","nameLocation":"3503:13:79","nodeType":"VariableDeclaration","scope":54299,"src":"3495:21:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54268,"name":"address","nodeType":"ElementaryTypeName","src":"3495:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54272,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54270,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3519:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3519:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3495:32:79"},{"assignments":[54275],"declarations":[{"constant":false,"id":54275,"mutability":"mutable","name":"wrappedVara","nameLocation":"3551:11:79","nodeType":"VariableDeclaration","scope":54299,"src":"3538:24:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":54274,"nodeType":"UserDefinedTypeName","pathNode":{"id":54273,"name":"IWrappedVara","nameLocations":["3538:12:79"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"3538:12:79"},"referencedDeclaration":53962,"src":"3538:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":54283,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":54278,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54269,"src":"3586:13:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54277,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"3578:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3578:22:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3601:11:79","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53810,"src":"3578:34:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":54281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3578:36:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54276,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"3565:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":54282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3565:50:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"3538:77:79"},{"assignments":[54285],"declarations":[{"constant":false,"id":54285,"mutability":"mutable","name":"success","nameLocation":"3631:7:79","nodeType":"VariableDeclaration","scope":54299,"src":"3626:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54284,"name":"bool","nodeType":"ElementaryTypeName","src":"3626:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":54293,"initialValue":{"arguments":[{"expression":{"id":54288,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"3666:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3669:6:79","memberName":"origin","nodeType":"MemberAccess","src":"3666:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54290,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54269,"src":"3677:13:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54291,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54265,"src":"3692:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":54286,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54275,"src":"3641:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":54287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3653:12:79","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":41905,"src":"3641:24:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":54292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3641:58:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3626:73:79"},{"expression":{"arguments":[{"id":54295,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54285,"src":"3718:7:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":54296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3727:26:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":54294,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3710:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3710:44:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54298,"nodeType":"ExpressionStatement","src":"3710:44:79"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValueToRouter","nameLocation":"3438:22:79","parameters":{"id":54266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54265,"mutability":"mutable","name":"_value","nameLocation":"3469:6:79","nodeType":"VariableDeclaration","scope":54300,"src":"3461:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54264,"name":"uint128","nodeType":"ElementaryTypeName","src":"3461:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3460:16:79"},"returnParameters":{"id":54267,"nodeType":"ParameterList","parameters":[],"src":"3485:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":54338,"nodeType":"FunctionDefinition","src":"3767:316:79","nodes":[],"body":{"id":54337,"nodeType":"Block","src":"3833:250:79","nodes":[],"statements":[{"assignments":[54309],"declarations":[{"constant":false,"id":54309,"mutability":"mutable","name":"wrappedVara","nameLocation":"3856:11:79","nodeType":"VariableDeclaration","scope":54337,"src":"3843:24:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":54308,"nodeType":"UserDefinedTypeName","pathNode":{"id":54307,"name":"IWrappedVara","nameLocations":["3843:12:79"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"3843:12:79"},"referencedDeclaration":53962,"src":"3843:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":54318,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54312,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3891:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3891:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54311,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"3883:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3883:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3901:11:79","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53810,"src":"3883:29:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":54316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3883:31:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54310,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"3870:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":54317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3870:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"3843:72:79"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54319,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54304,"src":"3930:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":54320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3939:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3930:10:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54336,"nodeType":"IfStatement","src":"3926:151:79","trueBody":{"id":54335,"nodeType":"Block","src":"3942:135:79","statements":[{"assignments":[54323],"declarations":[{"constant":false,"id":54323,"mutability":"mutable","name":"success","nameLocation":"3961:7:79","nodeType":"VariableDeclaration","scope":54335,"src":"3956:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54322,"name":"bool","nodeType":"ElementaryTypeName","src":"3956:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":54329,"initialValue":{"arguments":[{"id":54326,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54302,"src":"3992:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54327,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54304,"src":"4005:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":54324,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54309,"src":"3971:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":54325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3983:8:79","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":41873,"src":"3971:20:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":54328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3971:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3956:55:79"},{"expression":{"arguments":[{"id":54331,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54323,"src":"4034:7:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f2073656e64205756617261","id":54332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4043:22:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""},"value":"failed to send WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""}],"id":54330,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4026:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4026:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54334,"nodeType":"ExpressionStatement","src":"4026:40:79"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_sendValueTo","nameLocation":"3776:12:79","parameters":{"id":54305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54302,"mutability":"mutable","name":"destination","nameLocation":"3797:11:79","nodeType":"VariableDeclaration","scope":54338,"src":"3789:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54301,"name":"address","nodeType":"ElementaryTypeName","src":"3789:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54304,"mutability":"mutable","name":"value","nameLocation":"3818:5:79","nodeType":"VariableDeclaration","scope":54338,"src":"3810:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54303,"name":"uint128","nodeType":"ElementaryTypeName","src":"3810:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3788:36:79"},"returnParameters":{"id":54306,"nodeType":"ParameterList","parameters":[],"src":"3833:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":53973,"name":"IMirror","nameLocations":["304:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":53636,"src":"304:7:79"},"id":53974,"nodeType":"InheritanceSpecifier","src":"304:7:79"}],"canonicalName":"Mirror","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[54339,53636],"name":"Mirror","nameLocation":"294:6:79","scope":54340,"usedErrors":[],"usedEvents":[53475,53486,53497,53504,53509,53520,53531,53538]}],"license":"UNLICENSED"},"id":79} \ No newline at end of file +{"abi":[{"type":"function","name":"claimValue","inputs":[{"name":"_claimedId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executableBalanceBurned","inputs":[{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executableBalanceTopUp","inputs":[{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"initMessage","inputs":[{"name":"source","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"executableBalance","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"messageSent","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"replySent","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyTo","type":"bytes32","internalType":"bytes32"},{"name":"replyCode","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sendMessage","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"sendReply","inputs":[{"name":"_repliedTo","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"stateHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"updateState","inputs":[{"name":"newStateHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"valueClaimed","inputs":[{"name":"claimedId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExecutableBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Message","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageQueueingRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Reply","inputs":[{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyQueueingRequested","inputs":[{"name":"repliedTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"StateChanged","inputs":[{"name":"stateHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValueClaimed","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"ValueClaimingRequested","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234601557610c2f908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806314503e51146106df57806329336f3914610610578063701da98e146105f4578063704ed542146105a25780638ea59e1d1461054157806391d5a64c14610500578063affed0e0146104e3578063c2df60091461044d578063c78bde7714610386578063d56242221461023f578063dca4a37314610201578063de1dd2e0146100d85763f887ea40146100a8575f80fd5b346100d4575f3660031901126100d45760206100c2610958565b6040516001600160a01b039091168152f35b5f80fd5b346100d45760803660031901126100d4576100f161076b565b60243567ffffffffffffffff81116100d4576101327f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c69136906004016107c3565b926101fc61013e610781565b6101466107ad565b956101626001600160a01b0361015a610958565b1633146107f1565b7f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206001546101918161092b565b6001556040513060601b6bffffffffffffffffffffffff191683820190815260148101929092526101cf81603484015b03601f198101835282610854565b519020986001600160801b0360405191168152a16040516001600160a01b039094169693948594856108fd565b0390a2005b346100d45760203660031901126100d45761023d61021d610797565b6102306001600160a01b0361015a610958565b610238610958565b6109c3565b005b60403660031901126100d45760043567ffffffffffffffff81116100d45761026b9036906004016107c3565b602435916001600160801b03831683036100d45760049260206001600160a01b03610294610958565b16604051958680926337792e1d60e11b82525afa90811561037b576102ed6102e8827f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6946020985f9161034e575b506108a9565b610aee565b6001546102f98161092b565b6001556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261032d81603484016101c1565b51902093610343604051928392329688856108fd565b0390a2604051908152f35b61036e9150893d8b11610374575b6103668183610854565b81019061088a565b896102e2565b503d61035c565b6040513d5f823e3d90fd5b346100d45760a03660031901126100d45761039f61076b565b60243567ffffffffffffffff81116100d4576103bf9036906004016107c3565b91906103c9610781565b926084359363ffffffff60e01b85168095036100d4577fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c69361041a9082906102386001600160a01b0361015a610958565b6001600160801b036104396040519485946060865260608601916108dd565b9116602083015260643560408301520390a2005b346100d45760803660031901126100d457610466610755565b60443567ffffffffffffffff81116100d4576104a77f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117739136906004016107c3565b90926101fc6104b46107ad565b6104c76001600160a01b0361015a610958565b6040516001600160a01b039093169592938493600435856108fd565b346100d4575f3660031901126100d4576020600154604051908152f35b346100d45760203660031901126100d45760405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203292a2005b346100d45760203660031901126100d4576004356105686001600160a01b0361015a610958565b805f540361057257005b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930925f55604051908152a1005b60203660031901126100d4577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206105d9610797565b6105e281610aee565b6001600160801b0360405191168152a1005b346100d4575f3660031901126100d45760205f54604051908152f35b60603660031901126100d45760243567ffffffffffffffff81116100d45761063d600491369083016107c3565b610648929192610781565b9060206001600160a01b0361065b610958565b16604051948580926337792e1d60e11b82525afa92831561037b576102e8837fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f956106ac935f916106c057506108a9565b6101fc6040519283923296600435856108fd565b6106d9915060203d602011610374576103668183610854565b886102e2565b346100d45760603660031901126100d4577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783604061071b610755565b61073c610726610781565b9182906102386001600160a01b0361015a610958565b6001600160801b038251916004358352166020820152a1005b602435906001600160a01b03821682036100d457565b600435906001600160a01b03821682036100d457565b604435906001600160801b03821682036100d457565b600435906001600160801b03821682036100d457565b606435906001600160801b03821682036100d457565b9181601f840112156100d45782359167ffffffffffffffff83116100d457602083818601950101116100d457565b156107f857565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b90601f8019910116810190811067ffffffffffffffff82111761087657604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126100d457516001600160801b03811681036100d45790565b906001600160801b03809116911601906001600160801b0382116108c957565b634e487b7160e01b5f52601160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610924916001600160801b039397969786526060602087015260608601916108dd565b9416910152565b5f1981146108c95760010190565b908160209103126100d457516001600160a01b03811681036100d45790565b6040516303e21fa960e61b8152602081600481305afa90811561037b575f9161097f575090565b6109a1915060203d6020116109a4575b6109998183610854565b810190610939565b90565b503d61098f565b908160209103126100d4575180151581036100d45790565b60049160206001600160a01b036109d8610958565b166040519485809263088f50cf60e41b82525afa92831561037b575f93610ac4575b506001600160801b031680610a0e57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af190811561037b575f91610a95575b5015610a5957565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b610ab7915060203d602011610abd575b610aaf8183610854565b8101906109ab565b5f610a51565b503d610aa5565b6001600160801b03919350610ae79060203d6020116109a4576109998183610854565b92906109fa565b6001600160a01b03610afe610958565b60405163088f50cf60e41b8152911691602082600481865afa801561037b576001600160801b03935f6064926020958291610bdc575b5060405196879586946323b872dd60e01b8652326004870152602486015216604484015260018060a01b03165af190811561037b575f91610bbd575b5015610b7857565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b610bd6915060203d602011610abd57610aaf8183610854565b5f610b70565b610bf39150863d88116109a4576109998183610854565b5f610b3456fea2646970667358221220ca64c276619ac31ecce5c592723338e0383e76764d83328d9600001f4577ae3364736f6c634300081a0033","sourceMap":"285:3800:79:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806314503e51146106df57806329336f3914610610578063701da98e146105f4578063704ed542146105a25780638ea59e1d1461054157806391d5a64c14610500578063affed0e0146104e3578063c2df60091461044d578063c78bde7714610386578063d56242221461023f578063dca4a37314610201578063de1dd2e0146100d85763f887ea40146100a8575f80fd5b346100d4575f3660031901126100d45760206100c2610958565b6040516001600160a01b039091168152f35b5f80fd5b346100d45760803660031901126100d4576100f161076b565b60243567ffffffffffffffff81116100d4576101327f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c69136906004016107c3565b926101fc61013e610781565b6101466107ad565b956101626001600160a01b0361015a610958565b1633146107f1565b7f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206001546101918161092b565b6001556040513060601b6bffffffffffffffffffffffff191683820190815260148101929092526101cf81603484015b03601f198101835282610854565b519020986001600160801b0360405191168152a16040516001600160a01b039094169693948594856108fd565b0390a2005b346100d45760203660031901126100d45761023d61021d610797565b6102306001600160a01b0361015a610958565b610238610958565b6109c3565b005b60403660031901126100d45760043567ffffffffffffffff81116100d45761026b9036906004016107c3565b602435916001600160801b03831683036100d45760049260206001600160a01b03610294610958565b16604051958680926337792e1d60e11b82525afa90811561037b576102ed6102e8827f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6946020985f9161034e575b506108a9565b610aee565b6001546102f98161092b565b6001556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261032d81603484016101c1565b51902093610343604051928392329688856108fd565b0390a2604051908152f35b61036e9150893d8b11610374575b6103668183610854565b81019061088a565b896102e2565b503d61035c565b6040513d5f823e3d90fd5b346100d45760a03660031901126100d45761039f61076b565b60243567ffffffffffffffff81116100d4576103bf9036906004016107c3565b91906103c9610781565b926084359363ffffffff60e01b85168095036100d4577fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c69361041a9082906102386001600160a01b0361015a610958565b6001600160801b036104396040519485946060865260608601916108dd565b9116602083015260643560408301520390a2005b346100d45760803660031901126100d457610466610755565b60443567ffffffffffffffff81116100d4576104a77f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117739136906004016107c3565b90926101fc6104b46107ad565b6104c76001600160a01b0361015a610958565b6040516001600160a01b039093169592938493600435856108fd565b346100d4575f3660031901126100d4576020600154604051908152f35b346100d45760203660031901126100d45760405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203292a2005b346100d45760203660031901126100d4576004356105686001600160a01b0361015a610958565b805f540361057257005b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930925f55604051908152a1005b60203660031901126100d4577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206105d9610797565b6105e281610aee565b6001600160801b0360405191168152a1005b346100d4575f3660031901126100d45760205f54604051908152f35b60603660031901126100d45760243567ffffffffffffffff81116100d45761063d600491369083016107c3565b610648929192610781565b9060206001600160a01b0361065b610958565b16604051948580926337792e1d60e11b82525afa92831561037b576102e8837fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f956106ac935f916106c057506108a9565b6101fc6040519283923296600435856108fd565b6106d9915060203d602011610374576103668183610854565b886102e2565b346100d45760603660031901126100d4577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783604061071b610755565b61073c610726610781565b9182906102386001600160a01b0361015a610958565b6001600160801b038251916004358352166020820152a1005b602435906001600160a01b03821682036100d457565b600435906001600160a01b03821682036100d457565b604435906001600160801b03821682036100d457565b600435906001600160801b03821682036100d457565b606435906001600160801b03821682036100d457565b9181601f840112156100d45782359167ffffffffffffffff83116100d457602083818601950101116100d457565b156107f857565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b90601f8019910116810190811067ffffffffffffffff82111761087657604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126100d457516001600160801b03811681036100d45790565b906001600160801b03809116911601906001600160801b0382116108c957565b634e487b7160e01b5f52601160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610924916001600160801b039397969786526060602087015260608601916108dd565b9416910152565b5f1981146108c95760010190565b908160209103126100d457516001600160a01b03811681036100d45790565b6040516303e21fa960e61b8152602081600481305afa90811561037b575f9161097f575090565b6109a1915060203d6020116109a4575b6109998183610854565b810190610939565b90565b503d61098f565b908160209103126100d4575180151581036100d45790565b60049160206001600160a01b036109d8610958565b166040519485809263088f50cf60e41b82525afa92831561037b575f93610ac4575b506001600160801b031680610a0e57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af190811561037b575f91610a95575b5015610a5957565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b610ab7915060203d602011610abd575b610aaf8183610854565b8101906109ab565b5f610a51565b503d610aa5565b6001600160801b03919350610ae79060203d6020116109a4576109998183610854565b92906109fa565b6001600160a01b03610afe610958565b60405163088f50cf60e41b8152911691602082600481865afa801561037b576001600160801b03935f6064926020958291610bdc575b5060405196879586946323b872dd60e01b8652326004870152602486015216604484015260018060a01b03165af190811561037b575f91610bbd575b5015610b7857565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b610bd6915060203d602011610abd57610aaf8183610854565b5f610b70565b610bf39150863d88116109a4576109998183610854565b5f610b3456fea2646970667358221220ca64c276619ac31ecce5c592723338e0383e76764d83328d9600001f4577ae3364736f6c634300081a0033","sourceMap":"285:3800:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;3193:52;285:3800;;;;;;:::i;:::-;;3193:52;285:3800;;:::i;:::-;;;:::i;:::-;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;:::-;285:3800;3298:10;:22;3290:81;:::i;:::-;3128:50;285:3800;3029:7;285:3800;3029:7;;;:::i;:::-;;285:3800;;;3094:4;285:3800;;-1:-1:-1;;285:3800:79;3069:42;;;285:3800;;;;;;;;;;3069:42;285:3800;;;;3069:42;;869:40;;3069:42;;;;;;:::i;:::-;285:3800;3059:53;;285:3800;-1:-1:-1;;;;;285:3800:79;;;;;;3128:50;285:3800;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;3193:52;:::i;:::-;;;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;2768:5;285:3800;;:::i;:::-;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;2758:8;;:::i;:::-;2768:5;:::i;:::-;285:3800;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;-1:-1:-1;;;;;766:8:79;;:::i;:::-;285:3800;;;;;;;;;;758:27;;;;;;;;;818:16;;758:27;926:57;758:27;285:3800;758:27;285:3800;758:27;;;285:3800;818:16;;:::i;:::-;;:::i;:::-;901:7;285:3800;901:7;;;:::i;:::-;;285:3800;;;894:4;285:3800;;-1:-1:-1;;285:3800:79;869:40;;;285:3800;;;;;;;;;;869:40;285:3800;;;;869:40;285:3800;869:40;285:3800;859:51;;285:3800;926:57;285:3800;;955:9;;;;926:57;;;;:::i;:::-;;;;285:3800;;;;;;758:27;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;285:3800;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;2415:41;;2393:5;;285:3800;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;2393:5::-;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2415:41;;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;2150:40;285:3800;;;;;;:::i;:::-;;;2150:40;285:3800;;:::i;:::-;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;285:3800;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;2150:40;:::i;285:3800::-;;;;;;-1:-1:-1;;285:3800:79;;;;;420:20;285:3800;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;1442:45;285:3800;1477:9;1442:45;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;285:3800;;;1802:25;1798:123;;285:3800;1798:123;285:3800;;1887:23;285:3800;;;;;;;;1887:23;285:3800;;;;-1:-1:-1;;285:3800:79;;;;1621:39;285:3800;;;:::i;:::-;1598:6;;;:::i;:::-;-1:-1:-1;;;;;285:3800:79;;;;;;1621:39;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1149:8:79;;:::i;:::-;285:3800;;;;;;;;;;1141:27;;;;;;;;;1201:16;1141:27;1234:63;1141:27;1201:16;1141:27;285:3800;1141:27;;;1201:16;;:::i;:::-;1234:63;285:3800;;1269:9;;;;285:3800;;;1234:63;;:::i;1141:27::-;;;;285:3800;1141:27;285:3800;1141:27;;;;;;;:::i;:::-;;;;285:3800;;;;;;-1:-1:-1;;285:3800:79;;;;2624:30;285:3800;;;:::i;:::-;2602:5;285:3800;;:::i;:::-;;;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;2602:5::-;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;2624:30;285:3800;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;285:3800:79;;;;;;;;;;;;;;;;;-1:-1:-1;;;285:3800:79;;;;;;;;;;869:40;;285:3800;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;285:3800:79;;;;;-1:-1:-1;285:3800:79;;;;;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;:::o;:::-;;-1:-1:-1;;;;;285:3800:79;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;285:3800:79;;;;;;;;-1:-1:-1;;285:3800:79;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;-1:-1:-1;;285:3800:79;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;:::o;489:108::-;285:3800;;-1:-1:-1;;;554:36:79;;;285:3800;554:36;285:3800;575:4;554:36;;;;;;;-1:-1:-1;554:36:79;;;547:43;489:108;:::o;554:36::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;489:108;:::o;554:36::-;;;;;285:3800;;;;;;;;;;;;;;;;;;:::o;3767:316::-;3883:31;;;-1:-1:-1;;;;;3891:8:79;;:::i;:::-;285:3800;;;;;;;;;;3883:31;;;;;;;;;-1:-1:-1;3883:31:79;;;3767:316;285:3800;-1:-1:-1;;;;;285:3800:79;3930:10;3926:151;;3767:316;;;:::o;3926:151::-;285:3800;;-1:-1:-1;;;3971:40:79;;-1:-1:-1;;;;;285:3800:79;;;3883:31;3971:40;;285:3800;;;;;;;;;3883:31;;285:3800;;3971:40;;285:3800;;-1:-1:-1;;285:3800:79;3971:40;;;;;;;-1:-1:-1;3971:40:79;;;3926:151;285:3800;;;;3767:316::o;285:3800::-;;;-1:-1:-1;;;285:3800:79;;3883:31;;285:3800;;;;;;;;-1:-1:-1;;;3971:40:79;285:3800;;;;;;3971:40;;;;3883:31;3971:40;3883:31;3971:40;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3883:31;-1:-1:-1;;;;;3883:31:79;;;;;;;;;;;;;;;:::i;:::-;;;;;3429:332;-1:-1:-1;;;;;3519:8:79;;:::i;:::-;285:3800;;-1:-1:-1;;;3578:36:79;;285:3800;;;3578:36;285:3800;3578:36;285:3800;;3578:36;;;;;;-1:-1:-1;;;;;3578:36:79;-1:-1:-1;3641:58:79;3578:36;;;;;;;3429:332;285:3800;;;;;;;;;;;3641:58;;3666:9;3578:36;3641:58;;285:3800;;;;;;;;;;;;;;;;3641:58;;;;;;;-1:-1:-1;3641:58:79;;;3429:332;285:3800;;;;3429:332::o;285:3800::-;;;-1:-1:-1;;;285:3800:79;;3578:36;;285:3800;;;;;;;;;;;;;3641:58;;285:3800;3641:58;;;;3578:36;3641:58;3578:36;3641:58;;;;;;;:::i;:::-;;;;3578:36;;;;;;;;;;;;;;:::i;:::-;;;","linkReferences":{}},"methodIdentifiers":{"claimValue(bytes32)":"91d5a64c","executableBalanceBurned(uint128)":"dca4a373","executableBalanceTopUp(uint128)":"704ed542","initMessage(address,bytes,uint128,uint128)":"de1dd2e0","messageSent(bytes32,address,bytes,uint128)":"c2df6009","nonce()":"affed0e0","replySent(address,bytes,uint128,bytes32,bytes4)":"c78bde77","router()":"f887ea40","sendMessage(bytes,uint128)":"d5624222","sendReply(bytes32,bytes,uint128)":"29336f39","stateHash()":"701da98e","updateState(bytes32)":"8ea59e1d","valueClaimed(bytes32,address,uint128)":"14503e51"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ExecutableBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"Message\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"MessageQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"Reply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"repliedTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ReplyQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"name\":\"StateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ValueClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"ValueClaimingRequested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimedId\",\"type\":\"bytes32\"}],\"name\":\"claimValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceBurned\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceTopUp\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"executableBalance\",\"type\":\"uint128\"}],\"name\":\"initMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"messageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"replySent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_repliedTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendReply\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"}],\"name\":\"updateState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"valueClaimed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ExecutableBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's executable balance top up with his tokens. NOTE: It's event for NODES: it requires to top up balance of the program.\"},\"Message(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when the program sends outgoing message. NOTE: It's event for USERS: it informs about new message sent from program.\"},\"MessageQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new message is sent to be queued. NOTE: It's event for NODES: it requires to insert message in the program's queue.\"},\"Reply(bytes,uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program sends reply message. NOTE: It's event for USERS: it informs about new reply sent from program.\"},\"ReplyQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new reply is sent and requested to be verified and queued. NOTE: It's event for NODES: it requires to insert message in the program's queue, if message, exists.\"},\"StateChanged(bytes32)\":{\"details\":\"Emitted when the state hash of program is changed. NOTE: It's event for USERS: it informs about state changes.\"},\"ValueClaimed(bytes32,uint128)\":{\"details\":\"Emitted when a user succeed in claiming value request and receives balance. NOTE: It's event for USERS: it informs about value claimed.\"},\"ValueClaimingRequested(bytes32,address)\":{\"details\":\"Emitted when a reply's value is requested to be verified and claimed. NOTE: It's event for NODES: it requires to claim value from message, if exists.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Mirror.sol\":\"Mirror\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf\",\"dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde\",\"dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Mirror.sol\":{\"keccak256\":\"0x855debb1eedc59a930167ab2178bd306fdd9a780ad7ed95fdae0c2a344336c10\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b94e02729ecce1dab9019b3441840bb7ccebddba00d0c4f266ba490f44a78a77\",\"dweb:/ipfs/Qmf2ibL2SdGbU6bLvcTEm9dR3tr3hTYT6qrDkyVFWrTKV8\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ExecutableBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"Message","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"MessageQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"Reply","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"repliedTo","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ReplyQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"stateHash","type":"bytes32","indexed":false}],"type":"event","name":"StateChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ValueClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true}],"type":"event","name":"ValueClaimingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_claimedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"claimValue"},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"executableBalanceBurned"},{"inputs":[{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"executableBalanceTopUp"},{"inputs":[{"internalType":"address","name":"source","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"uint128","name":"executableBalance","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"initMessage"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"messageSent"},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"bytes32","name":"replyTo","type":"bytes32"},{"internalType":"bytes4","name":"replyCode","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"replySent"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_repliedTo","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendReply"},{"inputs":[],"stateMutability":"view","type":"function","name":"stateHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"newStateHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateState"},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"valueClaimed"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Mirror.sol":"Mirror"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6","urls":["bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf","dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL"],"license":"UNLICENSED"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3","urls":["bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde","dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Mirror.sol":{"keccak256":"0x855debb1eedc59a930167ab2178bd306fdd9a780ad7ed95fdae0c2a344336c10","urls":["bzz-raw://b94e02729ecce1dab9019b3441840bb7ccebddba00d0c4f266ba490f44a78a77","dweb:/ipfs/Qmf2ibL2SdGbU6bLvcTEm9dR3tr3hTYT6qrDkyVFWrTKV8"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[{"astId":53976,"contract":"src/Mirror.sol:Mirror","label":"stateHash","offset":0,"slot":"0","type":"t_bytes32"},{"astId":53978,"contract":"src/Mirror.sol:Mirror","label":"nonce","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/Mirror.sol","id":54340,"exportedSymbols":{"IMirror":[53636],"IMirrorProxy":[53644],"IRouter":[53951],"IWrappedVara":[53962],"Mirror":[54339]},"nodeType":"SourceUnit","src":"39:4047:79","nodes":[{"id":53964,"nodeType":"PragmaDirective","src":"39:24:79","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":53966,"nodeType":"ImportDirective","src":"65:48:79","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53645,"symbolAliases":[{"foreign":{"id":53965,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53644,"src":"73:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53968,"nodeType":"ImportDirective","src":"114:38:79","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53637,"symbolAliases":[{"foreign":{"id":53967,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"122:7:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53970,"nodeType":"ImportDirective","src":"153:38:79","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53952,"symbolAliases":[{"foreign":{"id":53969,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"161:7:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53972,"nodeType":"ImportDirective","src":"192:48:79","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53963,"symbolAliases":[{"foreign":{"id":53971,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"200:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54339,"nodeType":"ContractDefinition","src":"285:3800:79","nodes":[{"id":53976,"nodeType":"VariableDeclaration","src":"318:24:79","nodes":[],"baseFunctions":[53543],"constant":false,"functionSelector":"701da98e","mutability":"mutable","name":"stateHash","nameLocation":"333:9:79","scope":54339,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":53975,"name":"bytes32","nodeType":"ElementaryTypeName","src":"318:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":53978,"nodeType":"VariableDeclaration","src":"420:20:79","nodes":[],"baseFunctions":[53548],"constant":false,"functionSelector":"affed0e0","mutability":"mutable","name":"nonce","nameLocation":"435:5:79","scope":54339,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53977,"name":"uint256","nodeType":"ElementaryTypeName","src":"420:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":53993,"nodeType":"FunctionDefinition","src":"489:108:79","nodes":[],"body":{"id":53992,"nodeType":"Block","src":"537:60:79","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":53986,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"575:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":53985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"567:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":53984,"name":"address","nodeType":"ElementaryTypeName","src":"567:7:79","typeDescriptions":{}}},"id":53987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"567:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":53983,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53644,"src":"554:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorProxy_$53644_$","typeString":"type(contract IMirrorProxy)"}},"id":53988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"554:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorProxy_$53644","typeString":"contract IMirrorProxy"}},"id":53989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"582:6:79","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":53643,"src":"554:34:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":53990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"554:36:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":53982,"id":53991,"nodeType":"Return","src":"547:43:79"}]},"baseFunctions":[53553],"functionSelector":"f887ea40","implemented":true,"kind":"function","modifiers":[],"name":"router","nameLocation":"498:6:79","parameters":{"id":53979,"nodeType":"ParameterList","parameters":[],"src":"504:2:79"},"returnParameters":{"id":53982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":53993,"src":"528:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":53980,"name":"address","nodeType":"ElementaryTypeName","src":"528:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"527:9:79"},"scope":54339,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54042,"nodeType":"FunctionDefinition","src":"633:377:79","nodes":[],"body":{"id":54041,"nodeType":"Block","src":"730:280:79","nodes":[],"statements":[{"assignments":[54003],"declarations":[{"constant":false,"id":54003,"mutability":"mutable","name":"baseFee","nameLocation":"748:7:79","nodeType":"VariableDeclaration","scope":54041,"src":"740:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54002,"name":"uint128","nodeType":"ElementaryTypeName","src":"740:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":54010,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54005,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"766:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"766:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54004,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"758:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"758:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"776:7:79","memberName":"baseFee","nodeType":"MemberAccess","referencedDeclaration":53910,"src":"758:25:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":54009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"758:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"740:45:79"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54012,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54003,"src":"818:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":54013,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53997,"src":"828:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"818:16:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54011,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"795:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"795:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54016,"nodeType":"ExpressionStatement","src":"795:40:79"},{"assignments":[54018],"declarations":[{"constant":false,"id":54018,"mutability":"mutable","name":"id","nameLocation":"854:2:79","nodeType":"VariableDeclaration","scope":54041,"src":"846:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54017,"name":"bytes32","nodeType":"ElementaryTypeName","src":"846:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54030,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":54024,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"894:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":54023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"886:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54022,"name":"address","nodeType":"ElementaryTypeName","src":"886:7:79","typeDescriptions":{}}},"id":54025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"886:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"901:7:79","subExpression":{"id":54026,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53978,"src":"901:5:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54020,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"869:3:79","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"873:12:79","memberName":"encodePacked","nodeType":"MemberAccess","src":"869:16:79","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"869:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54019,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"859:9:79","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"859:51:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"846:64:79"},{"eventCall":{"arguments":[{"id":54032,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54018,"src":"951:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54033,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"955:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"958:6:79","memberName":"origin","nodeType":"MemberAccess","src":"955:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54035,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53995,"src":"966:8:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54036,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53997,"src":"976:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54031,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53486,"src":"926:24:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"926:57:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54038,"nodeType":"EmitStatement","src":"921:62:79"},{"expression":{"id":54039,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54018,"src":"1001:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54001,"id":54040,"nodeType":"Return","src":"994:9:79"}]},"baseFunctions":[53562],"functionSelector":"d5624222","implemented":true,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"642:11:79","parameters":{"id":53998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53995,"mutability":"mutable","name":"_payload","nameLocation":"669:8:79","nodeType":"VariableDeclaration","scope":54042,"src":"654:23:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":53994,"name":"bytes","nodeType":"ElementaryTypeName","src":"654:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":53997,"mutability":"mutable","name":"_value","nameLocation":"687:6:79","nodeType":"VariableDeclaration","scope":54042,"src":"679:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":53996,"name":"uint128","nodeType":"ElementaryTypeName","src":"679:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"653:41:79"},"returnParameters":{"id":54001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54000,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54042,"src":"721:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":53999,"name":"bytes32","nodeType":"ElementaryTypeName","src":"721:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"720:9:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54075,"nodeType":"FunctionDefinition","src":"1016:288:79","nodes":[],"body":{"id":54074,"nodeType":"Block","src":"1113:191:79","nodes":[],"statements":[{"assignments":[54052],"declarations":[{"constant":false,"id":54052,"mutability":"mutable","name":"baseFee","nameLocation":"1131:7:79","nodeType":"VariableDeclaration","scope":54074,"src":"1123:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54051,"name":"uint128","nodeType":"ElementaryTypeName","src":"1123:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":54059,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54054,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"1149:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1149:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54053,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"1141:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1159:7:79","memberName":"baseFee","nodeType":"MemberAccess","referencedDeclaration":53910,"src":"1141:25:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":54058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1123:45:79"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54061,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54052,"src":"1201:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":54062,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54048,"src":"1211:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1201:16:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54060,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"1178:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1178:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54065,"nodeType":"ExpressionStatement","src":"1178:40:79"},{"eventCall":{"arguments":[{"id":54067,"name":"_repliedTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54044,"src":"1257:10:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54068,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"1269:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1272:6:79","memberName":"origin","nodeType":"MemberAccess","src":"1269:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54070,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54046,"src":"1280:8:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54071,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54048,"src":"1290:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54066,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53497,"src":"1234:22:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1234:63:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54073,"nodeType":"EmitStatement","src":"1229:68:79"}]},"baseFunctions":[53571],"functionSelector":"29336f39","implemented":true,"kind":"function","modifiers":[],"name":"sendReply","nameLocation":"1025:9:79","parameters":{"id":54049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54044,"mutability":"mutable","name":"_repliedTo","nameLocation":"1043:10:79","nodeType":"VariableDeclaration","scope":54075,"src":"1035:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54043,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1035:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54046,"mutability":"mutable","name":"_payload","nameLocation":"1070:8:79","nodeType":"VariableDeclaration","scope":54075,"src":"1055:23:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54045,"name":"bytes","nodeType":"ElementaryTypeName","src":"1055:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54048,"mutability":"mutable","name":"_value","nameLocation":"1088:6:79","nodeType":"VariableDeclaration","scope":54075,"src":"1080:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54047,"name":"uint128","nodeType":"ElementaryTypeName","src":"1080:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1034:61:79"},"returnParameters":{"id":54050,"nodeType":"ParameterList","parameters":[],"src":"1113:0:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54087,"nodeType":"FunctionDefinition","src":"1310:184:79","nodes":[],"body":{"id":54086,"nodeType":"Block","src":"1359:135:79","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":54081,"name":"_claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54077,"src":"1465:10:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54082,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"1477:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1480:6:79","memberName":"origin","nodeType":"MemberAccess","src":"1477:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54080,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53504,"src":"1442:22:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":54084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54085,"nodeType":"EmitStatement","src":"1437:50:79"}]},"baseFunctions":[53576],"functionSelector":"91d5a64c","implemented":true,"kind":"function","modifiers":[],"name":"claimValue","nameLocation":"1319:10:79","parameters":{"id":54078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54077,"mutability":"mutable","name":"_claimedId","nameLocation":"1338:10:79","nodeType":"VariableDeclaration","scope":54087,"src":"1330:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54076,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1330:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1329:20:79"},"returnParameters":{"id":54079,"nodeType":"ParameterList","parameters":[],"src":"1359:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54101,"nodeType":"FunctionDefinition","src":"1500:167:79","nodes":[],"body":{"id":54100,"nodeType":"Block","src":"1565:102:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54093,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54089,"src":"1598:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54092,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"1575:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1575:30:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54095,"nodeType":"ExpressionStatement","src":"1575:30:79"},{"eventCall":{"arguments":[{"id":54097,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54089,"src":"1653:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54096,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53509,"src":"1621:31:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1621:39:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54099,"nodeType":"EmitStatement","src":"1616:44:79"}]},"baseFunctions":[53581],"functionSelector":"704ed542","implemented":true,"kind":"function","modifiers":[],"name":"executableBalanceTopUp","nameLocation":"1509:22:79","parameters":{"id":54090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54089,"mutability":"mutable","name":"_value","nameLocation":"1540:6:79","nodeType":"VariableDeclaration","scope":54101,"src":"1532:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54088,"name":"uint128","nodeType":"ElementaryTypeName","src":"1532:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1531:16:79"},"returnParameters":{"id":54091,"nodeType":"ParameterList","parameters":[],"src":"1565:0:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54122,"nodeType":"FunctionDefinition","src":"1725:202:79","nodes":[],"body":{"id":54121,"nodeType":"Block","src":"1788:139:79","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":54110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54108,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1802:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":54109,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54103,"src":"1815:12:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1802:25:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54120,"nodeType":"IfStatement","src":"1798:123:79","trueBody":{"id":54119,"nodeType":"Block","src":"1829:92:79","statements":[{"expression":{"id":54113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54111,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1843:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54112,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54103,"src":"1855:12:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1843:24:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54114,"nodeType":"ExpressionStatement","src":"1843:24:79"},{"eventCall":{"arguments":[{"id":54116,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1900:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":54115,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53475,"src":"1887:12:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":54117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1887:23:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54118,"nodeType":"EmitStatement","src":"1882:28:79"}]}}]},"baseFunctions":[53586],"functionSelector":"8ea59e1d","implemented":true,"kind":"function","modifiers":[{"id":54106,"kind":"modifierInvocation","modifierName":{"id":54105,"name":"onlyRouter","nameLocations":["1777:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"1777:10:79"},"nodeType":"ModifierInvocation","src":"1777:10:79"}],"name":"updateState","nameLocation":"1734:11:79","parameters":{"id":54104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54103,"mutability":"mutable","name":"newStateHash","nameLocation":"1754:12:79","nodeType":"VariableDeclaration","scope":54122,"src":"1746:20:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54102,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1746:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1745:22:79"},"returnParameters":{"id":54107,"nodeType":"ParameterList","parameters":[],"src":"1788:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54143,"nodeType":"FunctionDefinition","src":"1933:264:79","nodes":[],"body":{"id":54142,"nodeType":"Block","src":"2046:151:79","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":54136,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54124,"src":"2158:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54137,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54126,"src":"2162:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54138,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54128,"src":"2175:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54139,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54130,"src":"2184:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54135,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53520,"src":"2150:7:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2150:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54141,"nodeType":"EmitStatement","src":"2145:45:79"}]},"baseFunctions":[53597],"functionSelector":"c2df6009","implemented":true,"kind":"function","modifiers":[{"id":54133,"kind":"modifierInvocation","modifierName":{"id":54132,"name":"onlyRouter","nameLocations":["2035:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2035:10:79"},"nodeType":"ModifierInvocation","src":"2035:10:79"}],"name":"messageSent","nameLocation":"1942:11:79","parameters":{"id":54131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54124,"mutability":"mutable","name":"id","nameLocation":"1962:2:79","nodeType":"VariableDeclaration","scope":54143,"src":"1954:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54123,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1954:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54126,"mutability":"mutable","name":"destination","nameLocation":"1974:11:79","nodeType":"VariableDeclaration","scope":54143,"src":"1966:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54125,"name":"address","nodeType":"ElementaryTypeName","src":"1966:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54128,"mutability":"mutable","name":"payload","nameLocation":"2002:7:79","nodeType":"VariableDeclaration","scope":54143,"src":"1987:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54127,"name":"bytes","nodeType":"ElementaryTypeName","src":"1987:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54130,"mutability":"mutable","name":"value","nameLocation":"2019:5:79","nodeType":"VariableDeclaration","scope":54143,"src":"2011:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54129,"name":"uint128","nodeType":"ElementaryTypeName","src":"2011:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1953:72:79"},"returnParameters":{"id":54134,"nodeType":"ParameterList","parameters":[],"src":"2046:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54171,"nodeType":"FunctionDefinition","src":"2203:260:79","nodes":[],"body":{"id":54170,"nodeType":"Block","src":"2357:106:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54159,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54145,"src":"2380:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54160,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54149,"src":"2393:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54158,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2367:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2367:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54162,"nodeType":"ExpressionStatement","src":"2367:32:79"},{"eventCall":{"arguments":[{"id":54164,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54147,"src":"2421:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54165,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54149,"src":"2430:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":54166,"name":"replyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54151,"src":"2437:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54167,"name":"replyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54153,"src":"2446:9:79","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":54163,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53531,"src":"2415:5:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":54168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2415:41:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54169,"nodeType":"EmitStatement","src":"2410:46:79"}]},"baseFunctions":[53610],"functionSelector":"c78bde77","implemented":true,"kind":"function","modifiers":[{"id":54156,"kind":"modifierInvocation","modifierName":{"id":54155,"name":"onlyRouter","nameLocations":["2342:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2342:10:79"},"nodeType":"ModifierInvocation","src":"2342:10:79"}],"name":"replySent","nameLocation":"2212:9:79","parameters":{"id":54154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54145,"mutability":"mutable","name":"destination","nameLocation":"2230:11:79","nodeType":"VariableDeclaration","scope":54171,"src":"2222:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54144,"name":"address","nodeType":"ElementaryTypeName","src":"2222:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54147,"mutability":"mutable","name":"payload","nameLocation":"2258:7:79","nodeType":"VariableDeclaration","scope":54171,"src":"2243:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54146,"name":"bytes","nodeType":"ElementaryTypeName","src":"2243:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54149,"mutability":"mutable","name":"value","nameLocation":"2275:5:79","nodeType":"VariableDeclaration","scope":54171,"src":"2267:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54148,"name":"uint128","nodeType":"ElementaryTypeName","src":"2267:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":54151,"mutability":"mutable","name":"replyTo","nameLocation":"2290:7:79","nodeType":"VariableDeclaration","scope":54171,"src":"2282:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54150,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2282:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54153,"mutability":"mutable","name":"replyCode","nameLocation":"2306:9:79","nodeType":"VariableDeclaration","scope":54171,"src":"2299:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":54152,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2299:6:79","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2221:95:79"},"returnParameters":{"id":54157,"nodeType":"ParameterList","parameters":[],"src":"2357:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54193,"nodeType":"FunctionDefinition","src":"2469:192:79","nodes":[],"body":{"id":54192,"nodeType":"Block","src":"2566:95:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54183,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54175,"src":"2589:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54184,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54177,"src":"2602:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54182,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2576:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2576:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54186,"nodeType":"ExpressionStatement","src":"2576:32:79"},{"eventCall":{"arguments":[{"id":54188,"name":"claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54173,"src":"2637:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54189,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54177,"src":"2648:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54187,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53538,"src":"2624:12:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":54190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2624:30:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54191,"nodeType":"EmitStatement","src":"2619:35:79"}]},"baseFunctions":[53619],"functionSelector":"14503e51","implemented":true,"kind":"function","modifiers":[{"id":54180,"kind":"modifierInvocation","modifierName":{"id":54179,"name":"onlyRouter","nameLocations":["2555:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2555:10:79"},"nodeType":"ModifierInvocation","src":"2555:10:79"}],"name":"valueClaimed","nameLocation":"2478:12:79","parameters":{"id":54178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54173,"mutability":"mutable","name":"claimedId","nameLocation":"2499:9:79","nodeType":"VariableDeclaration","scope":54193,"src":"2491:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54172,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2491:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54175,"mutability":"mutable","name":"destination","nameLocation":"2518:11:79","nodeType":"VariableDeclaration","scope":54193,"src":"2510:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54174,"name":"address","nodeType":"ElementaryTypeName","src":"2510:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54177,"mutability":"mutable","name":"value","nameLocation":"2539:5:79","nodeType":"VariableDeclaration","scope":54193,"src":"2531:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54176,"name":"uint128","nodeType":"ElementaryTypeName","src":"2531:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2490:55:79"},"returnParameters":{"id":54181,"nodeType":"ParameterList","parameters":[],"src":"2566:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54207,"nodeType":"FunctionDefinition","src":"2667:114:79","nodes":[],"body":{"id":54206,"nodeType":"Block","src":"2735:46:79","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54201,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"2758:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2758:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54203,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54195,"src":"2768:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54200,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2745:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2745:29:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54205,"nodeType":"ExpressionStatement","src":"2745:29:79"}]},"baseFunctions":[53624],"functionSelector":"dca4a373","implemented":true,"kind":"function","modifiers":[{"id":54198,"kind":"modifierInvocation","modifierName":{"id":54197,"name":"onlyRouter","nameLocations":["2724:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2724:10:79"},"nodeType":"ModifierInvocation","src":"2724:10:79"}],"name":"executableBalanceBurned","nameLocation":"2676:23:79","parameters":{"id":54196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54195,"mutability":"mutable","name":"value","nameLocation":"2708:5:79","nodeType":"VariableDeclaration","scope":54207,"src":"2700:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54194,"name":"uint128","nodeType":"ElementaryTypeName","src":"2700:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2699:15:79"},"returnParameters":{"id":54199,"nodeType":"ParameterList","parameters":[],"src":"2735:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54250,"nodeType":"FunctionDefinition","src":"2787:465:79","nodes":[],"body":{"id":54249,"nodeType":"Block","src":"2930:322:79","nodes":[],"statements":[{"assignments":[54221],"declarations":[{"constant":false,"id":54221,"mutability":"mutable","name":"initNonce","nameLocation":"3017:9:79","nodeType":"VariableDeclaration","scope":54249,"src":"3009:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54220,"name":"uint256","nodeType":"ElementaryTypeName","src":"3009:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54224,"initialValue":{"id":54223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3029:7:79","subExpression":{"id":54222,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53978,"src":"3029:5:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3009:27:79"},{"assignments":[54226],"declarations":[{"constant":false,"id":54226,"mutability":"mutable","name":"id","nameLocation":"3054:2:79","nodeType":"VariableDeclaration","scope":54249,"src":"3046:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54225,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3046:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54237,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":54232,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3094:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":54231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3086:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54230,"name":"address","nodeType":"ElementaryTypeName","src":"3086:7:79","typeDescriptions":{}}},"id":54233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3086:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54234,"name":"initNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54221,"src":"3101:9:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54228,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3069:3:79","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3073:12:79","memberName":"encodePacked","nodeType":"MemberAccess","src":"3069:16:79","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3069:42:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54227,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3059:9:79","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3059:53:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3046:66:79"},{"eventCall":{"arguments":[{"id":54239,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54215,"src":"3160:17:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54238,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53509,"src":"3128:31:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3128:50:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54241,"nodeType":"EmitStatement","src":"3123:55:79"},{"eventCall":{"arguments":[{"id":54243,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54226,"src":"3218:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54244,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54209,"src":"3222:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54245,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54211,"src":"3230:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54246,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54213,"src":"3239:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54242,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53486,"src":"3193:24:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3193:52:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54248,"nodeType":"EmitStatement","src":"3188:57:79"}]},"baseFunctions":[53635],"functionSelector":"de1dd2e0","implemented":true,"kind":"function","modifiers":[{"id":54218,"kind":"modifierInvocation","modifierName":{"id":54217,"name":"onlyRouter","nameLocations":["2915:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2915:10:79"},"nodeType":"ModifierInvocation","src":"2915:10:79"}],"name":"initMessage","nameLocation":"2796:11:79","parameters":{"id":54216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54209,"mutability":"mutable","name":"source","nameLocation":"2816:6:79","nodeType":"VariableDeclaration","scope":54250,"src":"2808:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54208,"name":"address","nodeType":"ElementaryTypeName","src":"2808:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54211,"mutability":"mutable","name":"payload","nameLocation":"2839:7:79","nodeType":"VariableDeclaration","scope":54250,"src":"2824:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54210,"name":"bytes","nodeType":"ElementaryTypeName","src":"2824:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54213,"mutability":"mutable","name":"value","nameLocation":"2856:5:79","nodeType":"VariableDeclaration","scope":54250,"src":"2848:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54212,"name":"uint128","nodeType":"ElementaryTypeName","src":"2848:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":54215,"mutability":"mutable","name":"executableBalance","nameLocation":"2871:17:79","nodeType":"VariableDeclaration","scope":54250,"src":"2863:25:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54214,"name":"uint128","nodeType":"ElementaryTypeName","src":"2863:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2807:82:79"},"returnParameters":{"id":54219,"nodeType":"ParameterList","parameters":[],"src":"2930:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54263,"nodeType":"ModifierDefinition","src":"3258:131:79","nodes":[],"body":{"id":54262,"nodeType":"Block","src":"3280:109:79","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":54257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54253,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3298:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3302:6:79","memberName":"sender","nodeType":"MemberAccess","src":"3298:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54255,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3312:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3312:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3298:22:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6520666f72206f7065726174696f6e","id":54258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3322:48:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""},"value":"only router contract is eligible for operation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""}],"id":54252,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3290:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3290:81:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54260,"nodeType":"ExpressionStatement","src":"3290:81:79"},{"id":54261,"nodeType":"PlaceholderStatement","src":"3381:1:79"}]},"name":"onlyRouter","nameLocation":"3267:10:79","parameters":{"id":54251,"nodeType":"ParameterList","parameters":[],"src":"3277:2:79"},"virtual":false,"visibility":"internal"},{"id":54300,"nodeType":"FunctionDefinition","src":"3429:332:79","nodes":[],"body":{"id":54299,"nodeType":"Block","src":"3485:276:79","nodes":[],"statements":[{"assignments":[54269],"declarations":[{"constant":false,"id":54269,"mutability":"mutable","name":"routerAddress","nameLocation":"3503:13:79","nodeType":"VariableDeclaration","scope":54299,"src":"3495:21:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54268,"name":"address","nodeType":"ElementaryTypeName","src":"3495:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54272,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54270,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3519:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3519:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3495:32:79"},{"assignments":[54275],"declarations":[{"constant":false,"id":54275,"mutability":"mutable","name":"wrappedVara","nameLocation":"3551:11:79","nodeType":"VariableDeclaration","scope":54299,"src":"3538:24:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":54274,"nodeType":"UserDefinedTypeName","pathNode":{"id":54273,"name":"IWrappedVara","nameLocations":["3538:12:79"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"3538:12:79"},"referencedDeclaration":53962,"src":"3538:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":54283,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":54278,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54269,"src":"3586:13:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54277,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"3578:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3578:22:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3601:11:79","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53810,"src":"3578:34:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":54281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3578:36:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54276,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"3565:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":54282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3565:50:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"3538:77:79"},{"assignments":[54285],"declarations":[{"constant":false,"id":54285,"mutability":"mutable","name":"success","nameLocation":"3631:7:79","nodeType":"VariableDeclaration","scope":54299,"src":"3626:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54284,"name":"bool","nodeType":"ElementaryTypeName","src":"3626:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":54293,"initialValue":{"arguments":[{"expression":{"id":54288,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"3666:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3669:6:79","memberName":"origin","nodeType":"MemberAccess","src":"3666:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54290,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54269,"src":"3677:13:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54291,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54265,"src":"3692:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":54286,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54275,"src":"3641:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":54287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3653:12:79","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":41905,"src":"3641:24:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":54292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3641:58:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3626:73:79"},{"expression":{"arguments":[{"id":54295,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54285,"src":"3718:7:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":54296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3727:26:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":54294,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3710:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3710:44:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54298,"nodeType":"ExpressionStatement","src":"3710:44:79"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValueToRouter","nameLocation":"3438:22:79","parameters":{"id":54266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54265,"mutability":"mutable","name":"_value","nameLocation":"3469:6:79","nodeType":"VariableDeclaration","scope":54300,"src":"3461:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54264,"name":"uint128","nodeType":"ElementaryTypeName","src":"3461:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3460:16:79"},"returnParameters":{"id":54267,"nodeType":"ParameterList","parameters":[],"src":"3485:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":54338,"nodeType":"FunctionDefinition","src":"3767:316:79","nodes":[],"body":{"id":54337,"nodeType":"Block","src":"3833:250:79","nodes":[],"statements":[{"assignments":[54309],"declarations":[{"constant":false,"id":54309,"mutability":"mutable","name":"wrappedVara","nameLocation":"3856:11:79","nodeType":"VariableDeclaration","scope":54337,"src":"3843:24:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":54308,"nodeType":"UserDefinedTypeName","pathNode":{"id":54307,"name":"IWrappedVara","nameLocations":["3843:12:79"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"3843:12:79"},"referencedDeclaration":53962,"src":"3843:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":54318,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54312,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3891:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3891:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54311,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"3883:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3883:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3901:11:79","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53810,"src":"3883:29:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":54316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3883:31:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54310,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"3870:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":54317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3870:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"3843:72:79"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54319,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54304,"src":"3930:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":54320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3939:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3930:10:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54336,"nodeType":"IfStatement","src":"3926:151:79","trueBody":{"id":54335,"nodeType":"Block","src":"3942:135:79","statements":[{"assignments":[54323],"declarations":[{"constant":false,"id":54323,"mutability":"mutable","name":"success","nameLocation":"3961:7:79","nodeType":"VariableDeclaration","scope":54335,"src":"3956:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54322,"name":"bool","nodeType":"ElementaryTypeName","src":"3956:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":54329,"initialValue":{"arguments":[{"id":54326,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54302,"src":"3992:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54327,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54304,"src":"4005:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":54324,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54309,"src":"3971:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":54325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3983:8:79","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":41873,"src":"3971:20:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":54328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3971:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3956:55:79"},{"expression":{"arguments":[{"id":54331,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54323,"src":"4034:7:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f2073656e64205756617261","id":54332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4043:22:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""},"value":"failed to send WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""}],"id":54330,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4026:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4026:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54334,"nodeType":"ExpressionStatement","src":"4026:40:79"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_sendValueTo","nameLocation":"3776:12:79","parameters":{"id":54305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54302,"mutability":"mutable","name":"destination","nameLocation":"3797:11:79","nodeType":"VariableDeclaration","scope":54338,"src":"3789:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54301,"name":"address","nodeType":"ElementaryTypeName","src":"3789:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54304,"mutability":"mutable","name":"value","nameLocation":"3818:5:79","nodeType":"VariableDeclaration","scope":54338,"src":"3810:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54303,"name":"uint128","nodeType":"ElementaryTypeName","src":"3810:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3788:36:79"},"returnParameters":{"id":54306,"nodeType":"ParameterList","parameters":[],"src":"3833:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":53973,"name":"IMirror","nameLocations":["304:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":53636,"src":"304:7:79"},"id":53974,"nodeType":"InheritanceSpecifier","src":"304:7:79"}],"canonicalName":"Mirror","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[54339,53636],"name":"Mirror","nameLocation":"294:6:79","scope":54340,"usedErrors":[],"usedEvents":[53475,53486,53497,53504,53509,53520,53531,53538]}],"license":"UNLICENSED"},"id":79} \ No newline at end of file diff --git a/ethexe/ethereum/MirrorProxy.json b/ethexe/ethereum/MirrorProxy.json index 1648b73817d..2fda212a344 100644 --- a/ethexe/ethereum/MirrorProxy.json +++ b/ethexe/ethereum/MirrorProxy.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_router","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"}],"bytecode":{"object":"0x60a034606b57601f61021038819003918201601f19168301916001600160401b03831184841017606f57808492602094604052833981010312606b57516001600160a01b0381168103606b5760805260405161018c908161008482396080518181816023015260e10152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060405260043610156100c0575b632226c8b960e11b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea2646970667358221220283f540781fa7e26256f2b498c58b4163e183be41573ea8eb465014038e1dbd064736f6c634300081a0033","sourceMap":"259:282:80:-:0;;;;;;;;;;;;;-1:-1:-1;;259:282:80;;;;-1:-1:-1;;;;;259:282:80;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:282:80;;;;;;386:16;;259:282;;;;;;;;386:16;259:282;;;;;;;;;;;;-1:-1:-1;259:282:80;;;;;;-1:-1:-1;259:282:80;;;;;-1:-1:-1;259:282:80","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610156100c0575b632226c8b960e11b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea2646970667358221220283f540781fa7e26256f2b498c58b4163e183be41573ea8eb465014038e1dbd064736f6c634300081a0033","sourceMap":"259:282:80:-:0;;;;;;;;;-1:-1:-1;;;;259:282:80;508:24;;;;;259:282;;516:6;-1:-1:-1;;;;;259:282:80;508:24;;;;;;-1:-1:-1;508:24:80;;2381:17:39;508:24:80;;;;;;;;;259:282;;;;;;;;;;;;;;;;;;508:24;259:282;;;;508:24;;:::i;:::-;2381:17:39;:::i;259:282:80:-;;;;-1:-1:-1;259:282:80;;;;;-1:-1:-1;259:282:80;508:24;;;;;;259:282;;;-1:-1:-1;259:282:80;;;;;;;;;;;;;;;;;;;-1:-1:-1;;259:282:80;;;;309:31;-1:-1:-1;;;;;259:282:80;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:282:80;;;;;;;:::o;949:895:39:-;1019:819;949:895;;1019:819;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"immutableReferences":{"54353":[{"start":35,"length":32},{"start":225,"length":32}]}},"methodIdentifiers":{"router()":"f887ea40"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/MirrorProxy.sol\":\"MirrorProxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde\",\"dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D\"]},\"src/MirrorProxy.sol\":{\"keccak256\":\"0xbb15dbe1f5a0bb2168af590f1aee9748d3a96b4f7423f3428fe6fd24a9796c30\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://d17ae2869b3fbfcc3a03754bedffcd798f70bf53b771f95d1f2f0b8f113662a8\",\"dweb:/ipfs/QmdUwWV5MdYzsxXaq1R2zLAttW5XwEKX6SSTpVo6pRynwq\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/MirrorProxy.sol":"MirrorProxy"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd","urls":["bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac","dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"],"license":"MIT"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3","urls":["bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde","dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D"],"license":"UNLICENSED"},"src/MirrorProxy.sol":{"keccak256":"0xbb15dbe1f5a0bb2168af590f1aee9748d3a96b4f7423f3428fe6fd24a9796c30","urls":["bzz-raw://d17ae2869b3fbfcc3a03754bedffcd798f70bf53b771f95d1f2f0b8f113662a8","dweb:/ipfs/QmdUwWV5MdYzsxXaq1R2zLAttW5XwEKX6SSTpVo6pRynwq"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/MirrorProxy.sol","id":54378,"exportedSymbols":{"IMirrorProxy":[53644],"IRouter":[53951],"MirrorProxy":[54377],"Proxy":[41489]},"nodeType":"SourceUnit","src":"39:503:80","nodes":[{"id":54341,"nodeType":"PragmaDirective","src":"39:24:80","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":54343,"nodeType":"ImportDirective","src":"65:62:80","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","file":"@openzeppelin/contracts/proxy/Proxy.sol","nameLocation":"-1:-1:-1","scope":54378,"sourceUnit":41490,"symbolAliases":[{"foreign":{"id":54342,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41489,"src":"73:5:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54345,"nodeType":"ImportDirective","src":"128:48:80","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":54378,"sourceUnit":53645,"symbolAliases":[{"foreign":{"id":54344,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53644,"src":"136:12:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54347,"nodeType":"ImportDirective","src":"177:38:80","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":54378,"sourceUnit":53952,"symbolAliases":[{"foreign":{"id":54346,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"185:7:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54377,"nodeType":"ContractDefinition","src":"259:282:80","nodes":[{"id":54353,"nodeType":"VariableDeclaration","src":"309:31:80","nodes":[],"baseFunctions":[53643],"constant":false,"functionSelector":"f887ea40","mutability":"immutable","name":"router","nameLocation":"334:6:80","scope":54377,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54352,"name":"address","nodeType":"ElementaryTypeName","src":"309:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":54363,"nodeType":"FunctionDefinition","src":"347:62:80","nodes":[],"body":{"id":54362,"nodeType":"Block","src":"376:33:80","nodes":[],"statements":[{"expression":{"id":54360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54358,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54353,"src":"386:6:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54359,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54355,"src":"395:7:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"386:16:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54361,"nodeType":"ExpressionStatement","src":"386:16:80"}]},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":54356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54355,"mutability":"mutable","name":"_router","nameLocation":"367:7:80","nodeType":"VariableDeclaration","scope":54363,"src":"359:15:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54354,"name":"address","nodeType":"ElementaryTypeName","src":"359:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"358:17:80"},"returnParameters":{"id":54357,"nodeType":"ParameterList","parameters":[],"src":"376:0:80"},"scope":54377,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54376,"nodeType":"FunctionDefinition","src":"415:124:80","nodes":[],"body":{"id":54375,"nodeType":"Block","src":"491:48:80","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":54370,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54353,"src":"516:6:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54369,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"508:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:15:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"524:6:80","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53820,"src":"508:22:80","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":54373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:24:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54368,"id":54374,"nodeType":"Return","src":"501:31:80"}]},"baseFunctions":[41470],"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"424:15:80","overrides":{"id":54365,"nodeType":"OverrideSpecifier","overrides":[],"src":"464:8:80"},"parameters":{"id":54364,"nodeType":"ParameterList","parameters":[],"src":"439:2:80"},"returnParameters":{"id":54368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54376,"src":"482:7:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54366,"name":"address","nodeType":"ElementaryTypeName","src":"482:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"481:9:80"},"scope":54377,"stateMutability":"view","virtual":true,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":54348,"name":"IMirrorProxy","nameLocations":["283:12:80"],"nodeType":"IdentifierPath","referencedDeclaration":53644,"src":"283:12:80"},"id":54349,"nodeType":"InheritanceSpecifier","src":"283:12:80"},{"baseName":{"id":54350,"name":"Proxy","nameLocations":["297:5:80"],"nodeType":"IdentifierPath","referencedDeclaration":41489,"src":"297:5:80"},"id":54351,"nodeType":"InheritanceSpecifier","src":"297:5:80"}],"canonicalName":"MirrorProxy","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[54377,41489,53644],"name":"MirrorProxy","nameLocation":"268:11:80","scope":54378,"usedErrors":[],"usedEvents":[]}],"license":"UNLICENSED"},"id":80} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_router","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"}],"bytecode":{"object":"0x60a034606b57601f61021038819003918201601f19168301916001600160401b03831184841017606f57808492602094604052833981010312606b57516001600160a01b0381168103606b5760805260405161018c908161008482396080518181816023015260e10152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060405260043610156100c0575b632226c8b960e11b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea26469706673582212205a4ad30e1874056243a7416efee9e8575ad36432ea74326500f096f42207248c64736f6c634300081a0033","sourceMap":"259:282:80:-:0;;;;;;;;;;;;;-1:-1:-1;;259:282:80;;;;-1:-1:-1;;;;;259:282:80;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:282:80;;;;;;386:16;;259:282;;;;;;;;386:16;259:282;;;;;;;;;;;;-1:-1:-1;259:282:80;;;;;;-1:-1:-1;259:282:80;;;;;-1:-1:-1;259:282:80","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610156100c0575b632226c8b960e11b60809081526020906004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156100b5575f9015610139575060203d6020116100ae575b601f19601f820116608001906080821067ffffffffffffffff83111761009a5761009591604052608001610117565b610139565b634e487b7160e01b5f52604160045260245ffd5b503d610066565b6040513d5f823e3d90fd5b5f3560e01c63f887ea400361000e5734610113575f366003190112610113577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166080908152602090f35b5f80fd5b602090607f190112610113576080516001600160a01b03811681036101135790565b5f8091368280378136915af43d5f803e15610152573d5ff35b3d5ffdfea26469706673582212205a4ad30e1874056243a7416efee9e8575ad36432ea74326500f096f42207248c64736f6c634300081a0033","sourceMap":"259:282:80:-:0;;;;;;;;;-1:-1:-1;;;;259:282:80;508:24;;;;;259:282;;516:6;-1:-1:-1;;;;;259:282:80;508:24;;;;;;-1:-1:-1;508:24:80;;2381:17:39;508:24:80;;;;;;;;;259:282;;;;;;;;;;;;;;;;;;508:24;259:282;;;;508:24;;:::i;:::-;2381:17:39;:::i;259:282:80:-;;;;-1:-1:-1;259:282:80;;;;;-1:-1:-1;259:282:80;508:24;;;;;;259:282;;;-1:-1:-1;259:282:80;;;;;;;;;;;;;;;;;;;-1:-1:-1;;259:282:80;;;;309:31;-1:-1:-1;;;;;259:282:80;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;259:282:80;;;;;;;:::o;949:895:39:-;1019:819;949:895;;1019:819;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{},"immutableReferences":{"54353":[{"start":35,"length":32},{"start":225,"length":32}]}},"methodIdentifiers":{"router()":"f887ea40"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/MirrorProxy.sol\":\"MirrorProxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde\",\"dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D\"]},\"src/MirrorProxy.sol\":{\"keccak256\":\"0xbb15dbe1f5a0bb2168af590f1aee9748d3a96b4f7423f3428fe6fd24a9796c30\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://d17ae2869b3fbfcc3a03754bedffcd798f70bf53b771f95d1f2f0b8f113662a8\",\"dweb:/ipfs/QmdUwWV5MdYzsxXaq1R2zLAttW5XwEKX6SSTpVo6pRynwq\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/MirrorProxy.sol":"MirrorProxy"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd","urls":["bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac","dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"],"license":"MIT"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3","urls":["bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde","dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D"],"license":"UNLICENSED"},"src/MirrorProxy.sol":{"keccak256":"0xbb15dbe1f5a0bb2168af590f1aee9748d3a96b4f7423f3428fe6fd24a9796c30","urls":["bzz-raw://d17ae2869b3fbfcc3a03754bedffcd798f70bf53b771f95d1f2f0b8f113662a8","dweb:/ipfs/QmdUwWV5MdYzsxXaq1R2zLAttW5XwEKX6SSTpVo6pRynwq"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/MirrorProxy.sol","id":54378,"exportedSymbols":{"IMirrorProxy":[53644],"IRouter":[53951],"MirrorProxy":[54377],"Proxy":[41489]},"nodeType":"SourceUnit","src":"39:503:80","nodes":[{"id":54341,"nodeType":"PragmaDirective","src":"39:24:80","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":54343,"nodeType":"ImportDirective","src":"65:62:80","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol","file":"@openzeppelin/contracts/proxy/Proxy.sol","nameLocation":"-1:-1:-1","scope":54378,"sourceUnit":41490,"symbolAliases":[{"foreign":{"id":54342,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41489,"src":"73:5:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54345,"nodeType":"ImportDirective","src":"128:48:80","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":54378,"sourceUnit":53645,"symbolAliases":[{"foreign":{"id":54344,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53644,"src":"136:12:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54347,"nodeType":"ImportDirective","src":"177:38:80","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":54378,"sourceUnit":53952,"symbolAliases":[{"foreign":{"id":54346,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"185:7:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54377,"nodeType":"ContractDefinition","src":"259:282:80","nodes":[{"id":54353,"nodeType":"VariableDeclaration","src":"309:31:80","nodes":[],"baseFunctions":[53643],"constant":false,"functionSelector":"f887ea40","mutability":"immutable","name":"router","nameLocation":"334:6:80","scope":54377,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54352,"name":"address","nodeType":"ElementaryTypeName","src":"309:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":54363,"nodeType":"FunctionDefinition","src":"347:62:80","nodes":[],"body":{"id":54362,"nodeType":"Block","src":"376:33:80","nodes":[],"statements":[{"expression":{"id":54360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54358,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54353,"src":"386:6:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54359,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54355,"src":"395:7:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"386:16:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54361,"nodeType":"ExpressionStatement","src":"386:16:80"}]},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":54356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54355,"mutability":"mutable","name":"_router","nameLocation":"367:7:80","nodeType":"VariableDeclaration","scope":54363,"src":"359:15:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54354,"name":"address","nodeType":"ElementaryTypeName","src":"359:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"358:17:80"},"returnParameters":{"id":54357,"nodeType":"ParameterList","parameters":[],"src":"376:0:80"},"scope":54377,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54376,"nodeType":"FunctionDefinition","src":"415:124:80","nodes":[],"body":{"id":54375,"nodeType":"Block","src":"491:48:80","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":54370,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54353,"src":"516:6:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54369,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"508:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:15:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"524:6:80","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53820,"src":"508:22:80","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":54373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"508:24:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54368,"id":54374,"nodeType":"Return","src":"501:31:80"}]},"baseFunctions":[41470],"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"424:15:80","overrides":{"id":54365,"nodeType":"OverrideSpecifier","overrides":[],"src":"464:8:80"},"parameters":{"id":54364,"nodeType":"ParameterList","parameters":[],"src":"439:2:80"},"returnParameters":{"id":54368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54376,"src":"482:7:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54366,"name":"address","nodeType":"ElementaryTypeName","src":"482:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"481:9:80"},"scope":54377,"stateMutability":"view","virtual":true,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":54348,"name":"IMirrorProxy","nameLocations":["283:12:80"],"nodeType":"IdentifierPath","referencedDeclaration":53644,"src":"283:12:80"},"id":54349,"nodeType":"InheritanceSpecifier","src":"283:12:80"},{"baseName":{"id":54350,"name":"Proxy","nameLocations":["297:5:80"],"nodeType":"IdentifierPath","referencedDeclaration":41489,"src":"297:5:80"},"id":54351,"nodeType":"InheritanceSpecifier","src":"297:5:80"}],"canonicalName":"MirrorProxy","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[54377,41489,53644],"name":"MirrorProxy","nameLocation":"268:11:80","scope":54378,"usedErrors":[],"usedEvents":[]}],"license":"UNLICENSED"},"id":80} \ No newline at end of file diff --git a/ethexe/ethereum/Router.json b/ethexe/ethereum/Router.json index ef43e63ce49..4cf3b4d7aed 100644 --- a/ethexe/ethereum/Router.json +++ b/ethexe/ethereum/Router.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"baseFee","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"baseWeight","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"codeState","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum IRouter.CodeState"}],"stateMutability":"view"},{"type":"function","name":"commitBlocks","inputs":[{"name":"blockCommitmentsArray","type":"tuple[]","internalType":"struct IRouter.BlockCommitment[]","components":[{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"prevCommitmentHash","type":"bytes32","internalType":"bytes32"},{"name":"predBlockHash","type":"bytes32","internalType":"bytes32"},{"name":"transitions","type":"tuple[]","internalType":"struct IRouter.StateTransition[]","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueClaims","type":"tuple[]","internalType":"struct IRouter.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct IRouter.OutgoingMessage[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct IRouter.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]}]}]}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitCodes","inputs":[{"name":"codeCommitmentsArray","type":"tuple[]","internalType":"struct IRouter.CodeCommitment[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"valid","type":"bool","internalType":"bool"}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createProgram","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"payable"},{"type":"function","name":"genesisBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStorageSlot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_mirror","type":"address","internalType":"address"},{"name":"_mirrorProxy","type":"address","internalType":"address"},{"name":"_wrappedVara","type":"address","internalType":"address"},{"name":"_validatorsKeys","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastBlockCommitmentHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"mirror","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mirrorProxy","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"programCodeId","inputs":[{"name":"program","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"programsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestCodeValidation","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setBaseWeight","inputs":[{"name":"_baseWeight","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMirror","inputs":[{"name":"_mirror","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStorageSlot","inputs":[{"name":"namespace","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValuePerWeight","inputs":[{"name":"_valuePerWeight","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signingThresholdPercentage","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateValidators","inputs":[{"name":"validatorsAddressArray","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatedCodesCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorExists","inputs":[{"name":"validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"validators","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"validatorsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"valuePerWeight","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"wrappedVara","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"BaseWeightChanged","inputs":[{"name":"baseWeight","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"BlockCommitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CodeGotValidated","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"valid","type":"bool","indexed":true,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CodeValidationRequested","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProgramCreated","inputs":[{"name":"actorId","type":"address","indexed":false,"internalType":"address"},{"name":"codeId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StorageSlotChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValidatorsSetChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValuePerWeightChanged","inputs":[{"name":"valuePerWeight","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b60405161289590816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe610200806040526004361015610013575f80fd5b5f6101e0525f3560e01c9081627a32e714611f71575080630834fecc14611f3a5780631c149d8a14611df257806328e24b3d14611dc85780632dacfb6914611d9b5780633d43b41814611d49578063444d917214611d115780635686cad514611c5f5780636c2eb35014611a485780636ef25c3a14611a1d578063715018a6146119b657806378ee5dec1461197e5780638028861a146119015780638074b4551461158557806388f50cf01461154a5780638da5cb5b146115135780638febbd59146114c65780639067088e1461147e578063967082261461145257806396a2ddfa14611422578063a6bbbe1c14611372578063c13911e814611326578063ca1e7819146112a9578063d3fd636414611270578063e71731e41461115e578063e97d3eb314610f0f578063ed612f8c14610edf578063edc8722514610eba578063efd81abc14610e8a578063f2fde38b14610e66578063f8453e7c14610b585763fa97ed6d14610181575f80fd5b34610521576040366003190112610521576004356001600160401b038111610521576101b190369060040161202b565b906024356001600160401b038111610521576101d190369060040161202b565b6101e051606060a052909391925b82821015610b3c57600582901b8101359236829003607e19018412156105215760045f805160206128208339815191525401608052608051546020858401013503610af8576102336040858401013561262e565b15610aa7576101e0516101c0526060958285018701955b610256878786016125ce565b90506101c0511015610a125761026e878786016125ce565b9060e0526101c0511015610536576101c05160051b60e051013560c052609e1960e05136030160c0511215610521575f80516020612820833981519152546102bb60c05160e05101612671565b6001600160a01b03165f908152600b82016020526040902054156109b55760206001600160801b0391600360018060a01b0391015416604461030260c05160e05101612671565b610314604060c05160e0510101612685565b60405163a9059cbb60e01b81526001600160a01b0390921660048301529490941660248501526101e05184928391905af1801561052857610989575b5060c05160e0516001600160a01b039161036a9101612671565b166101a0526101e051606061016081905260c05160e0510101610140525b61039b6101405160c05160e05101612699565b9050811015610550576103b76101405160c05160e05101612699565b9061018052811015610536576103d7602060608302610180510101612671565b6040606083026101805101019061047a6103f083612685565b6040519060208201936060870261018051013585526001600160601b03199060601b1660408301526001600160801b03199060801b1660548201526044815261043a606482611fb1565b60206040519384926101605151808461016051018587015e840190838201906101e0518252519283915e01016101e051815203601f198101835282611fb1565b6101605261049b610495602060608502610180510101612671565b91612685565b6101a0513b15610521576040516314503e5160e01b81526101805160608502013560048201526001600160a01b0390921660248301526001600160801b031660448201526101e0516101a0518290606490829084905af1801561052857610506575b50600101610388565b6101e05161051391611fb1565b6101e051610521575f6104fd565b6101e05180fd5b6040513d6101e051823e3d90fd5b634e487b7160e01b6101e05152603260045260246101e051fd5b50909195929394956101e051610100526060610100526101e0515b60c05160e051610580910160808101906125ce565b90508110156108715760c05160e05161059e910160808101906125ce565b821015610536578160051b8101356101205260be1981360301610120511215610521576106906105d5602061012051840101612671565b605461068460346105f3604061012051880101610120518801612417565b93906106066060610120518a0101612685565b61061760a0610120518b01016126ce565b86604051978894602086019a8d6101205101358c526001600160601b03199060601b166040870152868601378301916001600160801b03199060801b16848301526080610120518b010135606483015263ffffffff60e01b16608482015203016014810184520182611fb1565b519020610100516121a2565b6101005261012051810160800135610779576106b3602061012051830101612671565b610120516106c79083016040810190612417565b90916106da606061012051860101612685565b926101a0513b156105215760405163c2df600960e01b8152610120519095013560048601526001600160a01b039091166024850152608060448501526001600160801b039161072e91608486019190612182565b9116606483015281806101e0519203816101e0516101a0515af180156105285761075e575b506001905b0161056b565b6101e05161076b91611fb1565b6101e051610521575f610753565b61078a602061012051830101612671565b906107a2604061012051830101610120518301612417565b6107b3606061012051850101612685565b926107c560a0610120518301016126ce565b926101a0513b156105215760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701526080926001600160801b039161080e9160a4890191612182565b9416604486015261012051010135606484015263ffffffff60e01b16608483015281806101e0519203816101e0516101a0515af1801561052857610856575b50600190610758565b6101e05161086391611fb1565b6101e051610521575f61084d565b5091909695949392956101a0513b1561052157604051638ea59e1d60e01b8152602060c05160e05101013560048201526101e051816024816101e0516101a0515af180156105285761096e575b5061095d906108d260c05160e05101612671565b6108e4604060c05160e0510101612685565b6101605151602061016051012061010051516020610100510120906040519260208401946001600160601b03199060601b168552602060c05160e05101013560348501526001600160801b03199060801b166054840152606483015260848201526084815261095460a482611fb1565b519020906121a2565b9660016101c051016101c05261024a565b6101e05161097b91611fb1565b6101e051610521575f6108be565b6109a99060203d81116109ae575b6109a18183611fb1565b8101906123ff565b610350565b503d610997565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9391966001939650610a999195808801359182608051557fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a1602081519101206040805192602084019485526020818c010135828501528a0101356060830152608082015260808152610a8e60a082611fb1565b51902060a0516121a2565b60a0520190929391936101df565b60405162461bcd60e51b815260206004820152602360248201527f616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f696e76616c69642070726576696f757320636f6d6d69746d656e7420686173686044820152fd5b610b51858560a05151602060a0510120612449565b6101e05180f35b346105215760a036600319011261052157610b71611f9b565b602435906001600160a01b038216820361052157604435916001600160a01b038316830361052157606435926001600160a01b0384168403610521576084356001600160401b038111610521573660238201121561052157610bdd90369060248160040135910161205b565b905f805160206128408339815191525460ff8160401c1615946001600160401b03821680159081610e5e575b6001149081610e54575b159081610e4b575b50610e365767ffffffffffffffff1982166001175f8051602061284083398151915255610c5e9186610e0a575b50610c51612603565b610c59612603565b61221a565b6040948551610c6d8782611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256310000000000000000008252610ca161228b565b5190205f198101908111610df0578651906020820190815260208252610cc78883611fb1565b60ff19915190201690815f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc6101e0516101e051a15f19430192438411610df057924082556001820180546001600160a01b03199081166001600160a01b03978816179091556002830180548216948716949094179093556003820180549093169416939093179055611a0a60058301556006919091018054680a000000009502f9006001600160c01b0319909116179055610d90906122be565b610d9b576101e05180f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160018152a180610b51565b634e487b7160e01b6101e05152601160045260246101e051fd5b68ffffffffffffffffff191668010000000000000001175f805160206128408339815191525587610c48565b63f92ee8a960e01b6101e0515260046101e051fd5b90501588610c1b565b303b159150610c13565b879150610c09565b3461052157602036600319011261052157610b51610e82611f9b565b610c5961228b565b34610521576101e05136600319011261052157602060055f80516020612820833981519152540154604051908152f35b34610521576101e051366003190112610521576020610ed76121dc565b604051908152f35b34610521576101e05136600319011261052157602060085f80516020612820833981519152540154604051908152f35b34610521576040366003190112610521576004356001600160401b0381116105215736602382011215610521578060040135906001600160401b038211610521573660248360061b83010111610521576024356001600160401b03811161052157610f7f8391369060040161202b565b5f80516020612820833981519152546101e0519460098201939192909160605b8688101561114d576101e051508760061b840197610fed604460248b01359a0192610fc9846121cf565b60405160208101918d8352151560f81b604082015260218152610954604182611fb1565b98806101e051528760205260ff60406101e0512054166003811015611133576001036110de5761101e6001936121cf565b1561108c577f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208285936101e051528a825260406101e051206101e051506101e05150600260ff19825416179055600a8a0161107b8154612174565b9055604051908152a25b0196610f9f565b806101e051528760205260406101e0512080546101e0515060ff191690556040519081527f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960206101e05192a2611085565b60405162461bcd60e51b815260206004820152602760248201527f636f64652073686f756c642062652072657175657374656420666f722076616c60448201526634b230ba34b7b760c91b6064820152608490fd5b634e487b7160e01b6101e05152602160045260246101e051fd5b610b51935060208151910120612449565b34610521576020366003190112610521576004356001600160401b0381116105215761118e90369060040161202b565b61119661228b565b5f80516020612820833981519152546101e0516007820191600801905b81548110156111f3576101e08051839052516020908190208201546001600160a01b03165f9081529084905260409020805460ff191690556001016111b3565b506101e0518154908255915081611249575b61121861121336858761205b565b6122be565b7f144bbc027dc176e94c43b7c1bcff2a8aa58ab434029eec294743cd4ab2e54f516101e0516101e051a16101e05180f35b6101e0515260206101e05120908101905b81811015611205576101e051815560010161125a565b34610521576101e0513660031901126105215760206001600160401b0360065f8051602061282083398151915254015416604051908152f35b34610521576101e051366003190112610521576112d660085f8051602061282083398151915254016120bf565b6040518091602082016020835281518091526020604084019201906101e0515b818110611304575050500390f35b82516001600160a01b03168452859450602093840193909201916001016112f6565b346105215760203660031901126105215760095f8051602061282083398151915254016004356101e0515260205260ff60406101e0512054166040516003821015611133576020918152f35b34610521576020366003190112610521576004356001600160801b03811690818103610521577f9f5e1796f1a0adf311f86170503308a06a16560a7679b7b6da35f4999200d740916020916113c561228b565b5f8051602061282083398151915254600601805477ffffffffffffffffffffffffffffffff00000000000000001916604092831b77ffffffffffffffffffffffffffffffff00000000000000001617905551908152a16101e05180f35b34610521576101e051366003190112610521576020600c5f80516020612820833981519152540154604051908152f35b34610521576101e0513660031901126105215760205f8051602061282083398151915254604051908152f35b3461052157602036600319011261052157611497611f9b565b600b5f8051602061282083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b34610521576020366003190112610521576114df611f9b565b60075f8051602061282083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610521576101e051366003190112610521575f80516020612800833981519152546040516001600160a01b039091168152602090f35b34610521576101e051366003190112610521575f8051602061282083398151915254600301546040516001600160a01b039091168152602090f35b6080366003190112611806576044356004356001600160401b0382116118065736602383011215611806578160040135916001600160401b03831161180657366024848301011161180657606435906001600160801b03821693848303611806575f805160206128208339815191525493805f526009850160205260ff60405f20541660038110156118ed5760020361189157611620612112565b600a6001600160801b03821602946001600160801b03861695860361187d5761164c8661165193612154565b612154565b60038601546040516323b872dd60e01b81523260048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af19081156117fb575f9161185e575b50156118195760028501546e5af43d82803e903d91602b57fd5bf360405160208101908482526024356040820152604081526116e2606082611fb1565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b161760205260018060a01b0390603760095ff51694851561180a57600c90865f52600b81016020528260405f2055016117588154612174565b90557f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf16020604051878152a2833b15611806576117bd945f9360405196879485946306f0ee9760e51b8652326004870152608060248701526024608487019201612182565b9160448401526064830152038183855af19182156117fb576020926117e6575b50604051908152f35b5f6117f091611fb1565b5f6101e052826117dd565b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611877915060203d6020116109ae576109a18183611fb1565b876116a5565b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b34611806576020366003190112611806576004356001600160401b0381168091036118065760207f01326573cfc0bc40a2550923254394ebd7529e3e3301840dfa33cf786aead0c79161195261228b565b5f8051602061282083398151915254600601805467ffffffffffffffff191682179055604051908152a1005b34611806575f366003190112611806575f8051602061282083398151915254600201546040516001600160a01b039091168152602090f35b34611806575f366003190112611806576119ce61228b565b5f8051602061280083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34611806575f366003190112611806576020611a37612112565b6001600160801b0360405191168152f35b34611806575f36600319011261180657611a6061228b565b5f805160206128408339815191525460ff8160401c168015611c4b575b611c3c5768ffffffffffffffffff191668010000000000000002175f80516020612840833981519152555f80516020612820833981519152546001810154600282015460038301546001600160a01b0390811693918116921690611ae3906008016120bf565b906040918251611af38482611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252611b2761228b565b5190205f19810190811161187d578351906020820190815260208252611b4d8583611fb1565b60ff19915190201694855f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f19430143811161187d574086556001860180546001600160a01b03199081166001600160a01b03958616179091556002870180548216968516969096179095556003909501805490941694909116939093179091557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160209190611c0f906122be565b60ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160028152a1005b63f92ee8a960e01b5f5260045ffd5b5060026001600160401b0382161015611a7d565b34611806576020366003190112611806576004356001600160401b038111611806573660238201121561180657611ca0903690602481600401359101611fe6565b611ca861228b565b602081519101205f19810190811161187d57604051906020820190815260208252611cd4604083611fb1565b9051902060ff19165f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a1005b34611806575f366003190112611806575f8051602061282083398151915254600101546040516001600160a01b039091168152602090f35b3461180657602036600319011261180657611d62611f9b565b611d6a61228b565b5f805160206128208339815191525460010180546001600160a01b0319166001600160a01b03909216919091179055005b34611806575f36600319011261180657602060045f80516020612820833981519152540154604051908152f35b34611806575f3660031901126118065760205f805160206128208339815191525454604051908152f35b34611806576040366003190112611806576024356004358115801590611f30575b15611eeb5760095f80516020612820833981519152540190805f528160205260ff60405f20541660038110156118ed57611e8d577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603060248201527f636f64652077697468207375636820696420616c72656164792072657175657360448201526f1d1959081bdc881d985b1a59185d195960821b6064820152608490fd5b60405162461bcd60e51b815260206004820152601c60248201527f626c6f6254784861736820636f756c646e277420626520666f756e64000000006044820152606490fd5b505f491515611e13565b34611806575f366003190112611806576020611a376001600160801b0360065f8051602061282083398151915254015460401c1690565b34611806575f36600319011261180657602090600a5f805160206128208339815191525401548152f35b600435906001600160a01b038216820361180657565b90601f801991011681019081106001600160401b03821117611fd257604052565b634e487b7160e01b5f52604160045260245ffd5b9291926001600160401b038211611fd2576040519161200f601f8201601f191660200184611fb1565b829481845281830111611806578281602093845f960137010152565b9181601f84011215611806578235916001600160401b038311611806576020808501948460051b01011161180657565b9092916001600160401b038411611fd2578360051b91602060405161208282860182611fb1565b809681520192810191821161180657915b81831061209f57505050565b82356001600160a01b038116810361180657815260209283019201612093565b90604051918281549182825260208201905f5260205f20925f5b8181106120f05750506120ee92500383611fb1565b565b84546001600160a01b03168352600194850194879450602090930192016120d9565b5f8051602061282083398151915254600601546001600160401b038116906001600160801b039060401c811616026001600160801b03811690810361187d5790565b906001600160801b03809116911601906001600160801b03821161187d57565b5f19811461187d5760010190565b908060209392818452848401375f828201840152601f01601f1916010190565b6020806120ee928195946040519682889351918291018585015e8201908382015203018085520183611fb1565b3580151581036118065790565b5f8051602061282083398151915254600560088201549101549081810291818304149015171561187d5761270f810180911161187d57612710900490565b6001600160a01b03168015612278575f8051602061280083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f80516020612800833981519152546001600160a01b031633036122ab57565b63118cdaa760e01b5f523360045260245ffd5b5f805160206128208339815191525490600882019081546123ae579091600701905f5b815181101561232057600581901b82016020908101516001600160a01b03165f9081529084905260409020805460ff19166001908117909155016122e1565b5080519291506001600160401b038311611fd257680100000000000000008311611fd2578154838355808410612388575b50602001905f5260205f205f5b83811061236b5750505050565b82516001600160a01b03168183015560209092019160010161235e565b825f528360205f2091820191015b8181106123a35750612351565b5f8155600101612396565b60405162461bcd60e51b815260206004820152602360248201527f70726576696f75732076616c696461746f727320776572656e27742072656d6f6044820152621d995960ea1b6064820152608490fd5b90816020910312611806575180151581036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191813603831361180657565b905f8051602061282083398151915254906124626121dc565b9260405190602082019081526020825261247d604083611fb1565b6124b9603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282611fb1565b5190205f9260070191835b868510156125c2576124fa6124f16124eb6124e48860051b860186612417565b3691611fe6565b856126e3565b9092919261271d565b6001600160a01b03165f9081526020859052604090205460ff16156125875761252290612174565b9385851461253357600101936124c4565b505050509091505b1061254257565b60405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f7567682076616c6964207369676e61747572657300000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606490fd5b9495505050505061253b565b903590601e198136030182121561180657018035906001600160401b03821161180657602001918160051b3603831361180657565b60ff5f805160206128408339815191525460401c161561261f57565b631afcd79f60e31b5f5260045ffd5b905f19430143811161187d57805b612647575b505f9150565b804083810361265857506001925050565b1561266c57801561187d575f19018061263c565b612641565b356001600160a01b03811681036118065790565b356001600160801b03811681036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191606082023603831361180657565b356001600160e01b0319811681036118065790565b81519190604183036127135761270c9250602082015190606060408401519301515f1a9061277d565b9192909190565b50505f9160029190565b60048110156118ed578061272f575050565b600181036127465763f645eedf60e01b5f5260045ffd5b60028103612761575063fce698f760e01b5f5260045260245ffd5b60031461276b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116127f4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156117fb575f516001600160a01b038116156127ea57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220d97d988e5debbb0caed497bc3e4db936acd49450c96dfd5737459b9e1738bc3e64736f6c634300081a0033","sourceMap":"781:16427:81:-:0;;;;;;;8837:64:25;781:16427:81;;;;;;7896:76:25;;-1:-1:-1;;;;;;;;;;;781:16427:81;;7985:34:25;7981:146;;-1:-1:-1;781:16427:81;;;;;;;;;7981:146:25;-1:-1:-1;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;;;8837:64:25;781:16427:81;;;8087:29:25;;781:16427:81;;8087:29:25;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:25;;-1:-1:-1;7938:23:25;781:16427:81;;;","linkReferences":{}},"deployedBytecode":{"object":"0x610200806040526004361015610013575f80fd5b5f6101e0525f3560e01c9081627a32e714611f71575080630834fecc14611f3a5780631c149d8a14611df257806328e24b3d14611dc85780632dacfb6914611d9b5780633d43b41814611d49578063444d917214611d115780635686cad514611c5f5780636c2eb35014611a485780636ef25c3a14611a1d578063715018a6146119b657806378ee5dec1461197e5780638028861a146119015780638074b4551461158557806388f50cf01461154a5780638da5cb5b146115135780638febbd59146114c65780639067088e1461147e578063967082261461145257806396a2ddfa14611422578063a6bbbe1c14611372578063c13911e814611326578063ca1e7819146112a9578063d3fd636414611270578063e71731e41461115e578063e97d3eb314610f0f578063ed612f8c14610edf578063edc8722514610eba578063efd81abc14610e8a578063f2fde38b14610e66578063f8453e7c14610b585763fa97ed6d14610181575f80fd5b34610521576040366003190112610521576004356001600160401b038111610521576101b190369060040161202b565b906024356001600160401b038111610521576101d190369060040161202b565b6101e051606060a052909391925b82821015610b3c57600582901b8101359236829003607e19018412156105215760045f805160206128208339815191525401608052608051546020858401013503610af8576102336040858401013561262e565b15610aa7576101e0516101c0526060958285018701955b610256878786016125ce565b90506101c0511015610a125761026e878786016125ce565b9060e0526101c0511015610536576101c05160051b60e051013560c052609e1960e05136030160c0511215610521575f80516020612820833981519152546102bb60c05160e05101612671565b6001600160a01b03165f908152600b82016020526040902054156109b55760206001600160801b0391600360018060a01b0391015416604461030260c05160e05101612671565b610314604060c05160e0510101612685565b60405163a9059cbb60e01b81526001600160a01b0390921660048301529490941660248501526101e05184928391905af1801561052857610989575b5060c05160e0516001600160a01b039161036a9101612671565b166101a0526101e051606061016081905260c05160e0510101610140525b61039b6101405160c05160e05101612699565b9050811015610550576103b76101405160c05160e05101612699565b9061018052811015610536576103d7602060608302610180510101612671565b6040606083026101805101019061047a6103f083612685565b6040519060208201936060870261018051013585526001600160601b03199060601b1660408301526001600160801b03199060801b1660548201526044815261043a606482611fb1565b60206040519384926101605151808461016051018587015e840190838201906101e0518252519283915e01016101e051815203601f198101835282611fb1565b6101605261049b610495602060608502610180510101612671565b91612685565b6101a0513b15610521576040516314503e5160e01b81526101805160608502013560048201526001600160a01b0390921660248301526001600160801b031660448201526101e0516101a0518290606490829084905af1801561052857610506575b50600101610388565b6101e05161051391611fb1565b6101e051610521575f6104fd565b6101e05180fd5b6040513d6101e051823e3d90fd5b634e487b7160e01b6101e05152603260045260246101e051fd5b50909195929394956101e051610100526060610100526101e0515b60c05160e051610580910160808101906125ce565b90508110156108715760c05160e05161059e910160808101906125ce565b821015610536578160051b8101356101205260be1981360301610120511215610521576106906105d5602061012051840101612671565b605461068460346105f3604061012051880101610120518801612417565b93906106066060610120518a0101612685565b61061760a0610120518b01016126ce565b86604051978894602086019a8d6101205101358c526001600160601b03199060601b166040870152868601378301916001600160801b03199060801b16848301526080610120518b010135606483015263ffffffff60e01b16608482015203016014810184520182611fb1565b519020610100516121a2565b6101005261012051810160800135610779576106b3602061012051830101612671565b610120516106c79083016040810190612417565b90916106da606061012051860101612685565b926101a0513b156105215760405163c2df600960e01b8152610120519095013560048601526001600160a01b039091166024850152608060448501526001600160801b039161072e91608486019190612182565b9116606483015281806101e0519203816101e0516101a0515af180156105285761075e575b506001905b0161056b565b6101e05161076b91611fb1565b6101e051610521575f610753565b61078a602061012051830101612671565b906107a2604061012051830101610120518301612417565b6107b3606061012051850101612685565b926107c560a0610120518301016126ce565b926101a0513b156105215760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701526080926001600160801b039161080e9160a4890191612182565b9416604486015261012051010135606484015263ffffffff60e01b16608483015281806101e0519203816101e0516101a0515af1801561052857610856575b50600190610758565b6101e05161086391611fb1565b6101e051610521575f61084d565b5091909695949392956101a0513b1561052157604051638ea59e1d60e01b8152602060c05160e05101013560048201526101e051816024816101e0516101a0515af180156105285761096e575b5061095d906108d260c05160e05101612671565b6108e4604060c05160e0510101612685565b6101605151602061016051012061010051516020610100510120906040519260208401946001600160601b03199060601b168552602060c05160e05101013560348501526001600160801b03199060801b166054840152606483015260848201526084815261095460a482611fb1565b519020906121a2565b9660016101c051016101c05261024a565b6101e05161097b91611fb1565b6101e051610521575f6108be565b6109a99060203d81116109ae575b6109a18183611fb1565b8101906123ff565b610350565b503d610997565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9391966001939650610a999195808801359182608051557fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a1602081519101206040805192602084019485526020818c010135828501528a0101356060830152608082015260808152610a8e60a082611fb1565b51902060a0516121a2565b60a0520190929391936101df565b60405162461bcd60e51b815260206004820152602360248201527f616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f696e76616c69642070726576696f757320636f6d6d69746d656e7420686173686044820152fd5b610b51858560a05151602060a0510120612449565b6101e05180f35b346105215760a036600319011261052157610b71611f9b565b602435906001600160a01b038216820361052157604435916001600160a01b038316830361052157606435926001600160a01b0384168403610521576084356001600160401b038111610521573660238201121561052157610bdd90369060248160040135910161205b565b905f805160206128408339815191525460ff8160401c1615946001600160401b03821680159081610e5e575b6001149081610e54575b159081610e4b575b50610e365767ffffffffffffffff1982166001175f8051602061284083398151915255610c5e9186610e0a575b50610c51612603565b610c59612603565b61221a565b6040948551610c6d8782611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256310000000000000000008252610ca161228b565b5190205f198101908111610df0578651906020820190815260208252610cc78883611fb1565b60ff19915190201690815f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc6101e0516101e051a15f19430192438411610df057924082556001820180546001600160a01b03199081166001600160a01b03978816179091556002830180548216948716949094179093556003820180549093169416939093179055611a0a60058301556006919091018054680a000000009502f9006001600160c01b0319909116179055610d90906122be565b610d9b576101e05180f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160018152a180610b51565b634e487b7160e01b6101e05152601160045260246101e051fd5b68ffffffffffffffffff191668010000000000000001175f805160206128408339815191525587610c48565b63f92ee8a960e01b6101e0515260046101e051fd5b90501588610c1b565b303b159150610c13565b879150610c09565b3461052157602036600319011261052157610b51610e82611f9b565b610c5961228b565b34610521576101e05136600319011261052157602060055f80516020612820833981519152540154604051908152f35b34610521576101e051366003190112610521576020610ed76121dc565b604051908152f35b34610521576101e05136600319011261052157602060085f80516020612820833981519152540154604051908152f35b34610521576040366003190112610521576004356001600160401b0381116105215736602382011215610521578060040135906001600160401b038211610521573660248360061b83010111610521576024356001600160401b03811161052157610f7f8391369060040161202b565b5f80516020612820833981519152546101e0519460098201939192909160605b8688101561114d576101e051508760061b840197610fed604460248b01359a0192610fc9846121cf565b60405160208101918d8352151560f81b604082015260218152610954604182611fb1565b98806101e051528760205260ff60406101e0512054166003811015611133576001036110de5761101e6001936121cf565b1561108c577f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208285936101e051528a825260406101e051206101e051506101e05150600260ff19825416179055600a8a0161107b8154612174565b9055604051908152a25b0196610f9f565b806101e051528760205260406101e0512080546101e0515060ff191690556040519081527f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960206101e05192a2611085565b60405162461bcd60e51b815260206004820152602760248201527f636f64652073686f756c642062652072657175657374656420666f722076616c60448201526634b230ba34b7b760c91b6064820152608490fd5b634e487b7160e01b6101e05152602160045260246101e051fd5b610b51935060208151910120612449565b34610521576020366003190112610521576004356001600160401b0381116105215761118e90369060040161202b565b61119661228b565b5f80516020612820833981519152546101e0516007820191600801905b81548110156111f3576101e08051839052516020908190208201546001600160a01b03165f9081529084905260409020805460ff191690556001016111b3565b506101e0518154908255915081611249575b61121861121336858761205b565b6122be565b7f144bbc027dc176e94c43b7c1bcff2a8aa58ab434029eec294743cd4ab2e54f516101e0516101e051a16101e05180f35b6101e0515260206101e05120908101905b81811015611205576101e051815560010161125a565b34610521576101e0513660031901126105215760206001600160401b0360065f8051602061282083398151915254015416604051908152f35b34610521576101e051366003190112610521576112d660085f8051602061282083398151915254016120bf565b6040518091602082016020835281518091526020604084019201906101e0515b818110611304575050500390f35b82516001600160a01b03168452859450602093840193909201916001016112f6565b346105215760203660031901126105215760095f8051602061282083398151915254016004356101e0515260205260ff60406101e0512054166040516003821015611133576020918152f35b34610521576020366003190112610521576004356001600160801b03811690818103610521577f9f5e1796f1a0adf311f86170503308a06a16560a7679b7b6da35f4999200d740916020916113c561228b565b5f8051602061282083398151915254600601805477ffffffffffffffffffffffffffffffff00000000000000001916604092831b77ffffffffffffffffffffffffffffffff00000000000000001617905551908152a16101e05180f35b34610521576101e051366003190112610521576020600c5f80516020612820833981519152540154604051908152f35b34610521576101e0513660031901126105215760205f8051602061282083398151915254604051908152f35b3461052157602036600319011261052157611497611f9b565b600b5f8051602061282083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b34610521576020366003190112610521576114df611f9b565b60075f8051602061282083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610521576101e051366003190112610521575f80516020612800833981519152546040516001600160a01b039091168152602090f35b34610521576101e051366003190112610521575f8051602061282083398151915254600301546040516001600160a01b039091168152602090f35b6080366003190112611806576044356004356001600160401b0382116118065736602383011215611806578160040135916001600160401b03831161180657366024848301011161180657606435906001600160801b03821693848303611806575f805160206128208339815191525493805f526009850160205260ff60405f20541660038110156118ed5760020361189157611620612112565b600a6001600160801b03821602946001600160801b03861695860361187d5761164c8661165193612154565b612154565b60038601546040516323b872dd60e01b81523260048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af19081156117fb575f9161185e575b50156118195760028501546e5af43d82803e903d91602b57fd5bf360405160208101908482526024356040820152604081526116e2606082611fb1565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b161760205260018060a01b0390603760095ff51694851561180a57600c90865f52600b81016020528260405f2055016117588154612174565b90557f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf16020604051878152a2833b15611806576117bd945f9360405196879485946306f0ee9760e51b8652326004870152608060248701526024608487019201612182565b9160448401526064830152038183855af19182156117fb576020926117e6575b50604051908152f35b5f6117f091611fb1565b5f6101e052826117dd565b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611877915060203d6020116109ae576109a18183611fb1565b876116a5565b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b34611806576020366003190112611806576004356001600160401b0381168091036118065760207f01326573cfc0bc40a2550923254394ebd7529e3e3301840dfa33cf786aead0c79161195261228b565b5f8051602061282083398151915254600601805467ffffffffffffffff191682179055604051908152a1005b34611806575f366003190112611806575f8051602061282083398151915254600201546040516001600160a01b039091168152602090f35b34611806575f366003190112611806576119ce61228b565b5f8051602061280083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34611806575f366003190112611806576020611a37612112565b6001600160801b0360405191168152f35b34611806575f36600319011261180657611a6061228b565b5f805160206128408339815191525460ff8160401c168015611c4b575b611c3c5768ffffffffffffffffff191668010000000000000002175f80516020612840833981519152555f80516020612820833981519152546001810154600282015460038301546001600160a01b0390811693918116921690611ae3906008016120bf565b906040918251611af38482611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252611b2761228b565b5190205f19810190811161187d578351906020820190815260208252611b4d8583611fb1565b60ff19915190201694855f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f19430143811161187d574086556001860180546001600160a01b03199081166001600160a01b03958616179091556002870180548216968516969096179095556003909501805490941694909116939093179091557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160209190611c0f906122be565b60ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160028152a1005b63f92ee8a960e01b5f5260045ffd5b5060026001600160401b0382161015611a7d565b34611806576020366003190112611806576004356001600160401b038111611806573660238201121561180657611ca0903690602481600401359101611fe6565b611ca861228b565b602081519101205f19810190811161187d57604051906020820190815260208252611cd4604083611fb1565b9051902060ff19165f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a1005b34611806575f366003190112611806575f8051602061282083398151915254600101546040516001600160a01b039091168152602090f35b3461180657602036600319011261180657611d62611f9b565b611d6a61228b565b5f805160206128208339815191525460010180546001600160a01b0319166001600160a01b03909216919091179055005b34611806575f36600319011261180657602060045f80516020612820833981519152540154604051908152f35b34611806575f3660031901126118065760205f805160206128208339815191525454604051908152f35b34611806576040366003190112611806576024356004358115801590611f30575b15611eeb5760095f80516020612820833981519152540190805f528160205260ff60405f20541660038110156118ed57611e8d577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603060248201527f636f64652077697468207375636820696420616c72656164792072657175657360448201526f1d1959081bdc881d985b1a59185d195960821b6064820152608490fd5b60405162461bcd60e51b815260206004820152601c60248201527f626c6f6254784861736820636f756c646e277420626520666f756e64000000006044820152606490fd5b505f491515611e13565b34611806575f366003190112611806576020611a376001600160801b0360065f8051602061282083398151915254015460401c1690565b34611806575f36600319011261180657602090600a5f805160206128208339815191525401548152f35b600435906001600160a01b038216820361180657565b90601f801991011681019081106001600160401b03821117611fd257604052565b634e487b7160e01b5f52604160045260245ffd5b9291926001600160401b038211611fd2576040519161200f601f8201601f191660200184611fb1565b829481845281830111611806578281602093845f960137010152565b9181601f84011215611806578235916001600160401b038311611806576020808501948460051b01011161180657565b9092916001600160401b038411611fd2578360051b91602060405161208282860182611fb1565b809681520192810191821161180657915b81831061209f57505050565b82356001600160a01b038116810361180657815260209283019201612093565b90604051918281549182825260208201905f5260205f20925f5b8181106120f05750506120ee92500383611fb1565b565b84546001600160a01b03168352600194850194879450602090930192016120d9565b5f8051602061282083398151915254600601546001600160401b038116906001600160801b039060401c811616026001600160801b03811690810361187d5790565b906001600160801b03809116911601906001600160801b03821161187d57565b5f19811461187d5760010190565b908060209392818452848401375f828201840152601f01601f1916010190565b6020806120ee928195946040519682889351918291018585015e8201908382015203018085520183611fb1565b3580151581036118065790565b5f8051602061282083398151915254600560088201549101549081810291818304149015171561187d5761270f810180911161187d57612710900490565b6001600160a01b03168015612278575f8051602061280083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f80516020612800833981519152546001600160a01b031633036122ab57565b63118cdaa760e01b5f523360045260245ffd5b5f805160206128208339815191525490600882019081546123ae579091600701905f5b815181101561232057600581901b82016020908101516001600160a01b03165f9081529084905260409020805460ff19166001908117909155016122e1565b5080519291506001600160401b038311611fd257680100000000000000008311611fd2578154838355808410612388575b50602001905f5260205f205f5b83811061236b5750505050565b82516001600160a01b03168183015560209092019160010161235e565b825f528360205f2091820191015b8181106123a35750612351565b5f8155600101612396565b60405162461bcd60e51b815260206004820152602360248201527f70726576696f75732076616c696461746f727320776572656e27742072656d6f6044820152621d995960ea1b6064820152608490fd5b90816020910312611806575180151581036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191813603831361180657565b905f8051602061282083398151915254906124626121dc565b9260405190602082019081526020825261247d604083611fb1565b6124b9603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282611fb1565b5190205f9260070191835b868510156125c2576124fa6124f16124eb6124e48860051b860186612417565b3691611fe6565b856126e3565b9092919261271d565b6001600160a01b03165f9081526020859052604090205460ff16156125875761252290612174565b9385851461253357600101936124c4565b505050509091505b1061254257565b60405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f7567682076616c6964207369676e61747572657300000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606490fd5b9495505050505061253b565b903590601e198136030182121561180657018035906001600160401b03821161180657602001918160051b3603831361180657565b60ff5f805160206128408339815191525460401c161561261f57565b631afcd79f60e31b5f5260045ffd5b905f19430143811161187d57805b612647575b505f9150565b804083810361265857506001925050565b1561266c57801561187d575f19018061263c565b612641565b356001600160a01b03811681036118065790565b356001600160801b03811681036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191606082023603831361180657565b356001600160e01b0319811681036118065790565b81519190604183036127135761270c9250602082015190606060408401519301515f1a9061277d565b9192909190565b50505f9160029190565b60048110156118ed578061272f575050565b600181036127465763f645eedf60e01b5f5260045ffd5b60028103612761575063fce698f760e01b5f5260045260245ffd5b60031461276b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116127f4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156117fb575f516001600160a01b038116156127ea57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220d97d988e5debbb0caed497bc3e4db936acd49450c96dfd5737459b9e1738bc3e64736f6c634300081a0033","sourceMap":"781:16427:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;;;;9630:35;;781:16427;;;;9730:3;9696:32;;;;;;781:16427;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;11143:30;;;;;781:16427;;;;;11177:34;781:16427;11143:68;781:16427;;11275:49;781:16427;;;;11294:29;781:16427;11275:49;:::i;:::-;781:16427;;;;;11421:13;;781:16427;;;;;11440:27;;;11476:3;11440:27;781:16427;;;;11440:27;:::i;:::-;11436:38;;;;;;;;11538:27;781:16427;;;;11538:27;:::i;:::-;;;;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;12616:23;781:16427;;;;;12616:23;:::i;:::-;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;12600:15;;;781:16427;;;;;;12600:45;781:16427;;;-1:-1:-1;;;;;781:16427:81;12753:18;781:16427;;;;;12753:18;;781:16427;;;12808:23;781:16427;;;;;12808:23;:::i;:::-;12833:30;781:16427;;;;;;12833:30;;:::i;:::-;781:16427;;-1:-1:-1;;;12782:82:81;;-1:-1:-1;;;;;781:16427:81;;;;12782:82;;781:16427;;;;;;;;;;;;;;;;12782:82;;;;;;;;11476:3;-1:-1:-1;781:16427:81;;;;-1:-1:-1;;;;;781:16427:81;12905:23;;781:16427;12905:23;:::i;:::-;781:16427;;;;;;12940:29;;;;781:16427;;;;;13004:27;;;13040:3;13004:27;;;781:16427;;;;;13004:27;:::i;:::-;13000:38;;;;;;;13092:27;;;781:16427;;;;;13092:27;:::i;:::-;;;;781:16427;;;;;13243:22;781:16427;;;;;;;13243:22;;:::i;:::-;781:16427;;;;;;;13267:16;;781:16427;13267:16;;;:::i;:::-;781:16427;;13204:80;781:16427;13204:80;;781:16427;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;13204:80;;;781:16427;13204:80;;:::i;:::-;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13204:80;;781:16427;;;;;;:::i;:::-;13137:161;;13384:16;13360:22;781:16427;;;;;;;13243:22;13360;:::i;:::-;13384:16;;:::i;:::-;13313:88;;;;;;781:16427;;-1:-1:-1;;;13313:88:81;;781:16427;;;;;;;;13313:88;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;13313:88;;781:16427;;;;;;;;13313:88;;;;;;;;13040:3;;781:16427;;12985:13;;13313:88;781:16427;;13313:88;;;:::i;:::-;781:16427;;;;13313:88;;;781:16427;;;;;13313:88;781:16427;;;;;;;;;;;;;;;;;;;;;;;;13000:38;;;;;;;;;781:16427;;13422:27;;781:16427;13422:27;;781:16427;;13517:3;781:16427;;;;13484:24;;781:16427;;13484:24;;;;:::i;:::-;13480:35;;;;;;;781:16427;;;;13579:24;;781:16427;;13484:24;;;13579;:::i;:::-;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;13638:67;15508:27;781:16427;;;;;15508:27;;:::i;:::-;781:16427;15438:291;781:16427;15553:23;781:16427;;;;;15553:23;781:16427;;;;15553:23;:::i;:::-;781:16427;;15594:21;781:16427;;;;;15594:21;;:::i;:::-;15682:33;14840:85;781:16427;;;;15682:33;;:::i;:::-;781:16427;;;15438:291;;;781:16427;15438:291;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;15633:28;781:16427;;;;;;;;;;;;;15438:291;;;;;;;;;;:::i;:::-;781:16427;15415:324;;13638:67;;;:::i;:::-;13621:84;;781:16427;;;;;15633:28;781:16427;;;13845:27;781:16427;;;;;15508:27;13845;:::i;:::-;781:16427;;13874:23;;781:16427;;;15553:23;;;13874;:::i;:::-;781:16427;;13899:21;781:16427;;;;;15594:21;13899;:::i;:::-;13780:158;;;;;;;781:16427;;-1:-1:-1;;;13780:158:81;;781:16427;;;;;;;13780:158;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;:::i;:::-;;;;;;;;;;;13780:158;;781:16427;;;13780:158;;;;;;;;;;13720:556;;781:16427;13720:556;;781:16427;13465:13;;13780:158;781:16427;;13780:158;;;:::i;:::-;781:16427;;;;13780:158;;;13720:556;14020:27;781:16427;;;;;15508:27;14020;:::i;:::-;781:16427;14069:23;781:16427;;;;;15553:23;781:16427;;;;14069:23;:::i;:::-;14114:21;781:16427;;;;;15594:21;14114;:::i;:::-;781:16427;14210:33;14840:85;781:16427;;;;15682:33;14210;:::i;:::-;13977:284;;;;;;;781:16427;;-1:-1:-1;;;13977:284:81;;-1:-1:-1;;;;;781:16427:81;;;;13977:284;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;15189:92;781:16427;;;;:::i;:::-;;;;;;;;;;15633:28;781:16427;;;;;;;;;;;;;;;;;13977:284;;781:16427;;;13977:284;;;;;;;;;;13720:556;;781:16427;13720:556;;;13977:284;781:16427;;13977:284;;;:::i;:::-;781:16427;;;;13977:284;;;13480:35;;;;;;;;;;14296:53;;;;;;781:16427;;;;;14296:53;;781:16427;;;;;;14320:28;781:16427;;14296:53;;781:16427;;;;;;;;14296:53;;;;;;;;;;13460:826;781:16427;11678:47;781:16427;14401:23;781:16427;;;;;14401:23;:::i;:::-;14480:30;781:16427;;;;;;12833:30;14480;:::i;:::-;14524:27;;781:16427;;14524:27;;781:16427;14524:27;14565:25;;781:16427;;14565:25;;781:16427;14565:25;781:16427;;;15189:92;781:16427;15189:92;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;14320:28;781:16427;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;15189:92;;;;;;:::i;:::-;781:16427;15179:103;;11678:47;;:::i;:::-;11476:3;781:16427;11476:3;;781:16427;11476:3;;11421:13;;14296:53;781:16427;;14296:53;;;:::i;:::-;781:16427;;;;14296:53;;;12782:82;;;781:16427;12782:82;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;11436:38;;;;781:16427;11436:38;;;9930:57;11436:38;;781:16427;;;;1072:66;;;;;11819:41;781:16427;;;;;;11819:41;781:16427;;;;;12042:28;781:16427;;;14840:85;781:16427;14840:85;;781:16427;;;;;;;11177:34;781:16427;;;;;;;11294:29;781:16427;;;;;;;;;;14840:85;;;;;;:::i;:::-;781:16427;14830:96;;9930:57;;;:::i;:::-;9905:82;;781:16427;9681:13;;;;;;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9696:32;10063:10;9696:32;;10028:33;;781:16427;;10028:33;;781:16427;10028:33;10063:10;:::i;:::-;781:16427;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;4301:16:25;781:16427:81;-1:-1:-1;;;;;781:16427:81;;4726:16:25;;:34;;;;781:16427:81;4805:1:25;4790:16;:50;;;;781:16427:81;4855:13:25;:30;;;;781:16427:81;4851:91:25;;;-1:-1:-1;;781:16427:81;;4805:1:25;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6961:1:25;;781:16427:81;4979:67:25;;781:16427:81;6893:76:25;;;:::i;:::-;;;:::i;:::-;6961:1;:::i;:::-;781:16427:81;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:24;;:::i;:::-;781:16427:81;2944:27;;-1:-1:-1;;781:16427:81;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;;;;:::i;:::-;781:16427;;;;2915:63;;:89;1072:66;;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;;;;3084:20;781:16427;;1644:12;781:16427;1644:12;;781:16427;;;;1634:27;;1072:66;;4805:1:25;1671:13:81;;781:16427;;-1:-1:-1;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;1704:18;;;781:16427;;;;;;;;;;;;;;1747:18;;;781:16427;;;;;;;;;;;;;1826:4;1790:33;;;1072:66;1868:17;;;;;781:16427;;;-1:-1:-1;;;;;;781:16427:81;;;;;;1962:15;;;:::i;:::-;5066:101:25;;781:16427:81;;;;5066:101:25;781:16427:81;5142:14:25;781:16427:81;-1:-1:-1;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;;;;;;781:16427:81;;4805:1:25;781:16427:81;;5142:14:25;5066:101;;;781:16427:81;;;;;;;;;;;;;;4979:67:25;-1:-1:-1;;781:16427:81;;;-1:-1:-1;;;;;;;;;;;781:16427:81;4979:67:25;;;4851:91;6498:23;;;781:16427:81;;4908:23:25;781:16427:81;;;4908:23:25;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:25;;4726:34;;;-1:-1:-1;4726:34:25;;781:16427:81;;;;;;-1:-1:-1;;781:16427:81;;;;2357:1:24;781:16427:81;;:::i;:::-;2303:62:24;;:::i;781:16427:81:-;;;;;;;-1:-1:-1;;781:16427:81;;;;;4918:33;-1:-1:-1;;;;;;;;;;;781:16427:81;4918:33;781:16427;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;5296:21;-1:-1:-1;;;;;;;;;;;781:16427:81;5296:21;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;8978:12;;;;781:16427;;;;;8651:3;8618:31;;;;;;-1:-1:-1;;781:16427:81;;;;;;;8852:55;15915:20;781:16427;;;;15915:20;;;;;;:::i;:::-;781:16427;;;15879:57;;781:16427;;;;;;;;;;;;;15879:57;;;;;;:::i;8852:55::-;781:16427;;;;;;;;;;;;;;;;;;;;;;8978:53;781:16427;;9094:20;781:16427;9094:20;;:::i;:::-;;;;9246:30;781:16427;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;9157:19;781:16427;;;;;;;;9194:26;;;:28;781:16427;;9194:28;:::i;:::-;1072:66;;781:16427;;;;;9246:30;9090:322;781:16427;8603:13;;;9090:322;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;;;9366:31;781:16427;;;9366:31;;9090:322;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;8618:31;9486:10;8618:31;;781:16427;;;;;9452:32;9486:10;:::i;781:16427::-;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;16446:17;;;;16332:21;;;16362:3;781:16427;;16328:32;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;16313:13;;16328:32;-1:-1:-1;781:16427:81;;;;;;;;-1:-1:-1;781:16427:81;;;16308:177;5857:38;781:16427;;;;;:::i;:::-;5857:38;:::i;:::-;5911:22;781:16427;;;;5911:22;781:16427;;;;;-1:-1:-1;;781:16427:81;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;6110:17:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6110:17;781:16427;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;5640:21;-1:-1:-1;;;;;;;;;;;781:16427:81;5640:21;781:16427;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;4382:12;-1:-1:-1;;;;;;;;;;;781:16427:81;4382:12;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;6689:38;2303:62:24;781:16427:81;2303:62:24;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;6634:21;;781:16427;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;;;6689:38;781:16427;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;4535:20;-1:-1:-1;;;;;;;;;;;781:16427:81;4535:20;781:16427;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;4703:15;-1:-1:-1;;;;;;;;;;;781:16427:81;4703:15;:24;781:16427;;;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;5473:17;-1:-1:-1;;;;;;;;;;;781:16427:81;5473:17;:28;781:16427;;;;;;-1:-1:-1;781:16427:81;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3567:18;;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;7571:12;;;781:16427;;;;;;;;;;;;;;7595:19;7571:43;781:16427;;7699:9;;:::i;:::-;781:16427;-1:-1:-1;;;;;781:16427:81;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;7795:32;;:41;:32;;:::i;:::-;:41;:::i;:::-;781:16427;16079:18;;781:16427;;;-1:-1:-1;;;16072:73:81;;16112:9;781:16427;16072:73;;781:16427;16131:4;781:16427;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;16072:73;;;;;;;781:16427;16072:73;;;781:16427;;;;;7595:19;8078:18;;781:16427;3743:569:36;781:16427:81;;;8108:30;;781:16427;;;;;;;;;;;8108:30;;;781:16427;8108:30;;:::i;:::-;781:16427;8098:41;;3743:569:36;;;;;;;;781:16427:81;3743:569:36;;;;;;;;781:16427:81;3743:569:36;781:16427:81;;;;;3743:569:36;;7571:12:81;781:16427;3743:569:36;781:16427:81;4325:22:36;;;4321:85;;8194:20:81;8151:24;781:16427;;;8151:15;;;781:16427;;;;;;1072:66;8194:20;:22;781:16427;;8194:22;:::i;:::-;1072:66;;8232:31;781:16427;;;;;;8232:31;8274:75;;;;;781:16427;;;;;;;;;;;;;;8274:75;;16112:9;781:16427;8274:75;;781:16427;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8274:75;;;;;;;;;;;781:16427;8274:75;;;781:16427;;;;;;;;8274:75;781:16427;8274:75;;;:::i;:::-;781:16427;;;8274:75;;;;781:16427;;;;;;;;;8274:75;781:16427;;;4321:85:36;4370:25;;;781:16427:81;4370:25:36;781:16427:81;;4370:25:36;781:16427:81;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;16072:73;;;;781:16427;16072:73;781:16427;16072:73;;;;;;;:::i;:::-;;;;781:16427;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;6307:30;2303:62:24;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;6260:17;;781:16427;;-1:-1:-1;;781:16427:81;;;;;;;;;;6307:30;781:16427;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3716:18;;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;3975:40:24;781:16427:81;;3975:40:24;781:16427:81;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;:::i;:::-;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;6431:44:25;;;;781:16427:81;6427:105:25;;-1:-1:-1;;781:16427:81;;;-1:-1:-1;;;;;;;;;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;2129:16;;781:16427;2046:1;2178:21;;781:16427;2232:21;;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;2298:24;;781:16427;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:24;;:::i;:::-;781:16427:81;2944:27;;-1:-1:-1;;781:16427:81;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;;;;:::i;:::-;781:16427;;;;2915:63;;:89;1072:66;;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;3084:20;;781:16427;;2469:12;781:16427;2469:12;781:16427;;;;2459:27;1072:66;;6593:4:25;2496:13:81;;781:16427;;-1:-1:-1;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;2046:1;2529:18;;781:16427;;;;;;;;;;;;;;2232:21;2572:18;;;781:16427;;;;;;;;;;;;;;;;6656:20:25;;781:16427:81;;-1:-1:-1;2630:15:81;;;:::i;:::-;-1:-1:-1;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;;;;;;781:16427:81;;2046:1;781:16427;;6656:20:25;781:16427:81;6427:105:25;6498:23;;;781:16427:81;6498:23:25;781:16427:81;;6498:23:25;6431:44;781:16427:81;2046:1;-1:-1:-1;;;;;781:16427:81;;6450:25:25;;6431:44;;781:16427:81;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;781:16427:81;;;;;2944:27;781:16427;;;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;781:16427;2925:52;;:::i;:::-;781:16427;;2915:63;;-1:-1:-1;;2915:89:81;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;;3084:20;781:16427;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;3860:13;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;3999:13;;781:16427;;-1:-1:-1;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3406:30;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;6983:15;;;;;:35;;781:16427;;;;7119:12;-1:-1:-1;;;;;;;;;;;781:16427:81;7119:12;781:16427;;;;;;;;;;;;;;;;;;;;;7292:43;781:16427;;;;;;;;;;;7247:29;781:16427;;;;;;;;;;;;;;;;;7292:43;781:16427;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;6983:35;7002:11;781:16427;7002:11;:16;;6983:35;;781:16427;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;6471:21:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6471:21;781:16427;;;;6350:149;;781:16427;;;;;;-1:-1:-1;;781:16427:81;;;;;;4211:26;-1:-1:-1;;;;;;;;;;;781:16427:81;4211:26;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;:::o;:::-;;;13204:80;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;13204:80;781:16427;;-1:-1:-1;;781:16427:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;6740:113;-1:-1:-1;;;;;;;;;;;781:16427:81;6110:17;;781:16427;-1:-1:-1;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;6740:113;:::o;781:16427::-;;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;:::o;:::-;-1:-1:-1;;781:16427:81;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;-1:-1:-1;;781:16427:81;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;4964:204::-;-1:-1:-1;;;;;;;;;;;781:16427:81;4918:33;5296:21;;;781:16427;4918:33;;781:16427;;;;;;;;;;;;;;;;5148:4;781:16427;;;;;;;5156:5;781:16427;;4964:204;:::o;3405:215:24:-;-1:-1:-1;;;;;781:16427:81;3489:22:24;;3485:91;;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;3975:40:24;-1:-1:-1;;3975:40:24;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;781:16427:81;;3509:1:24;3534:31;2658:162;-1:-1:-1;;;;;;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;966:10:29;2717:23:24;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:24;966:10:29;2763:40:24;781:16427:81;;-1:-1:-1;2763:40:24;16536:442:81;-1:-1:-1;;;;;;;;;;;781:16427:81;16670:21;;;;781:16427;;;;;16759:13;;16875:17;;;-1:-1:-1;16803:3:81;781:16427;;16774:27;;;;;781:16427;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;16759:13;;16774:27;-1:-1:-1;781:16427:81;;;16774:27;-1:-1:-1;;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;16754:167;781:16427;;;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;-1:-1:-1;781:16427:81;;;;;;16536:442;;;;:::o;781:16427::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;:::o;10123:844::-;;-1:-1:-1;;;;;;;;;;;781:16427:81;10291:21;;;:::i;:::-;781:16427;;;10391:26;;;;781:16427;;;10391:26;;;;781:16427;10391:26;;:::i;:::-;2858:45:56;781:16427:81;;;2858:45:56;;10391:26:81;2858:45:56;;781:16427:81;;;;;;10353:4;781:16427;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;2858:45:56;;13204:80:81;;2858:45:56;;;;;;:::i;:::-;781:16427:81;2848:56:56;;-1:-1:-1;;10652:17:81;;;-1:-1:-1;10509:3:81;10486:21;;;;;;3915:8:55;3859:27;781:16427:81;;;;;;;;;:::i;:::-;;;;:::i;:::-;3859:27:55;;:::i;:::-;3915:8;;;;;:::i;:::-;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;10704:17;;;:::i;:::-;:30;;;;10700:82;;781:16427;;10471:13;;;10700:82;10758:5;;;;;;;10466:416;10900:28;781:16427;;10123:844::o;781:16427::-;;;-1:-1:-1;;;781:16427:81;;10391:26;781:16427;;;;;;;;;;;;;;;;;10648:224;781:16427;;-1:-1:-1;;;781:16427:81;;10391:26;781:16427;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;10486:21;;;;;;;;;;781:16427;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;:::o;7084:141:25:-;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;7150:18:25;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:25;;-1:-1:-1;7191:17:25;12093:338:81;;781:16427;;12190:12;781:16427;12190:12;781:16427;;;;12173:230;12208:5;;;12173:230;-1:-1:-1;781:16427:81;;-1:-1:-1;12093:338:81:o;12215:3::-;12248:12;;12278:11;;;;;-1:-1:-1;12205:1:81;;-1:-1:-1;;12309:11:81:o;12274:119::-;12345:8;12341:52;;781:16427;;;;-1:-1:-1;;781:16427:81;;12178:28;;12341:52;12373:5;;781:16427;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;;;;;781:16427:81;;;;;;;:::o;2129:766:55:-;781:16427:81;;;2129:766:55;2276:2;2256:22;;2276:2;;2739:25;2539:180;;;;;;;;;;;;;;;-1:-1:-1;2539:180:55;2739:25;;:::i;:::-;2732:32;;;;;:::o;2252:637::-;2795:83;;2811:1;2795:83;2815:35;2795:83;;:::o;7196:532::-;781:16427:81;;;;;;7282:29:55;;;7327:7;;:::o;7278:444::-;781:16427:81;7378:38:55;;781:16427:81;;7439:23:55;;;7291:20;7439:23;781:16427:81;7291:20:55;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;781:16427:81;;;7291:20:55;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;781:16427:81;;;7291:20:55;7679:32;5140:1530;;;6199:66;6186:79;;6182:164;;781:16427:81;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;;6457:24:55;;;;;;;;;-1:-1:-1;6457:24:55;-1:-1:-1;;;;;781:16427:81;;6495:20:55;6491:113;;6614:49;-1:-1:-1;6614:49:55;-1:-1:-1;5140:1530:55;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:55;6457:24;6531:62;-1:-1:-1;6531:62:55;:::o;6182:164::-;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o","linkReferences":{}},"methodIdentifiers":{"baseFee()":"6ef25c3a","baseWeight()":"d3fd6364","codeState(bytes32)":"c13911e8","commitBlocks((bytes32,bytes32,bytes32,(address,bytes32,uint128,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4))[])[])[],bytes[])":"fa97ed6d","commitCodes((bytes32,bool)[],bytes[])":"e97d3eb3","createProgram(bytes32,bytes32,bytes,uint128)":"8074b455","genesisBlockHash()":"28e24b3d","getStorageSlot()":"96708226","initialize(address,address,address,address,address[])":"f8453e7c","lastBlockCommitmentHash()":"2dacfb69","mirror()":"444d9172","mirrorProxy()":"78ee5dec","owner()":"8da5cb5b","programCodeId(address)":"9067088e","programsCount()":"96a2ddfa","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestCodeValidation(bytes32,bytes32)":"1c149d8a","setBaseWeight(uint64)":"8028861a","setMirror(address)":"3d43b418","setStorageSlot(string)":"5686cad5","setValuePerWeight(uint128)":"a6bbbe1c","signingThresholdPercentage()":"efd81abc","transferOwnership(address)":"f2fde38b","updateValidators(address[])":"e71731e4","validatedCodesCount()":"007a32e7","validatorExists(address)":"8febbd59","validators()":"ca1e7819","validatorsCount()":"ed612f8c","validatorsThreshold()":"edc87225","valuePerWeight()":"0834fecc","wrappedVara()":"88f50cf0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"baseWeight\",\"type\":\"uint64\"}],\"name\":\"BaseWeightChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"BlockCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"CodeGotValidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"CodeValidationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"ProgramCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StorageSlotChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ValidatorsSetChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"valuePerWeight\",\"type\":\"uint128\"}],\"name\":\"ValuePerWeightChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"baseFee\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"codeState\",\"outputs\":[{\"internalType\":\"enum IRouter.CodeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"prevCommitmentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"predBlockHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct IRouter.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct IRouter.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"}],\"internalType\":\"struct IRouter.OutgoingMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRouter.StateTransition[]\",\"name\":\"transitions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRouter.BlockCommitment[]\",\"name\":\"blockCommitmentsArray\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"internalType\":\"struct IRouter.CodeCommitment[]\",\"name\":\"codeCommitmentsArray\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitCodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"createProgram\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageSlot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_validatorsKeys\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBlockCommitmentHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirror\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"program\",\"type\":\"address\"}],\"name\":\"programCodeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"requestCodeValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_baseWeight\",\"type\":\"uint64\"}],\"name\":\"setBaseWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"}],\"name\":\"setMirror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"namespace\",\"type\":\"string\"}],\"name\":\"setStorageSlot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valuePerWeight\",\"type\":\"uint128\"}],\"name\":\"setValuePerWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signingThresholdPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"validatorsAddressArray\",\"type\":\"address[]\"}],\"name\":\"updateValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatedCodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"validatorExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"valuePerWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedVara\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"BaseWeightChanged(uint64)\":{\"details\":\"Emitted when the tx's base weight is changed. NOTE: It's event for USERS: it informs about new value of commission for each message sending. NOTE: It's event for NODES: it requires to update commission in programs execution parameters.\"},\"BlockCommitted(bytes32)\":{\"details\":\"Emitted when a new state transitions are applied. NOTE: It's event for USERS: it informs about new block outcome committed.\"},\"CodeGotValidated(bytes32,bool)\":{\"details\":\"Emitted when a code, previously requested to be validated, gets validated. NOTE: It's event for USERS: it informs about validation results of previously requested code.\"},\"CodeValidationRequested(bytes32,bytes32)\":{\"details\":\"Emitted when a new code validation request submitted. NOTE: It's event for NODES: it requires to download and validate code from blob.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProgramCreated(address,bytes32)\":{\"details\":\"Emitted when a new program created. NOTE: It's event for USERS: it informs about new program creation and it's availability on Ethereum. NOTE: It's event for NODES: it requires to create associated gear program in local storage.\"},\"StorageSlotChanged()\":{\"details\":\"Emitted when the storage slot is changed. NOTE: It's event for USERS: it informs about router being wiped and all programs and codes deletion. NOTE: It's event for NODES: it requires to clean the local storage.\"},\"ValidatorsSetChanged()\":{\"details\":\"Emitted when the validators set is changed. NOTE: It's event for USERS: it informs about validators rotation. NOTE: It's event for NODES: it requires to update authorities that sign outcomes.\"},\"ValuePerWeightChanged(uint128)\":{\"details\":\"Emitted when the value per executable weight is changed. NOTE: It's event for USERS: it informs about new conversion rate between weight and it's WVara price. NOTE: It's event for NODES: it requires to update conversion rate in programs execution parameters.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"programCodeId(address)\":{\"details\":\"Returns bytes32(0) in case of inexistent program.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Router.sol\":\"Router\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64\",\"dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58\",\"dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf\",\"dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde\",\"dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Router.sol\":{\"keccak256\":\"0x5db40e2574ad57a5d159346d1e4adc1fc3df4c63097345805e89c60553a6ce4e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://951272070e69e13be0cad9d405cd47db9d239b0d9095c4c440560a679910e040\",\"dweb:/ipfs/QmWXwFjEDW7nouNJNXuLic4efxjokeCQ33irYoDyhE7k8p\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"uint64","name":"baseWeight","type":"uint64","indexed":false}],"type":"event","name":"BaseWeightChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":false}],"type":"event","name":"BlockCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"bool","name":"valid","type":"bool","indexed":true}],"type":"event","name":"CodeGotValidated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32","indexed":false}],"type":"event","name":"CodeValidationRequested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"actorId","type":"address","indexed":false},{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":true}],"type":"event","name":"ProgramCreated","anonymous":false},{"inputs":[],"type":"event","name":"StorageSlotChanged","anonymous":false},{"inputs":[],"type":"event","name":"ValidatorsSetChanged","anonymous":false},{"inputs":[{"internalType":"uint128","name":"valuePerWeight","type":"uint128","indexed":false}],"type":"event","name":"ValuePerWeightChanged","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"baseFee","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"baseWeight","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"codeState","outputs":[{"internalType":"enum IRouter.CodeState","name":"","type":"uint8"}]},{"inputs":[{"internalType":"struct IRouter.BlockCommitment[]","name":"blockCommitmentsArray","type":"tuple[]","components":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"prevCommitmentHash","type":"bytes32"},{"internalType":"bytes32","name":"predBlockHash","type":"bytes32"},{"internalType":"struct IRouter.StateTransition[]","name":"transitions","type":"tuple[]","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"struct IRouter.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct IRouter.OutgoingMessage[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct IRouter.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]}]}]}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitBlocks"},{"inputs":[{"internalType":"struct IRouter.CodeCommitment[]","name":"codeCommitmentsArray","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"valid","type":"bool"}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitCodes"},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"createProgram","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStorageSlot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_mirror","type":"address"},{"internalType":"address","name":"_mirrorProxy","type":"address"},{"internalType":"address","name":"_wrappedVara","type":"address"},{"internalType":"address[]","name":"_validatorsKeys","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastBlockCommitmentHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirror","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorProxy","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"program","type":"address"}],"stateMutability":"view","type":"function","name":"programCodeId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"programsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"requestCodeValidation"},{"inputs":[{"internalType":"uint64","name":"_baseWeight","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setBaseWeight"},{"inputs":[{"internalType":"address","name":"_mirror","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setMirror"},{"inputs":[{"internalType":"string","name":"namespace","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setStorageSlot"},{"inputs":[{"internalType":"uint128","name":"_valuePerWeight","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"setValuePerWeight"},{"inputs":[],"stateMutability":"view","type":"function","name":"signingThresholdPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address[]","name":"validatorsAddressArray","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"updateValidators"},{"inputs":[],"stateMutability":"view","type":"function","name":"validatedCodesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validator","type":"address"}],"stateMutability":"view","type":"function","name":"validatorExists","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"valuePerWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrappedVara","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"programCodeId(address)":{"details":"Returns bytes32(0) in case of inexistent program."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Router.sol":"Router"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6","urls":["bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64","dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol":{"keccak256":"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9","urls":["bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58","dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6","urls":["bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf","dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3","urls":["bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde","dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Router.sol":{"keccak256":"0x5db40e2574ad57a5d159346d1e4adc1fc3df4c63097345805e89c60553a6ce4e","urls":["bzz-raw://951272070e69e13be0cad9d405cd47db9d239b0d9095c4c440560a679910e040","dweb:/ipfs/QmWXwFjEDW7nouNJNXuLic4efxjokeCQ33irYoDyhE7k8p"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Router.sol","id":55997,"exportedSymbols":{"Clones":[41121],"ECDSA":[43387],"IERC20":[41906],"IMirror":[53636],"IRouter":[53951],"IWrappedVara":[53962],"MessageHashUtils":[43461],"OwnableUpgradeable":[39024],"ReentrancyGuardTransient":[42400],"Router":[55996],"StorageSlot":[42719]},"nodeType":"SourceUnit","src":"39:17170:81","nodes":[{"id":54379,"nodeType":"PragmaDirective","src":"39:24:81","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":54381,"nodeType":"ImportDirective","src":"65:74:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":42720,"symbolAliases":[{"foreign":{"id":54380,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"73:11:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54383,"nodeType":"ImportDirective","src":"140:101:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":39025,"symbolAliases":[{"foreign":{"id":54382,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39024,"src":"148:18:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54385,"nodeType":"ImportDirective","src":"242:64:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":41122,"symbolAliases":[{"foreign":{"id":54384,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41121,"src":"250:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54387,"nodeType":"ImportDirective","src":"307:75:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol","file":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":43388,"symbolAliases":[{"foreign":{"id":54386,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43387,"src":"315:5:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54389,"nodeType":"ImportDirective","src":"383:97:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol","file":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":43462,"symbolAliases":[{"foreign":{"id":54388,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43461,"src":"391:16:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54391,"nodeType":"ImportDirective","src":"481:100:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":42401,"symbolAliases":[{"foreign":{"id":54390,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42400,"src":"489:24:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54393,"nodeType":"ImportDirective","src":"582:38:81","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53952,"symbolAliases":[{"foreign":{"id":54392,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"590:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54395,"nodeType":"ImportDirective","src":"621:38:81","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53637,"symbolAliases":[{"foreign":{"id":54394,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"629:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54397,"nodeType":"ImportDirective","src":"660:48:81","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53963,"symbolAliases":[{"foreign":{"id":54396,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"668:12:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54399,"nodeType":"ImportDirective","src":"709:70:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":41907,"symbolAliases":[{"foreign":{"id":54398,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41906,"src":"717:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55996,"nodeType":"ContractDefinition","src":"781:16427:81","nodes":[{"id":54408,"nodeType":"UsingForDirective","src":"860:24:81","nodes":[],"global":false,"libraryName":{"id":54406,"name":"ECDSA","nameLocations":["866:5:81"],"nodeType":"IdentifierPath","referencedDeclaration":43387,"src":"866:5:81"},"typeName":{"id":54407,"name":"bytes32","nodeType":"ElementaryTypeName","src":"876:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"id":54411,"nodeType":"UsingForDirective","src":"889:35:81","nodes":[],"global":false,"libraryName":{"id":54409,"name":"MessageHashUtils","nameLocations":["895:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":43461,"src":"895:16:81"},"typeName":{"id":54410,"name":"address","nodeType":"ElementaryTypeName","src":"916:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":54414,"nodeType":"VariableDeclaration","src":"1032:106:81","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"1057:12:81","scope":55996,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54412,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1032:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307835633039636131623962383132376134666439663363333834616163353962363631343431653832306531373733333735336666356632653836653165303030","id":54413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1072:66:81","typeDescriptions":{"typeIdentifier":"t_rational_41630078590300661333111585883568696735413380457407274925697692750148467286016_by_1","typeString":"int_const 4163...(69 digits omitted)...6016"},"value":"0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000"},"visibility":"private"},{"id":54422,"nodeType":"FunctionDefinition","src":"1198:53:81","nodes":[],"body":{"id":54421,"nodeType":"Block","src":"1212:39:81","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54418,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39246,"src":"1222:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1222:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54420,"nodeType":"ExpressionStatement","src":"1222:22:81"}]},"documentation":{"id":54415,"nodeType":"StructuredDocumentation","src":"1145:48:81","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":54416,"nodeType":"ParameterList","parameters":[],"src":"1209:2:81"},"returnParameters":{"id":54417,"nodeType":"ParameterList","parameters":[],"src":"1212:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54504,"nodeType":"FunctionDefinition","src":"1257:728:81","nodes":[],"body":{"id":54503,"nodeType":"Block","src":"1459:526:81","nodes":[],"statements":[{"expression":{"arguments":[{"id":54439,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54424,"src":"1484:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54438,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38884,"src":"1469:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":54440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1469:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54441,"nodeType":"ExpressionStatement","src":"1469:28:81"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725631","id":54443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1523:25:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""},"value":"router.storage.RouterV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""}],"id":54442,"name":"setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54645,"src":"1508:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":54444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54445,"nodeType":"ExpressionStatement","src":"1508:41:81"},{"assignments":[54448],"declarations":[{"constant":false,"id":54448,"mutability":"mutable","name":"router","nameLocation":"1575:6:81","nodeType":"VariableDeclaration","scope":54503,"src":"1559:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54447,"nodeType":"UserDefinedTypeName","pathNode":{"id":54446,"name":"Storage","nameLocations":["1559:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"1559:7:81"},"referencedDeclaration":53684,"src":"1559:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54451,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54449,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"1584:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1584:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1559:38:81"},{"expression":{"id":54461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54452,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1608:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1615:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"1608:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54456,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1644:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":54457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1650:6:81","memberName":"number","nodeType":"MemberAccess","src":"1644:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1659:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1644:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54455,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"1634:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":54460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1634:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1608:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54462,"nodeType":"ExpressionStatement","src":"1608:53:81"},{"expression":{"id":54467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54463,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1671:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54465,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1678:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"1671:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54466,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54426,"src":"1687:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1671:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54468,"nodeType":"ExpressionStatement","src":"1671:23:81"},{"expression":{"id":54473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54469,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1704:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1711:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"1704:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54472,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54428,"src":"1725:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1704:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54474,"nodeType":"ExpressionStatement","src":"1704:33:81"},{"expression":{"id":54479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54475,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1747:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1754:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"1747:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54478,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54430,"src":"1768:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1747:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54480,"nodeType":"ExpressionStatement","src":"1747:33:81"},{"expression":{"id":54485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54481,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1790:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1797:26:81","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":53659,"src":"1790:33:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"36363636","id":54484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1826:4:81","typeDescriptions":{"typeIdentifier":"t_rational_6666_by_1","typeString":"int_const 6666"},"value":"6666"},"src":"1790:40:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54486,"nodeType":"ExpressionStatement","src":"1790:40:81"},{"expression":{"id":54491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54487,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1868:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54489,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1875:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"1868:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"325f3530305f3030305f303030","id":54490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1888:13:81","typeDescriptions":{"typeIdentifier":"t_rational_2500000000_by_1","typeString":"int_const 2500000000"},"value":"2_500_000_000"},"src":"1868:33:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":54492,"nodeType":"ExpressionStatement","src":"1868:33:81"},{"expression":{"id":54497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54493,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1911:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1918:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"1911:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"3130","id":54496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1935:2:81","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"1911:26:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":54498,"nodeType":"ExpressionStatement","src":"1911:26:81"},{"expression":{"arguments":[{"id":54500,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54433,"src":"1962:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":54499,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"1947:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1947:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54502,"nodeType":"ExpressionStatement","src":"1947:31:81"}]},"functionSelector":"f8453e7c","implemented":true,"kind":"function","modifiers":[{"id":54436,"kind":"modifierInvocation","modifierName":{"id":54435,"name":"initializer","nameLocations":["1447:11:81"],"nodeType":"IdentifierPath","referencedDeclaration":39132,"src":"1447:11:81"},"nodeType":"ModifierInvocation","src":"1447:11:81"}],"name":"initialize","nameLocation":"1266:10:81","parameters":{"id":54434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54424,"mutability":"mutable","name":"initialOwner","nameLocation":"1294:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1286:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54423,"name":"address","nodeType":"ElementaryTypeName","src":"1286:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54426,"mutability":"mutable","name":"_mirror","nameLocation":"1324:7:81","nodeType":"VariableDeclaration","scope":54504,"src":"1316:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54425,"name":"address","nodeType":"ElementaryTypeName","src":"1316:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54428,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"1349:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1341:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54427,"name":"address","nodeType":"ElementaryTypeName","src":"1341:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54430,"mutability":"mutable","name":"_wrappedVara","nameLocation":"1379:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1371:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54429,"name":"address","nodeType":"ElementaryTypeName","src":"1371:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54433,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"1418:15:81","nodeType":"VariableDeclaration","scope":54504,"src":"1401:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54431,"name":"address","nodeType":"ElementaryTypeName","src":"1401:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54432,"nodeType":"ArrayTypeName","src":"1401:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1276:163:81"},"returnParameters":{"id":54437,"nodeType":"ParameterList","parameters":[],"src":"1459:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54585,"nodeType":"FunctionDefinition","src":"1991:662:81","nodes":[],"body":{"id":54584,"nodeType":"Block","src":"2049:604:81","nodes":[],"statements":[{"assignments":[54514],"declarations":[{"constant":false,"id":54514,"mutability":"mutable","name":"oldRouter","nameLocation":"2075:9:81","nodeType":"VariableDeclaration","scope":54584,"src":"2059:25:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54513,"nodeType":"UserDefinedTypeName","pathNode":{"id":54512,"name":"Storage","nameLocations":["2059:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"2059:7:81"},"referencedDeclaration":53684,"src":"2059:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54517,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54515,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"2087:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2087:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2059:41:81"},{"assignments":[54519],"declarations":[{"constant":false,"id":54519,"mutability":"mutable","name":"_mirror","nameLocation":"2119:7:81","nodeType":"VariableDeclaration","scope":54584,"src":"2111:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54518,"name":"address","nodeType":"ElementaryTypeName","src":"2111:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54522,"initialValue":{"expression":{"id":54520,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2129:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2139:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"2129:16:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2111:34:81"},{"assignments":[54524],"declarations":[{"constant":false,"id":54524,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"2163:12:81","nodeType":"VariableDeclaration","scope":54584,"src":"2155:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54523,"name":"address","nodeType":"ElementaryTypeName","src":"2155:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54527,"initialValue":{"expression":{"id":54525,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2178:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2188:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"2178:21:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2155:44:81"},{"assignments":[54529],"declarations":[{"constant":false,"id":54529,"mutability":"mutable","name":"_wrappedVara","nameLocation":"2217:12:81","nodeType":"VariableDeclaration","scope":54584,"src":"2209:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54528,"name":"address","nodeType":"ElementaryTypeName","src":"2209:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54532,"initialValue":{"expression":{"id":54530,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2232:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2242:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"2232:21:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2209:44:81"},{"assignments":[54537],"declarations":[{"constant":false,"id":54537,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"2280:15:81","nodeType":"VariableDeclaration","scope":54584,"src":"2263:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54535,"name":"address","nodeType":"ElementaryTypeName","src":"2263:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54536,"nodeType":"ArrayTypeName","src":"2263:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":54540,"initialValue":{"expression":{"id":54538,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2298:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2308:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"2298:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2263:59:81"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725632","id":54542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2348:25:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""},"value":"router.storage.RouterV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""}],"id":54541,"name":"setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54645,"src":"2333:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":54543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2333:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54544,"nodeType":"ExpressionStatement","src":"2333:41:81"},{"assignments":[54547],"declarations":[{"constant":false,"id":54547,"mutability":"mutable","name":"router","nameLocation":"2400:6:81","nodeType":"VariableDeclaration","scope":54584,"src":"2384:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54546,"nodeType":"UserDefinedTypeName","pathNode":{"id":54545,"name":"Storage","nameLocations":["2384:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"2384:7:81"},"referencedDeclaration":53684,"src":"2384:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54550,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54548,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"2409:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2409:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2384:38:81"},{"expression":{"id":54560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54551,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2433:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2440:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"2433:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54555,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2469:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":54556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2475:6:81","memberName":"number","nodeType":"MemberAccess","src":"2469:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2484:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2469:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54554,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"2459:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":54559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2459:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2433:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54561,"nodeType":"ExpressionStatement","src":"2433:53:81"},{"expression":{"id":54566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54562,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2496:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2503:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"2496:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54565,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54519,"src":"2512:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2496:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54567,"nodeType":"ExpressionStatement","src":"2496:23:81"},{"expression":{"id":54572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54568,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2529:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2536:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"2529:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54571,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54524,"src":"2550:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2529:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54573,"nodeType":"ExpressionStatement","src":"2529:33:81"},{"expression":{"id":54578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54574,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2572:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2579:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"2572:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54577,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54529,"src":"2593:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2572:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54579,"nodeType":"ExpressionStatement","src":"2572:33:81"},{"expression":{"arguments":[{"id":54581,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54537,"src":"2630:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":54580,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"2615:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2615:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54583,"nodeType":"ExpressionStatement","src":"2615:31:81"}]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":54507,"kind":"modifierInvocation","modifierName":{"id":54506,"name":"onlyOwner","nameLocations":["2022:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"2022:9:81"},"nodeType":"ModifierInvocation","src":"2022:9:81"},{"arguments":[{"hexValue":"32","id":54509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2046:1:81","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":54510,"kind":"modifierInvocation","modifierName":{"id":54508,"name":"reinitializer","nameLocations":["2032:13:81"],"nodeType":"IdentifierPath","referencedDeclaration":39179,"src":"2032:13:81"},"nodeType":"ModifierInvocation","src":"2032:16:81"}],"name":"reinitialize","nameLocation":"2000:12:81","parameters":{"id":54505,"nodeType":"ParameterList","parameters":[],"src":"2012:2:81"},"returnParameters":{"id":54511,"nodeType":"ParameterList","parameters":[],"src":"2049:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54597,"nodeType":"FunctionDefinition","src":"2692:126:81","nodes":[],"body":{"id":54596,"nodeType":"Block","src":"2748:70:81","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":54592,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54414,"src":"2792:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":54590,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"2765:11:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$42719_$","typeString":"type(library StorageSlot)"}},"id":54591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2777:14:81","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":42457,"src":"2765:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$42412_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":54593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2765:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$42412_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":54594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2806:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":42411,"src":"2765:46:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54589,"id":54595,"nodeType":"Return","src":"2758:53:81"}]},"baseFunctions":[53790],"functionSelector":"96708226","implemented":true,"kind":"function","modifiers":[],"name":"getStorageSlot","nameLocation":"2701:14:81","parameters":{"id":54586,"nodeType":"ParameterList","parameters":[],"src":"2715:2:81"},"returnParameters":{"id":54589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54588,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54597,"src":"2739:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54587,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2739:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2738:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54645,"nodeType":"FunctionDefinition","src":"2824:287:81","nodes":[],"body":{"id":54644,"nodeType":"Block","src":"2890:221:81","nodes":[],"statements":[{"assignments":[54605],"declarations":[{"constant":false,"id":54605,"mutability":"mutable","name":"slot","nameLocation":"2908:4:81","nodeType":"VariableDeclaration","scope":54644,"src":"2900:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54604,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2900:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54631,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":54630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":54614,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54599,"src":"2960:9:81","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":54613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2954:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":54612,"name":"bytes","nodeType":"ElementaryTypeName","src":"2954:5:81","typeDescriptions":{}}},"id":54615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2954:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54611,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2944:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2944:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":54610,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2936:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":54609,"name":"uint256","nodeType":"ElementaryTypeName","src":"2936:7:81","typeDescriptions":{}}},"id":54617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2936:36:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2975:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2936:40:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54607,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2925:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54608,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2929:6:81","memberName":"encode","nodeType":"MemberAccess","src":"2925:10:81","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2925:52:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54606,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2915:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2915:63:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":54629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"2981:23:81","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":54626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2998:4:81","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":54625,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2990:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":54624,"name":"uint256","nodeType":"ElementaryTypeName","src":"2990:7:81","typeDescriptions":{}}},"id":54627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2990:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2982:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":54622,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2982:7:81","typeDescriptions":{}}},"id":54628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2982:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2915:89:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2900:104:81"},{"expression":{"id":54639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":54635,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54414,"src":"3042:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":54632,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"3015:11:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$42719_$","typeString":"type(library StorageSlot)"}},"id":54634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3027:14:81","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":42457,"src":"3015:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$42412_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":54636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3015:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$42412_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":54637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3056:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":42411,"src":"3015:46:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54638,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54605,"src":"3064:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3015:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54640,"nodeType":"ExpressionStatement","src":"3015:53:81"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":54641,"name":"StorageSlotChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53775,"src":"3084:18:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3084:20:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54643,"nodeType":"EmitStatement","src":"3079:25:81"}]},"baseFunctions":[53795],"functionSelector":"5686cad5","implemented":true,"kind":"function","modifiers":[{"id":54602,"kind":"modifierInvocation","modifierName":{"id":54601,"name":"onlyOwner","nameLocations":["2880:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"2880:9:81"},"nodeType":"ModifierInvocation","src":"2880:9:81"}],"name":"setStorageSlot","nameLocation":"2833:14:81","parameters":{"id":54600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54599,"mutability":"mutable","name":"namespace","nameLocation":"2862:9:81","nodeType":"VariableDeclaration","scope":54645,"src":"2848:23:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":54598,"name":"string","nodeType":"ElementaryTypeName","src":"2848:6:81","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2847:25:81"},"returnParameters":{"id":54603,"nodeType":"ParameterList","parameters":[],"src":"2890:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54660,"nodeType":"FunctionDefinition","src":"3117:153:81","nodes":[],"body":{"id":54659,"nodeType":"Block","src":"3175:95:81","nodes":[],"statements":[{"assignments":[54652],"declarations":[{"constant":false,"id":54652,"mutability":"mutable","name":"router","nameLocation":"3201:6:81","nodeType":"VariableDeclaration","scope":54659,"src":"3185:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54651,"nodeType":"UserDefinedTypeName","pathNode":{"id":54650,"name":"Storage","nameLocations":["3185:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3185:7:81"},"referencedDeclaration":53684,"src":"3185:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54655,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54653,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3210:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3210:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3185:38:81"},{"expression":{"expression":{"id":54656,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54652,"src":"3240:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3247:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"3240:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54649,"id":54658,"nodeType":"Return","src":"3233:30:81"}]},"baseFunctions":[53800],"functionSelector":"28e24b3d","implemented":true,"kind":"function","modifiers":[],"name":"genesisBlockHash","nameLocation":"3126:16:81","parameters":{"id":54646,"nodeType":"ParameterList","parameters":[],"src":"3142:2:81"},"returnParameters":{"id":54649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54660,"src":"3166:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54647,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3166:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3165:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54675,"nodeType":"FunctionDefinition","src":"3276:167:81","nodes":[],"body":{"id":54674,"nodeType":"Block","src":"3341:102:81","nodes":[],"statements":[{"assignments":[54667],"declarations":[{"constant":false,"id":54667,"mutability":"mutable","name":"router","nameLocation":"3367:6:81","nodeType":"VariableDeclaration","scope":54674,"src":"3351:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54666,"nodeType":"UserDefinedTypeName","pathNode":{"id":54665,"name":"Storage","nameLocations":["3351:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3351:7:81"},"referencedDeclaration":53684,"src":"3351:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54670,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54668,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3376:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3376:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3351:38:81"},{"expression":{"expression":{"id":54671,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54667,"src":"3406:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3413:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"3406:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54664,"id":54673,"nodeType":"Return","src":"3399:37:81"}]},"baseFunctions":[53805],"functionSelector":"2dacfb69","implemented":true,"kind":"function","modifiers":[],"name":"lastBlockCommitmentHash","nameLocation":"3285:23:81","parameters":{"id":54661,"nodeType":"ParameterList","parameters":[],"src":"3308:2:81"},"returnParameters":{"id":54664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54663,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54675,"src":"3332:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54662,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3332:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3331:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54690,"nodeType":"FunctionDefinition","src":"3449:143:81","nodes":[],"body":{"id":54689,"nodeType":"Block","src":"3502:90:81","nodes":[],"statements":[{"assignments":[54682],"declarations":[{"constant":false,"id":54682,"mutability":"mutable","name":"router","nameLocation":"3528:6:81","nodeType":"VariableDeclaration","scope":54689,"src":"3512:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54681,"nodeType":"UserDefinedTypeName","pathNode":{"id":54680,"name":"Storage","nameLocations":["3512:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3512:7:81"},"referencedDeclaration":53684,"src":"3512:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54685,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54683,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3537:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3537:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3512:38:81"},{"expression":{"expression":{"id":54686,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54682,"src":"3567:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3574:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"3567:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54679,"id":54688,"nodeType":"Return","src":"3560:25:81"}]},"baseFunctions":[53810],"functionSelector":"88f50cf0","implemented":true,"kind":"function","modifiers":[],"name":"wrappedVara","nameLocation":"3458:11:81","parameters":{"id":54676,"nodeType":"ParameterList","parameters":[],"src":"3469:2:81"},"returnParameters":{"id":54679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54690,"src":"3493:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54677,"name":"address","nodeType":"ElementaryTypeName","src":"3493:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3492:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54705,"nodeType":"FunctionDefinition","src":"3598:143:81","nodes":[],"body":{"id":54704,"nodeType":"Block","src":"3651:90:81","nodes":[],"statements":[{"assignments":[54697],"declarations":[{"constant":false,"id":54697,"mutability":"mutable","name":"router","nameLocation":"3677:6:81","nodeType":"VariableDeclaration","scope":54704,"src":"3661:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54696,"nodeType":"UserDefinedTypeName","pathNode":{"id":54695,"name":"Storage","nameLocations":["3661:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3661:7:81"},"referencedDeclaration":53684,"src":"3661:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54700,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54698,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3686:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3686:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3661:38:81"},{"expression":{"expression":{"id":54701,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54697,"src":"3716:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54702,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3723:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"3716:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54694,"id":54703,"nodeType":"Return","src":"3709:25:81"}]},"baseFunctions":[53815],"functionSelector":"78ee5dec","implemented":true,"kind":"function","modifiers":[],"name":"mirrorProxy","nameLocation":"3607:11:81","parameters":{"id":54691,"nodeType":"ParameterList","parameters":[],"src":"3618:2:81"},"returnParameters":{"id":54694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54705,"src":"3642:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54692,"name":"address","nodeType":"ElementaryTypeName","src":"3642:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3641:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54720,"nodeType":"FunctionDefinition","src":"3747:133:81","nodes":[],"body":{"id":54719,"nodeType":"Block","src":"3795:85:81","nodes":[],"statements":[{"assignments":[54712],"declarations":[{"constant":false,"id":54712,"mutability":"mutable","name":"router","nameLocation":"3821:6:81","nodeType":"VariableDeclaration","scope":54719,"src":"3805:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54711,"nodeType":"UserDefinedTypeName","pathNode":{"id":54710,"name":"Storage","nameLocations":["3805:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3805:7:81"},"referencedDeclaration":53684,"src":"3805:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54715,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54713,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3830:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3830:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3805:38:81"},{"expression":{"expression":{"id":54716,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54712,"src":"3860:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3867:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"3860:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54709,"id":54718,"nodeType":"Return","src":"3853:20:81"}]},"baseFunctions":[53820],"functionSelector":"444d9172","implemented":true,"kind":"function","modifiers":[],"name":"mirror","nameLocation":"3756:6:81","parameters":{"id":54706,"nodeType":"ParameterList","parameters":[],"src":"3762:2:81"},"returnParameters":{"id":54709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54720,"src":"3786:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54707,"name":"address","nodeType":"ElementaryTypeName","src":"3786:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3785:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54740,"nodeType":"FunctionDefinition","src":"3886:143:81","nodes":[],"body":{"id":54739,"nodeType":"Block","src":"3941:88:81","nodes":[],"statements":[{"assignments":[54729],"declarations":[{"constant":false,"id":54729,"mutability":"mutable","name":"router","nameLocation":"3967:6:81","nodeType":"VariableDeclaration","scope":54739,"src":"3951:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54728,"nodeType":"UserDefinedTypeName","pathNode":{"id":54727,"name":"Storage","nameLocations":["3951:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3951:7:81"},"referencedDeclaration":53684,"src":"3951:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54732,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54730,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3976:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3976:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3951:38:81"},{"expression":{"id":54737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54733,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54729,"src":"3999:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54735,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4006:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"3999:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54736,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54722,"src":"4015:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3999:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54738,"nodeType":"ExpressionStatement","src":"3999:23:81"}]},"baseFunctions":[53825],"functionSelector":"3d43b418","implemented":true,"kind":"function","modifiers":[{"id":54725,"kind":"modifierInvocation","modifierName":{"id":54724,"name":"onlyOwner","nameLocations":["3931:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"3931:9:81"},"nodeType":"ModifierInvocation","src":"3931:9:81"}],"name":"setMirror","nameLocation":"3895:9:81","parameters":{"id":54723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54722,"mutability":"mutable","name":"_mirror","nameLocation":"3913:7:81","nodeType":"VariableDeclaration","scope":54740,"src":"3905:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54721,"name":"address","nodeType":"ElementaryTypeName","src":"3905:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3904:17:81"},"returnParameters":{"id":54726,"nodeType":"ParameterList","parameters":[],"src":"3941:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54755,"nodeType":"FunctionDefinition","src":"4085:159:81","nodes":[],"body":{"id":54754,"nodeType":"Block","src":"4146:98:81","nodes":[],"statements":[{"assignments":[54747],"declarations":[{"constant":false,"id":54747,"mutability":"mutable","name":"router","nameLocation":"4172:6:81","nodeType":"VariableDeclaration","scope":54754,"src":"4156:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54746,"nodeType":"UserDefinedTypeName","pathNode":{"id":54745,"name":"Storage","nameLocations":["4156:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4156:7:81"},"referencedDeclaration":53684,"src":"4156:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54750,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54748,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4181:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4181:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4156:38:81"},{"expression":{"expression":{"id":54751,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54747,"src":"4211:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54752,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4218:19:81","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":53677,"src":"4211:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54744,"id":54753,"nodeType":"Return","src":"4204:33:81"}]},"baseFunctions":[53830],"functionSelector":"007a32e7","implemented":true,"kind":"function","modifiers":[],"name":"validatedCodesCount","nameLocation":"4094:19:81","parameters":{"id":54741,"nodeType":"ParameterList","parameters":[],"src":"4113:2:81"},"returnParameters":{"id":54744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54743,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54755,"src":"4137:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54742,"name":"uint256","nodeType":"ElementaryTypeName","src":"4137:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4136:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54775,"nodeType":"FunctionDefinition","src":"4250:159:81","nodes":[],"body":{"id":54774,"nodeType":"Block","src":"4317:92:81","nodes":[],"statements":[{"assignments":[54765],"declarations":[{"constant":false,"id":54765,"mutability":"mutable","name":"router","nameLocation":"4343:6:81","nodeType":"VariableDeclaration","scope":54774,"src":"4327:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54764,"nodeType":"UserDefinedTypeName","pathNode":{"id":54763,"name":"Storage","nameLocations":["4327:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4327:7:81"},"referencedDeclaration":53684,"src":"4327:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54768,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54766,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4352:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4352:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4327:38:81"},{"expression":{"baseExpression":{"expression":{"id":54769,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54765,"src":"4382:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4389:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"4382:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":54772,"indexExpression":{"id":54771,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54757,"src":"4395:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4382:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"functionReturnParameters":54762,"id":54773,"nodeType":"Return","src":"4375:27:81"}]},"baseFunctions":[53838],"functionSelector":"c13911e8","implemented":true,"kind":"function","modifiers":[],"name":"codeState","nameLocation":"4259:9:81","parameters":{"id":54758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54757,"mutability":"mutable","name":"codeId","nameLocation":"4277:6:81","nodeType":"VariableDeclaration","scope":54775,"src":"4269:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54756,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4269:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4268:16:81"},"returnParameters":{"id":54762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54775,"src":"4306:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"typeName":{"id":54760,"nodeType":"UserDefinedTypeName","pathNode":{"id":54759,"name":"CodeState","nameLocations":["4306:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":53688,"src":"4306:9:81"},"referencedDeclaration":53688,"src":"4306:9:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"visibility":"internal"}],"src":"4305:11:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54790,"nodeType":"FunctionDefinition","src":"4415:147:81","nodes":[],"body":{"id":54789,"nodeType":"Block","src":"4470:92:81","nodes":[],"statements":[{"assignments":[54782],"declarations":[{"constant":false,"id":54782,"mutability":"mutable","name":"router","nameLocation":"4496:6:81","nodeType":"VariableDeclaration","scope":54789,"src":"4480:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54781,"nodeType":"UserDefinedTypeName","pathNode":{"id":54780,"name":"Storage","nameLocations":["4480:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4480:7:81"},"referencedDeclaration":53684,"src":"4480:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54785,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54783,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4505:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4505:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4480:38:81"},{"expression":{"expression":{"id":54786,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54782,"src":"4535:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4542:13:81","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":53683,"src":"4535:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54779,"id":54788,"nodeType":"Return","src":"4528:27:81"}]},"baseFunctions":[53843],"functionSelector":"96a2ddfa","implemented":true,"kind":"function","modifiers":[],"name":"programsCount","nameLocation":"4424:13:81","parameters":{"id":54776,"nodeType":"ParameterList","parameters":[],"src":"4437:2:81"},"returnParameters":{"id":54779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54790,"src":"4461:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54777,"name":"uint256","nodeType":"ElementaryTypeName","src":"4461:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4460:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54809,"nodeType":"FunctionDefinition","src":"4568:166:81","nodes":[],"body":{"id":54808,"nodeType":"Block","src":"4638:96:81","nodes":[],"statements":[{"assignments":[54799],"declarations":[{"constant":false,"id":54799,"mutability":"mutable","name":"router","nameLocation":"4664:6:81","nodeType":"VariableDeclaration","scope":54808,"src":"4648:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54798,"nodeType":"UserDefinedTypeName","pathNode":{"id":54797,"name":"Storage","nameLocations":["4648:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4648:7:81"},"referencedDeclaration":53684,"src":"4648:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54802,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54800,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4673:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4673:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4648:38:81"},{"expression":{"baseExpression":{"expression":{"id":54803,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54799,"src":"4703:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54804,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4710:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"4703:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":54806,"indexExpression":{"id":54805,"name":"program","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54792,"src":"4719:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4703:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54796,"id":54807,"nodeType":"Return","src":"4696:31:81"}]},"baseFunctions":[53851],"functionSelector":"9067088e","implemented":true,"kind":"function","modifiers":[],"name":"programCodeId","nameLocation":"4577:13:81","parameters":{"id":54793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54792,"mutability":"mutable","name":"program","nameLocation":"4599:7:81","nodeType":"VariableDeclaration","scope":54809,"src":"4591:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54791,"name":"address","nodeType":"ElementaryTypeName","src":"4591:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4590:17:81"},"returnParameters":{"id":54796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54795,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54809,"src":"4629:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54794,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4629:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4628:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54824,"nodeType":"FunctionDefinition","src":"4785:173:81","nodes":[],"body":{"id":54823,"nodeType":"Block","src":"4853:105:81","nodes":[],"statements":[{"assignments":[54816],"declarations":[{"constant":false,"id":54816,"mutability":"mutable","name":"router","nameLocation":"4879:6:81","nodeType":"VariableDeclaration","scope":54823,"src":"4863:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54815,"nodeType":"UserDefinedTypeName","pathNode":{"id":54814,"name":"Storage","nameLocations":["4863:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4863:7:81"},"referencedDeclaration":53684,"src":"4863:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54819,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54817,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4888:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4888:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4863:38:81"},{"expression":{"expression":{"id":54820,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54816,"src":"4918:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4925:26:81","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":53659,"src":"4918:33:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54813,"id":54822,"nodeType":"Return","src":"4911:40:81"}]},"baseFunctions":[53856],"functionSelector":"efd81abc","implemented":true,"kind":"function","modifiers":[],"name":"signingThresholdPercentage","nameLocation":"4794:26:81","parameters":{"id":54810,"nodeType":"ParameterList","parameters":[],"src":"4820:2:81"},"returnParameters":{"id":54813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54812,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54824,"src":"4844:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54811,"name":"uint256","nodeType":"ElementaryTypeName","src":"4844:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4843:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54841,"nodeType":"FunctionDefinition","src":"4964:204:81","nodes":[],"body":{"id":54840,"nodeType":"Block","src":"5025:143:81","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54829,"name":"validatorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54857,"src":"5097:15:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5097:17:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54831,"name":"signingThresholdPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54824,"src":"5117:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5117:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5097:48:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"39393939","id":54834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5148:4:81","typeDescriptions":{"typeIdentifier":"t_rational_9999_by_1","typeString":"int_const 9999"},"value":"9999"},"src":"5097:55:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":54836,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5096:57:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130303030","id":54837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5156:5:81","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"src":"5096:65:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54828,"id":54839,"nodeType":"Return","src":"5089:72:81"}]},"baseFunctions":[53861],"functionSelector":"edc87225","implemented":true,"kind":"function","modifiers":[],"name":"validatorsThreshold","nameLocation":"4973:19:81","parameters":{"id":54825,"nodeType":"ParameterList","parameters":[],"src":"4992:2:81"},"returnParameters":{"id":54828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54827,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54841,"src":"5016:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54826,"name":"uint256","nodeType":"ElementaryTypeName","src":"5016:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5015:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54857,"nodeType":"FunctionDefinition","src":"5174:157:81","nodes":[],"body":{"id":54856,"nodeType":"Block","src":"5231:100:81","nodes":[],"statements":[{"assignments":[54848],"declarations":[{"constant":false,"id":54848,"mutability":"mutable","name":"router","nameLocation":"5257:6:81","nodeType":"VariableDeclaration","scope":54856,"src":"5241:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54847,"nodeType":"UserDefinedTypeName","pathNode":{"id":54846,"name":"Storage","nameLocations":["5241:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5241:7:81"},"referencedDeclaration":53684,"src":"5241:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54851,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54849,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5266:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5266:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5241:38:81"},{"expression":{"expression":{"expression":{"id":54852,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54848,"src":"5296:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5303:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"5296:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":54854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5318:6:81","memberName":"length","nodeType":"MemberAccess","src":"5296:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54845,"id":54855,"nodeType":"Return","src":"5289:35:81"}]},"baseFunctions":[53866],"functionSelector":"ed612f8c","implemented":true,"kind":"function","modifiers":[],"name":"validatorsCount","nameLocation":"5183:15:81","parameters":{"id":54842,"nodeType":"ParameterList","parameters":[],"src":"5198:2:81"},"returnParameters":{"id":54845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54844,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54857,"src":"5222:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54843,"name":"uint256","nodeType":"ElementaryTypeName","src":"5222:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5221:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54876,"nodeType":"FunctionDefinition","src":"5337:171:81","nodes":[],"body":{"id":54875,"nodeType":"Block","src":"5408:100:81","nodes":[],"statements":[{"assignments":[54866],"declarations":[{"constant":false,"id":54866,"mutability":"mutable","name":"router","nameLocation":"5434:6:81","nodeType":"VariableDeclaration","scope":54875,"src":"5418:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54865,"nodeType":"UserDefinedTypeName","pathNode":{"id":54864,"name":"Storage","nameLocations":["5418:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5418:7:81"},"referencedDeclaration":53684,"src":"5418:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54869,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54867,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5443:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5443:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5418:38:81"},{"expression":{"baseExpression":{"expression":{"id":54870,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54866,"src":"5473:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5480:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"5473:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":54873,"indexExpression":{"id":54872,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54859,"src":"5491:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5473:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":54863,"id":54874,"nodeType":"Return","src":"5466:35:81"}]},"baseFunctions":[53873],"functionSelector":"8febbd59","implemented":true,"kind":"function","modifiers":[],"name":"validatorExists","nameLocation":"5346:15:81","parameters":{"id":54860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54859,"mutability":"mutable","name":"validator","nameLocation":"5370:9:81","nodeType":"VariableDeclaration","scope":54876,"src":"5362:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54858,"name":"address","nodeType":"ElementaryTypeName","src":"5362:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5361:19:81"},"returnParameters":{"id":54863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54862,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54876,"src":"5402:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54861,"name":"bool","nodeType":"ElementaryTypeName","src":"5402:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5401:6:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54892,"nodeType":"FunctionDefinition","src":"5514:154:81","nodes":[],"body":{"id":54891,"nodeType":"Block","src":"5575:93:81","nodes":[],"statements":[{"assignments":[54884],"declarations":[{"constant":false,"id":54884,"mutability":"mutable","name":"router","nameLocation":"5601:6:81","nodeType":"VariableDeclaration","scope":54891,"src":"5585:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54883,"nodeType":"UserDefinedTypeName","pathNode":{"id":54882,"name":"Storage","nameLocations":["5585:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5585:7:81"},"referencedDeclaration":53684,"src":"5585:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54887,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54885,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5610:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5610:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5585:38:81"},{"expression":{"expression":{"id":54888,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54884,"src":"5640:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5647:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"5640:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":54881,"id":54890,"nodeType":"Return","src":"5633:28:81"}]},"baseFunctions":[53879],"functionSelector":"ca1e7819","implemented":true,"kind":"function","modifiers":[],"name":"validators","nameLocation":"5523:10:81","parameters":{"id":54877,"nodeType":"ParameterList","parameters":[],"src":"5533:2:81"},"returnParameters":{"id":54881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54892,"src":"5557:16:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54878,"name":"address","nodeType":"ElementaryTypeName","src":"5557:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54879,"nodeType":"ArrayTypeName","src":"5557:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5556:18:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54911,"nodeType":"FunctionDefinition","src":"5731:209:81","nodes":[],"body":{"id":54910,"nodeType":"Block","src":"5819:121:81","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54900,"name":"_cleanValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55927,"src":"5829:16:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5829:18:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54902,"nodeType":"ExpressionStatement","src":"5829:18:81"},{"expression":{"arguments":[{"id":54904,"name":"validatorsAddressArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54895,"src":"5872:22:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"id":54903,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"5857:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5857:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54906,"nodeType":"ExpressionStatement","src":"5857:38:81"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":54907,"name":"ValidatorsSetChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53772,"src":"5911:20:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5911:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54909,"nodeType":"EmitStatement","src":"5906:27:81"}]},"baseFunctions":[53885],"functionSelector":"e71731e4","implemented":true,"kind":"function","modifiers":[{"id":54898,"kind":"modifierInvocation","modifierName":{"id":54897,"name":"onlyOwner","nameLocations":["5809:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"5809:9:81"},"nodeType":"ModifierInvocation","src":"5809:9:81"}],"name":"updateValidators","nameLocation":"5740:16:81","parameters":{"id":54896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54895,"mutability":"mutable","name":"validatorsAddressArray","nameLocation":"5776:22:81","nodeType":"VariableDeclaration","scope":54911,"src":"5757:41:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54893,"name":"address","nodeType":"ElementaryTypeName","src":"5757:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54894,"nodeType":"ArrayTypeName","src":"5757:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5756:43:81"},"returnParameters":{"id":54899,"nodeType":"ParameterList","parameters":[],"src":"5819:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54926,"nodeType":"FunctionDefinition","src":"5994:140:81","nodes":[],"body":{"id":54925,"nodeType":"Block","src":"6045:89:81","nodes":[],"statements":[{"assignments":[54918],"declarations":[{"constant":false,"id":54918,"mutability":"mutable","name":"router","nameLocation":"6071:6:81","nodeType":"VariableDeclaration","scope":54925,"src":"6055:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54917,"nodeType":"UserDefinedTypeName","pathNode":{"id":54916,"name":"Storage","nameLocations":["6055:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6055:7:81"},"referencedDeclaration":53684,"src":"6055:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54921,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54919,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6080:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6080:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6055:38:81"},{"expression":{"expression":{"id":54922,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54918,"src":"6110:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6117:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"6110:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":54915,"id":54924,"nodeType":"Return","src":"6103:24:81"}]},"baseFunctions":[53890],"functionSelector":"d3fd6364","implemented":true,"kind":"function","modifiers":[],"name":"baseWeight","nameLocation":"6003:10:81","parameters":{"id":54912,"nodeType":"ParameterList","parameters":[],"src":"6013:2:81"},"returnParameters":{"id":54915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54926,"src":"6037:6:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":54913,"name":"uint64","nodeType":"ElementaryTypeName","src":"6037:6:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6036:8:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54950,"nodeType":"FunctionDefinition","src":"6140:204:81","nodes":[],"body":{"id":54949,"nodeType":"Block","src":"6202:142:81","nodes":[],"statements":[{"assignments":[54935],"declarations":[{"constant":false,"id":54935,"mutability":"mutable","name":"router","nameLocation":"6228:6:81","nodeType":"VariableDeclaration","scope":54949,"src":"6212:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54934,"nodeType":"UserDefinedTypeName","pathNode":{"id":54933,"name":"Storage","nameLocations":["6212:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6212:7:81"},"referencedDeclaration":53684,"src":"6212:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54938,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54936,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6237:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6237:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6212:38:81"},{"expression":{"id":54943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54939,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54935,"src":"6260:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6267:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"6260:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54942,"name":"_baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54928,"src":"6280:11:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"6260:31:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":54944,"nodeType":"ExpressionStatement","src":"6260:31:81"},{"eventCall":{"arguments":[{"id":54946,"name":"_baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54928,"src":"6325:11:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":54945,"name":"BaseWeightChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53780,"src":"6307:17:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$returns$__$","typeString":"function (uint64)"}},"id":54947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6307:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54948,"nodeType":"EmitStatement","src":"6302:35:81"}]},"baseFunctions":[53895],"functionSelector":"8028861a","implemented":true,"kind":"function","modifiers":[{"id":54931,"kind":"modifierInvocation","modifierName":{"id":54930,"name":"onlyOwner","nameLocations":["6192:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"6192:9:81"},"nodeType":"ModifierInvocation","src":"6192:9:81"}],"name":"setBaseWeight","nameLocation":"6149:13:81","parameters":{"id":54929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54928,"mutability":"mutable","name":"_baseWeight","nameLocation":"6170:11:81","nodeType":"VariableDeclaration","scope":54950,"src":"6163:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":54927,"name":"uint64","nodeType":"ElementaryTypeName","src":"6163:6:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6162:20:81"},"returnParameters":{"id":54932,"nodeType":"ParameterList","parameters":[],"src":"6202:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54965,"nodeType":"FunctionDefinition","src":"6350:149:81","nodes":[],"body":{"id":54964,"nodeType":"Block","src":"6406:93:81","nodes":[],"statements":[{"assignments":[54957],"declarations":[{"constant":false,"id":54957,"mutability":"mutable","name":"router","nameLocation":"6432:6:81","nodeType":"VariableDeclaration","scope":54964,"src":"6416:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54956,"nodeType":"UserDefinedTypeName","pathNode":{"id":54955,"name":"Storage","nameLocations":["6416:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6416:7:81"},"referencedDeclaration":53684,"src":"6416:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54960,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54958,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6441:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6441:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6416:38:81"},{"expression":{"expression":{"id":54961,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"6471:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6478:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"6471:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":54954,"id":54963,"nodeType":"Return","src":"6464:28:81"}]},"baseFunctions":[53900],"functionSelector":"0834fecc","implemented":true,"kind":"function","modifiers":[],"name":"valuePerWeight","nameLocation":"6359:14:81","parameters":{"id":54951,"nodeType":"ParameterList","parameters":[],"src":"6373:2:81"},"returnParameters":{"id":54954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54965,"src":"6397:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54952,"name":"uint128","nodeType":"ElementaryTypeName","src":"6397:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6396:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54989,"nodeType":"FunctionDefinition","src":"6505:229:81","nodes":[],"body":{"id":54988,"nodeType":"Block","src":"6576:158:81","nodes":[],"statements":[{"assignments":[54974],"declarations":[{"constant":false,"id":54974,"mutability":"mutable","name":"router","nameLocation":"6602:6:81","nodeType":"VariableDeclaration","scope":54988,"src":"6586:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54973,"nodeType":"UserDefinedTypeName","pathNode":{"id":54972,"name":"Storage","nameLocations":["6586:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6586:7:81"},"referencedDeclaration":53684,"src":"6586:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54977,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54975,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6611:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6611:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6586:38:81"},{"expression":{"id":54982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54978,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54974,"src":"6634:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6641:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"6634:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54981,"name":"_valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"6658:15:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6634:39:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":54983,"nodeType":"ExpressionStatement","src":"6634:39:81"},{"eventCall":{"arguments":[{"id":54985,"name":"_valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"6711:15:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54984,"name":"ValuePerWeightChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53785,"src":"6689:21:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6689:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54987,"nodeType":"EmitStatement","src":"6684:43:81"}]},"baseFunctions":[53905],"functionSelector":"a6bbbe1c","implemented":true,"kind":"function","modifiers":[{"id":54970,"kind":"modifierInvocation","modifierName":{"id":54969,"name":"onlyOwner","nameLocations":["6566:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"6566:9:81"},"nodeType":"ModifierInvocation","src":"6566:9:81"}],"name":"setValuePerWeight","nameLocation":"6514:17:81","parameters":{"id":54968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54967,"mutability":"mutable","name":"_valuePerWeight","nameLocation":"6540:15:81","nodeType":"VariableDeclaration","scope":54989,"src":"6532:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54966,"name":"uint128","nodeType":"ElementaryTypeName","src":"6532:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6531:25:81"},"returnParameters":{"id":54971,"nodeType":"ParameterList","parameters":[],"src":"6576:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55004,"nodeType":"FunctionDefinition","src":"6740:113:81","nodes":[],"body":{"id":55003,"nodeType":"Block","src":"6789:64:81","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54996,"name":"baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54926,"src":"6814:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint64_$","typeString":"function () view returns (uint64)"}},"id":54997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6814:12:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":54995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6806:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":54994,"name":"uint128","nodeType":"ElementaryTypeName","src":"6806:7:81","typeDescriptions":{}}},"id":54998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6806:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54999,"name":"valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54965,"src":"6830:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint128_$","typeString":"function () view returns (uint128)"}},"id":55000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6830:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6806:40:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":54993,"id":55002,"nodeType":"Return","src":"6799:47:81"}]},"baseFunctions":[53910],"functionSelector":"6ef25c3a","implemented":true,"kind":"function","modifiers":[],"name":"baseFee","nameLocation":"6749:7:81","parameters":{"id":54990,"nodeType":"ParameterList","parameters":[],"src":"6756:2:81"},"returnParameters":{"id":54993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55004,"src":"6780:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54991,"name":"uint128","nodeType":"ElementaryTypeName","src":"6780:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6779:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55056,"nodeType":"FunctionDefinition","src":"6889:453:81","nodes":[],"body":{"id":55055,"nodeType":"Block","src":"6965:377:81","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":55020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55012,"name":"blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55008,"src":"6983:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6997:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6983:15:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"30","id":55016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7011:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":55015,"name":"blobhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-29,"src":"7002:8:81","typeDescriptions":{"typeIdentifier":"t_function_blobhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":55017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7002:11:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7017:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7002:16:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6983:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626c6f6254784861736820636f756c646e277420626520666f756e64","id":55021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7020:30:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_944fe86403884466c74284042289853a231d438ed298af2a81bff9b6914f84e1","typeString":"literal_string \"blobTxHash couldn't be found\""},"value":"blobTxHash couldn't be found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_944fe86403884466c74284042289853a231d438ed298af2a81bff9b6914f84e1","typeString":"literal_string \"blobTxHash couldn't be found\""}],"id":55011,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6975:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6975:76:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55023,"nodeType":"ExpressionStatement","src":"6975:76:81"},{"assignments":[55026],"declarations":[{"constant":false,"id":55026,"mutability":"mutable","name":"router","nameLocation":"7078:6:81","nodeType":"VariableDeclaration","scope":55055,"src":"7062:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55025,"nodeType":"UserDefinedTypeName","pathNode":{"id":55024,"name":"Storage","nameLocations":["7062:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"7062:7:81"},"referencedDeclaration":53684,"src":"7062:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55029,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55027,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"7087:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7087:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7062:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55031,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55026,"src":"7119:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7126:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7119:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55034,"indexExpression":{"id":55033,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7132:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7119:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55035,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7143:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7153:7:81","memberName":"Unknown","nodeType":"MemberAccess","referencedDeclaration":53685,"src":"7143:17:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7119:41:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f64652077697468207375636820696420616c726561647920726571756573746564206f722076616c696461746564","id":55038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7162:50:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_86d0efc10a98e1b7506967b99e345a37d8ca52b6f212bb7eaafd6d43a903647b","typeString":"literal_string \"code with such id already requested or validated\""},"value":"code with such id already requested or validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_86d0efc10a98e1b7506967b99e345a37d8ca52b6f212bb7eaafd6d43a903647b","typeString":"literal_string \"code with such id already requested or validated\""}],"id":55030,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7111:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7111:102:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55040,"nodeType":"ExpressionStatement","src":"7111:102:81"},{"expression":{"id":55048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55041,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55026,"src":"7224:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7231:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7224:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55045,"indexExpression":{"id":55043,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7237:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7224:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55046,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7247:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7257:19:81","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":53686,"src":"7247:29:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7224:52:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"id":55049,"nodeType":"ExpressionStatement","src":"7224:52:81"},{"eventCall":{"arguments":[{"id":55051,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7316:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55052,"name":"blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55008,"src":"7324:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55050,"name":"CodeValidationRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53755,"src":"7292:23:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":55053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7292:43:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55054,"nodeType":"EmitStatement","src":"7287:48:81"}]},"baseFunctions":[53917],"functionSelector":"1c149d8a","implemented":true,"kind":"function","modifiers":[],"name":"requestCodeValidation","nameLocation":"6898:21:81","parameters":{"id":55009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55006,"mutability":"mutable","name":"codeId","nameLocation":"6928:6:81","nodeType":"VariableDeclaration","scope":55056,"src":"6920:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55005,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6920:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55008,"mutability":"mutable","name":"blobTxHash","nameLocation":"6944:10:81","nodeType":"VariableDeclaration","scope":55056,"src":"6936:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55007,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6936:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6919:36:81"},"returnParameters":{"id":55010,"nodeType":"ParameterList","parameters":[],"src":"6965:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55156,"nodeType":"FunctionDefinition","src":"7348:1033:81","nodes":[],"body":{"id":55155,"nodeType":"Block","src":"7504:877:81","nodes":[],"statements":[{"assignments":[55071],"declarations":[{"constant":false,"id":55071,"mutability":"mutable","name":"router","nameLocation":"7530:6:81","nodeType":"VariableDeclaration","scope":55155,"src":"7514:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55070,"nodeType":"UserDefinedTypeName","pathNode":{"id":55069,"name":"Storage","nameLocations":["7514:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"7514:7:81"},"referencedDeclaration":53684,"src":"7514:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55074,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55072,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"7539:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7539:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7514:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55076,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"7571:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7578:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7571:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55079,"indexExpression":{"id":55078,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"7584:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7571:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55080,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7595:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7605:9:81","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":53687,"src":"7595:19:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7571:43:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652076616c696461746564206265666f72652070726f6772616d206372656174696f6e","id":55083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7616:48:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""},"value":"code must be validated before program creation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""}],"id":55075,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7563:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7563:102:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55085,"nodeType":"ExpressionStatement","src":"7563:102:81"},{"assignments":[55087],"declarations":[{"constant":false,"id":55087,"mutability":"mutable","name":"baseFeeValue","nameLocation":"7684:12:81","nodeType":"VariableDeclaration","scope":55155,"src":"7676:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55086,"name":"uint128","nodeType":"ElementaryTypeName","src":"7676:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55090,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55088,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55004,"src":"7699:7:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint128_$","typeString":"function () view returns (uint128)"}},"id":55089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7699:9:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7676:32:81"},{"assignments":[55092],"declarations":[{"constant":false,"id":55092,"mutability":"mutable","name":"executableBalance","nameLocation":"7726:17:81","nodeType":"VariableDeclaration","scope":55155,"src":"7718:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55091,"name":"uint128","nodeType":"ElementaryTypeName","src":"7718:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55096,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55093,"name":"baseFeeValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55087,"src":"7746:12:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3130","id":55094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7761:2:81","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"7746:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7718:45:81"},{"assignments":[55098],"declarations":[{"constant":false,"id":55098,"mutability":"mutable","name":"totalValue","nameLocation":"7782:10:81","nodeType":"VariableDeclaration","scope":55155,"src":"7774:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55097,"name":"uint128","nodeType":"ElementaryTypeName","src":"7774:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55104,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55099,"name":"baseFeeValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55087,"src":"7795:12:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55100,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55092,"src":"7810:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7795:32:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55102,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55064,"src":"7830:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7795:41:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7774:62:81"},{"expression":{"arguments":[{"id":55106,"name":"totalValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55098,"src":"7862:10:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":55105,"name":"_retrieveValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55886,"src":"7847:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":55107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7847:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55108,"nodeType":"ExpressionStatement","src":"7847:26:81"},{"assignments":[55110],"declarations":[{"constant":false,"id":55110,"mutability":"mutable","name":"actorId","nameLocation":"8042:7:81","nodeType":"VariableDeclaration","scope":55155,"src":"8034:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55109,"name":"address","nodeType":"ElementaryTypeName","src":"8034:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55123,"initialValue":{"arguments":[{"expression":{"id":55113,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8078:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8085:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"8078:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":55118,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8125:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55119,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55060,"src":"8133:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55116,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8108:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8112:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"8108:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8108:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55115,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8098:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8098:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55111,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41121,"src":"8052:6:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$41121_$","typeString":"type(library Clones)"}},"id":55112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8059:18:81","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":41039,"src":"8052:25:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":55122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8052:88:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8034:106:81"},{"expression":{"id":55130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55124,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8151:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8158:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"8151:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":55128,"indexExpression":{"id":55126,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8167:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8151:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55129,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8178:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8151:33:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55131,"nodeType":"ExpressionStatement","src":"8151:33:81"},{"expression":{"id":55135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8194:22:81","subExpression":{"expression":{"id":55132,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8194:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8201:13:81","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":53683,"src":"8194:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55136,"nodeType":"ExpressionStatement","src":"8194:22:81"},{"eventCall":{"arguments":[{"id":55138,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8247:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55139,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8256:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55137,"name":"ProgramCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53769,"src":"8232:14:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32)"}},"id":55140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8232:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55141,"nodeType":"EmitStatement","src":"8227:36:81"},{"expression":{"arguments":[{"expression":{"id":55146,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"8303:2:81","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":55147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8306:6:81","memberName":"origin","nodeType":"MemberAccess","src":"8303:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55148,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55062,"src":"8314:7:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":55149,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55064,"src":"8323:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":55150,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55092,"src":"8331:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"id":55143,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8282:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55142,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"8274:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$53636_$","typeString":"type(contract IMirror)"}},"id":55144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8274:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8291:11:81","memberName":"initMessage","nodeType":"MemberAccess","referencedDeclaration":53635,"src":"8274:28:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,bytes memory,uint128,uint128) external"}},"id":55151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8274:75:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55152,"nodeType":"ExpressionStatement","src":"8274:75:81"},{"expression":{"id":55153,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8367:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":55068,"id":55154,"nodeType":"Return","src":"8360:14:81"}]},"baseFunctions":[53930],"functionSelector":"8074b455","implemented":true,"kind":"function","modifiers":[],"name":"createProgram","nameLocation":"7357:13:81","parameters":{"id":55065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55058,"mutability":"mutable","name":"codeId","nameLocation":"7379:6:81","nodeType":"VariableDeclaration","scope":55156,"src":"7371:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55057,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7371:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55060,"mutability":"mutable","name":"salt","nameLocation":"7395:4:81","nodeType":"VariableDeclaration","scope":55156,"src":"7387:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55059,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7387:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55062,"mutability":"mutable","name":"payload","nameLocation":"7416:7:81","nodeType":"VariableDeclaration","scope":55156,"src":"7401:22:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":55061,"name":"bytes","nodeType":"ElementaryTypeName","src":"7401:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":55064,"mutability":"mutable","name":"_value","nameLocation":"7433:6:81","nodeType":"VariableDeclaration","scope":55156,"src":"7425:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55063,"name":"uint128","nodeType":"ElementaryTypeName","src":"7425:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7370:70:81"},"returnParameters":{"id":55068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55156,"src":"7491:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55066,"name":"address","nodeType":"ElementaryTypeName","src":"7491:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7490:9:81"},"scope":55996,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":55269,"nodeType":"FunctionDefinition","src":"8387:1117:81","nodes":[],"body":{"id":55268,"nodeType":"Block","src":"8494:1010:81","nodes":[],"statements":[{"assignments":[55168],"declarations":[{"constant":false,"id":55168,"mutability":"mutable","name":"router","nameLocation":"8520:6:81","nodeType":"VariableDeclaration","scope":55268,"src":"8504:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55167,"nodeType":"UserDefinedTypeName","pathNode":{"id":55166,"name":"Storage","nameLocations":["8504:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"8504:7:81"},"referencedDeclaration":53684,"src":"8504:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55171,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55169,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"8529:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8529:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8504:38:81"},{"assignments":[55173],"declarations":[{"constant":false,"id":55173,"mutability":"mutable","name":"codeCommetmentsHashes","nameLocation":"8566:21:81","nodeType":"VariableDeclaration","scope":55268,"src":"8553:34:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55172,"name":"bytes","nodeType":"ElementaryTypeName","src":"8553:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55174,"nodeType":"VariableDeclarationStatement","src":"8553:34:81"},{"body":{"id":55259,"nodeType":"Block","src":"8656:766:81","statements":[{"assignments":[55188],"declarations":[{"constant":false,"id":55188,"mutability":"mutable","name":"codeCommitment","nameLocation":"8694:14:81","nodeType":"VariableDeclaration","scope":55259,"src":"8670:38:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment"},"typeName":{"id":55187,"nodeType":"UserDefinedTypeName","pathNode":{"id":55186,"name":"CodeCommitment","nameLocations":["8670:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"8670:14:81"},"referencedDeclaration":53693,"src":"8670:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"visibility":"internal"}],"id":55192,"initialValue":{"baseExpression":{"id":55189,"name":"codeCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55160,"src":"8711:20:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata[] calldata"}},"id":55191,"indexExpression":{"id":55190,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8732:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8711:23:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"8670:64:81"},{"assignments":[55194],"declarations":[{"constant":false,"id":55194,"mutability":"mutable","name":"codeCommitmentHash","nameLocation":"8757:18:81","nodeType":"VariableDeclaration","scope":55259,"src":"8749:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55193,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8749:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55198,"initialValue":{"arguments":[{"id":55196,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"8798:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}],"id":55195,"name":"_codeCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55853,"src":"8778:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_CodeCommitment_$53693_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.CodeCommitment calldata) pure returns (bytes32)"}},"id":55197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8778:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8749:64:81"},{"expression":{"id":55206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55199,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"8828:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55203,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"8865:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55204,"name":"codeCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55194,"src":"8888:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8852:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55200,"name":"bytes","nodeType":"ElementaryTypeName","src":"8852:5:81","typeDescriptions":{}}},"id":55202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8858:6:81","memberName":"concat","nodeType":"MemberAccess","src":"8852:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8852:55:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"8828:79:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55207,"nodeType":"ExpressionStatement","src":"8828:79:81"},{"assignments":[55209],"declarations":[{"constant":false,"id":55209,"mutability":"mutable","name":"codeId","nameLocation":"8930:6:81","nodeType":"VariableDeclaration","scope":55259,"src":"8922:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55208,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8922:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55212,"initialValue":{"expression":{"id":55210,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"8939:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8954:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53690,"src":"8939:17:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8922:34:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55214,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"8978:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8985:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"8978:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55217,"indexExpression":{"id":55216,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"8991:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8978:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55218,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"9002:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55219,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9012:19:81","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":53686,"src":"9002:29:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"8978:53:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f64652073686f756c642062652072657175657374656420666f722076616c69646174696f6e","id":55221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9033:41:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f0f0146c5c6578abd878317fc7dbe7872a552fba3ce3a30a1e42dfd172e27f7","typeString":"literal_string \"code should be requested for validation\""},"value":"code should be requested for validation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9f0f0146c5c6578abd878317fc7dbe7872a552fba3ce3a30a1e42dfd172e27f7","typeString":"literal_string \"code should be requested for validation\""}],"id":55213,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8970:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8970:105:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55223,"nodeType":"ExpressionStatement","src":"8970:105:81"},{"condition":{"expression":{"id":55224,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"9094:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9109:5:81","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":53692,"src":"9094:20:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55257,"nodeType":"Block","src":"9297:115:81","statements":[{"expression":{"id":55250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9315:27:81","subExpression":{"baseExpression":{"expression":{"id":55246,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9322:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9329:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"9322:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55249,"indexExpression":{"id":55248,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9335:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9322:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55251,"nodeType":"ExpressionStatement","src":"9315:27:81"},{"eventCall":{"arguments":[{"id":55253,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9383:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"66616c7365","id":55254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9391:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":55252,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53762,"src":"9366:16:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":55255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9366:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55256,"nodeType":"EmitStatement","src":"9361:36:81"}]},"id":55258,"nodeType":"IfStatement","src":"9090:322:81","trueBody":{"id":55245,"nodeType":"Block","src":"9116:175:81","statements":[{"expression":{"id":55233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55226,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9134:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9141:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"9134:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55230,"indexExpression":{"id":55228,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9147:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9134:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55231,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"9157:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9167:9:81","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":53687,"src":"9157:19:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"9134:42:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"id":55234,"nodeType":"ExpressionStatement","src":"9134:42:81"},{"expression":{"id":55238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9194:28:81","subExpression":{"expression":{"id":55235,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9194:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9201:19:81","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":53677,"src":"9194:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55239,"nodeType":"ExpressionStatement","src":"9194:28:81"},{"eventCall":{"arguments":[{"id":55241,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9263:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":55242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9271:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":55240,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53762,"src":"9246:16:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":55243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9246:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55244,"nodeType":"EmitStatement","src":"9241:35:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55179,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8618:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55180,"name":"codeCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55160,"src":"8622:20:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata[] calldata"}},"id":55181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8643:6:81","memberName":"length","nodeType":"MemberAccess","src":"8622:27:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8618:31:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55260,"initializationExpression":{"assignments":[55176],"declarations":[{"constant":false,"id":55176,"mutability":"mutable","name":"i","nameLocation":"8611:1:81","nodeType":"VariableDeclaration","scope":55260,"src":"8603:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55175,"name":"uint256","nodeType":"ElementaryTypeName","src":"8603:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55178,"initialValue":{"hexValue":"30","id":55177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8615:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8603:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8651:3:81","subExpression":{"id":55183,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8651:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55185,"nodeType":"ExpressionStatement","src":"8651:3:81"},"nodeType":"ForStatement","src":"8598:824:81"},{"expression":{"arguments":[{"arguments":[{"id":55263,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"9462:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55262,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9452:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9452:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55265,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55163,"src":"9486:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":55261,"name":"_validateSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"9432:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes calldata[] calldata) view"}},"id":55266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9432:65:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55267,"nodeType":"ExpressionStatement","src":"9432:65:81"}]},"baseFunctions":[53940],"functionSelector":"e97d3eb3","implemented":true,"kind":"function","modifiers":[],"name":"commitCodes","nameLocation":"8396:11:81","parameters":{"id":55164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55160,"mutability":"mutable","name":"codeCommitmentsArray","nameLocation":"8434:20:81","nodeType":"VariableDeclaration","scope":55269,"src":"8408:46:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment[]"},"typeName":{"baseType":{"id":55158,"nodeType":"UserDefinedTypeName","pathNode":{"id":55157,"name":"CodeCommitment","nameLocations":["8408:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"8408:14:81"},"referencedDeclaration":53693,"src":"8408:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"id":55159,"nodeType":"ArrayTypeName","src":"8408:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_storage_$dyn_storage_ptr","typeString":"struct IRouter.CodeCommitment[]"}},"visibility":"internal"},{"constant":false,"id":55163,"mutability":"mutable","name":"signatures","nameLocation":"8473:10:81","nodeType":"VariableDeclaration","scope":55269,"src":"8456:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55161,"name":"bytes","nodeType":"ElementaryTypeName","src":"8456:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55162,"nodeType":"ArrayTypeName","src":"8456:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"8407:77:81"},"returnParameters":{"id":55165,"nodeType":"ParameterList","parameters":[],"src":"8494:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55325,"nodeType":"FunctionDefinition","src":"9510:571:81","nodes":[],"body":{"id":55324,"nodeType":"Block","src":"9620:461:81","nodes":[],"statements":[{"assignments":[55280],"declarations":[{"constant":false,"id":55280,"mutability":"mutable","name":"blockCommitmentsHashes","nameLocation":"9643:22:81","nodeType":"VariableDeclaration","scope":55324,"src":"9630:35:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55279,"name":"bytes","nodeType":"ElementaryTypeName","src":"9630:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55281,"nodeType":"VariableDeclarationStatement","src":"9630:35:81"},{"body":{"id":55315,"nodeType":"Block","src":"9735:263:81","statements":[{"assignments":[55295],"declarations":[{"constant":false,"id":55295,"mutability":"mutable","name":"blockCommitment","nameLocation":"9774:15:81","nodeType":"VariableDeclaration","scope":55315,"src":"9749:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment"},"typeName":{"id":55294,"nodeType":"UserDefinedTypeName","pathNode":{"id":55293,"name":"BlockCommitment","nameLocations":["9749:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"9749:15:81"},"referencedDeclaration":53704,"src":"9749:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"visibility":"internal"}],"id":55299,"initialValue":{"baseExpression":{"id":55296,"name":"blockCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55273,"src":"9792:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata[] calldata"}},"id":55298,"indexExpression":{"id":55297,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9814:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9792:24:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"9749:67:81"},{"assignments":[55301],"declarations":[{"constant":false,"id":55301,"mutability":"mutable","name":"blockCommitmentHash","nameLocation":"9839:19:81","nodeType":"VariableDeclaration","scope":55315,"src":"9831:27:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55300,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9831:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55305,"initialValue":{"arguments":[{"id":55303,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55295,"src":"9874:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}],"id":55302,"name":"_commitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55510,"src":"9861:12:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_BlockCommitment_$53704_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.BlockCommitment calldata) returns (bytes32)"}},"id":55304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9861:29:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9831:59:81"},{"expression":{"id":55313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55306,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"9905:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55310,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"9943:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55311,"name":"blockCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55301,"src":"9967:19:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55308,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9930:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55307,"name":"bytes","nodeType":"ElementaryTypeName","src":"9930:5:81","typeDescriptions":{}}},"id":55309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9936:6:81","memberName":"concat","nodeType":"MemberAccess","src":"9930:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9930:57:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"9905:82:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55314,"nodeType":"ExpressionStatement","src":"9905:82:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55286,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9696:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55287,"name":"blockCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55273,"src":"9700:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata[] calldata"}},"id":55288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9722:6:81","memberName":"length","nodeType":"MemberAccess","src":"9700:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9696:32:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55316,"initializationExpression":{"assignments":[55283],"declarations":[{"constant":false,"id":55283,"mutability":"mutable","name":"i","nameLocation":"9689:1:81","nodeType":"VariableDeclaration","scope":55316,"src":"9681:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55282,"name":"uint256","nodeType":"ElementaryTypeName","src":"9681:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55285,"initialValue":{"hexValue":"30","id":55284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9693:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9681:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9730:3:81","subExpression":{"id":55290,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9730:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55292,"nodeType":"ExpressionStatement","src":"9730:3:81"},"nodeType":"ForStatement","src":"9676:322:81"},{"expression":{"arguments":[{"arguments":[{"id":55319,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"10038:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55318,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10028:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10028:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55321,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55276,"src":"10063:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":55317,"name":"_validateSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"10008:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes calldata[] calldata) view"}},"id":55322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10008:66:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55323,"nodeType":"ExpressionStatement","src":"10008:66:81"}]},"baseFunctions":[53950],"functionSelector":"fa97ed6d","implemented":true,"kind":"function","modifiers":[],"name":"commitBlocks","nameLocation":"9519:12:81","parameters":{"id":55277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55273,"mutability":"mutable","name":"blockCommitmentsArray","nameLocation":"9559:21:81","nodeType":"VariableDeclaration","scope":55325,"src":"9532:48:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment[]"},"typeName":{"baseType":{"id":55271,"nodeType":"UserDefinedTypeName","pathNode":{"id":55270,"name":"BlockCommitment","nameLocations":["9532:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"9532:15:81"},"referencedDeclaration":53704,"src":"9532:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"id":55272,"nodeType":"ArrayTypeName","src":"9532:17:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_storage_$dyn_storage_ptr","typeString":"struct IRouter.BlockCommitment[]"}},"visibility":"internal"},{"constant":false,"id":55276,"mutability":"mutable","name":"signatures","nameLocation":"9599:10:81","nodeType":"VariableDeclaration","scope":55325,"src":"9582:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55274,"name":"bytes","nodeType":"ElementaryTypeName","src":"9582:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55275,"nodeType":"ArrayTypeName","src":"9582:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"9531:79:81"},"returnParameters":{"id":55278,"nodeType":"ParameterList","parameters":[],"src":"9620:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55414,"nodeType":"FunctionDefinition","src":"10123:844:81","nodes":[],"body":{"id":55413,"nodeType":"Block","src":"10212:755:81","nodes":[],"statements":[{"assignments":[55335],"declarations":[{"constant":false,"id":55335,"mutability":"mutable","name":"router","nameLocation":"10238:6:81","nodeType":"VariableDeclaration","scope":55413,"src":"10222:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55334,"nodeType":"UserDefinedTypeName","pathNode":{"id":55333,"name":"Storage","nameLocations":["10222:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"10222:7:81"},"referencedDeclaration":53684,"src":"10222:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55338,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55336,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"10247:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10247:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10222:38:81"},{"assignments":[55340],"declarations":[{"constant":false,"id":55340,"mutability":"mutable","name":"threshold","nameLocation":"10279:9:81","nodeType":"VariableDeclaration","scope":55413,"src":"10271:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55339,"name":"uint256","nodeType":"ElementaryTypeName","src":"10271:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55343,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55341,"name":"validatorsThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54841,"src":"10291:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":55342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10291:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10271:41:81"},{"assignments":[55345],"declarations":[{"constant":false,"id":55345,"mutability":"mutable","name":"messageHash","nameLocation":"10331:11:81","nodeType":"VariableDeclaration","scope":55413,"src":"10323:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55344,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10323:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55356,"initialValue":{"arguments":[{"arguments":[{"id":55353,"name":"dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55327,"src":"10408:8:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55351,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10391:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10395:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"10391:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10391:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":55348,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10353:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}],"id":55347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10345:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55346,"name":"address","nodeType":"ElementaryTypeName","src":"10345:7:81","typeDescriptions":{}}},"id":55349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10345:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10359:31:81","memberName":"toDataWithIntendedValidatorHash","nodeType":"MemberAccess","referencedDeclaration":43448,"src":"10345:45:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes32_$attached_to$_t_address_$","typeString":"function (address,bytes memory) pure returns (bytes32)"}},"id":55355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10345:73:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"10323:95:81"},{"assignments":[55358],"declarations":[{"constant":false,"id":55358,"mutability":"mutable","name":"validSignatures","nameLocation":"10436:15:81","nodeType":"VariableDeclaration","scope":55413,"src":"10428:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55357,"name":"uint256","nodeType":"ElementaryTypeName","src":"10428:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55360,"initialValue":{"hexValue":"30","id":55359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10454:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10428:27:81"},{"body":{"id":55404,"nodeType":"Block","src":"10514:368:81","statements":[{"assignments":[55373],"declarations":[{"constant":false,"id":55373,"mutability":"mutable","name":"signature","nameLocation":"10543:9:81","nodeType":"VariableDeclaration","scope":55404,"src":"10528:24:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":55372,"name":"bytes","nodeType":"ElementaryTypeName","src":"10528:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55377,"initialValue":{"baseExpression":{"id":55374,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"10555:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":55376,"indexExpression":{"id":55375,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10566:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10555:13:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"nodeType":"VariableDeclarationStatement","src":"10528:40:81"},{"assignments":[55379],"declarations":[{"constant":false,"id":55379,"mutability":"mutable","name":"validator","nameLocation":"10591:9:81","nodeType":"VariableDeclaration","scope":55404,"src":"10583:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55378,"name":"address","nodeType":"ElementaryTypeName","src":"10583:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55384,"initialValue":{"arguments":[{"id":55382,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55373,"src":"10623:9:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":55380,"name":"messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55345,"src":"10603:11:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10615:7:81","memberName":"recover","nodeType":"MemberAccess","referencedDeclaration":43143,"src":"10603:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bytes memory) pure returns (address)"}},"id":55383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10603:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10583:50:81"},{"condition":{"baseExpression":{"expression":{"id":55385,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55335,"src":"10652:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55386,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10659:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"10652:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55388,"indexExpression":{"id":55387,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55379,"src":"10670:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10652:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55402,"nodeType":"Block","src":"10802:70:81","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":55398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10828:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"696e636f7272656374207369676e6174757265","id":55399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10835:21:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_641ab7289dc6df3dff0edafbede614b21294e2bb9f09800443d88f57818afe8f","typeString":"literal_string \"incorrect signature\""},"value":"incorrect signature"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_641ab7289dc6df3dff0edafbede614b21294e2bb9f09800443d88f57818afe8f","typeString":"literal_string \"incorrect signature\""}],"id":55397,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10820:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10820:37:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55401,"nodeType":"ExpressionStatement","src":"10820:37:81"}]},"id":55403,"nodeType":"IfStatement","src":"10648:224:81","trueBody":{"id":55396,"nodeType":"Block","src":"10682:114:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10704:17:81","subExpression":{"id":55389,"name":"validSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"10706:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55391,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55340,"src":"10725:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10704:30:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55395,"nodeType":"IfStatement","src":"10700:82:81","trueBody":{"id":55394,"nodeType":"Block","src":"10736:46:81","statements":[{"id":55393,"nodeType":"Break","src":"10758:5:81"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55365,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10486:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55366,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"10490:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":55367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10501:6:81","memberName":"length","nodeType":"MemberAccess","src":"10490:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10486:21:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55405,"initializationExpression":{"assignments":[55362],"declarations":[{"constant":false,"id":55362,"mutability":"mutable","name":"i","nameLocation":"10479:1:81","nodeType":"VariableDeclaration","scope":55405,"src":"10471:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55361,"name":"uint256","nodeType":"ElementaryTypeName","src":"10471:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55364,"initialValue":{"hexValue":"30","id":55363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10483:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10471:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10509:3:81","subExpression":{"id":55369,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10509:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55371,"nodeType":"ExpressionStatement","src":"10509:3:81"},"nodeType":"ForStatement","src":"10466:416:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55407,"name":"validSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"10900:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":55408,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55340,"src":"10919:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10900:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e6f7420656e6f7567682076616c6964207369676e617475726573","id":55410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10930:29:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_8852ba723d98bcf316aab69f38fb5da08e0bfb912ef589b19218c396aac3c0bc","typeString":"literal_string \"not enough valid signatures\""},"value":"not enough valid signatures"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8852ba723d98bcf316aab69f38fb5da08e0bfb912ef589b19218c396aac3c0bc","typeString":"literal_string \"not enough valid signatures\""}],"id":55406,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10892:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10892:68:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55412,"nodeType":"ExpressionStatement","src":"10892:68:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateSignatures","nameLocation":"10132:19:81","parameters":{"id":55331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55327,"mutability":"mutable","name":"dataHash","nameLocation":"10160:8:81","nodeType":"VariableDeclaration","scope":55414,"src":"10152:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55326,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10152:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55330,"mutability":"mutable","name":"signatures","nameLocation":"10187:10:81","nodeType":"VariableDeclaration","scope":55414,"src":"10170:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55328,"name":"bytes","nodeType":"ElementaryTypeName","src":"10170:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55329,"nodeType":"ArrayTypeName","src":"10170:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"10151:47:81"},"returnParameters":{"id":55332,"nodeType":"ParameterList","parameters":[],"src":"10212:0:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":55510,"nodeType":"FunctionDefinition","src":"10973:1114:81","nodes":[],"body":{"id":55509,"nodeType":"Block","src":"11063:1024:81","nodes":[],"statements":[{"assignments":[55424],"declarations":[{"constant":false,"id":55424,"mutability":"mutable","name":"router","nameLocation":"11089:6:81","nodeType":"VariableDeclaration","scope":55509,"src":"11073:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55423,"nodeType":"UserDefinedTypeName","pathNode":{"id":55422,"name":"Storage","nameLocations":["11073:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"11073:7:81"},"referencedDeclaration":53684,"src":"11073:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55427,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55425,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"11098:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11098:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"11073:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55429,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"11143:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11150:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"11143:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55431,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11177:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11193:18:81","memberName":"prevCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53697,"src":"11177:34:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11143:68:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c69642070726576696f757320636f6d6d69746d656e742068617368","id":55434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11213:34:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_fef95c9e1944529fb91083689c978504d88f59fdb02e6fd241a073fa572e7d3e","typeString":"literal_string \"invalid previous commitment hash\""},"value":"invalid previous commitment hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fef95c9e1944529fb91083689c978504d88f59fdb02e6fd241a073fa572e7d3e","typeString":"literal_string \"invalid previous commitment hash\""}],"id":55428,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11122:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11122:135:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55436,"nodeType":"ExpressionStatement","src":"11122:135:81"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":55439,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11294:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11310:13:81","memberName":"predBlockHash","nodeType":"MemberAccess","referencedDeclaration":53699,"src":"11294:29:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55438,"name":"_isPredecessorHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55554,"src":"11275:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32) view returns (bool)"}},"id":55441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11275:49:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f756e64","id":55442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11326:37:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_7d09fbc5a1c193a0826cadcc2903c8170aac2d31f22b53e69a64923153c8207e","typeString":"literal_string \"allowed predecessor block not found\""},"value":"allowed predecessor block not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7d09fbc5a1c193a0826cadcc2903c8170aac2d31f22b53e69a64923153c8207e","typeString":"literal_string \"allowed predecessor block not found\""}],"id":55437,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11267:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11267:97:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55444,"nodeType":"ExpressionStatement","src":"11267:97:81"},{"assignments":[55446],"declarations":[{"constant":false,"id":55446,"mutability":"mutable","name":"transitionsHashes","nameLocation":"11388:17:81","nodeType":"VariableDeclaration","scope":55509,"src":"11375:30:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55445,"name":"bytes","nodeType":"ElementaryTypeName","src":"11375:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55447,"nodeType":"VariableDeclarationStatement","src":"11375:30:81"},{"body":{"id":55483,"nodeType":"Block","src":"11481:255:81","statements":[{"assignments":[55462],"declarations":[{"constant":false,"id":55462,"mutability":"mutable","name":"stateTransition","nameLocation":"11520:15:81","nodeType":"VariableDeclaration","scope":55483,"src":"11495:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition"},"typeName":{"id":55461,"nodeType":"UserDefinedTypeName","pathNode":{"id":55460,"name":"StateTransition","nameLocations":["11495:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53719,"src":"11495:15:81"},"referencedDeclaration":53719,"src":"11495:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_storage_ptr","typeString":"struct IRouter.StateTransition"}},"visibility":"internal"}],"id":55467,"initialValue":{"baseExpression":{"expression":{"id":55463,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11538:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11554:11:81","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":53703,"src":"11538:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$53719_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.StateTransition calldata[] calldata"}},"id":55466,"indexExpression":{"id":55465,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11566:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11538:30:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"nodeType":"VariableDeclarationStatement","src":"11495:73:81"},{"assignments":[55469],"declarations":[{"constant":false,"id":55469,"mutability":"mutable","name":"transitionHash","nameLocation":"11591:14:81","nodeType":"VariableDeclaration","scope":55483,"src":"11583:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55468,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11583:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55473,"initialValue":{"arguments":[{"id":55471,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55462,"src":"11627:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}],"id":55470,"name":"_doStateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55754,"src":"11608:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_StateTransition_$53719_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.StateTransition calldata) returns (bytes32)"}},"id":55472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11608:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"11583:60:81"},{"expression":{"id":55481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55474,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"11658:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55478,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"11691:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55479,"name":"transitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55469,"src":"11710:14:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11678:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55475,"name":"bytes","nodeType":"ElementaryTypeName","src":"11678:5:81","typeDescriptions":{}}},"id":55477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11684:6:81","memberName":"concat","nodeType":"MemberAccess","src":"11678:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11678:47:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"11658:67:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55482,"nodeType":"ExpressionStatement","src":"11658:67:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55452,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11436:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55453,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11440:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11456:11:81","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":53703,"src":"11440:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$53719_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.StateTransition calldata[] calldata"}},"id":55455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11468:6:81","memberName":"length","nodeType":"MemberAccess","src":"11440:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11436:38:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55484,"initializationExpression":{"assignments":[55449],"declarations":[{"constant":false,"id":55449,"mutability":"mutable","name":"i","nameLocation":"11429:1:81","nodeType":"VariableDeclaration","scope":55484,"src":"11421:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55448,"name":"uint256","nodeType":"ElementaryTypeName","src":"11421:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55451,"initialValue":{"hexValue":"30","id":55450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11433:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11421:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11476:3:81","subExpression":{"id":55457,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11476:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55459,"nodeType":"ExpressionStatement","src":"11476:3:81"},"nodeType":"ForStatement","src":"11416:320:81"},{"expression":{"id":55490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":55485,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"11746:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11753:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"11746:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55488,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11779:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11795:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11779:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11746:58:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55491,"nodeType":"ExpressionStatement","src":"11746:58:81"},{"eventCall":{"arguments":[{"expression":{"id":55493,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11834:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11850:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11834:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55492,"name":"BlockCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53748,"src":"11819:14:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":55495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11819:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55496,"nodeType":"EmitStatement","src":"11814:46:81"},{"expression":{"arguments":[{"expression":{"id":55498,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11912:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11928:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11912:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55500,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11951:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11967:18:81","memberName":"prevCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53697,"src":"11951:34:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55502,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11999:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12015:13:81","memberName":"predBlockHash","nodeType":"MemberAccess","referencedDeclaration":53699,"src":"11999:29:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":55505,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"12052:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55504,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"12042:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12042:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55497,"name":"_blockCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55778,"src":"11878:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32,bytes32) pure returns (bytes32)"}},"id":55507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11878:202:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55421,"id":55508,"nodeType":"Return","src":"11871:209:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitBlock","nameLocation":"10982:12:81","parameters":{"id":55418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55417,"mutability":"mutable","name":"blockCommitment","nameLocation":"11020:15:81","nodeType":"VariableDeclaration","scope":55510,"src":"10995:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment"},"typeName":{"id":55416,"nodeType":"UserDefinedTypeName","pathNode":{"id":55415,"name":"BlockCommitment","nameLocations":["10995:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"10995:15:81"},"referencedDeclaration":53704,"src":"10995:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"visibility":"internal"}],"src":"10994:42:81"},"returnParameters":{"id":55421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55510,"src":"11054:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55419,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11054:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11053:9:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55554,"nodeType":"FunctionDefinition","src":"12093:338:81","nodes":[],"body":{"id":55553,"nodeType":"Block","src":"12163:268:81","nodes":[],"statements":[{"body":{"id":55549,"nodeType":"Block","src":"12220:183:81","statements":[{"assignments":[55531],"declarations":[{"constant":false,"id":55531,"mutability":"mutable","name":"ret","nameLocation":"12242:3:81","nodeType":"VariableDeclaration","scope":55549,"src":"12234:11:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55530,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12234:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55535,"initialValue":{"arguments":[{"id":55533,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12258:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55532,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"12248:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":55534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12248:12:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12234:26:81"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55536,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"12278:3:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55537,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55512,"src":"12285:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12278:11:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55542,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"12345:3:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12352:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12345:8:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55547,"nodeType":"IfStatement","src":"12341:52:81","trueBody":{"id":55546,"nodeType":"Block","src":"12355:38:81","statements":[{"id":55545,"nodeType":"Break","src":"12373:5:81"}]}},"id":55548,"nodeType":"IfStatement","src":"12274:119:81","trueBody":{"id":55541,"nodeType":"Block","src":"12291:44:81","statements":[{"expression":{"hexValue":"74727565","id":55539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12316:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":55516,"id":55540,"nodeType":"Return","src":"12309:11:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55524,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12208:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":55525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12212:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12208:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55550,"initializationExpression":{"assignments":[55518],"declarations":[{"constant":false,"id":55518,"mutability":"mutable","name":"i","nameLocation":"12186:1:81","nodeType":"VariableDeclaration","scope":55550,"src":"12178:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55517,"name":"uint256","nodeType":"ElementaryTypeName","src":"12178:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55523,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55519,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12190:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":55520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12196:6:81","memberName":"number","nodeType":"MemberAccess","src":"12190:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":55521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12205:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12190:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12178:28:81"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":55528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"12215:3:81","subExpression":{"id":55527,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12215:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55529,"nodeType":"ExpressionStatement","src":"12215:3:81"},"nodeType":"ForStatement","src":"12173:230:81"},{"expression":{"hexValue":"66616c7365","id":55551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12419:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":55516,"id":55552,"nodeType":"Return","src":"12412:12:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_isPredecessorHash","nameLocation":"12102:18:81","parameters":{"id":55513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55512,"mutability":"mutable","name":"hash","nameLocation":"12129:4:81","nodeType":"VariableDeclaration","scope":55554,"src":"12121:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12121:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12120:14:81"},"returnParameters":{"id":55516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55515,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55554,"src":"12157:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":55514,"name":"bool","nodeType":"ElementaryTypeName","src":"12157:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12156:6:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":55754,"nodeType":"FunctionDefinition","src":"12437:2170:81","nodes":[],"body":{"id":55753,"nodeType":"Block","src":"12533:2074:81","nodes":[],"statements":[{"assignments":[55564],"declarations":[{"constant":false,"id":55564,"mutability":"mutable","name":"router","nameLocation":"12559:6:81","nodeType":"VariableDeclaration","scope":55753,"src":"12543:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55563,"nodeType":"UserDefinedTypeName","pathNode":{"id":55562,"name":"Storage","nameLocations":["12543:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"12543:7:81"},"referencedDeclaration":53684,"src":"12543:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55567,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55565,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"12568:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12568:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"12543:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55569,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55564,"src":"12600:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12607:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"12600:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":55573,"indexExpression":{"expression":{"id":55571,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12616:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12632:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12616:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12600:40:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12644:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12600:45:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420706572666f726d207472616e736974696f6e20666f7220756e6b6e6f776e2070726f6772616d","id":55576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12647:49:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""},"value":"couldn't perform transition for unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""}],"id":55568,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12592:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12592:105:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55578,"nodeType":"ExpressionStatement","src":"12592:105:81"},{"assignments":[55581],"declarations":[{"constant":false,"id":55581,"mutability":"mutable","name":"wrappedVaraActor","nameLocation":"12721:16:81","nodeType":"VariableDeclaration","scope":55753,"src":"12708:29:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":55580,"nodeType":"UserDefinedTypeName","pathNode":{"id":55579,"name":"IWrappedVara","nameLocations":["12708:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"12708:12:81"},"referencedDeclaration":53962,"src":"12708:12:81","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":55586,"initialValue":{"arguments":[{"expression":{"id":55583,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55564,"src":"12753:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12760:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"12753:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55582,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"12740:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":55585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12740:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"12708:64:81"},{"expression":{"arguments":[{"expression":{"id":55590,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12808:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12824:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12808:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55592,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12833:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12849:14:81","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":53710,"src":"12833:30:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55587,"name":"wrappedVaraActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55581,"src":"12782:16:81","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":55589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12799:8:81","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":41873,"src":"12782:25:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":55594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12782:82:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55595,"nodeType":"ExpressionStatement","src":"12782:82:81"},{"assignments":[55598],"declarations":[{"constant":false,"id":55598,"mutability":"mutable","name":"mirrorActor","nameLocation":"12883:11:81","nodeType":"VariableDeclaration","scope":55753,"src":"12875:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"},"typeName":{"id":55597,"nodeType":"UserDefinedTypeName","pathNode":{"id":55596,"name":"IMirror","nameLocations":["12875:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53636,"src":"12875:7:81"},"referencedDeclaration":53636,"src":"12875:7:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"visibility":"internal"}],"id":55603,"initialValue":{"arguments":[{"expression":{"id":55600,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12905:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12921:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12905:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55599,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"12897:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$53636_$","typeString":"type(contract IMirror)"}},"id":55602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12897:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"nodeType":"VariableDeclarationStatement","src":"12875:54:81"},{"assignments":[55605],"declarations":[{"constant":false,"id":55605,"mutability":"mutable","name":"valueClaimsBytes","nameLocation":"12953:16:81","nodeType":"VariableDeclaration","scope":55753,"src":"12940:29:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55604,"name":"bytes","nodeType":"ElementaryTypeName","src":"12940:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55606,"nodeType":"VariableDeclarationStatement","src":"12940:29:81"},{"body":{"id":55655,"nodeType":"Block","src":"13045:367:81","statements":[{"assignments":[55621],"declarations":[{"constant":false,"id":55621,"mutability":"mutable","name":"valueClaim","nameLocation":"13079:10:81","nodeType":"VariableDeclaration","scope":55655,"src":"13059:30:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim"},"typeName":{"id":55620,"nodeType":"UserDefinedTypeName","pathNode":{"id":55619,"name":"ValueClaim","nameLocations":["13059:10:81"],"nodeType":"IdentifierPath","referencedDeclaration":53726,"src":"13059:10:81"},"referencedDeclaration":53726,"src":"13059:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_storage_ptr","typeString":"struct IRouter.ValueClaim"}},"visibility":"internal"}],"id":55626,"initialValue":{"baseExpression":{"expression":{"id":55622,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13092:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13108:11:81","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":53714,"src":"13092:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$53726_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata[] calldata"}},"id":55625,"indexExpression":{"id":55624,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13120:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13092:30:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"nodeType":"VariableDeclarationStatement","src":"13059:63:81"},{"expression":{"id":55642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55627,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"13137:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55631,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"13186:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"expression":{"id":55634,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13221:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13232:9:81","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":53721,"src":"13221:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55636,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13243:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13254:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53723,"src":"13243:22:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55638,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13267:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13278:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53725,"src":"13267:16:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55632,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13204:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13208:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"13204:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13204:80:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":55629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13156:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55628,"name":"bytes","nodeType":"ElementaryTypeName","src":"13156:5:81","typeDescriptions":{}}},"id":55630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13162:6:81","memberName":"concat","nodeType":"MemberAccess","src":"13156:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13156:142:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13137:161:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55643,"nodeType":"ExpressionStatement","src":"13137:161:81"},{"expression":{"arguments":[{"expression":{"id":55647,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13338:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13349:9:81","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":53721,"src":"13338:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55649,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13360:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13371:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53723,"src":"13360:22:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55651,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13384:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13395:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53725,"src":"13384:16:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55644,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13313:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13325:12:81","memberName":"valueClaimed","nodeType":"MemberAccess","referencedDeclaration":53619,"src":"13313:24:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint128) external"}},"id":55653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13313:88:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55654,"nodeType":"ExpressionStatement","src":"13313:88:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55611,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13000:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55612,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13004:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13020:11:81","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":53714,"src":"13004:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$53726_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata[] calldata"}},"id":55614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13032:6:81","memberName":"length","nodeType":"MemberAccess","src":"13004:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13000:38:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55656,"initializationExpression":{"assignments":[55608],"declarations":[{"constant":false,"id":55608,"mutability":"mutable","name":"i","nameLocation":"12993:1:81","nodeType":"VariableDeclaration","scope":55656,"src":"12985:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55607,"name":"uint256","nodeType":"ElementaryTypeName","src":"12985:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55610,"initialValue":{"hexValue":"30","id":55609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12997:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12985:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13040:3:81","subExpression":{"id":55616,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13040:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55618,"nodeType":"ExpressionStatement","src":"13040:3:81"},"nodeType":"ForStatement","src":"12980:432:81"},{"assignments":[55658],"declarations":[{"constant":false,"id":55658,"mutability":"mutable","name":"messagesHashes","nameLocation":"13435:14:81","nodeType":"VariableDeclaration","scope":55753,"src":"13422:27:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55657,"name":"bytes","nodeType":"ElementaryTypeName","src":"13422:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55659,"nodeType":"VariableDeclarationStatement","src":"13422:27:81"},{"body":{"id":55729,"nodeType":"Block","src":"13522:764:81","statements":[{"assignments":[55674],"declarations":[{"constant":false,"id":55674,"mutability":"mutable","name":"outgoingMessage","nameLocation":"13561:15:81","nodeType":"VariableDeclaration","scope":55729,"src":"13536:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage"},"typeName":{"id":55673,"nodeType":"UserDefinedTypeName","pathNode":{"id":55672,"name":"OutgoingMessage","nameLocations":["13536:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53738,"src":"13536:15:81"},"referencedDeclaration":53738,"src":"13536:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_storage_ptr","typeString":"struct IRouter.OutgoingMessage"}},"visibility":"internal"}],"id":55679,"initialValue":{"baseExpression":{"expression":{"id":55675,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13579:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13595:8:81","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":53718,"src":"13579:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata[] calldata"}},"id":55678,"indexExpression":{"id":55677,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13604:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13579:27:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"nodeType":"VariableDeclarationStatement","src":"13536:70:81"},{"expression":{"id":55689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55680,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"13621:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55684,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"13651:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":55686,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13688:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}],"id":55685,"name":"_outgoingMessageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55834,"src":"13667:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.OutgoingMessage calldata) pure returns (bytes32)"}},"id":55687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13667:37:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13638:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55681,"name":"bytes","nodeType":"ElementaryTypeName","src":"13638:5:81","typeDescriptions":{}}},"id":55683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13644:6:81","memberName":"concat","nodeType":"MemberAccess","src":"13638:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13638:67:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13621:84:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55690,"nodeType":"ExpressionStatement","src":"13621:84:81"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":55691,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13724:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13740:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"13724:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13753:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"13724:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13759:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13724:36:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55727,"nodeType":"Block","src":"13959:317:81","statements":[{"expression":{"arguments":[{"expression":{"id":55713,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14020:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14036:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"14020:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55715,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14069:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14085:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"14069:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55717,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14114:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14130:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"14114:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":55719,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14157:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14173:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"14157:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14186:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"14157:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":55722,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14210:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14226:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"14210:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14239:4:81","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":53742,"src":"14210:33:81","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":55710,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13977:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13989:9:81","memberName":"replySent","nodeType":"MemberAccess","referencedDeclaration":53610,"src":"13977:21:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (address,bytes memory,uint128,bytes32,bytes4) external"}},"id":55725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13977:284:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55726,"nodeType":"ExpressionStatement","src":"13977:284:81"}]},"id":55728,"nodeType":"IfStatement","src":"13720:556:81","trueBody":{"id":55709,"nodeType":"Block","src":"13762:191:81","statements":[{"expression":{"arguments":[{"expression":{"id":55699,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13825:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13841:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53728,"src":"13825:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55701,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13845:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13861:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"13845:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55703,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13874:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13890:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"13874:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55705,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13899:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13915:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"13899:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55696,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13780:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13792:11:81","memberName":"messageSent","nodeType":"MemberAccess","referencedDeclaration":53597,"src":"13780:23:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128) external"}},"id":55707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13780:158:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55708,"nodeType":"ExpressionStatement","src":"13780:158:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55664,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13480:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55665,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13484:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13500:8:81","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":53718,"src":"13484:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata[] calldata"}},"id":55667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13509:6:81","memberName":"length","nodeType":"MemberAccess","src":"13484:31:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13480:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55730,"initializationExpression":{"assignments":[55661],"declarations":[{"constant":false,"id":55661,"mutability":"mutable","name":"i","nameLocation":"13473:1:81","nodeType":"VariableDeclaration","scope":55730,"src":"13465:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55660,"name":"uint256","nodeType":"ElementaryTypeName","src":"13465:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55663,"initialValue":{"hexValue":"30","id":55662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13477:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13465:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13517:3:81","subExpression":{"id":55669,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13517:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55671,"nodeType":"ExpressionStatement","src":"13517:3:81"},"nodeType":"ForStatement","src":"13460:826:81"},{"expression":{"arguments":[{"expression":{"id":55734,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14320:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14336:12:81","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":53708,"src":"14320:28:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55731,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"14296:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14308:11:81","memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":53586,"src":"14296:23:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32) external"}},"id":55736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14296:53:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55737,"nodeType":"ExpressionStatement","src":"14296:53:81"},{"expression":{"arguments":[{"expression":{"id":55739,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14401:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14417:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"14401:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55741,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14438:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14454:12:81","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":53708,"src":"14438:28:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55743,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14480:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14496:14:81","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":53710,"src":"14480:30:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[{"id":55746,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"14534:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55745,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14524:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14524:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":55749,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"14575:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55748,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14565:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14565:25:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55738,"name":"_stateTransitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55805,"src":"14367:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_uint128_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,bytes32,uint128,bytes32,bytes32) pure returns (bytes32)"}},"id":55751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14367:233:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55561,"id":55752,"nodeType":"Return","src":"14360:240:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_doStateTransition","nameLocation":"12446:18:81","parameters":{"id":55558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55557,"mutability":"mutable","name":"stateTransition","nameLocation":"12490:15:81","nodeType":"VariableDeclaration","scope":55754,"src":"12465:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition"},"typeName":{"id":55556,"nodeType":"UserDefinedTypeName","pathNode":{"id":55555,"name":"StateTransition","nameLocations":["12465:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53719,"src":"12465:15:81"},"referencedDeclaration":53719,"src":"12465:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_storage_ptr","typeString":"struct IRouter.StateTransition"}},"visibility":"internal"}],"src":"12464:42:81"},"returnParameters":{"id":55561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55754,"src":"12524:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55559,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12524:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12523:9:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55778,"nodeType":"FunctionDefinition","src":"14613:320:81","nodes":[],"body":{"id":55777,"nodeType":"Block","src":"14813:120:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":55770,"name":"blockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55756,"src":"14857:9:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55771,"name":"prevCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55758,"src":"14868:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55772,"name":"predBlockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55760,"src":"14888:13:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55773,"name":"transitionsHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55762,"src":"14903:21:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55768,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14840:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14844:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"14840:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14840:85:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55767,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14830:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14830:96:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55766,"id":55776,"nodeType":"Return","src":"14823:103:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_blockCommitmentHash","nameLocation":"14622:20:81","parameters":{"id":55763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55756,"mutability":"mutable","name":"blockHash","nameLocation":"14660:9:81","nodeType":"VariableDeclaration","scope":55778,"src":"14652:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55755,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14652:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55758,"mutability":"mutable","name":"prevCommitmentHash","nameLocation":"14687:18:81","nodeType":"VariableDeclaration","scope":55778,"src":"14679:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55757,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14679:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55760,"mutability":"mutable","name":"predBlockHash","nameLocation":"14723:13:81","nodeType":"VariableDeclaration","scope":55778,"src":"14715:21:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55759,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14715:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55762,"mutability":"mutable","name":"transitionsHashesHash","nameLocation":"14754:21:81","nodeType":"VariableDeclaration","scope":55778,"src":"14746:29:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55761,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14746:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14642:139:81"},"returnParameters":{"id":55766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55778,"src":"14804:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55764,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14804:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14803:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55805,"nodeType":"FunctionDefinition","src":"14939:350:81","nodes":[],"body":{"id":55804,"nodeType":"Block","src":"15162:127:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":55796,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55780,"src":"15206:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55797,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55782,"src":"15215:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55798,"name":"valueToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55784,"src":"15229:14:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":55799,"name":"valueClaimsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55786,"src":"15245:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55800,"name":"messagesHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55788,"src":"15262:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55794,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15189:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15193:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15189:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15189:92:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55793,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15179:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15179:103:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55792,"id":55803,"nodeType":"Return","src":"15172:110:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_stateTransitionHash","nameLocation":"14948:20:81","parameters":{"id":55789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55780,"mutability":"mutable","name":"actorId","nameLocation":"14986:7:81","nodeType":"VariableDeclaration","scope":55805,"src":"14978:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55779,"name":"address","nodeType":"ElementaryTypeName","src":"14978:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55782,"mutability":"mutable","name":"newStateHash","nameLocation":"15011:12:81","nodeType":"VariableDeclaration","scope":55805,"src":"15003:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55781,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15003:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55784,"mutability":"mutable","name":"valueToReceive","nameLocation":"15041:14:81","nodeType":"VariableDeclaration","scope":55805,"src":"15033:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55783,"name":"uint128","nodeType":"ElementaryTypeName","src":"15033:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":55786,"mutability":"mutable","name":"valueClaimsHash","nameLocation":"15073:15:81","nodeType":"VariableDeclaration","scope":55805,"src":"15065:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55785,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15065:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55788,"mutability":"mutable","name":"messagesHashesHash","nameLocation":"15106:18:81","nodeType":"VariableDeclaration","scope":55805,"src":"15098:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55787,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15098:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14968:162:81"},"returnParameters":{"id":55792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55791,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55805,"src":"15153:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55790,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15153:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15152:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55834,"nodeType":"FunctionDefinition","src":"15295:451:81","nodes":[],"body":{"id":55833,"nodeType":"Block","src":"15398:348:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":55816,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15472:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15488:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53728,"src":"15472:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55818,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15508:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15524:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"15508:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55820,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15553:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15569:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"15553:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55822,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15594:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15610:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"15594:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":55824,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15633:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15649:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"15633:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15662:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"15633:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":55827,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15682:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15698:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"15682:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15711:4:81","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":53742,"src":"15682:33:81","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":55814,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15438:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15442:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15438:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15438:291:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55813,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15415:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15415:324:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55812,"id":55832,"nodeType":"Return","src":"15408:331:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_outgoingMessageHash","nameLocation":"15304:20:81","parameters":{"id":55809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55808,"mutability":"mutable","name":"outgoingMessage","nameLocation":"15350:15:81","nodeType":"VariableDeclaration","scope":55834,"src":"15325:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage"},"typeName":{"id":55807,"nodeType":"UserDefinedTypeName","pathNode":{"id":55806,"name":"OutgoingMessage","nameLocations":["15325:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53738,"src":"15325:15:81"},"referencedDeclaration":53738,"src":"15325:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_storage_ptr","typeString":"struct IRouter.OutgoingMessage"}},"visibility":"internal"}],"src":"15324:42:81"},"returnParameters":{"id":55812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55834,"src":"15389:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55810,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15389:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15388:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55853,"nodeType":"FunctionDefinition","src":"15752:192:81","nodes":[],"body":{"id":55852,"nodeType":"Block","src":"15852:92:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":55845,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55837,"src":"15896:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15911:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53690,"src":"15896:17:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55847,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55837,"src":"15915:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15930:5:81","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":53692,"src":"15915:20:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":55843,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15879:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55844,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15883:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15879:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15879:57:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55842,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15869:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15869:68:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55841,"id":55851,"nodeType":"Return","src":"15862:75:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_codeCommitmentHash","nameLocation":"15761:19:81","parameters":{"id":55838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55837,"mutability":"mutable","name":"codeCommitment","nameLocation":"15805:14:81","nodeType":"VariableDeclaration","scope":55853,"src":"15781:38:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment"},"typeName":{"id":55836,"nodeType":"UserDefinedTypeName","pathNode":{"id":55835,"name":"CodeCommitment","nameLocations":["15781:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"15781:14:81"},"referencedDeclaration":53693,"src":"15781:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"visibility":"internal"}],"src":"15780:40:81"},"returnParameters":{"id":55841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55840,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55853,"src":"15843:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15843:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15842:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55886,"nodeType":"FunctionDefinition","src":"15950:257:81","nodes":[],"body":{"id":55885,"nodeType":"Block","src":"15998:209:81","nodes":[],"statements":[{"assignments":[55860],"declarations":[{"constant":false,"id":55860,"mutability":"mutable","name":"router","nameLocation":"16024:6:81","nodeType":"VariableDeclaration","scope":55885,"src":"16008:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55859,"nodeType":"UserDefinedTypeName","pathNode":{"id":55858,"name":"Storage","nameLocations":["16008:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16008:7:81"},"referencedDeclaration":53684,"src":"16008:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55863,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55861,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16033:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16033:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16008:38:81"},{"assignments":[55865],"declarations":[{"constant":false,"id":55865,"mutability":"mutable","name":"success","nameLocation":"16062:7:81","nodeType":"VariableDeclaration","scope":55885,"src":"16057:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":55864,"name":"bool","nodeType":"ElementaryTypeName","src":"16057:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":55879,"initialValue":{"arguments":[{"expression":{"id":55871,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"16112:2:81","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":55872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16115:6:81","memberName":"origin","nodeType":"MemberAccess","src":"16112:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55875,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16131:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}],"id":55874,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16123:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55873,"name":"address","nodeType":"ElementaryTypeName","src":"16123:7:81","typeDescriptions":{}}},"id":55876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16123:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55877,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55855,"src":"16138:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":55867,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55860,"src":"16079:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16086:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"16079:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55866,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41906,"src":"16072:6:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$41906_$","typeString":"type(contract IERC20)"}},"id":55869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16072:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$41906","typeString":"contract IERC20"}},"id":55870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16099:12:81","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":41905,"src":"16072:39:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":55878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16072:73:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"16057:88:81"},{"expression":{"arguments":[{"id":55881,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55865,"src":"16164:7:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":55882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16173:26:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":55880,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"16156:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16156:44:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55884,"nodeType":"ExpressionStatement","src":"16156:44:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValue","nameLocation":"15959:14:81","parameters":{"id":55856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55855,"mutability":"mutable","name":"_value","nameLocation":"15982:6:81","nodeType":"VariableDeclaration","scope":55886,"src":"15974:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55854,"name":"uint128","nodeType":"ElementaryTypeName","src":"15974:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"15973:16:81"},"returnParameters":{"id":55857,"nodeType":"ParameterList","parameters":[],"src":"15998:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55927,"nodeType":"FunctionDefinition","src":"16213:317:81","nodes":[],"body":{"id":55926,"nodeType":"Block","src":"16249:281:81","nodes":[],"statements":[{"assignments":[55891],"declarations":[{"constant":false,"id":55891,"mutability":"mutable","name":"router","nameLocation":"16275:6:81","nodeType":"VariableDeclaration","scope":55926,"src":"16259:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55890,"nodeType":"UserDefinedTypeName","pathNode":{"id":55889,"name":"Storage","nameLocations":["16259:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16259:7:81"},"referencedDeclaration":53684,"src":"16259:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55894,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55892,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16284:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16284:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16259:38:81"},{"body":{"id":55920,"nodeType":"Block","src":"16367:118:81","statements":[{"assignments":[55908],"declarations":[{"constant":false,"id":55908,"mutability":"mutable","name":"validator","nameLocation":"16389:9:81","nodeType":"VariableDeclaration","scope":55920,"src":"16381:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55907,"name":"address","nodeType":"ElementaryTypeName","src":"16381:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55913,"initialValue":{"baseExpression":{"expression":{"id":55909,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16401:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55910,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16408:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16401:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55912,"indexExpression":{"id":55911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16423:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16401:24:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16381:44:81"},{"expression":{"id":55918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"16439:35:81","subExpression":{"baseExpression":{"expression":{"id":55914,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16446:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16453:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"16446:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55917,"indexExpression":{"id":55916,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55908,"src":"16464:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16446:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55919,"nodeType":"ExpressionStatement","src":"16439:35:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16328:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55900,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16332:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16339:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16332:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16354:6:81","memberName":"length","nodeType":"MemberAccess","src":"16332:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16328:32:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55921,"initializationExpression":{"assignments":[55896],"declarations":[{"constant":false,"id":55896,"mutability":"mutable","name":"i","nameLocation":"16321:1:81","nodeType":"VariableDeclaration","scope":55921,"src":"16313:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55895,"name":"uint256","nodeType":"ElementaryTypeName","src":"16313:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55898,"initialValue":{"hexValue":"30","id":55897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16325:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16313:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16362:3:81","subExpression":{"id":55904,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16362:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55906,"nodeType":"ExpressionStatement","src":"16362:3:81"},"nodeType":"ForStatement","src":"16308:177:81"},{"expression":{"id":55924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"16495:28:81","subExpression":{"expression":{"id":55922,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16502:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16509:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16502:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55925,"nodeType":"ExpressionStatement","src":"16495:28:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_cleanValidators","nameLocation":"16222:16:81","parameters":{"id":55887,"nodeType":"ParameterList","parameters":[],"src":"16238:2:81"},"returnParameters":{"id":55888,"nodeType":"ParameterList","parameters":[],"src":"16249:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55982,"nodeType":"FunctionDefinition","src":"16536:442:81","nodes":[],"body":{"id":55981,"nodeType":"Block","src":"16603:375:81","nodes":[],"statements":[{"assignments":[55935],"declarations":[{"constant":false,"id":55935,"mutability":"mutable","name":"router","nameLocation":"16629:6:81","nodeType":"VariableDeclaration","scope":55981,"src":"16613:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55934,"nodeType":"UserDefinedTypeName","pathNode":{"id":55933,"name":"Storage","nameLocations":["16613:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16613:7:81"},"referencedDeclaration":53684,"src":"16613:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55938,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55936,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16638:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16638:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16613:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":55940,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16670:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16677:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16670:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16692:6:81","memberName":"length","nodeType":"MemberAccess","src":"16670:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16702:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16670:33:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726576696f75732076616c696461746f727320776572656e27742072656d6f766564","id":55945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16705:37:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_cbe432dd5148cbcd3965634d2fa4c608dba4822bc479da840b7f667e6442b9d2","typeString":"literal_string \"previous validators weren't removed\""},"value":"previous validators weren't removed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cbe432dd5148cbcd3965634d2fa4c608dba4822bc479da840b7f667e6442b9d2","typeString":"literal_string \"previous validators weren't removed\""}],"id":55939,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"16662:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16662:81:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55947,"nodeType":"ExpressionStatement","src":"16662:81:81"},{"body":{"id":55973,"nodeType":"Block","src":"16808:113:81","statements":[{"assignments":[55960],"declarations":[{"constant":false,"id":55960,"mutability":"mutable","name":"validator","nameLocation":"16830:9:81","nodeType":"VariableDeclaration","scope":55973,"src":"16822:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55959,"name":"address","nodeType":"ElementaryTypeName","src":"16822:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55964,"initialValue":{"baseExpression":{"id":55961,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16842:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55963,"indexExpression":{"id":55962,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16859:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16842:19:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16822:39:81"},{"expression":{"id":55971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55965,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16875:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16882:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"16875:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55969,"indexExpression":{"id":55967,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55960,"src":"16893:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16875:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":55970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16906:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"16875:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55972,"nodeType":"ExpressionStatement","src":"16875:35:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55952,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16774:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55953,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16778:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16795:6:81","memberName":"length","nodeType":"MemberAccess","src":"16778:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16774:27:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55974,"initializationExpression":{"assignments":[55949],"declarations":[{"constant":false,"id":55949,"mutability":"mutable","name":"i","nameLocation":"16767:1:81","nodeType":"VariableDeclaration","scope":55974,"src":"16759:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55948,"name":"uint256","nodeType":"ElementaryTypeName","src":"16759:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55951,"initialValue":{"hexValue":"30","id":55950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16771:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16759:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16803:3:81","subExpression":{"id":55956,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16803:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55958,"nodeType":"ExpressionStatement","src":"16803:3:81"},"nodeType":"ForStatement","src":"16754:167:81"},{"expression":{"id":55979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":55975,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16931:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55977,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16938:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16931:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55978,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16955:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"16931:40:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55980,"nodeType":"ExpressionStatement","src":"16931:40:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setValidators","nameLocation":"16545:14:81","parameters":{"id":55931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55930,"mutability":"mutable","name":"_validatorsArray","nameLocation":"16577:16:81","nodeType":"VariableDeclaration","scope":55982,"src":"16560:33:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55928,"name":"address","nodeType":"ElementaryTypeName","src":"16560:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55929,"nodeType":"ArrayTypeName","src":"16560:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"16559:35:81"},"returnParameters":{"id":55932,"nodeType":"ParameterList","parameters":[],"src":"16603:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55995,"nodeType":"FunctionDefinition","src":"16984:222:81","nodes":[],"body":{"id":55994,"nodeType":"Block","src":"17053:153:81","nodes":[],"statements":[{"assignments":[55989],"declarations":[{"constant":false,"id":55989,"mutability":"mutable","name":"slot","nameLocation":"17071:4:81","nodeType":"VariableDeclaration","scope":55994,"src":"17063:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55988,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17063:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55992,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55990,"name":"getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54597,"src":"17078:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":55991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17078:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"17063:31:81"},{"AST":{"nativeSrc":"17157:43:81","nodeType":"YulBlock","src":"17157:43:81","statements":[{"nativeSrc":"17171:19:81","nodeType":"YulAssignment","src":"17171:19:81","value":{"name":"slot","nativeSrc":"17186:4:81","nodeType":"YulIdentifier","src":"17186:4:81"},"variableNames":[{"name":"router.slot","nativeSrc":"17171:11:81","nodeType":"YulIdentifier","src":"17171:11:81"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":55986,"isOffset":false,"isSlot":true,"src":"17171:11:81","suffix":"slot","valueSize":1},{"declaration":55989,"isOffset":false,"isSlot":false,"src":"17186:4:81","valueSize":1}],"id":55993,"nodeType":"InlineAssembly","src":"17148:52:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorage","nameLocation":"16993:11:81","parameters":{"id":55983,"nodeType":"ParameterList","parameters":[],"src":"17004:2:81"},"returnParameters":{"id":55987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55986,"mutability":"mutable","name":"router","nameLocation":"17045:6:81","nodeType":"VariableDeclaration","scope":55995,"src":"17029:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55985,"nodeType":"UserDefinedTypeName","pathNode":{"id":55984,"name":"Storage","nameLocations":["17029:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"17029:7:81"},"referencedDeclaration":53684,"src":"17029:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"17028:24:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":54400,"name":"IRouter","nameLocations":["800:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53951,"src":"800:7:81"},"id":54401,"nodeType":"InheritanceSpecifier","src":"800:7:81"},{"baseName":{"id":54402,"name":"OwnableUpgradeable","nameLocations":["809:18:81"],"nodeType":"IdentifierPath","referencedDeclaration":39024,"src":"809:18:81"},"id":54403,"nodeType":"InheritanceSpecifier","src":"809:18:81"},{"baseName":{"id":54404,"name":"ReentrancyGuardTransient","nameLocations":["829:24:81"],"nodeType":"IdentifierPath","referencedDeclaration":42400,"src":"829:24:81"},"id":54405,"nodeType":"InheritanceSpecifier","src":"829:24:81"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[55996,42400,39024,40172,39278,53951],"name":"Router","nameLocation":"790:6:81","scope":55997,"usedErrors":[38860,38865,39041,39044,42267,42273,42344,43050,43055,43060],"usedEvents":[38871,39049,53748,53755,53762,53769,53772,53775,53780,53785]}],"license":"UNLICENSED"},"id":81} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"baseFee","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"baseWeight","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"codeState","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum IRouter.CodeState"}],"stateMutability":"view"},{"type":"function","name":"commitBlocks","inputs":[{"name":"blockCommitmentsArray","type":"tuple[]","internalType":"struct IRouter.BlockCommitment[]","components":[{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"prevCommitmentHash","type":"bytes32","internalType":"bytes32"},{"name":"predBlockHash","type":"bytes32","internalType":"bytes32"},{"name":"transitions","type":"tuple[]","internalType":"struct IRouter.StateTransition[]","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueClaims","type":"tuple[]","internalType":"struct IRouter.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct IRouter.OutgoingMessage[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct IRouter.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]}]}]}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitCodes","inputs":[{"name":"codeCommitmentsArray","type":"tuple[]","internalType":"struct IRouter.CodeCommitment[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"valid","type":"bool","internalType":"bool"}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createProgram","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"payable"},{"type":"function","name":"genesisBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStorageSlot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_mirror","type":"address","internalType":"address"},{"name":"_mirrorProxy","type":"address","internalType":"address"},{"name":"_wrappedVara","type":"address","internalType":"address"},{"name":"_validatorsKeys","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastBlockCommitmentHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"mirror","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mirrorProxy","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"programCodeId","inputs":[{"name":"program","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"programsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestCodeValidation","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setBaseWeight","inputs":[{"name":"_baseWeight","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMirror","inputs":[{"name":"_mirror","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStorageSlot","inputs":[{"name":"namespace","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValuePerWeight","inputs":[{"name":"_valuePerWeight","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signingThresholdPercentage","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateValidators","inputs":[{"name":"validatorsAddressArray","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatedCodesCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorExists","inputs":[{"name":"validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"validators","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"validatorsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"valuePerWeight","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"wrappedVara","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"BaseWeightChanged","inputs":[{"name":"baseWeight","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"BlockCommitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CodeGotValidated","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"valid","type":"bool","indexed":true,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CodeValidationRequested","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProgramCreated","inputs":[{"name":"actorId","type":"address","indexed":false,"internalType":"address"},{"name":"codeId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StorageSlotChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValidatorsSetChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValuePerWeightChanged","inputs":[{"name":"valuePerWeight","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b60405161289590816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe610200806040526004361015610013575f80fd5b5f6101e0525f3560e01c9081627a32e714611f71575080630834fecc14611f3a5780631c149d8a14611df257806328e24b3d14611dc85780632dacfb6914611d9b5780633d43b41814611d49578063444d917214611d115780635686cad514611c5f5780636c2eb35014611a485780636ef25c3a14611a1d578063715018a6146119b657806378ee5dec1461197e5780638028861a146119015780638074b4551461158557806388f50cf01461154a5780638da5cb5b146115135780638febbd59146114c65780639067088e1461147e578063967082261461145257806396a2ddfa14611422578063a6bbbe1c14611372578063c13911e814611326578063ca1e7819146112a9578063d3fd636414611270578063e71731e41461115e578063e97d3eb314610f0f578063ed612f8c14610edf578063edc8722514610eba578063efd81abc14610e8a578063f2fde38b14610e66578063f8453e7c14610b585763fa97ed6d14610181575f80fd5b34610521576040366003190112610521576004356001600160401b038111610521576101b190369060040161202b565b906024356001600160401b038111610521576101d190369060040161202b565b6101e051606060a052909391925b82821015610b3c57600582901b8101359236829003607e19018412156105215760045f805160206128208339815191525401608052608051546020858401013503610af8576102336040858401013561262e565b15610aa7576101e0516101c0526060958285018701955b610256878786016125ce565b90506101c0511015610a125761026e878786016125ce565b9060e0526101c0511015610536576101c05160051b60e051013560c052609e1960e05136030160c0511215610521575f80516020612820833981519152546102bb60c05160e05101612671565b6001600160a01b03165f908152600b82016020526040902054156109b55760206001600160801b0391600360018060a01b0391015416604461030260c05160e05101612671565b610314604060c05160e0510101612685565b60405163a9059cbb60e01b81526001600160a01b0390921660048301529490941660248501526101e05184928391905af1801561052857610989575b5060c05160e0516001600160a01b039161036a9101612671565b166101a0526101e051606061016081905260c05160e0510101610140525b61039b6101405160c05160e05101612699565b9050811015610550576103b76101405160c05160e05101612699565b9061018052811015610536576103d7602060608302610180510101612671565b6040606083026101805101019061047a6103f083612685565b6040519060208201936060870261018051013585526001600160601b03199060601b1660408301526001600160801b03199060801b1660548201526044815261043a606482611fb1565b60206040519384926101605151808461016051018587015e840190838201906101e0518252519283915e01016101e051815203601f198101835282611fb1565b6101605261049b610495602060608502610180510101612671565b91612685565b6101a0513b15610521576040516314503e5160e01b81526101805160608502013560048201526001600160a01b0390921660248301526001600160801b031660448201526101e0516101a0518290606490829084905af1801561052857610506575b50600101610388565b6101e05161051391611fb1565b6101e051610521575f6104fd565b6101e05180fd5b6040513d6101e051823e3d90fd5b634e487b7160e01b6101e05152603260045260246101e051fd5b50909195929394956101e051610100526060610100526101e0515b60c05160e051610580910160808101906125ce565b90508110156108715760c05160e05161059e910160808101906125ce565b821015610536578160051b8101356101205260be1981360301610120511215610521576106906105d5602061012051840101612671565b605461068460346105f3604061012051880101610120518801612417565b93906106066060610120518a0101612685565b61061760a0610120518b01016126ce565b86604051978894602086019a8d6101205101358c526001600160601b03199060601b166040870152868601378301916001600160801b03199060801b16848301526080610120518b010135606483015263ffffffff60e01b16608482015203016014810184520182611fb1565b519020610100516121a2565b6101005261012051810160800135610779576106b3602061012051830101612671565b610120516106c79083016040810190612417565b90916106da606061012051860101612685565b926101a0513b156105215760405163c2df600960e01b8152610120519095013560048601526001600160a01b039091166024850152608060448501526001600160801b039161072e91608486019190612182565b9116606483015281806101e0519203816101e0516101a0515af180156105285761075e575b506001905b0161056b565b6101e05161076b91611fb1565b6101e051610521575f610753565b61078a602061012051830101612671565b906107a2604061012051830101610120518301612417565b6107b3606061012051850101612685565b926107c560a0610120518301016126ce565b926101a0513b156105215760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701526080926001600160801b039161080e9160a4890191612182565b9416604486015261012051010135606484015263ffffffff60e01b16608483015281806101e0519203816101e0516101a0515af1801561052857610856575b50600190610758565b6101e05161086391611fb1565b6101e051610521575f61084d565b5091909695949392956101a0513b1561052157604051638ea59e1d60e01b8152602060c05160e05101013560048201526101e051816024816101e0516101a0515af180156105285761096e575b5061095d906108d260c05160e05101612671565b6108e4604060c05160e0510101612685565b6101605151602061016051012061010051516020610100510120906040519260208401946001600160601b03199060601b168552602060c05160e05101013560348501526001600160801b03199060801b166054840152606483015260848201526084815261095460a482611fb1565b519020906121a2565b9660016101c051016101c05261024a565b6101e05161097b91611fb1565b6101e051610521575f6108be565b6109a99060203d81116109ae575b6109a18183611fb1565b8101906123ff565b610350565b503d610997565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9391966001939650610a999195808801359182608051557fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a1602081519101206040805192602084019485526020818c010135828501528a0101356060830152608082015260808152610a8e60a082611fb1565b51902060a0516121a2565b60a0520190929391936101df565b60405162461bcd60e51b815260206004820152602360248201527f616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f696e76616c69642070726576696f757320636f6d6d69746d656e7420686173686044820152fd5b610b51858560a05151602060a0510120612449565b6101e05180f35b346105215760a036600319011261052157610b71611f9b565b602435906001600160a01b038216820361052157604435916001600160a01b038316830361052157606435926001600160a01b0384168403610521576084356001600160401b038111610521573660238201121561052157610bdd90369060248160040135910161205b565b905f805160206128408339815191525460ff8160401c1615946001600160401b03821680159081610e5e575b6001149081610e54575b159081610e4b575b50610e365767ffffffffffffffff1982166001175f8051602061284083398151915255610c5e9186610e0a575b50610c51612603565b610c59612603565b61221a565b6040948551610c6d8782611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256310000000000000000008252610ca161228b565b5190205f198101908111610df0578651906020820190815260208252610cc78883611fb1565b60ff19915190201690815f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc6101e0516101e051a15f19430192438411610df057924082556001820180546001600160a01b03199081166001600160a01b03978816179091556002830180548216948716949094179093556003820180549093169416939093179055611a0a60058301556006919091018054680a000000009502f9006001600160c01b0319909116179055610d90906122be565b610d9b576101e05180f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160018152a180610b51565b634e487b7160e01b6101e05152601160045260246101e051fd5b68ffffffffffffffffff191668010000000000000001175f805160206128408339815191525587610c48565b63f92ee8a960e01b6101e0515260046101e051fd5b90501588610c1b565b303b159150610c13565b879150610c09565b3461052157602036600319011261052157610b51610e82611f9b565b610c5961228b565b34610521576101e05136600319011261052157602060055f80516020612820833981519152540154604051908152f35b34610521576101e051366003190112610521576020610ed76121dc565b604051908152f35b34610521576101e05136600319011261052157602060085f80516020612820833981519152540154604051908152f35b34610521576040366003190112610521576004356001600160401b0381116105215736602382011215610521578060040135906001600160401b038211610521573660248360061b83010111610521576024356001600160401b03811161052157610f7f8391369060040161202b565b5f80516020612820833981519152546101e0519460098201939192909160605b8688101561114d576101e051508760061b840197610fed604460248b01359a0192610fc9846121cf565b60405160208101918d8352151560f81b604082015260218152610954604182611fb1565b98806101e051528760205260ff60406101e0512054166003811015611133576001036110de5761101e6001936121cf565b1561108c577f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208285936101e051528a825260406101e051206101e051506101e05150600260ff19825416179055600a8a0161107b8154612174565b9055604051908152a25b0196610f9f565b806101e051528760205260406101e0512080546101e0515060ff191690556040519081527f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960206101e05192a2611085565b60405162461bcd60e51b815260206004820152602760248201527f636f64652073686f756c642062652072657175657374656420666f722076616c60448201526634b230ba34b7b760c91b6064820152608490fd5b634e487b7160e01b6101e05152602160045260246101e051fd5b610b51935060208151910120612449565b34610521576020366003190112610521576004356001600160401b0381116105215761118e90369060040161202b565b61119661228b565b5f80516020612820833981519152546101e0516007820191600801905b81548110156111f3576101e08051839052516020908190208201546001600160a01b03165f9081529084905260409020805460ff191690556001016111b3565b506101e0518154908255915081611249575b61121861121336858761205b565b6122be565b7f144bbc027dc176e94c43b7c1bcff2a8aa58ab434029eec294743cd4ab2e54f516101e0516101e051a16101e05180f35b6101e0515260206101e05120908101905b81811015611205576101e051815560010161125a565b34610521576101e0513660031901126105215760206001600160401b0360065f8051602061282083398151915254015416604051908152f35b34610521576101e051366003190112610521576112d660085f8051602061282083398151915254016120bf565b6040518091602082016020835281518091526020604084019201906101e0515b818110611304575050500390f35b82516001600160a01b03168452859450602093840193909201916001016112f6565b346105215760203660031901126105215760095f8051602061282083398151915254016004356101e0515260205260ff60406101e0512054166040516003821015611133576020918152f35b34610521576020366003190112610521576004356001600160801b03811690818103610521577f9f5e1796f1a0adf311f86170503308a06a16560a7679b7b6da35f4999200d740916020916113c561228b565b5f8051602061282083398151915254600601805477ffffffffffffffffffffffffffffffff00000000000000001916604092831b77ffffffffffffffffffffffffffffffff00000000000000001617905551908152a16101e05180f35b34610521576101e051366003190112610521576020600c5f80516020612820833981519152540154604051908152f35b34610521576101e0513660031901126105215760205f8051602061282083398151915254604051908152f35b3461052157602036600319011261052157611497611f9b565b600b5f8051602061282083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b34610521576020366003190112610521576114df611f9b565b60075f8051602061282083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610521576101e051366003190112610521575f80516020612800833981519152546040516001600160a01b039091168152602090f35b34610521576101e051366003190112610521575f8051602061282083398151915254600301546040516001600160a01b039091168152602090f35b6080366003190112611806576044356004356001600160401b0382116118065736602383011215611806578160040135916001600160401b03831161180657366024848301011161180657606435906001600160801b03821693848303611806575f805160206128208339815191525493805f526009850160205260ff60405f20541660038110156118ed5760020361189157611620612112565b600a6001600160801b03821602946001600160801b03861695860361187d5761164c8661165193612154565b612154565b60038601546040516323b872dd60e01b81523260048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af19081156117fb575f9161185e575b50156118195760028501546e5af43d82803e903d91602b57fd5bf360405160208101908482526024356040820152604081526116e2606082611fb1565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b161760205260018060a01b0390603760095ff51694851561180a57600c90865f52600b81016020528260405f2055016117588154612174565b90557f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf16020604051878152a2833b15611806576117bd945f9360405196879485946306f0ee9760e51b8652326004870152608060248701526024608487019201612182565b9160448401526064830152038183855af19182156117fb576020926117e6575b50604051908152f35b5f6117f091611fb1565b5f6101e052826117dd565b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611877915060203d6020116109ae576109a18183611fb1565b876116a5565b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b34611806576020366003190112611806576004356001600160401b0381168091036118065760207f01326573cfc0bc40a2550923254394ebd7529e3e3301840dfa33cf786aead0c79161195261228b565b5f8051602061282083398151915254600601805467ffffffffffffffff191682179055604051908152a1005b34611806575f366003190112611806575f8051602061282083398151915254600201546040516001600160a01b039091168152602090f35b34611806575f366003190112611806576119ce61228b565b5f8051602061280083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34611806575f366003190112611806576020611a37612112565b6001600160801b0360405191168152f35b34611806575f36600319011261180657611a6061228b565b5f805160206128408339815191525460ff8160401c168015611c4b575b611c3c5768ffffffffffffffffff191668010000000000000002175f80516020612840833981519152555f80516020612820833981519152546001810154600282015460038301546001600160a01b0390811693918116921690611ae3906008016120bf565b906040918251611af38482611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252611b2761228b565b5190205f19810190811161187d578351906020820190815260208252611b4d8583611fb1565b60ff19915190201694855f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f19430143811161187d574086556001860180546001600160a01b03199081166001600160a01b03958616179091556002870180548216968516969096179095556003909501805490941694909116939093179091557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160209190611c0f906122be565b60ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160028152a1005b63f92ee8a960e01b5f5260045ffd5b5060026001600160401b0382161015611a7d565b34611806576020366003190112611806576004356001600160401b038111611806573660238201121561180657611ca0903690602481600401359101611fe6565b611ca861228b565b602081519101205f19810190811161187d57604051906020820190815260208252611cd4604083611fb1565b9051902060ff19165f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a1005b34611806575f366003190112611806575f8051602061282083398151915254600101546040516001600160a01b039091168152602090f35b3461180657602036600319011261180657611d62611f9b565b611d6a61228b565b5f805160206128208339815191525460010180546001600160a01b0319166001600160a01b03909216919091179055005b34611806575f36600319011261180657602060045f80516020612820833981519152540154604051908152f35b34611806575f3660031901126118065760205f805160206128208339815191525454604051908152f35b34611806576040366003190112611806576024356004358115801590611f30575b15611eeb5760095f80516020612820833981519152540190805f528160205260ff60405f20541660038110156118ed57611e8d577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603060248201527f636f64652077697468207375636820696420616c72656164792072657175657360448201526f1d1959081bdc881d985b1a59185d195960821b6064820152608490fd5b60405162461bcd60e51b815260206004820152601c60248201527f626c6f6254784861736820636f756c646e277420626520666f756e64000000006044820152606490fd5b505f491515611e13565b34611806575f366003190112611806576020611a376001600160801b0360065f8051602061282083398151915254015460401c1690565b34611806575f36600319011261180657602090600a5f805160206128208339815191525401548152f35b600435906001600160a01b038216820361180657565b90601f801991011681019081106001600160401b03821117611fd257604052565b634e487b7160e01b5f52604160045260245ffd5b9291926001600160401b038211611fd2576040519161200f601f8201601f191660200184611fb1565b829481845281830111611806578281602093845f960137010152565b9181601f84011215611806578235916001600160401b038311611806576020808501948460051b01011161180657565b9092916001600160401b038411611fd2578360051b91602060405161208282860182611fb1565b809681520192810191821161180657915b81831061209f57505050565b82356001600160a01b038116810361180657815260209283019201612093565b90604051918281549182825260208201905f5260205f20925f5b8181106120f05750506120ee92500383611fb1565b565b84546001600160a01b03168352600194850194879450602090930192016120d9565b5f8051602061282083398151915254600601546001600160401b038116906001600160801b039060401c811616026001600160801b03811690810361187d5790565b906001600160801b03809116911601906001600160801b03821161187d57565b5f19811461187d5760010190565b908060209392818452848401375f828201840152601f01601f1916010190565b6020806120ee928195946040519682889351918291018585015e8201908382015203018085520183611fb1565b3580151581036118065790565b5f8051602061282083398151915254600560088201549101549081810291818304149015171561187d5761270f810180911161187d57612710900490565b6001600160a01b03168015612278575f8051602061280083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f80516020612800833981519152546001600160a01b031633036122ab57565b63118cdaa760e01b5f523360045260245ffd5b5f805160206128208339815191525490600882019081546123ae579091600701905f5b815181101561232057600581901b82016020908101516001600160a01b03165f9081529084905260409020805460ff19166001908117909155016122e1565b5080519291506001600160401b038311611fd257680100000000000000008311611fd2578154838355808410612388575b50602001905f5260205f205f5b83811061236b5750505050565b82516001600160a01b03168183015560209092019160010161235e565b825f528360205f2091820191015b8181106123a35750612351565b5f8155600101612396565b60405162461bcd60e51b815260206004820152602360248201527f70726576696f75732076616c696461746f727320776572656e27742072656d6f6044820152621d995960ea1b6064820152608490fd5b90816020910312611806575180151581036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191813603831361180657565b905f8051602061282083398151915254906124626121dc565b9260405190602082019081526020825261247d604083611fb1565b6124b9603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282611fb1565b5190205f9260070191835b868510156125c2576124fa6124f16124eb6124e48860051b860186612417565b3691611fe6565b856126e3565b9092919261271d565b6001600160a01b03165f9081526020859052604090205460ff16156125875761252290612174565b9385851461253357600101936124c4565b505050509091505b1061254257565b60405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f7567682076616c6964207369676e61747572657300000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606490fd5b9495505050505061253b565b903590601e198136030182121561180657018035906001600160401b03821161180657602001918160051b3603831361180657565b60ff5f805160206128408339815191525460401c161561261f57565b631afcd79f60e31b5f5260045ffd5b905f19430143811161187d57805b612647575b505f9150565b804083810361265857506001925050565b1561266c57801561187d575f19018061263c565b612641565b356001600160a01b03811681036118065790565b356001600160801b03811681036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191606082023603831361180657565b356001600160e01b0319811681036118065790565b81519190604183036127135761270c9250602082015190606060408401519301515f1a9061277d565b9192909190565b50505f9160029190565b60048110156118ed578061272f575050565b600181036127465763f645eedf60e01b5f5260045ffd5b60028103612761575063fce698f760e01b5f5260045260245ffd5b60031461276b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116127f4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156117fb575f516001600160a01b038116156127ea57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220a56ab5c973dc843d6a2342dd7415210e0ce6114c70ea7472e3ce95a65302dcc764736f6c634300081a0033","sourceMap":"781:16427:81:-:0;;;;;;;8837:64:25;781:16427:81;;;;;;7896:76:25;;-1:-1:-1;;;;;;;;;;;781:16427:81;;7985:34:25;7981:146;;-1:-1:-1;781:16427:81;;;;;;;;;7981:146:25;-1:-1:-1;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;;;8837:64:25;781:16427:81;;;8087:29:25;;781:16427:81;;8087:29:25;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:25;;-1:-1:-1;7938:23:25;781:16427:81;;;","linkReferences":{}},"deployedBytecode":{"object":"0x610200806040526004361015610013575f80fd5b5f6101e0525f3560e01c9081627a32e714611f71575080630834fecc14611f3a5780631c149d8a14611df257806328e24b3d14611dc85780632dacfb6914611d9b5780633d43b41814611d49578063444d917214611d115780635686cad514611c5f5780636c2eb35014611a485780636ef25c3a14611a1d578063715018a6146119b657806378ee5dec1461197e5780638028861a146119015780638074b4551461158557806388f50cf01461154a5780638da5cb5b146115135780638febbd59146114c65780639067088e1461147e578063967082261461145257806396a2ddfa14611422578063a6bbbe1c14611372578063c13911e814611326578063ca1e7819146112a9578063d3fd636414611270578063e71731e41461115e578063e97d3eb314610f0f578063ed612f8c14610edf578063edc8722514610eba578063efd81abc14610e8a578063f2fde38b14610e66578063f8453e7c14610b585763fa97ed6d14610181575f80fd5b34610521576040366003190112610521576004356001600160401b038111610521576101b190369060040161202b565b906024356001600160401b038111610521576101d190369060040161202b565b6101e051606060a052909391925b82821015610b3c57600582901b8101359236829003607e19018412156105215760045f805160206128208339815191525401608052608051546020858401013503610af8576102336040858401013561262e565b15610aa7576101e0516101c0526060958285018701955b610256878786016125ce565b90506101c0511015610a125761026e878786016125ce565b9060e0526101c0511015610536576101c05160051b60e051013560c052609e1960e05136030160c0511215610521575f80516020612820833981519152546102bb60c05160e05101612671565b6001600160a01b03165f908152600b82016020526040902054156109b55760206001600160801b0391600360018060a01b0391015416604461030260c05160e05101612671565b610314604060c05160e0510101612685565b60405163a9059cbb60e01b81526001600160a01b0390921660048301529490941660248501526101e05184928391905af1801561052857610989575b5060c05160e0516001600160a01b039161036a9101612671565b166101a0526101e051606061016081905260c05160e0510101610140525b61039b6101405160c05160e05101612699565b9050811015610550576103b76101405160c05160e05101612699565b9061018052811015610536576103d7602060608302610180510101612671565b6040606083026101805101019061047a6103f083612685565b6040519060208201936060870261018051013585526001600160601b03199060601b1660408301526001600160801b03199060801b1660548201526044815261043a606482611fb1565b60206040519384926101605151808461016051018587015e840190838201906101e0518252519283915e01016101e051815203601f198101835282611fb1565b6101605261049b610495602060608502610180510101612671565b91612685565b6101a0513b15610521576040516314503e5160e01b81526101805160608502013560048201526001600160a01b0390921660248301526001600160801b031660448201526101e0516101a0518290606490829084905af1801561052857610506575b50600101610388565b6101e05161051391611fb1565b6101e051610521575f6104fd565b6101e05180fd5b6040513d6101e051823e3d90fd5b634e487b7160e01b6101e05152603260045260246101e051fd5b50909195929394956101e051610100526060610100526101e0515b60c05160e051610580910160808101906125ce565b90508110156108715760c05160e05161059e910160808101906125ce565b821015610536578160051b8101356101205260be1981360301610120511215610521576106906105d5602061012051840101612671565b605461068460346105f3604061012051880101610120518801612417565b93906106066060610120518a0101612685565b61061760a0610120518b01016126ce565b86604051978894602086019a8d6101205101358c526001600160601b03199060601b166040870152868601378301916001600160801b03199060801b16848301526080610120518b010135606483015263ffffffff60e01b16608482015203016014810184520182611fb1565b519020610100516121a2565b6101005261012051810160800135610779576106b3602061012051830101612671565b610120516106c79083016040810190612417565b90916106da606061012051860101612685565b926101a0513b156105215760405163c2df600960e01b8152610120519095013560048601526001600160a01b039091166024850152608060448501526001600160801b039161072e91608486019190612182565b9116606483015281806101e0519203816101e0516101a0515af180156105285761075e575b506001905b0161056b565b6101e05161076b91611fb1565b6101e051610521575f610753565b61078a602061012051830101612671565b906107a2604061012051830101610120518301612417565b6107b3606061012051850101612685565b926107c560a0610120518301016126ce565b926101a0513b156105215760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701526080926001600160801b039161080e9160a4890191612182565b9416604486015261012051010135606484015263ffffffff60e01b16608483015281806101e0519203816101e0516101a0515af1801561052857610856575b50600190610758565b6101e05161086391611fb1565b6101e051610521575f61084d565b5091909695949392956101a0513b1561052157604051638ea59e1d60e01b8152602060c05160e05101013560048201526101e051816024816101e0516101a0515af180156105285761096e575b5061095d906108d260c05160e05101612671565b6108e4604060c05160e0510101612685565b6101605151602061016051012061010051516020610100510120906040519260208401946001600160601b03199060601b168552602060c05160e05101013560348501526001600160801b03199060801b166054840152606483015260848201526084815261095460a482611fb1565b519020906121a2565b9660016101c051016101c05261024a565b6101e05161097b91611fb1565b6101e051610521575f6108be565b6109a99060203d81116109ae575b6109a18183611fb1565b8101906123ff565b610350565b503d610997565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9391966001939650610a999195808801359182608051557fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a1602081519101206040805192602084019485526020818c010135828501528a0101356060830152608082015260808152610a8e60a082611fb1565b51902060a0516121a2565b60a0520190929391936101df565b60405162461bcd60e51b815260206004820152602360248201527f616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f696e76616c69642070726576696f757320636f6d6d69746d656e7420686173686044820152fd5b610b51858560a05151602060a0510120612449565b6101e05180f35b346105215760a036600319011261052157610b71611f9b565b602435906001600160a01b038216820361052157604435916001600160a01b038316830361052157606435926001600160a01b0384168403610521576084356001600160401b038111610521573660238201121561052157610bdd90369060248160040135910161205b565b905f805160206128408339815191525460ff8160401c1615946001600160401b03821680159081610e5e575b6001149081610e54575b159081610e4b575b50610e365767ffffffffffffffff1982166001175f8051602061284083398151915255610c5e9186610e0a575b50610c51612603565b610c59612603565b61221a565b6040948551610c6d8782611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256310000000000000000008252610ca161228b565b5190205f198101908111610df0578651906020820190815260208252610cc78883611fb1565b60ff19915190201690815f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc6101e0516101e051a15f19430192438411610df057924082556001820180546001600160a01b03199081166001600160a01b03978816179091556002830180548216948716949094179093556003820180549093169416939093179055611a0a60058301556006919091018054680a000000009502f9006001600160c01b0319909116179055610d90906122be565b610d9b576101e05180f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160018152a180610b51565b634e487b7160e01b6101e05152601160045260246101e051fd5b68ffffffffffffffffff191668010000000000000001175f805160206128408339815191525587610c48565b63f92ee8a960e01b6101e0515260046101e051fd5b90501588610c1b565b303b159150610c13565b879150610c09565b3461052157602036600319011261052157610b51610e82611f9b565b610c5961228b565b34610521576101e05136600319011261052157602060055f80516020612820833981519152540154604051908152f35b34610521576101e051366003190112610521576020610ed76121dc565b604051908152f35b34610521576101e05136600319011261052157602060085f80516020612820833981519152540154604051908152f35b34610521576040366003190112610521576004356001600160401b0381116105215736602382011215610521578060040135906001600160401b038211610521573660248360061b83010111610521576024356001600160401b03811161052157610f7f8391369060040161202b565b5f80516020612820833981519152546101e0519460098201939192909160605b8688101561114d576101e051508760061b840197610fed604460248b01359a0192610fc9846121cf565b60405160208101918d8352151560f81b604082015260218152610954604182611fb1565b98806101e051528760205260ff60406101e0512054166003811015611133576001036110de5761101e6001936121cf565b1561108c577f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208285936101e051528a825260406101e051206101e051506101e05150600260ff19825416179055600a8a0161107b8154612174565b9055604051908152a25b0196610f9f565b806101e051528760205260406101e0512080546101e0515060ff191690556040519081527f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960206101e05192a2611085565b60405162461bcd60e51b815260206004820152602760248201527f636f64652073686f756c642062652072657175657374656420666f722076616c60448201526634b230ba34b7b760c91b6064820152608490fd5b634e487b7160e01b6101e05152602160045260246101e051fd5b610b51935060208151910120612449565b34610521576020366003190112610521576004356001600160401b0381116105215761118e90369060040161202b565b61119661228b565b5f80516020612820833981519152546101e0516007820191600801905b81548110156111f3576101e08051839052516020908190208201546001600160a01b03165f9081529084905260409020805460ff191690556001016111b3565b506101e0518154908255915081611249575b61121861121336858761205b565b6122be565b7f144bbc027dc176e94c43b7c1bcff2a8aa58ab434029eec294743cd4ab2e54f516101e0516101e051a16101e05180f35b6101e0515260206101e05120908101905b81811015611205576101e051815560010161125a565b34610521576101e0513660031901126105215760206001600160401b0360065f8051602061282083398151915254015416604051908152f35b34610521576101e051366003190112610521576112d660085f8051602061282083398151915254016120bf565b6040518091602082016020835281518091526020604084019201906101e0515b818110611304575050500390f35b82516001600160a01b03168452859450602093840193909201916001016112f6565b346105215760203660031901126105215760095f8051602061282083398151915254016004356101e0515260205260ff60406101e0512054166040516003821015611133576020918152f35b34610521576020366003190112610521576004356001600160801b03811690818103610521577f9f5e1796f1a0adf311f86170503308a06a16560a7679b7b6da35f4999200d740916020916113c561228b565b5f8051602061282083398151915254600601805477ffffffffffffffffffffffffffffffff00000000000000001916604092831b77ffffffffffffffffffffffffffffffff00000000000000001617905551908152a16101e05180f35b34610521576101e051366003190112610521576020600c5f80516020612820833981519152540154604051908152f35b34610521576101e0513660031901126105215760205f8051602061282083398151915254604051908152f35b3461052157602036600319011261052157611497611f9b565b600b5f8051602061282083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b34610521576020366003190112610521576114df611f9b565b60075f8051602061282083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610521576101e051366003190112610521575f80516020612800833981519152546040516001600160a01b039091168152602090f35b34610521576101e051366003190112610521575f8051602061282083398151915254600301546040516001600160a01b039091168152602090f35b6080366003190112611806576044356004356001600160401b0382116118065736602383011215611806578160040135916001600160401b03831161180657366024848301011161180657606435906001600160801b03821693848303611806575f805160206128208339815191525493805f526009850160205260ff60405f20541660038110156118ed5760020361189157611620612112565b600a6001600160801b03821602946001600160801b03861695860361187d5761164c8661165193612154565b612154565b60038601546040516323b872dd60e01b81523260048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af19081156117fb575f9161185e575b50156118195760028501546e5af43d82803e903d91602b57fd5bf360405160208101908482526024356040820152604081526116e2606082611fb1565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b161760205260018060a01b0390603760095ff51694851561180a57600c90865f52600b81016020528260405f2055016117588154612174565b90557f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf16020604051878152a2833b15611806576117bd945f9360405196879485946306f0ee9760e51b8652326004870152608060248701526024608487019201612182565b9160448401526064830152038183855af19182156117fb576020926117e6575b50604051908152f35b5f6117f091611fb1565b5f6101e052826117dd565b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611877915060203d6020116109ae576109a18183611fb1565b876116a5565b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b34611806576020366003190112611806576004356001600160401b0381168091036118065760207f01326573cfc0bc40a2550923254394ebd7529e3e3301840dfa33cf786aead0c79161195261228b565b5f8051602061282083398151915254600601805467ffffffffffffffff191682179055604051908152a1005b34611806575f366003190112611806575f8051602061282083398151915254600201546040516001600160a01b039091168152602090f35b34611806575f366003190112611806576119ce61228b565b5f8051602061280083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34611806575f366003190112611806576020611a37612112565b6001600160801b0360405191168152f35b34611806575f36600319011261180657611a6061228b565b5f805160206128408339815191525460ff8160401c168015611c4b575b611c3c5768ffffffffffffffffff191668010000000000000002175f80516020612840833981519152555f80516020612820833981519152546001810154600282015460038301546001600160a01b0390811693918116921690611ae3906008016120bf565b906040918251611af38482611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252611b2761228b565b5190205f19810190811161187d578351906020820190815260208252611b4d8583611fb1565b60ff19915190201694855f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f19430143811161187d574086556001860180546001600160a01b03199081166001600160a01b03958616179091556002870180548216968516969096179095556003909501805490941694909116939093179091557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160209190611c0f906122be565b60ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160028152a1005b63f92ee8a960e01b5f5260045ffd5b5060026001600160401b0382161015611a7d565b34611806576020366003190112611806576004356001600160401b038111611806573660238201121561180657611ca0903690602481600401359101611fe6565b611ca861228b565b602081519101205f19810190811161187d57604051906020820190815260208252611cd4604083611fb1565b9051902060ff19165f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a1005b34611806575f366003190112611806575f8051602061282083398151915254600101546040516001600160a01b039091168152602090f35b3461180657602036600319011261180657611d62611f9b565b611d6a61228b565b5f805160206128208339815191525460010180546001600160a01b0319166001600160a01b03909216919091179055005b34611806575f36600319011261180657602060045f80516020612820833981519152540154604051908152f35b34611806575f3660031901126118065760205f805160206128208339815191525454604051908152f35b34611806576040366003190112611806576024356004358115801590611f30575b15611eeb5760095f80516020612820833981519152540190805f528160205260ff60405f20541660038110156118ed57611e8d577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603060248201527f636f64652077697468207375636820696420616c72656164792072657175657360448201526f1d1959081bdc881d985b1a59185d195960821b6064820152608490fd5b60405162461bcd60e51b815260206004820152601c60248201527f626c6f6254784861736820636f756c646e277420626520666f756e64000000006044820152606490fd5b505f491515611e13565b34611806575f366003190112611806576020611a376001600160801b0360065f8051602061282083398151915254015460401c1690565b34611806575f36600319011261180657602090600a5f805160206128208339815191525401548152f35b600435906001600160a01b038216820361180657565b90601f801991011681019081106001600160401b03821117611fd257604052565b634e487b7160e01b5f52604160045260245ffd5b9291926001600160401b038211611fd2576040519161200f601f8201601f191660200184611fb1565b829481845281830111611806578281602093845f960137010152565b9181601f84011215611806578235916001600160401b038311611806576020808501948460051b01011161180657565b9092916001600160401b038411611fd2578360051b91602060405161208282860182611fb1565b809681520192810191821161180657915b81831061209f57505050565b82356001600160a01b038116810361180657815260209283019201612093565b90604051918281549182825260208201905f5260205f20925f5b8181106120f05750506120ee92500383611fb1565b565b84546001600160a01b03168352600194850194879450602090930192016120d9565b5f8051602061282083398151915254600601546001600160401b038116906001600160801b039060401c811616026001600160801b03811690810361187d5790565b906001600160801b03809116911601906001600160801b03821161187d57565b5f19811461187d5760010190565b908060209392818452848401375f828201840152601f01601f1916010190565b6020806120ee928195946040519682889351918291018585015e8201908382015203018085520183611fb1565b3580151581036118065790565b5f8051602061282083398151915254600560088201549101549081810291818304149015171561187d5761270f810180911161187d57612710900490565b6001600160a01b03168015612278575f8051602061280083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f80516020612800833981519152546001600160a01b031633036122ab57565b63118cdaa760e01b5f523360045260245ffd5b5f805160206128208339815191525490600882019081546123ae579091600701905f5b815181101561232057600581901b82016020908101516001600160a01b03165f9081529084905260409020805460ff19166001908117909155016122e1565b5080519291506001600160401b038311611fd257680100000000000000008311611fd2578154838355808410612388575b50602001905f5260205f205f5b83811061236b5750505050565b82516001600160a01b03168183015560209092019160010161235e565b825f528360205f2091820191015b8181106123a35750612351565b5f8155600101612396565b60405162461bcd60e51b815260206004820152602360248201527f70726576696f75732076616c696461746f727320776572656e27742072656d6f6044820152621d995960ea1b6064820152608490fd5b90816020910312611806575180151581036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191813603831361180657565b905f8051602061282083398151915254906124626121dc565b9260405190602082019081526020825261247d604083611fb1565b6124b9603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282611fb1565b5190205f9260070191835b868510156125c2576124fa6124f16124eb6124e48860051b860186612417565b3691611fe6565b856126e3565b9092919261271d565b6001600160a01b03165f9081526020859052604090205460ff16156125875761252290612174565b9385851461253357600101936124c4565b505050509091505b1061254257565b60405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f7567682076616c6964207369676e61747572657300000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606490fd5b9495505050505061253b565b903590601e198136030182121561180657018035906001600160401b03821161180657602001918160051b3603831361180657565b60ff5f805160206128408339815191525460401c161561261f57565b631afcd79f60e31b5f5260045ffd5b905f19430143811161187d57805b612647575b505f9150565b804083810361265857506001925050565b1561266c57801561187d575f19018061263c565b612641565b356001600160a01b03811681036118065790565b356001600160801b03811681036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191606082023603831361180657565b356001600160e01b0319811681036118065790565b81519190604183036127135761270c9250602082015190606060408401519301515f1a9061277d565b9192909190565b50505f9160029190565b60048110156118ed578061272f575050565b600181036127465763f645eedf60e01b5f5260045ffd5b60028103612761575063fce698f760e01b5f5260045260245ffd5b60031461276b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116127f4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156117fb575f516001600160a01b038116156127ea57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220a56ab5c973dc843d6a2342dd7415210e0ce6114c70ea7472e3ce95a65302dcc764736f6c634300081a0033","sourceMap":"781:16427:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;;;;9630:35;;781:16427;;;;9730:3;9696:32;;;;;;781:16427;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;11143:30;;;;;781:16427;;;;;11177:34;781:16427;11143:68;781:16427;;11275:49;781:16427;;;;11294:29;781:16427;11275:49;:::i;:::-;781:16427;;;;;11421:13;;781:16427;;;;;11440:27;;;11476:3;11440:27;781:16427;;;;11440:27;:::i;:::-;11436:38;;;;;;;;11538:27;781:16427;;;;11538:27;:::i;:::-;;;;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;12616:23;781:16427;;;;;12616:23;:::i;:::-;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;12600:15;;;781:16427;;;;;;12600:45;781:16427;;;-1:-1:-1;;;;;781:16427:81;12753:18;781:16427;;;;;12753:18;;781:16427;;;12808:23;781:16427;;;;;12808:23;:::i;:::-;12833:30;781:16427;;;;;;12833:30;;:::i;:::-;781:16427;;-1:-1:-1;;;12782:82:81;;-1:-1:-1;;;;;781:16427:81;;;;12782:82;;781:16427;;;;;;;;;;;;;;;;12782:82;;;;;;;;11476:3;-1:-1:-1;781:16427:81;;;;-1:-1:-1;;;;;781:16427:81;12905:23;;781:16427;12905:23;:::i;:::-;781:16427;;;;;;12940:29;;;;781:16427;;;;;13004:27;;;13040:3;13004:27;;;781:16427;;;;;13004:27;:::i;:::-;13000:38;;;;;;;13092:27;;;781:16427;;;;;13092:27;:::i;:::-;;;;781:16427;;;;;13243:22;781:16427;;;;;;;13243:22;;:::i;:::-;781:16427;;;;;;;13267:16;;781:16427;13267:16;;;:::i;:::-;781:16427;;13204:80;781:16427;13204:80;;781:16427;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;13204:80;;;781:16427;13204:80;;:::i;:::-;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13204:80;;781:16427;;;;;;:::i;:::-;13137:161;;13384:16;13360:22;781:16427;;;;;;;13243:22;13360;:::i;:::-;13384:16;;:::i;:::-;13313:88;;;;;;781:16427;;-1:-1:-1;;;13313:88:81;;781:16427;;;;;;;;13313:88;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;13313:88;;781:16427;;;;;;;;13313:88;;;;;;;;13040:3;;781:16427;;12985:13;;13313:88;781:16427;;13313:88;;;:::i;:::-;781:16427;;;;13313:88;;;781:16427;;;;;13313:88;781:16427;;;;;;;;;;;;;;;;;;;;;;;;13000:38;;;;;;;;;781:16427;;13422:27;;781:16427;13422:27;;781:16427;;13517:3;781:16427;;;;13484:24;;781:16427;;13484:24;;;;:::i;:::-;13480:35;;;;;;;781:16427;;;;13579:24;;781:16427;;13484:24;;;13579;:::i;:::-;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;13638:67;15508:27;781:16427;;;;;15508:27;;:::i;:::-;781:16427;15438:291;781:16427;15553:23;781:16427;;;;;15553:23;781:16427;;;;15553:23;:::i;:::-;781:16427;;15594:21;781:16427;;;;;15594:21;;:::i;:::-;15682:33;14840:85;781:16427;;;;15682:33;;:::i;:::-;781:16427;;;15438:291;;;781:16427;15438:291;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;15633:28;781:16427;;;;;;;;;;;;;15438:291;;;;;;;;;;:::i;:::-;781:16427;15415:324;;13638:67;;;:::i;:::-;13621:84;;781:16427;;;;;15633:28;781:16427;;;13845:27;781:16427;;;;;15508:27;13845;:::i;:::-;781:16427;;13874:23;;781:16427;;;15553:23;;;13874;:::i;:::-;781:16427;;13899:21;781:16427;;;;;15594:21;13899;:::i;:::-;13780:158;;;;;;;781:16427;;-1:-1:-1;;;13780:158:81;;781:16427;;;;;;;13780:158;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;:::i;:::-;;;;;;;;;;;13780:158;;781:16427;;;13780:158;;;;;;;;;;13720:556;;781:16427;13720:556;;781:16427;13465:13;;13780:158;781:16427;;13780:158;;;:::i;:::-;781:16427;;;;13780:158;;;13720:556;14020:27;781:16427;;;;;15508:27;14020;:::i;:::-;781:16427;14069:23;781:16427;;;;;15553:23;781:16427;;;;14069:23;:::i;:::-;14114:21;781:16427;;;;;15594:21;14114;:::i;:::-;781:16427;14210:33;14840:85;781:16427;;;;15682:33;14210;:::i;:::-;13977:284;;;;;;;781:16427;;-1:-1:-1;;;13977:284:81;;-1:-1:-1;;;;;781:16427:81;;;;13977:284;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;15189:92;781:16427;;;;:::i;:::-;;;;;;;;;;15633:28;781:16427;;;;;;;;;;;;;;;;;13977:284;;781:16427;;;13977:284;;;;;;;;;;13720:556;;781:16427;13720:556;;;13977:284;781:16427;;13977:284;;;:::i;:::-;781:16427;;;;13977:284;;;13480:35;;;;;;;;;;14296:53;;;;;;781:16427;;;;;14296:53;;781:16427;;;;;;14320:28;781:16427;;14296:53;;781:16427;;;;;;;;14296:53;;;;;;;;;;13460:826;781:16427;11678:47;781:16427;14401:23;781:16427;;;;;14401:23;:::i;:::-;14480:30;781:16427;;;;;;12833:30;14480;:::i;:::-;14524:27;;781:16427;;14524:27;;781:16427;14524:27;14565:25;;781:16427;;14565:25;;781:16427;14565:25;781:16427;;;15189:92;781:16427;15189:92;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;14320:28;781:16427;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;15189:92;;;;;;:::i;:::-;781:16427;15179:103;;11678:47;;:::i;:::-;11476:3;781:16427;11476:3;;781:16427;11476:3;;11421:13;;14296:53;781:16427;;14296:53;;;:::i;:::-;781:16427;;;;14296:53;;;12782:82;;;781:16427;12782:82;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;11436:38;;;;781:16427;11436:38;;;9930:57;11436:38;;781:16427;;;;1072:66;;;;;11819:41;781:16427;;;;;;11819:41;781:16427;;;;;12042:28;781:16427;;;14840:85;781:16427;14840:85;;781:16427;;;;;;;11177:34;781:16427;;;;;;;11294:29;781:16427;;;;;;;;;;14840:85;;;;;;:::i;:::-;781:16427;14830:96;;9930:57;;;:::i;:::-;9905:82;;781:16427;9681:13;;;;;;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9696:32;10063:10;9696:32;;10028:33;;781:16427;;10028:33;;781:16427;10028:33;10063:10;:::i;:::-;781:16427;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;4301:16:25;781:16427:81;-1:-1:-1;;;;;781:16427:81;;4726:16:25;;:34;;;;781:16427:81;4805:1:25;4790:16;:50;;;;781:16427:81;4855:13:25;:30;;;;781:16427:81;4851:91:25;;;-1:-1:-1;;781:16427:81;;4805:1:25;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6961:1:25;;781:16427:81;4979:67:25;;781:16427:81;6893:76:25;;;:::i;:::-;;;:::i;:::-;6961:1;:::i;:::-;781:16427:81;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:24;;:::i;:::-;781:16427:81;2944:27;;-1:-1:-1;;781:16427:81;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;;;;:::i;:::-;781:16427;;;;2915:63;;:89;1072:66;;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;;;;3084:20;781:16427;;1644:12;781:16427;1644:12;;781:16427;;;;1634:27;;1072:66;;4805:1:25;1671:13:81;;781:16427;;-1:-1:-1;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;1704:18;;;781:16427;;;;;;;;;;;;;;1747:18;;;781:16427;;;;;;;;;;;;;1826:4;1790:33;;;1072:66;1868:17;;;;;781:16427;;;-1:-1:-1;;;;;;781:16427:81;;;;;;1962:15;;;:::i;:::-;5066:101:25;;781:16427:81;;;;5066:101:25;781:16427:81;5142:14:25;781:16427:81;-1:-1:-1;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;;;;;;781:16427:81;;4805:1:25;781:16427:81;;5142:14:25;5066:101;;;781:16427:81;;;;;;;;;;;;;;4979:67:25;-1:-1:-1;;781:16427:81;;;-1:-1:-1;;;;;;;;;;;781:16427:81;4979:67:25;;;4851:91;6498:23;;;781:16427:81;;4908:23:25;781:16427:81;;;4908:23:25;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:25;;4726:34;;;-1:-1:-1;4726:34:25;;781:16427:81;;;;;;-1:-1:-1;;781:16427:81;;;;2357:1:24;781:16427:81;;:::i;:::-;2303:62:24;;:::i;781:16427:81:-;;;;;;;-1:-1:-1;;781:16427:81;;;;;4918:33;-1:-1:-1;;;;;;;;;;;781:16427:81;4918:33;781:16427;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;5296:21;-1:-1:-1;;;;;;;;;;;781:16427:81;5296:21;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;8978:12;;;;781:16427;;;;;8651:3;8618:31;;;;;;-1:-1:-1;;781:16427:81;;;;;;;8852:55;15915:20;781:16427;;;;15915:20;;;;;;:::i;:::-;781:16427;;;15879:57;;781:16427;;;;;;;;;;;;;15879:57;;;;;;:::i;8852:55::-;781:16427;;;;;;;;;;;;;;;;;;;;;;8978:53;781:16427;;9094:20;781:16427;9094:20;;:::i;:::-;;;;9246:30;781:16427;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;9157:19;781:16427;;;;;;;;9194:26;;;:28;781:16427;;9194:28;:::i;:::-;1072:66;;781:16427;;;;;9246:30;9090:322;781:16427;8603:13;;;9090:322;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;;;9366:31;781:16427;;;9366:31;;9090:322;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;8618:31;9486:10;8618:31;;781:16427;;;;;9452:32;9486:10;:::i;781:16427::-;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;16446:17;;;;16332:21;;;16362:3;781:16427;;16328:32;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;16313:13;;16328:32;-1:-1:-1;781:16427:81;;;;;;;;-1:-1:-1;781:16427:81;;;16308:177;5857:38;781:16427;;;;;:::i;:::-;5857:38;:::i;:::-;5911:22;781:16427;;;;5911:22;781:16427;;;;;-1:-1:-1;;781:16427:81;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;6110:17:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6110:17;781:16427;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;5640:21;-1:-1:-1;;;;;;;;;;;781:16427:81;5640:21;781:16427;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;4382:12;-1:-1:-1;;;;;;;;;;;781:16427:81;4382:12;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;6689:38;2303:62:24;781:16427:81;2303:62:24;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;6634:21;;781:16427;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;;;6689:38;781:16427;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;4535:20;-1:-1:-1;;;;;;;;;;;781:16427:81;4535:20;781:16427;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;4703:15;-1:-1:-1;;;;;;;;;;;781:16427:81;4703:15;:24;781:16427;;;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;5473:17;-1:-1:-1;;;;;;;;;;;781:16427:81;5473:17;:28;781:16427;;;;;;-1:-1:-1;781:16427:81;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3567:18;;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;7571:12;;;781:16427;;;;;;;;;;;;;;7595:19;7571:43;781:16427;;7699:9;;:::i;:::-;781:16427;-1:-1:-1;;;;;781:16427:81;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;7795:32;;:41;:32;;:::i;:::-;:41;:::i;:::-;781:16427;16079:18;;781:16427;;;-1:-1:-1;;;16072:73:81;;16112:9;781:16427;16072:73;;781:16427;16131:4;781:16427;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;16072:73;;;;;;;781:16427;16072:73;;;781:16427;;;;;7595:19;8078:18;;781:16427;3743:569:36;781:16427:81;;;8108:30;;781:16427;;;;;;;;;;;8108:30;;;781:16427;8108:30;;:::i;:::-;781:16427;8098:41;;3743:569:36;;;;;;;;781:16427:81;3743:569:36;;;;;;;;781:16427:81;3743:569:36;781:16427:81;;;;;3743:569:36;;7571:12:81;781:16427;3743:569:36;781:16427:81;4325:22:36;;;4321:85;;8194:20:81;8151:24;781:16427;;;8151:15;;;781:16427;;;;;;1072:66;8194:20;:22;781:16427;;8194:22;:::i;:::-;1072:66;;8232:31;781:16427;;;;;;8232:31;8274:75;;;;;781:16427;;;;;;;;;;;;;;8274:75;;16112:9;781:16427;8274:75;;781:16427;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8274:75;;;;;;;;;;;781:16427;8274:75;;;781:16427;;;;;;;;8274:75;781:16427;8274:75;;;:::i;:::-;781:16427;;;8274:75;;;;781:16427;;;;;;;;;8274:75;781:16427;;;4321:85:36;4370:25;;;781:16427:81;4370:25:36;781:16427:81;;4370:25:36;781:16427:81;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;16072:73;;;;781:16427;16072:73;781:16427;16072:73;;;;;;;:::i;:::-;;;;781:16427;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;6307:30;2303:62:24;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;6260:17;;781:16427;;-1:-1:-1;;781:16427:81;;;;;;;;;;6307:30;781:16427;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3716:18;;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;3975:40:24;781:16427:81;;3975:40:24;781:16427:81;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;:::i;:::-;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;6431:44:25;;;;781:16427:81;6427:105:25;;-1:-1:-1;;781:16427:81;;;-1:-1:-1;;;;;;;;;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;2129:16;;781:16427;2046:1;2178:21;;781:16427;2232:21;;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;2298:24;;781:16427;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:24;;:::i;:::-;781:16427:81;2944:27;;-1:-1:-1;;781:16427:81;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;;;;:::i;:::-;781:16427;;;;2915:63;;:89;1072:66;;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;3084:20;;781:16427;;2469:12;781:16427;2469:12;781:16427;;;;2459:27;1072:66;;6593:4:25;2496:13:81;;781:16427;;-1:-1:-1;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;2046:1;2529:18;;781:16427;;;;;;;;;;;;;;2232:21;2572:18;;;781:16427;;;;;;;;;;;;;;;;6656:20:25;;781:16427:81;;-1:-1:-1;2630:15:81;;;:::i;:::-;-1:-1:-1;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;;;;;;781:16427:81;;2046:1;781:16427;;6656:20:25;781:16427:81;6427:105:25;6498:23;;;781:16427:81;6498:23:25;781:16427:81;;6498:23:25;6431:44;781:16427:81;2046:1;-1:-1:-1;;;;;781:16427:81;;6450:25:25;;6431:44;;781:16427:81;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;781:16427:81;;;;;2944:27;781:16427;;;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;781:16427;2925:52;;:::i;:::-;781:16427;;2915:63;;-1:-1:-1;;2915:89:81;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;;3084:20;781:16427;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;3860:13;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;3999:13;;781:16427;;-1:-1:-1;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3406:30;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;6983:15;;;;;:35;;781:16427;;;;7119:12;-1:-1:-1;;;;;;;;;;;781:16427:81;7119:12;781:16427;;;;;;;;;;;;;;;;;;;;;7292:43;781:16427;;;;;;;;;;;7247:29;781:16427;;;;;;;;;;;;;;;;;7292:43;781:16427;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;6983:35;7002:11;781:16427;7002:11;:16;;6983:35;;781:16427;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;6471:21:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6471:21;781:16427;;;;6350:149;;781:16427;;;;;;-1:-1:-1;;781:16427:81;;;;;;4211:26;-1:-1:-1;;;;;;;;;;;781:16427:81;4211:26;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;:::o;:::-;;;13204:80;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;13204:80;781:16427;;-1:-1:-1;;781:16427:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;6740:113;-1:-1:-1;;;;;;;;;;;781:16427:81;6110:17;;781:16427;-1:-1:-1;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;6740:113;:::o;781:16427::-;;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;:::o;:::-;-1:-1:-1;;781:16427:81;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;-1:-1:-1;;781:16427:81;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;4964:204::-;-1:-1:-1;;;;;;;;;;;781:16427:81;4918:33;5296:21;;;781:16427;4918:33;;781:16427;;;;;;;;;;;;;;;;5148:4;781:16427;;;;;;;5156:5;781:16427;;4964:204;:::o;3405:215:24:-;-1:-1:-1;;;;;781:16427:81;3489:22:24;;3485:91;;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;3975:40:24;-1:-1:-1;;3975:40:24;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;781:16427:81;;3509:1:24;3534:31;2658:162;-1:-1:-1;;;;;;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;966:10:29;2717:23:24;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:24;966:10:29;2763:40:24;781:16427:81;;-1:-1:-1;2763:40:24;16536:442:81;-1:-1:-1;;;;;;;;;;;781:16427:81;16670:21;;;;781:16427;;;;;16759:13;;16875:17;;;-1:-1:-1;16803:3:81;781:16427;;16774:27;;;;;781:16427;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;16759:13;;16774:27;-1:-1:-1;781:16427:81;;;16774:27;-1:-1:-1;;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;16754:167;781:16427;;;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;-1:-1:-1;781:16427:81;;;;;;16536:442;;;;:::o;781:16427::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;:::o;10123:844::-;;-1:-1:-1;;;;;;;;;;;781:16427:81;10291:21;;;:::i;:::-;781:16427;;;10391:26;;;;781:16427;;;10391:26;;;;781:16427;10391:26;;:::i;:::-;2858:45:56;781:16427:81;;;2858:45:56;;10391:26:81;2858:45:56;;781:16427:81;;;;;;10353:4;781:16427;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;2858:45:56;;13204:80:81;;2858:45:56;;;;;;:::i;:::-;781:16427:81;2848:56:56;;-1:-1:-1;;10652:17:81;;;-1:-1:-1;10509:3:81;10486:21;;;;;;3915:8:55;3859:27;781:16427:81;;;;;;;;;:::i;:::-;;;;:::i;:::-;3859:27:55;;:::i;:::-;3915:8;;;;;:::i;:::-;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;10704:17;;;:::i;:::-;:30;;;;10700:82;;781:16427;;10471:13;;;10700:82;10758:5;;;;;;;10466:416;10900:28;781:16427;;10123:844::o;781:16427::-;;;-1:-1:-1;;;781:16427:81;;10391:26;781:16427;;;;;;;;;;;;;;;;;10648:224;781:16427;;-1:-1:-1;;;781:16427:81;;10391:26;781:16427;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;10486:21;;;;;;;;;;781:16427;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;:::o;7084:141:25:-;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;7150:18:25;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:25;;-1:-1:-1;7191:17:25;12093:338:81;;781:16427;;12190:12;781:16427;12190:12;781:16427;;;;12173:230;12208:5;;;12173:230;-1:-1:-1;781:16427:81;;-1:-1:-1;12093:338:81:o;12215:3::-;12248:12;;12278:11;;;;;-1:-1:-1;12205:1:81;;-1:-1:-1;;12309:11:81:o;12274:119::-;12345:8;12341:52;;781:16427;;;;-1:-1:-1;;781:16427:81;;12178:28;;12341:52;12373:5;;781:16427;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;;;;;781:16427:81;;;;;;;:::o;2129:766:55:-;781:16427:81;;;2129:766:55;2276:2;2256:22;;2276:2;;2739:25;2539:180;;;;;;;;;;;;;;;-1:-1:-1;2539:180:55;2739:25;;:::i;:::-;2732:32;;;;;:::o;2252:637::-;2795:83;;2811:1;2795:83;2815:35;2795:83;;:::o;7196:532::-;781:16427:81;;;;;;7282:29:55;;;7327:7;;:::o;7278:444::-;781:16427:81;7378:38:55;;781:16427:81;;7439:23:55;;;7291:20;7439:23;781:16427:81;7291:20:55;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;781:16427:81;;;7291:20:55;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;781:16427:81;;;7291:20:55;7679:32;5140:1530;;;6199:66;6186:79;;6182:164;;781:16427:81;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;;6457:24:55;;;;;;;;;-1:-1:-1;6457:24:55;-1:-1:-1;;;;;781:16427:81;;6495:20:55;6491:113;;6614:49;-1:-1:-1;6614:49:55;-1:-1:-1;5140:1530:55;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:55;6457:24;6531:62;-1:-1:-1;6531:62:55;:::o;6182:164::-;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o","linkReferences":{}},"methodIdentifiers":{"baseFee()":"6ef25c3a","baseWeight()":"d3fd6364","codeState(bytes32)":"c13911e8","commitBlocks((bytes32,bytes32,bytes32,(address,bytes32,uint128,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4))[])[])[],bytes[])":"fa97ed6d","commitCodes((bytes32,bool)[],bytes[])":"e97d3eb3","createProgram(bytes32,bytes32,bytes,uint128)":"8074b455","genesisBlockHash()":"28e24b3d","getStorageSlot()":"96708226","initialize(address,address,address,address,address[])":"f8453e7c","lastBlockCommitmentHash()":"2dacfb69","mirror()":"444d9172","mirrorProxy()":"78ee5dec","owner()":"8da5cb5b","programCodeId(address)":"9067088e","programsCount()":"96a2ddfa","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestCodeValidation(bytes32,bytes32)":"1c149d8a","setBaseWeight(uint64)":"8028861a","setMirror(address)":"3d43b418","setStorageSlot(string)":"5686cad5","setValuePerWeight(uint128)":"a6bbbe1c","signingThresholdPercentage()":"efd81abc","transferOwnership(address)":"f2fde38b","updateValidators(address[])":"e71731e4","validatedCodesCount()":"007a32e7","validatorExists(address)":"8febbd59","validators()":"ca1e7819","validatorsCount()":"ed612f8c","validatorsThreshold()":"edc87225","valuePerWeight()":"0834fecc","wrappedVara()":"88f50cf0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"baseWeight\",\"type\":\"uint64\"}],\"name\":\"BaseWeightChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"BlockCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"CodeGotValidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"CodeValidationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"ProgramCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StorageSlotChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ValidatorsSetChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"valuePerWeight\",\"type\":\"uint128\"}],\"name\":\"ValuePerWeightChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"baseFee\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"codeState\",\"outputs\":[{\"internalType\":\"enum IRouter.CodeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"prevCommitmentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"predBlockHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct IRouter.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct IRouter.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"}],\"internalType\":\"struct IRouter.OutgoingMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRouter.StateTransition[]\",\"name\":\"transitions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRouter.BlockCommitment[]\",\"name\":\"blockCommitmentsArray\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"internalType\":\"struct IRouter.CodeCommitment[]\",\"name\":\"codeCommitmentsArray\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitCodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"createProgram\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageSlot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_validatorsKeys\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBlockCommitmentHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirror\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"program\",\"type\":\"address\"}],\"name\":\"programCodeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"requestCodeValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_baseWeight\",\"type\":\"uint64\"}],\"name\":\"setBaseWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"}],\"name\":\"setMirror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"namespace\",\"type\":\"string\"}],\"name\":\"setStorageSlot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valuePerWeight\",\"type\":\"uint128\"}],\"name\":\"setValuePerWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signingThresholdPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"validatorsAddressArray\",\"type\":\"address[]\"}],\"name\":\"updateValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatedCodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"validatorExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"valuePerWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedVara\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"BaseWeightChanged(uint64)\":{\"details\":\"Emitted when the tx's base weight is changed. NOTE: It's event for USERS: it informs about new value of commission for each message sending. NOTE: It's event for NODES: it requires to update commission in programs execution parameters.\"},\"BlockCommitted(bytes32)\":{\"details\":\"Emitted when a new state transitions are applied. NOTE: It's event for USERS: it informs about new block outcome committed.\"},\"CodeGotValidated(bytes32,bool)\":{\"details\":\"Emitted when a code, previously requested to be validated, gets validated. NOTE: It's event for USERS: it informs about validation results of previously requested code.\"},\"CodeValidationRequested(bytes32,bytes32)\":{\"details\":\"Emitted when a new code validation request submitted. NOTE: It's event for NODES: it requires to download and validate code from blob.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProgramCreated(address,bytes32)\":{\"details\":\"Emitted when a new program created. NOTE: It's event for USERS: it informs about new program creation and it's availability on Ethereum. NOTE: It's event for NODES: it requires to create associated gear program in local storage.\"},\"StorageSlotChanged()\":{\"details\":\"Emitted when the storage slot is changed. NOTE: It's event for USERS: it informs about router being wiped and all programs and codes deletion. NOTE: It's event for NODES: it requires to clean the local storage.\"},\"ValidatorsSetChanged()\":{\"details\":\"Emitted when the validators set is changed. NOTE: It's event for USERS: it informs about validators rotation. NOTE: It's event for NODES: it requires to update authorities that sign outcomes.\"},\"ValuePerWeightChanged(uint128)\":{\"details\":\"Emitted when the value per executable weight is changed. NOTE: It's event for USERS: it informs about new conversion rate between weight and it's WVara price. NOTE: It's event for NODES: it requires to update conversion rate in programs execution parameters.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"programCodeId(address)\":{\"details\":\"Returns bytes32(0) in case of inexistent program.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Router.sol\":\"Router\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64\",\"dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58\",\"dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf\",\"dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde\",\"dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Router.sol\":{\"keccak256\":\"0x5db40e2574ad57a5d159346d1e4adc1fc3df4c63097345805e89c60553a6ce4e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://951272070e69e13be0cad9d405cd47db9d239b0d9095c4c440560a679910e040\",\"dweb:/ipfs/QmWXwFjEDW7nouNJNXuLic4efxjokeCQ33irYoDyhE7k8p\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"uint64","name":"baseWeight","type":"uint64","indexed":false}],"type":"event","name":"BaseWeightChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":false}],"type":"event","name":"BlockCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"bool","name":"valid","type":"bool","indexed":true}],"type":"event","name":"CodeGotValidated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32","indexed":false}],"type":"event","name":"CodeValidationRequested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"actorId","type":"address","indexed":false},{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":true}],"type":"event","name":"ProgramCreated","anonymous":false},{"inputs":[],"type":"event","name":"StorageSlotChanged","anonymous":false},{"inputs":[],"type":"event","name":"ValidatorsSetChanged","anonymous":false},{"inputs":[{"internalType":"uint128","name":"valuePerWeight","type":"uint128","indexed":false}],"type":"event","name":"ValuePerWeightChanged","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"baseFee","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"baseWeight","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"codeState","outputs":[{"internalType":"enum IRouter.CodeState","name":"","type":"uint8"}]},{"inputs":[{"internalType":"struct IRouter.BlockCommitment[]","name":"blockCommitmentsArray","type":"tuple[]","components":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"prevCommitmentHash","type":"bytes32"},{"internalType":"bytes32","name":"predBlockHash","type":"bytes32"},{"internalType":"struct IRouter.StateTransition[]","name":"transitions","type":"tuple[]","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"struct IRouter.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct IRouter.OutgoingMessage[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct IRouter.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]}]}]}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitBlocks"},{"inputs":[{"internalType":"struct IRouter.CodeCommitment[]","name":"codeCommitmentsArray","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"valid","type":"bool"}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitCodes"},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"createProgram","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStorageSlot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_mirror","type":"address"},{"internalType":"address","name":"_mirrorProxy","type":"address"},{"internalType":"address","name":"_wrappedVara","type":"address"},{"internalType":"address[]","name":"_validatorsKeys","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastBlockCommitmentHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirror","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorProxy","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"program","type":"address"}],"stateMutability":"view","type":"function","name":"programCodeId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"programsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"requestCodeValidation"},{"inputs":[{"internalType":"uint64","name":"_baseWeight","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setBaseWeight"},{"inputs":[{"internalType":"address","name":"_mirror","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setMirror"},{"inputs":[{"internalType":"string","name":"namespace","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setStorageSlot"},{"inputs":[{"internalType":"uint128","name":"_valuePerWeight","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"setValuePerWeight"},{"inputs":[],"stateMutability":"view","type":"function","name":"signingThresholdPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address[]","name":"validatorsAddressArray","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"updateValidators"},{"inputs":[],"stateMutability":"view","type":"function","name":"validatedCodesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validator","type":"address"}],"stateMutability":"view","type":"function","name":"validatorExists","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"valuePerWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrappedVara","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"programCodeId(address)":{"details":"Returns bytes32(0) in case of inexistent program."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Router.sol":"Router"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6","urls":["bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64","dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol":{"keccak256":"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9","urls":["bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58","dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6","urls":["bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf","dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3","urls":["bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde","dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Router.sol":{"keccak256":"0x5db40e2574ad57a5d159346d1e4adc1fc3df4c63097345805e89c60553a6ce4e","urls":["bzz-raw://951272070e69e13be0cad9d405cd47db9d239b0d9095c4c440560a679910e040","dweb:/ipfs/QmWXwFjEDW7nouNJNXuLic4efxjokeCQ33irYoDyhE7k8p"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Router.sol","id":55997,"exportedSymbols":{"Clones":[41121],"ECDSA":[43387],"IERC20":[41906],"IMirror":[53636],"IRouter":[53951],"IWrappedVara":[53962],"MessageHashUtils":[43461],"OwnableUpgradeable":[39024],"ReentrancyGuardTransient":[42400],"Router":[55996],"StorageSlot":[42719]},"nodeType":"SourceUnit","src":"39:17170:81","nodes":[{"id":54379,"nodeType":"PragmaDirective","src":"39:24:81","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":54381,"nodeType":"ImportDirective","src":"65:74:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":42720,"symbolAliases":[{"foreign":{"id":54380,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"73:11:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54383,"nodeType":"ImportDirective","src":"140:101:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":39025,"symbolAliases":[{"foreign":{"id":54382,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39024,"src":"148:18:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54385,"nodeType":"ImportDirective","src":"242:64:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":41122,"symbolAliases":[{"foreign":{"id":54384,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41121,"src":"250:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54387,"nodeType":"ImportDirective","src":"307:75:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol","file":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":43388,"symbolAliases":[{"foreign":{"id":54386,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43387,"src":"315:5:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54389,"nodeType":"ImportDirective","src":"383:97:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol","file":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":43462,"symbolAliases":[{"foreign":{"id":54388,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43461,"src":"391:16:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54391,"nodeType":"ImportDirective","src":"481:100:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":42401,"symbolAliases":[{"foreign":{"id":54390,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42400,"src":"489:24:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54393,"nodeType":"ImportDirective","src":"582:38:81","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53952,"symbolAliases":[{"foreign":{"id":54392,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"590:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54395,"nodeType":"ImportDirective","src":"621:38:81","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53637,"symbolAliases":[{"foreign":{"id":54394,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"629:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54397,"nodeType":"ImportDirective","src":"660:48:81","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53963,"symbolAliases":[{"foreign":{"id":54396,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"668:12:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54399,"nodeType":"ImportDirective","src":"709:70:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":41907,"symbolAliases":[{"foreign":{"id":54398,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41906,"src":"717:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55996,"nodeType":"ContractDefinition","src":"781:16427:81","nodes":[{"id":54408,"nodeType":"UsingForDirective","src":"860:24:81","nodes":[],"global":false,"libraryName":{"id":54406,"name":"ECDSA","nameLocations":["866:5:81"],"nodeType":"IdentifierPath","referencedDeclaration":43387,"src":"866:5:81"},"typeName":{"id":54407,"name":"bytes32","nodeType":"ElementaryTypeName","src":"876:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"id":54411,"nodeType":"UsingForDirective","src":"889:35:81","nodes":[],"global":false,"libraryName":{"id":54409,"name":"MessageHashUtils","nameLocations":["895:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":43461,"src":"895:16:81"},"typeName":{"id":54410,"name":"address","nodeType":"ElementaryTypeName","src":"916:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":54414,"nodeType":"VariableDeclaration","src":"1032:106:81","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"1057:12:81","scope":55996,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54412,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1032:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307835633039636131623962383132376134666439663363333834616163353962363631343431653832306531373733333735336666356632653836653165303030","id":54413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1072:66:81","typeDescriptions":{"typeIdentifier":"t_rational_41630078590300661333111585883568696735413380457407274925697692750148467286016_by_1","typeString":"int_const 4163...(69 digits omitted)...6016"},"value":"0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000"},"visibility":"private"},{"id":54422,"nodeType":"FunctionDefinition","src":"1198:53:81","nodes":[],"body":{"id":54421,"nodeType":"Block","src":"1212:39:81","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54418,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39246,"src":"1222:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1222:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54420,"nodeType":"ExpressionStatement","src":"1222:22:81"}]},"documentation":{"id":54415,"nodeType":"StructuredDocumentation","src":"1145:48:81","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":54416,"nodeType":"ParameterList","parameters":[],"src":"1209:2:81"},"returnParameters":{"id":54417,"nodeType":"ParameterList","parameters":[],"src":"1212:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54504,"nodeType":"FunctionDefinition","src":"1257:728:81","nodes":[],"body":{"id":54503,"nodeType":"Block","src":"1459:526:81","nodes":[],"statements":[{"expression":{"arguments":[{"id":54439,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54424,"src":"1484:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54438,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38884,"src":"1469:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":54440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1469:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54441,"nodeType":"ExpressionStatement","src":"1469:28:81"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725631","id":54443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1523:25:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""},"value":"router.storage.RouterV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""}],"id":54442,"name":"setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54645,"src":"1508:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":54444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54445,"nodeType":"ExpressionStatement","src":"1508:41:81"},{"assignments":[54448],"declarations":[{"constant":false,"id":54448,"mutability":"mutable","name":"router","nameLocation":"1575:6:81","nodeType":"VariableDeclaration","scope":54503,"src":"1559:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54447,"nodeType":"UserDefinedTypeName","pathNode":{"id":54446,"name":"Storage","nameLocations":["1559:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"1559:7:81"},"referencedDeclaration":53684,"src":"1559:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54451,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54449,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"1584:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1584:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1559:38:81"},{"expression":{"id":54461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54452,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1608:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1615:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"1608:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54456,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1644:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":54457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1650:6:81","memberName":"number","nodeType":"MemberAccess","src":"1644:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1659:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1644:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54455,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"1634:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":54460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1634:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1608:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54462,"nodeType":"ExpressionStatement","src":"1608:53:81"},{"expression":{"id":54467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54463,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1671:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54465,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1678:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"1671:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54466,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54426,"src":"1687:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1671:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54468,"nodeType":"ExpressionStatement","src":"1671:23:81"},{"expression":{"id":54473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54469,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1704:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1711:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"1704:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54472,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54428,"src":"1725:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1704:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54474,"nodeType":"ExpressionStatement","src":"1704:33:81"},{"expression":{"id":54479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54475,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1747:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1754:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"1747:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54478,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54430,"src":"1768:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1747:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54480,"nodeType":"ExpressionStatement","src":"1747:33:81"},{"expression":{"id":54485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54481,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1790:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1797:26:81","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":53659,"src":"1790:33:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"36363636","id":54484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1826:4:81","typeDescriptions":{"typeIdentifier":"t_rational_6666_by_1","typeString":"int_const 6666"},"value":"6666"},"src":"1790:40:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54486,"nodeType":"ExpressionStatement","src":"1790:40:81"},{"expression":{"id":54491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54487,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1868:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54489,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1875:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"1868:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"325f3530305f3030305f303030","id":54490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1888:13:81","typeDescriptions":{"typeIdentifier":"t_rational_2500000000_by_1","typeString":"int_const 2500000000"},"value":"2_500_000_000"},"src":"1868:33:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":54492,"nodeType":"ExpressionStatement","src":"1868:33:81"},{"expression":{"id":54497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54493,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1911:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1918:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"1911:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"3130","id":54496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1935:2:81","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"1911:26:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":54498,"nodeType":"ExpressionStatement","src":"1911:26:81"},{"expression":{"arguments":[{"id":54500,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54433,"src":"1962:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":54499,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"1947:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1947:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54502,"nodeType":"ExpressionStatement","src":"1947:31:81"}]},"functionSelector":"f8453e7c","implemented":true,"kind":"function","modifiers":[{"id":54436,"kind":"modifierInvocation","modifierName":{"id":54435,"name":"initializer","nameLocations":["1447:11:81"],"nodeType":"IdentifierPath","referencedDeclaration":39132,"src":"1447:11:81"},"nodeType":"ModifierInvocation","src":"1447:11:81"}],"name":"initialize","nameLocation":"1266:10:81","parameters":{"id":54434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54424,"mutability":"mutable","name":"initialOwner","nameLocation":"1294:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1286:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54423,"name":"address","nodeType":"ElementaryTypeName","src":"1286:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54426,"mutability":"mutable","name":"_mirror","nameLocation":"1324:7:81","nodeType":"VariableDeclaration","scope":54504,"src":"1316:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54425,"name":"address","nodeType":"ElementaryTypeName","src":"1316:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54428,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"1349:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1341:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54427,"name":"address","nodeType":"ElementaryTypeName","src":"1341:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54430,"mutability":"mutable","name":"_wrappedVara","nameLocation":"1379:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1371:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54429,"name":"address","nodeType":"ElementaryTypeName","src":"1371:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54433,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"1418:15:81","nodeType":"VariableDeclaration","scope":54504,"src":"1401:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54431,"name":"address","nodeType":"ElementaryTypeName","src":"1401:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54432,"nodeType":"ArrayTypeName","src":"1401:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1276:163:81"},"returnParameters":{"id":54437,"nodeType":"ParameterList","parameters":[],"src":"1459:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54585,"nodeType":"FunctionDefinition","src":"1991:662:81","nodes":[],"body":{"id":54584,"nodeType":"Block","src":"2049:604:81","nodes":[],"statements":[{"assignments":[54514],"declarations":[{"constant":false,"id":54514,"mutability":"mutable","name":"oldRouter","nameLocation":"2075:9:81","nodeType":"VariableDeclaration","scope":54584,"src":"2059:25:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54513,"nodeType":"UserDefinedTypeName","pathNode":{"id":54512,"name":"Storage","nameLocations":["2059:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"2059:7:81"},"referencedDeclaration":53684,"src":"2059:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54517,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54515,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"2087:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2087:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2059:41:81"},{"assignments":[54519],"declarations":[{"constant":false,"id":54519,"mutability":"mutable","name":"_mirror","nameLocation":"2119:7:81","nodeType":"VariableDeclaration","scope":54584,"src":"2111:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54518,"name":"address","nodeType":"ElementaryTypeName","src":"2111:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54522,"initialValue":{"expression":{"id":54520,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2129:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2139:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"2129:16:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2111:34:81"},{"assignments":[54524],"declarations":[{"constant":false,"id":54524,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"2163:12:81","nodeType":"VariableDeclaration","scope":54584,"src":"2155:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54523,"name":"address","nodeType":"ElementaryTypeName","src":"2155:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54527,"initialValue":{"expression":{"id":54525,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2178:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2188:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"2178:21:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2155:44:81"},{"assignments":[54529],"declarations":[{"constant":false,"id":54529,"mutability":"mutable","name":"_wrappedVara","nameLocation":"2217:12:81","nodeType":"VariableDeclaration","scope":54584,"src":"2209:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54528,"name":"address","nodeType":"ElementaryTypeName","src":"2209:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54532,"initialValue":{"expression":{"id":54530,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2232:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2242:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"2232:21:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2209:44:81"},{"assignments":[54537],"declarations":[{"constant":false,"id":54537,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"2280:15:81","nodeType":"VariableDeclaration","scope":54584,"src":"2263:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54535,"name":"address","nodeType":"ElementaryTypeName","src":"2263:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54536,"nodeType":"ArrayTypeName","src":"2263:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":54540,"initialValue":{"expression":{"id":54538,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2298:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2308:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"2298:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2263:59:81"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725632","id":54542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2348:25:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""},"value":"router.storage.RouterV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""}],"id":54541,"name":"setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54645,"src":"2333:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":54543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2333:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54544,"nodeType":"ExpressionStatement","src":"2333:41:81"},{"assignments":[54547],"declarations":[{"constant":false,"id":54547,"mutability":"mutable","name":"router","nameLocation":"2400:6:81","nodeType":"VariableDeclaration","scope":54584,"src":"2384:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54546,"nodeType":"UserDefinedTypeName","pathNode":{"id":54545,"name":"Storage","nameLocations":["2384:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"2384:7:81"},"referencedDeclaration":53684,"src":"2384:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54550,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54548,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"2409:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2409:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2384:38:81"},{"expression":{"id":54560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54551,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2433:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2440:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"2433:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54555,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2469:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":54556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2475:6:81","memberName":"number","nodeType":"MemberAccess","src":"2469:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2484:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2469:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54554,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"2459:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":54559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2459:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2433:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54561,"nodeType":"ExpressionStatement","src":"2433:53:81"},{"expression":{"id":54566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54562,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2496:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2503:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"2496:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54565,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54519,"src":"2512:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2496:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54567,"nodeType":"ExpressionStatement","src":"2496:23:81"},{"expression":{"id":54572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54568,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2529:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2536:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"2529:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54571,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54524,"src":"2550:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2529:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54573,"nodeType":"ExpressionStatement","src":"2529:33:81"},{"expression":{"id":54578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54574,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2572:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2579:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"2572:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54577,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54529,"src":"2593:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2572:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54579,"nodeType":"ExpressionStatement","src":"2572:33:81"},{"expression":{"arguments":[{"id":54581,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54537,"src":"2630:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":54580,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"2615:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2615:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54583,"nodeType":"ExpressionStatement","src":"2615:31:81"}]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":54507,"kind":"modifierInvocation","modifierName":{"id":54506,"name":"onlyOwner","nameLocations":["2022:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"2022:9:81"},"nodeType":"ModifierInvocation","src":"2022:9:81"},{"arguments":[{"hexValue":"32","id":54509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2046:1:81","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":54510,"kind":"modifierInvocation","modifierName":{"id":54508,"name":"reinitializer","nameLocations":["2032:13:81"],"nodeType":"IdentifierPath","referencedDeclaration":39179,"src":"2032:13:81"},"nodeType":"ModifierInvocation","src":"2032:16:81"}],"name":"reinitialize","nameLocation":"2000:12:81","parameters":{"id":54505,"nodeType":"ParameterList","parameters":[],"src":"2012:2:81"},"returnParameters":{"id":54511,"nodeType":"ParameterList","parameters":[],"src":"2049:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54597,"nodeType":"FunctionDefinition","src":"2692:126:81","nodes":[],"body":{"id":54596,"nodeType":"Block","src":"2748:70:81","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":54592,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54414,"src":"2792:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":54590,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"2765:11:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$42719_$","typeString":"type(library StorageSlot)"}},"id":54591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2777:14:81","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":42457,"src":"2765:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$42412_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":54593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2765:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$42412_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":54594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2806:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":42411,"src":"2765:46:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54589,"id":54595,"nodeType":"Return","src":"2758:53:81"}]},"baseFunctions":[53790],"functionSelector":"96708226","implemented":true,"kind":"function","modifiers":[],"name":"getStorageSlot","nameLocation":"2701:14:81","parameters":{"id":54586,"nodeType":"ParameterList","parameters":[],"src":"2715:2:81"},"returnParameters":{"id":54589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54588,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54597,"src":"2739:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54587,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2739:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2738:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54645,"nodeType":"FunctionDefinition","src":"2824:287:81","nodes":[],"body":{"id":54644,"nodeType":"Block","src":"2890:221:81","nodes":[],"statements":[{"assignments":[54605],"declarations":[{"constant":false,"id":54605,"mutability":"mutable","name":"slot","nameLocation":"2908:4:81","nodeType":"VariableDeclaration","scope":54644,"src":"2900:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54604,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2900:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54631,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":54630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":54614,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54599,"src":"2960:9:81","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":54613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2954:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":54612,"name":"bytes","nodeType":"ElementaryTypeName","src":"2954:5:81","typeDescriptions":{}}},"id":54615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2954:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54611,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2944:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2944:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":54610,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2936:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":54609,"name":"uint256","nodeType":"ElementaryTypeName","src":"2936:7:81","typeDescriptions":{}}},"id":54617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2936:36:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2975:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2936:40:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54607,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2925:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54608,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2929:6:81","memberName":"encode","nodeType":"MemberAccess","src":"2925:10:81","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2925:52:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54606,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2915:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2915:63:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":54629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"2981:23:81","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":54626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2998:4:81","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":54625,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2990:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":54624,"name":"uint256","nodeType":"ElementaryTypeName","src":"2990:7:81","typeDescriptions":{}}},"id":54627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2990:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2982:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":54622,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2982:7:81","typeDescriptions":{}}},"id":54628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2982:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2915:89:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2900:104:81"},{"expression":{"id":54639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":54635,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54414,"src":"3042:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":54632,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"3015:11:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$42719_$","typeString":"type(library StorageSlot)"}},"id":54634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3027:14:81","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":42457,"src":"3015:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$42412_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":54636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3015:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$42412_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":54637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3056:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":42411,"src":"3015:46:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54638,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54605,"src":"3064:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3015:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54640,"nodeType":"ExpressionStatement","src":"3015:53:81"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":54641,"name":"StorageSlotChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53775,"src":"3084:18:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3084:20:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54643,"nodeType":"EmitStatement","src":"3079:25:81"}]},"baseFunctions":[53795],"functionSelector":"5686cad5","implemented":true,"kind":"function","modifiers":[{"id":54602,"kind":"modifierInvocation","modifierName":{"id":54601,"name":"onlyOwner","nameLocations":["2880:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"2880:9:81"},"nodeType":"ModifierInvocation","src":"2880:9:81"}],"name":"setStorageSlot","nameLocation":"2833:14:81","parameters":{"id":54600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54599,"mutability":"mutable","name":"namespace","nameLocation":"2862:9:81","nodeType":"VariableDeclaration","scope":54645,"src":"2848:23:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":54598,"name":"string","nodeType":"ElementaryTypeName","src":"2848:6:81","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2847:25:81"},"returnParameters":{"id":54603,"nodeType":"ParameterList","parameters":[],"src":"2890:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54660,"nodeType":"FunctionDefinition","src":"3117:153:81","nodes":[],"body":{"id":54659,"nodeType":"Block","src":"3175:95:81","nodes":[],"statements":[{"assignments":[54652],"declarations":[{"constant":false,"id":54652,"mutability":"mutable","name":"router","nameLocation":"3201:6:81","nodeType":"VariableDeclaration","scope":54659,"src":"3185:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54651,"nodeType":"UserDefinedTypeName","pathNode":{"id":54650,"name":"Storage","nameLocations":["3185:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3185:7:81"},"referencedDeclaration":53684,"src":"3185:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54655,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54653,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3210:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3210:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3185:38:81"},{"expression":{"expression":{"id":54656,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54652,"src":"3240:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3247:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"3240:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54649,"id":54658,"nodeType":"Return","src":"3233:30:81"}]},"baseFunctions":[53800],"functionSelector":"28e24b3d","implemented":true,"kind":"function","modifiers":[],"name":"genesisBlockHash","nameLocation":"3126:16:81","parameters":{"id":54646,"nodeType":"ParameterList","parameters":[],"src":"3142:2:81"},"returnParameters":{"id":54649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54660,"src":"3166:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54647,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3166:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3165:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54675,"nodeType":"FunctionDefinition","src":"3276:167:81","nodes":[],"body":{"id":54674,"nodeType":"Block","src":"3341:102:81","nodes":[],"statements":[{"assignments":[54667],"declarations":[{"constant":false,"id":54667,"mutability":"mutable","name":"router","nameLocation":"3367:6:81","nodeType":"VariableDeclaration","scope":54674,"src":"3351:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54666,"nodeType":"UserDefinedTypeName","pathNode":{"id":54665,"name":"Storage","nameLocations":["3351:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3351:7:81"},"referencedDeclaration":53684,"src":"3351:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54670,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54668,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3376:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3376:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3351:38:81"},{"expression":{"expression":{"id":54671,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54667,"src":"3406:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3413:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"3406:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54664,"id":54673,"nodeType":"Return","src":"3399:37:81"}]},"baseFunctions":[53805],"functionSelector":"2dacfb69","implemented":true,"kind":"function","modifiers":[],"name":"lastBlockCommitmentHash","nameLocation":"3285:23:81","parameters":{"id":54661,"nodeType":"ParameterList","parameters":[],"src":"3308:2:81"},"returnParameters":{"id":54664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54663,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54675,"src":"3332:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54662,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3332:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3331:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54690,"nodeType":"FunctionDefinition","src":"3449:143:81","nodes":[],"body":{"id":54689,"nodeType":"Block","src":"3502:90:81","nodes":[],"statements":[{"assignments":[54682],"declarations":[{"constant":false,"id":54682,"mutability":"mutable","name":"router","nameLocation":"3528:6:81","nodeType":"VariableDeclaration","scope":54689,"src":"3512:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54681,"nodeType":"UserDefinedTypeName","pathNode":{"id":54680,"name":"Storage","nameLocations":["3512:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3512:7:81"},"referencedDeclaration":53684,"src":"3512:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54685,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54683,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3537:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3537:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3512:38:81"},{"expression":{"expression":{"id":54686,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54682,"src":"3567:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3574:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"3567:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54679,"id":54688,"nodeType":"Return","src":"3560:25:81"}]},"baseFunctions":[53810],"functionSelector":"88f50cf0","implemented":true,"kind":"function","modifiers":[],"name":"wrappedVara","nameLocation":"3458:11:81","parameters":{"id":54676,"nodeType":"ParameterList","parameters":[],"src":"3469:2:81"},"returnParameters":{"id":54679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54690,"src":"3493:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54677,"name":"address","nodeType":"ElementaryTypeName","src":"3493:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3492:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54705,"nodeType":"FunctionDefinition","src":"3598:143:81","nodes":[],"body":{"id":54704,"nodeType":"Block","src":"3651:90:81","nodes":[],"statements":[{"assignments":[54697],"declarations":[{"constant":false,"id":54697,"mutability":"mutable","name":"router","nameLocation":"3677:6:81","nodeType":"VariableDeclaration","scope":54704,"src":"3661:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54696,"nodeType":"UserDefinedTypeName","pathNode":{"id":54695,"name":"Storage","nameLocations":["3661:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3661:7:81"},"referencedDeclaration":53684,"src":"3661:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54700,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54698,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3686:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3686:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3661:38:81"},{"expression":{"expression":{"id":54701,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54697,"src":"3716:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54702,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3723:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"3716:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54694,"id":54703,"nodeType":"Return","src":"3709:25:81"}]},"baseFunctions":[53815],"functionSelector":"78ee5dec","implemented":true,"kind":"function","modifiers":[],"name":"mirrorProxy","nameLocation":"3607:11:81","parameters":{"id":54691,"nodeType":"ParameterList","parameters":[],"src":"3618:2:81"},"returnParameters":{"id":54694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54705,"src":"3642:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54692,"name":"address","nodeType":"ElementaryTypeName","src":"3642:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3641:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54720,"nodeType":"FunctionDefinition","src":"3747:133:81","nodes":[],"body":{"id":54719,"nodeType":"Block","src":"3795:85:81","nodes":[],"statements":[{"assignments":[54712],"declarations":[{"constant":false,"id":54712,"mutability":"mutable","name":"router","nameLocation":"3821:6:81","nodeType":"VariableDeclaration","scope":54719,"src":"3805:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54711,"nodeType":"UserDefinedTypeName","pathNode":{"id":54710,"name":"Storage","nameLocations":["3805:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3805:7:81"},"referencedDeclaration":53684,"src":"3805:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54715,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54713,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3830:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3830:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3805:38:81"},{"expression":{"expression":{"id":54716,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54712,"src":"3860:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3867:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"3860:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54709,"id":54718,"nodeType":"Return","src":"3853:20:81"}]},"baseFunctions":[53820],"functionSelector":"444d9172","implemented":true,"kind":"function","modifiers":[],"name":"mirror","nameLocation":"3756:6:81","parameters":{"id":54706,"nodeType":"ParameterList","parameters":[],"src":"3762:2:81"},"returnParameters":{"id":54709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54720,"src":"3786:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54707,"name":"address","nodeType":"ElementaryTypeName","src":"3786:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3785:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54740,"nodeType":"FunctionDefinition","src":"3886:143:81","nodes":[],"body":{"id":54739,"nodeType":"Block","src":"3941:88:81","nodes":[],"statements":[{"assignments":[54729],"declarations":[{"constant":false,"id":54729,"mutability":"mutable","name":"router","nameLocation":"3967:6:81","nodeType":"VariableDeclaration","scope":54739,"src":"3951:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54728,"nodeType":"UserDefinedTypeName","pathNode":{"id":54727,"name":"Storage","nameLocations":["3951:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3951:7:81"},"referencedDeclaration":53684,"src":"3951:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54732,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54730,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3976:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3976:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3951:38:81"},{"expression":{"id":54737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54733,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54729,"src":"3999:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54735,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4006:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"3999:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54736,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54722,"src":"4015:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3999:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54738,"nodeType":"ExpressionStatement","src":"3999:23:81"}]},"baseFunctions":[53825],"functionSelector":"3d43b418","implemented":true,"kind":"function","modifiers":[{"id":54725,"kind":"modifierInvocation","modifierName":{"id":54724,"name":"onlyOwner","nameLocations":["3931:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"3931:9:81"},"nodeType":"ModifierInvocation","src":"3931:9:81"}],"name":"setMirror","nameLocation":"3895:9:81","parameters":{"id":54723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54722,"mutability":"mutable","name":"_mirror","nameLocation":"3913:7:81","nodeType":"VariableDeclaration","scope":54740,"src":"3905:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54721,"name":"address","nodeType":"ElementaryTypeName","src":"3905:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3904:17:81"},"returnParameters":{"id":54726,"nodeType":"ParameterList","parameters":[],"src":"3941:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54755,"nodeType":"FunctionDefinition","src":"4085:159:81","nodes":[],"body":{"id":54754,"nodeType":"Block","src":"4146:98:81","nodes":[],"statements":[{"assignments":[54747],"declarations":[{"constant":false,"id":54747,"mutability":"mutable","name":"router","nameLocation":"4172:6:81","nodeType":"VariableDeclaration","scope":54754,"src":"4156:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54746,"nodeType":"UserDefinedTypeName","pathNode":{"id":54745,"name":"Storage","nameLocations":["4156:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4156:7:81"},"referencedDeclaration":53684,"src":"4156:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54750,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54748,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4181:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4181:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4156:38:81"},{"expression":{"expression":{"id":54751,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54747,"src":"4211:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54752,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4218:19:81","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":53677,"src":"4211:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54744,"id":54753,"nodeType":"Return","src":"4204:33:81"}]},"baseFunctions":[53830],"functionSelector":"007a32e7","implemented":true,"kind":"function","modifiers":[],"name":"validatedCodesCount","nameLocation":"4094:19:81","parameters":{"id":54741,"nodeType":"ParameterList","parameters":[],"src":"4113:2:81"},"returnParameters":{"id":54744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54743,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54755,"src":"4137:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54742,"name":"uint256","nodeType":"ElementaryTypeName","src":"4137:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4136:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54775,"nodeType":"FunctionDefinition","src":"4250:159:81","nodes":[],"body":{"id":54774,"nodeType":"Block","src":"4317:92:81","nodes":[],"statements":[{"assignments":[54765],"declarations":[{"constant":false,"id":54765,"mutability":"mutable","name":"router","nameLocation":"4343:6:81","nodeType":"VariableDeclaration","scope":54774,"src":"4327:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54764,"nodeType":"UserDefinedTypeName","pathNode":{"id":54763,"name":"Storage","nameLocations":["4327:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4327:7:81"},"referencedDeclaration":53684,"src":"4327:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54768,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54766,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4352:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4352:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4327:38:81"},{"expression":{"baseExpression":{"expression":{"id":54769,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54765,"src":"4382:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4389:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"4382:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":54772,"indexExpression":{"id":54771,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54757,"src":"4395:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4382:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"functionReturnParameters":54762,"id":54773,"nodeType":"Return","src":"4375:27:81"}]},"baseFunctions":[53838],"functionSelector":"c13911e8","implemented":true,"kind":"function","modifiers":[],"name":"codeState","nameLocation":"4259:9:81","parameters":{"id":54758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54757,"mutability":"mutable","name":"codeId","nameLocation":"4277:6:81","nodeType":"VariableDeclaration","scope":54775,"src":"4269:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54756,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4269:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4268:16:81"},"returnParameters":{"id":54762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54775,"src":"4306:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"typeName":{"id":54760,"nodeType":"UserDefinedTypeName","pathNode":{"id":54759,"name":"CodeState","nameLocations":["4306:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":53688,"src":"4306:9:81"},"referencedDeclaration":53688,"src":"4306:9:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"visibility":"internal"}],"src":"4305:11:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54790,"nodeType":"FunctionDefinition","src":"4415:147:81","nodes":[],"body":{"id":54789,"nodeType":"Block","src":"4470:92:81","nodes":[],"statements":[{"assignments":[54782],"declarations":[{"constant":false,"id":54782,"mutability":"mutable","name":"router","nameLocation":"4496:6:81","nodeType":"VariableDeclaration","scope":54789,"src":"4480:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54781,"nodeType":"UserDefinedTypeName","pathNode":{"id":54780,"name":"Storage","nameLocations":["4480:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4480:7:81"},"referencedDeclaration":53684,"src":"4480:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54785,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54783,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4505:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4505:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4480:38:81"},{"expression":{"expression":{"id":54786,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54782,"src":"4535:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4542:13:81","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":53683,"src":"4535:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54779,"id":54788,"nodeType":"Return","src":"4528:27:81"}]},"baseFunctions":[53843],"functionSelector":"96a2ddfa","implemented":true,"kind":"function","modifiers":[],"name":"programsCount","nameLocation":"4424:13:81","parameters":{"id":54776,"nodeType":"ParameterList","parameters":[],"src":"4437:2:81"},"returnParameters":{"id":54779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54790,"src":"4461:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54777,"name":"uint256","nodeType":"ElementaryTypeName","src":"4461:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4460:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54809,"nodeType":"FunctionDefinition","src":"4568:166:81","nodes":[],"body":{"id":54808,"nodeType":"Block","src":"4638:96:81","nodes":[],"statements":[{"assignments":[54799],"declarations":[{"constant":false,"id":54799,"mutability":"mutable","name":"router","nameLocation":"4664:6:81","nodeType":"VariableDeclaration","scope":54808,"src":"4648:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54798,"nodeType":"UserDefinedTypeName","pathNode":{"id":54797,"name":"Storage","nameLocations":["4648:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4648:7:81"},"referencedDeclaration":53684,"src":"4648:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54802,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54800,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4673:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4673:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4648:38:81"},{"expression":{"baseExpression":{"expression":{"id":54803,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54799,"src":"4703:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54804,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4710:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"4703:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":54806,"indexExpression":{"id":54805,"name":"program","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54792,"src":"4719:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4703:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54796,"id":54807,"nodeType":"Return","src":"4696:31:81"}]},"baseFunctions":[53851],"functionSelector":"9067088e","implemented":true,"kind":"function","modifiers":[],"name":"programCodeId","nameLocation":"4577:13:81","parameters":{"id":54793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54792,"mutability":"mutable","name":"program","nameLocation":"4599:7:81","nodeType":"VariableDeclaration","scope":54809,"src":"4591:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54791,"name":"address","nodeType":"ElementaryTypeName","src":"4591:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4590:17:81"},"returnParameters":{"id":54796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54795,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54809,"src":"4629:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54794,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4629:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4628:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54824,"nodeType":"FunctionDefinition","src":"4785:173:81","nodes":[],"body":{"id":54823,"nodeType":"Block","src":"4853:105:81","nodes":[],"statements":[{"assignments":[54816],"declarations":[{"constant":false,"id":54816,"mutability":"mutable","name":"router","nameLocation":"4879:6:81","nodeType":"VariableDeclaration","scope":54823,"src":"4863:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54815,"nodeType":"UserDefinedTypeName","pathNode":{"id":54814,"name":"Storage","nameLocations":["4863:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4863:7:81"},"referencedDeclaration":53684,"src":"4863:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54819,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54817,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4888:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4888:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4863:38:81"},{"expression":{"expression":{"id":54820,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54816,"src":"4918:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4925:26:81","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":53659,"src":"4918:33:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54813,"id":54822,"nodeType":"Return","src":"4911:40:81"}]},"baseFunctions":[53856],"functionSelector":"efd81abc","implemented":true,"kind":"function","modifiers":[],"name":"signingThresholdPercentage","nameLocation":"4794:26:81","parameters":{"id":54810,"nodeType":"ParameterList","parameters":[],"src":"4820:2:81"},"returnParameters":{"id":54813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54812,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54824,"src":"4844:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54811,"name":"uint256","nodeType":"ElementaryTypeName","src":"4844:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4843:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54841,"nodeType":"FunctionDefinition","src":"4964:204:81","nodes":[],"body":{"id":54840,"nodeType":"Block","src":"5025:143:81","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54829,"name":"validatorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54857,"src":"5097:15:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5097:17:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54831,"name":"signingThresholdPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54824,"src":"5117:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5117:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5097:48:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"39393939","id":54834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5148:4:81","typeDescriptions":{"typeIdentifier":"t_rational_9999_by_1","typeString":"int_const 9999"},"value":"9999"},"src":"5097:55:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":54836,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5096:57:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130303030","id":54837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5156:5:81","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"src":"5096:65:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54828,"id":54839,"nodeType":"Return","src":"5089:72:81"}]},"baseFunctions":[53861],"functionSelector":"edc87225","implemented":true,"kind":"function","modifiers":[],"name":"validatorsThreshold","nameLocation":"4973:19:81","parameters":{"id":54825,"nodeType":"ParameterList","parameters":[],"src":"4992:2:81"},"returnParameters":{"id":54828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54827,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54841,"src":"5016:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54826,"name":"uint256","nodeType":"ElementaryTypeName","src":"5016:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5015:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54857,"nodeType":"FunctionDefinition","src":"5174:157:81","nodes":[],"body":{"id":54856,"nodeType":"Block","src":"5231:100:81","nodes":[],"statements":[{"assignments":[54848],"declarations":[{"constant":false,"id":54848,"mutability":"mutable","name":"router","nameLocation":"5257:6:81","nodeType":"VariableDeclaration","scope":54856,"src":"5241:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54847,"nodeType":"UserDefinedTypeName","pathNode":{"id":54846,"name":"Storage","nameLocations":["5241:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5241:7:81"},"referencedDeclaration":53684,"src":"5241:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54851,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54849,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5266:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5266:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5241:38:81"},{"expression":{"expression":{"expression":{"id":54852,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54848,"src":"5296:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5303:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"5296:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":54854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5318:6:81","memberName":"length","nodeType":"MemberAccess","src":"5296:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54845,"id":54855,"nodeType":"Return","src":"5289:35:81"}]},"baseFunctions":[53866],"functionSelector":"ed612f8c","implemented":true,"kind":"function","modifiers":[],"name":"validatorsCount","nameLocation":"5183:15:81","parameters":{"id":54842,"nodeType":"ParameterList","parameters":[],"src":"5198:2:81"},"returnParameters":{"id":54845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54844,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54857,"src":"5222:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54843,"name":"uint256","nodeType":"ElementaryTypeName","src":"5222:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5221:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54876,"nodeType":"FunctionDefinition","src":"5337:171:81","nodes":[],"body":{"id":54875,"nodeType":"Block","src":"5408:100:81","nodes":[],"statements":[{"assignments":[54866],"declarations":[{"constant":false,"id":54866,"mutability":"mutable","name":"router","nameLocation":"5434:6:81","nodeType":"VariableDeclaration","scope":54875,"src":"5418:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54865,"nodeType":"UserDefinedTypeName","pathNode":{"id":54864,"name":"Storage","nameLocations":["5418:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5418:7:81"},"referencedDeclaration":53684,"src":"5418:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54869,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54867,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5443:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5443:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5418:38:81"},{"expression":{"baseExpression":{"expression":{"id":54870,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54866,"src":"5473:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5480:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"5473:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":54873,"indexExpression":{"id":54872,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54859,"src":"5491:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5473:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":54863,"id":54874,"nodeType":"Return","src":"5466:35:81"}]},"baseFunctions":[53873],"functionSelector":"8febbd59","implemented":true,"kind":"function","modifiers":[],"name":"validatorExists","nameLocation":"5346:15:81","parameters":{"id":54860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54859,"mutability":"mutable","name":"validator","nameLocation":"5370:9:81","nodeType":"VariableDeclaration","scope":54876,"src":"5362:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54858,"name":"address","nodeType":"ElementaryTypeName","src":"5362:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5361:19:81"},"returnParameters":{"id":54863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54862,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54876,"src":"5402:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54861,"name":"bool","nodeType":"ElementaryTypeName","src":"5402:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5401:6:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54892,"nodeType":"FunctionDefinition","src":"5514:154:81","nodes":[],"body":{"id":54891,"nodeType":"Block","src":"5575:93:81","nodes":[],"statements":[{"assignments":[54884],"declarations":[{"constant":false,"id":54884,"mutability":"mutable","name":"router","nameLocation":"5601:6:81","nodeType":"VariableDeclaration","scope":54891,"src":"5585:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54883,"nodeType":"UserDefinedTypeName","pathNode":{"id":54882,"name":"Storage","nameLocations":["5585:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5585:7:81"},"referencedDeclaration":53684,"src":"5585:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54887,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54885,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5610:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5610:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5585:38:81"},{"expression":{"expression":{"id":54888,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54884,"src":"5640:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5647:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"5640:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":54881,"id":54890,"nodeType":"Return","src":"5633:28:81"}]},"baseFunctions":[53879],"functionSelector":"ca1e7819","implemented":true,"kind":"function","modifiers":[],"name":"validators","nameLocation":"5523:10:81","parameters":{"id":54877,"nodeType":"ParameterList","parameters":[],"src":"5533:2:81"},"returnParameters":{"id":54881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54892,"src":"5557:16:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54878,"name":"address","nodeType":"ElementaryTypeName","src":"5557:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54879,"nodeType":"ArrayTypeName","src":"5557:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5556:18:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54911,"nodeType":"FunctionDefinition","src":"5731:209:81","nodes":[],"body":{"id":54910,"nodeType":"Block","src":"5819:121:81","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54900,"name":"_cleanValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55927,"src":"5829:16:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5829:18:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54902,"nodeType":"ExpressionStatement","src":"5829:18:81"},{"expression":{"arguments":[{"id":54904,"name":"validatorsAddressArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54895,"src":"5872:22:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"id":54903,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"5857:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5857:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54906,"nodeType":"ExpressionStatement","src":"5857:38:81"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":54907,"name":"ValidatorsSetChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53772,"src":"5911:20:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5911:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54909,"nodeType":"EmitStatement","src":"5906:27:81"}]},"baseFunctions":[53885],"functionSelector":"e71731e4","implemented":true,"kind":"function","modifiers":[{"id":54898,"kind":"modifierInvocation","modifierName":{"id":54897,"name":"onlyOwner","nameLocations":["5809:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"5809:9:81"},"nodeType":"ModifierInvocation","src":"5809:9:81"}],"name":"updateValidators","nameLocation":"5740:16:81","parameters":{"id":54896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54895,"mutability":"mutable","name":"validatorsAddressArray","nameLocation":"5776:22:81","nodeType":"VariableDeclaration","scope":54911,"src":"5757:41:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54893,"name":"address","nodeType":"ElementaryTypeName","src":"5757:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54894,"nodeType":"ArrayTypeName","src":"5757:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5756:43:81"},"returnParameters":{"id":54899,"nodeType":"ParameterList","parameters":[],"src":"5819:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54926,"nodeType":"FunctionDefinition","src":"5994:140:81","nodes":[],"body":{"id":54925,"nodeType":"Block","src":"6045:89:81","nodes":[],"statements":[{"assignments":[54918],"declarations":[{"constant":false,"id":54918,"mutability":"mutable","name":"router","nameLocation":"6071:6:81","nodeType":"VariableDeclaration","scope":54925,"src":"6055:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54917,"nodeType":"UserDefinedTypeName","pathNode":{"id":54916,"name":"Storage","nameLocations":["6055:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6055:7:81"},"referencedDeclaration":53684,"src":"6055:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54921,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54919,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6080:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6080:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6055:38:81"},{"expression":{"expression":{"id":54922,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54918,"src":"6110:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6117:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"6110:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":54915,"id":54924,"nodeType":"Return","src":"6103:24:81"}]},"baseFunctions":[53890],"functionSelector":"d3fd6364","implemented":true,"kind":"function","modifiers":[],"name":"baseWeight","nameLocation":"6003:10:81","parameters":{"id":54912,"nodeType":"ParameterList","parameters":[],"src":"6013:2:81"},"returnParameters":{"id":54915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54926,"src":"6037:6:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":54913,"name":"uint64","nodeType":"ElementaryTypeName","src":"6037:6:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6036:8:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54950,"nodeType":"FunctionDefinition","src":"6140:204:81","nodes":[],"body":{"id":54949,"nodeType":"Block","src":"6202:142:81","nodes":[],"statements":[{"assignments":[54935],"declarations":[{"constant":false,"id":54935,"mutability":"mutable","name":"router","nameLocation":"6228:6:81","nodeType":"VariableDeclaration","scope":54949,"src":"6212:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54934,"nodeType":"UserDefinedTypeName","pathNode":{"id":54933,"name":"Storage","nameLocations":["6212:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6212:7:81"},"referencedDeclaration":53684,"src":"6212:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54938,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54936,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6237:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6237:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6212:38:81"},{"expression":{"id":54943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54939,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54935,"src":"6260:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6267:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"6260:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54942,"name":"_baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54928,"src":"6280:11:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"6260:31:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":54944,"nodeType":"ExpressionStatement","src":"6260:31:81"},{"eventCall":{"arguments":[{"id":54946,"name":"_baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54928,"src":"6325:11:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":54945,"name":"BaseWeightChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53780,"src":"6307:17:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$returns$__$","typeString":"function (uint64)"}},"id":54947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6307:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54948,"nodeType":"EmitStatement","src":"6302:35:81"}]},"baseFunctions":[53895],"functionSelector":"8028861a","implemented":true,"kind":"function","modifiers":[{"id":54931,"kind":"modifierInvocation","modifierName":{"id":54930,"name":"onlyOwner","nameLocations":["6192:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"6192:9:81"},"nodeType":"ModifierInvocation","src":"6192:9:81"}],"name":"setBaseWeight","nameLocation":"6149:13:81","parameters":{"id":54929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54928,"mutability":"mutable","name":"_baseWeight","nameLocation":"6170:11:81","nodeType":"VariableDeclaration","scope":54950,"src":"6163:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":54927,"name":"uint64","nodeType":"ElementaryTypeName","src":"6163:6:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6162:20:81"},"returnParameters":{"id":54932,"nodeType":"ParameterList","parameters":[],"src":"6202:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54965,"nodeType":"FunctionDefinition","src":"6350:149:81","nodes":[],"body":{"id":54964,"nodeType":"Block","src":"6406:93:81","nodes":[],"statements":[{"assignments":[54957],"declarations":[{"constant":false,"id":54957,"mutability":"mutable","name":"router","nameLocation":"6432:6:81","nodeType":"VariableDeclaration","scope":54964,"src":"6416:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54956,"nodeType":"UserDefinedTypeName","pathNode":{"id":54955,"name":"Storage","nameLocations":["6416:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6416:7:81"},"referencedDeclaration":53684,"src":"6416:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54960,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54958,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6441:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6441:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6416:38:81"},{"expression":{"expression":{"id":54961,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"6471:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6478:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"6471:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":54954,"id":54963,"nodeType":"Return","src":"6464:28:81"}]},"baseFunctions":[53900],"functionSelector":"0834fecc","implemented":true,"kind":"function","modifiers":[],"name":"valuePerWeight","nameLocation":"6359:14:81","parameters":{"id":54951,"nodeType":"ParameterList","parameters":[],"src":"6373:2:81"},"returnParameters":{"id":54954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54965,"src":"6397:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54952,"name":"uint128","nodeType":"ElementaryTypeName","src":"6397:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6396:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54989,"nodeType":"FunctionDefinition","src":"6505:229:81","nodes":[],"body":{"id":54988,"nodeType":"Block","src":"6576:158:81","nodes":[],"statements":[{"assignments":[54974],"declarations":[{"constant":false,"id":54974,"mutability":"mutable","name":"router","nameLocation":"6602:6:81","nodeType":"VariableDeclaration","scope":54988,"src":"6586:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54973,"nodeType":"UserDefinedTypeName","pathNode":{"id":54972,"name":"Storage","nameLocations":["6586:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6586:7:81"},"referencedDeclaration":53684,"src":"6586:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54977,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54975,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6611:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6611:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6586:38:81"},{"expression":{"id":54982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54978,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54974,"src":"6634:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6641:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"6634:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54981,"name":"_valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"6658:15:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6634:39:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":54983,"nodeType":"ExpressionStatement","src":"6634:39:81"},{"eventCall":{"arguments":[{"id":54985,"name":"_valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"6711:15:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54984,"name":"ValuePerWeightChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53785,"src":"6689:21:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6689:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54987,"nodeType":"EmitStatement","src":"6684:43:81"}]},"baseFunctions":[53905],"functionSelector":"a6bbbe1c","implemented":true,"kind":"function","modifiers":[{"id":54970,"kind":"modifierInvocation","modifierName":{"id":54969,"name":"onlyOwner","nameLocations":["6566:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"6566:9:81"},"nodeType":"ModifierInvocation","src":"6566:9:81"}],"name":"setValuePerWeight","nameLocation":"6514:17:81","parameters":{"id":54968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54967,"mutability":"mutable","name":"_valuePerWeight","nameLocation":"6540:15:81","nodeType":"VariableDeclaration","scope":54989,"src":"6532:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54966,"name":"uint128","nodeType":"ElementaryTypeName","src":"6532:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6531:25:81"},"returnParameters":{"id":54971,"nodeType":"ParameterList","parameters":[],"src":"6576:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55004,"nodeType":"FunctionDefinition","src":"6740:113:81","nodes":[],"body":{"id":55003,"nodeType":"Block","src":"6789:64:81","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54996,"name":"baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54926,"src":"6814:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint64_$","typeString":"function () view returns (uint64)"}},"id":54997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6814:12:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":54995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6806:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":54994,"name":"uint128","nodeType":"ElementaryTypeName","src":"6806:7:81","typeDescriptions":{}}},"id":54998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6806:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54999,"name":"valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54965,"src":"6830:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint128_$","typeString":"function () view returns (uint128)"}},"id":55000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6830:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6806:40:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":54993,"id":55002,"nodeType":"Return","src":"6799:47:81"}]},"baseFunctions":[53910],"functionSelector":"6ef25c3a","implemented":true,"kind":"function","modifiers":[],"name":"baseFee","nameLocation":"6749:7:81","parameters":{"id":54990,"nodeType":"ParameterList","parameters":[],"src":"6756:2:81"},"returnParameters":{"id":54993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55004,"src":"6780:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54991,"name":"uint128","nodeType":"ElementaryTypeName","src":"6780:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6779:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55056,"nodeType":"FunctionDefinition","src":"6889:453:81","nodes":[],"body":{"id":55055,"nodeType":"Block","src":"6965:377:81","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":55020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55012,"name":"blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55008,"src":"6983:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6997:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6983:15:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"30","id":55016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7011:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":55015,"name":"blobhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-29,"src":"7002:8:81","typeDescriptions":{"typeIdentifier":"t_function_blobhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":55017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7002:11:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7017:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7002:16:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6983:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626c6f6254784861736820636f756c646e277420626520666f756e64","id":55021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7020:30:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_944fe86403884466c74284042289853a231d438ed298af2a81bff9b6914f84e1","typeString":"literal_string \"blobTxHash couldn't be found\""},"value":"blobTxHash couldn't be found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_944fe86403884466c74284042289853a231d438ed298af2a81bff9b6914f84e1","typeString":"literal_string \"blobTxHash couldn't be found\""}],"id":55011,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6975:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6975:76:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55023,"nodeType":"ExpressionStatement","src":"6975:76:81"},{"assignments":[55026],"declarations":[{"constant":false,"id":55026,"mutability":"mutable","name":"router","nameLocation":"7078:6:81","nodeType":"VariableDeclaration","scope":55055,"src":"7062:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55025,"nodeType":"UserDefinedTypeName","pathNode":{"id":55024,"name":"Storage","nameLocations":["7062:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"7062:7:81"},"referencedDeclaration":53684,"src":"7062:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55029,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55027,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"7087:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7087:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7062:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55031,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55026,"src":"7119:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7126:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7119:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55034,"indexExpression":{"id":55033,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7132:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7119:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55035,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7143:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7153:7:81","memberName":"Unknown","nodeType":"MemberAccess","referencedDeclaration":53685,"src":"7143:17:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7119:41:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f64652077697468207375636820696420616c726561647920726571756573746564206f722076616c696461746564","id":55038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7162:50:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_86d0efc10a98e1b7506967b99e345a37d8ca52b6f212bb7eaafd6d43a903647b","typeString":"literal_string \"code with such id already requested or validated\""},"value":"code with such id already requested or validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_86d0efc10a98e1b7506967b99e345a37d8ca52b6f212bb7eaafd6d43a903647b","typeString":"literal_string \"code with such id already requested or validated\""}],"id":55030,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7111:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7111:102:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55040,"nodeType":"ExpressionStatement","src":"7111:102:81"},{"expression":{"id":55048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55041,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55026,"src":"7224:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7231:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7224:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55045,"indexExpression":{"id":55043,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7237:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7224:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55046,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7247:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7257:19:81","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":53686,"src":"7247:29:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7224:52:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"id":55049,"nodeType":"ExpressionStatement","src":"7224:52:81"},{"eventCall":{"arguments":[{"id":55051,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7316:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55052,"name":"blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55008,"src":"7324:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55050,"name":"CodeValidationRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53755,"src":"7292:23:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":55053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7292:43:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55054,"nodeType":"EmitStatement","src":"7287:48:81"}]},"baseFunctions":[53917],"functionSelector":"1c149d8a","implemented":true,"kind":"function","modifiers":[],"name":"requestCodeValidation","nameLocation":"6898:21:81","parameters":{"id":55009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55006,"mutability":"mutable","name":"codeId","nameLocation":"6928:6:81","nodeType":"VariableDeclaration","scope":55056,"src":"6920:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55005,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6920:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55008,"mutability":"mutable","name":"blobTxHash","nameLocation":"6944:10:81","nodeType":"VariableDeclaration","scope":55056,"src":"6936:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55007,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6936:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6919:36:81"},"returnParameters":{"id":55010,"nodeType":"ParameterList","parameters":[],"src":"6965:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55156,"nodeType":"FunctionDefinition","src":"7348:1033:81","nodes":[],"body":{"id":55155,"nodeType":"Block","src":"7504:877:81","nodes":[],"statements":[{"assignments":[55071],"declarations":[{"constant":false,"id":55071,"mutability":"mutable","name":"router","nameLocation":"7530:6:81","nodeType":"VariableDeclaration","scope":55155,"src":"7514:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55070,"nodeType":"UserDefinedTypeName","pathNode":{"id":55069,"name":"Storage","nameLocations":["7514:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"7514:7:81"},"referencedDeclaration":53684,"src":"7514:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55074,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55072,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"7539:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7539:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7514:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55076,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"7571:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7578:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7571:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55079,"indexExpression":{"id":55078,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"7584:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7571:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55080,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7595:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7605:9:81","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":53687,"src":"7595:19:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7571:43:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652076616c696461746564206265666f72652070726f6772616d206372656174696f6e","id":55083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7616:48:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""},"value":"code must be validated before program creation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""}],"id":55075,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7563:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7563:102:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55085,"nodeType":"ExpressionStatement","src":"7563:102:81"},{"assignments":[55087],"declarations":[{"constant":false,"id":55087,"mutability":"mutable","name":"baseFeeValue","nameLocation":"7684:12:81","nodeType":"VariableDeclaration","scope":55155,"src":"7676:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55086,"name":"uint128","nodeType":"ElementaryTypeName","src":"7676:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55090,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55088,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55004,"src":"7699:7:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint128_$","typeString":"function () view returns (uint128)"}},"id":55089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7699:9:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7676:32:81"},{"assignments":[55092],"declarations":[{"constant":false,"id":55092,"mutability":"mutable","name":"executableBalance","nameLocation":"7726:17:81","nodeType":"VariableDeclaration","scope":55155,"src":"7718:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55091,"name":"uint128","nodeType":"ElementaryTypeName","src":"7718:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55096,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55093,"name":"baseFeeValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55087,"src":"7746:12:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3130","id":55094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7761:2:81","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"7746:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7718:45:81"},{"assignments":[55098],"declarations":[{"constant":false,"id":55098,"mutability":"mutable","name":"totalValue","nameLocation":"7782:10:81","nodeType":"VariableDeclaration","scope":55155,"src":"7774:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55097,"name":"uint128","nodeType":"ElementaryTypeName","src":"7774:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55104,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55099,"name":"baseFeeValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55087,"src":"7795:12:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55100,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55092,"src":"7810:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7795:32:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55102,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55064,"src":"7830:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7795:41:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7774:62:81"},{"expression":{"arguments":[{"id":55106,"name":"totalValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55098,"src":"7862:10:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":55105,"name":"_retrieveValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55886,"src":"7847:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":55107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7847:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55108,"nodeType":"ExpressionStatement","src":"7847:26:81"},{"assignments":[55110],"declarations":[{"constant":false,"id":55110,"mutability":"mutable","name":"actorId","nameLocation":"8042:7:81","nodeType":"VariableDeclaration","scope":55155,"src":"8034:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55109,"name":"address","nodeType":"ElementaryTypeName","src":"8034:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55123,"initialValue":{"arguments":[{"expression":{"id":55113,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8078:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8085:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"8078:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":55118,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8125:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55119,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55060,"src":"8133:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55116,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8108:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8112:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"8108:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8108:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55115,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8098:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8098:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55111,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41121,"src":"8052:6:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$41121_$","typeString":"type(library Clones)"}},"id":55112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8059:18:81","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":41039,"src":"8052:25:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":55122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8052:88:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8034:106:81"},{"expression":{"id":55130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55124,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8151:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8158:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"8151:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":55128,"indexExpression":{"id":55126,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8167:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8151:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55129,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8178:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8151:33:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55131,"nodeType":"ExpressionStatement","src":"8151:33:81"},{"expression":{"id":55135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8194:22:81","subExpression":{"expression":{"id":55132,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8194:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8201:13:81","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":53683,"src":"8194:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55136,"nodeType":"ExpressionStatement","src":"8194:22:81"},{"eventCall":{"arguments":[{"id":55138,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8247:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55139,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8256:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55137,"name":"ProgramCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53769,"src":"8232:14:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32)"}},"id":55140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8232:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55141,"nodeType":"EmitStatement","src":"8227:36:81"},{"expression":{"arguments":[{"expression":{"id":55146,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"8303:2:81","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":55147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8306:6:81","memberName":"origin","nodeType":"MemberAccess","src":"8303:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55148,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55062,"src":"8314:7:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":55149,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55064,"src":"8323:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":55150,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55092,"src":"8331:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"id":55143,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8282:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55142,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"8274:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$53636_$","typeString":"type(contract IMirror)"}},"id":55144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8274:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8291:11:81","memberName":"initMessage","nodeType":"MemberAccess","referencedDeclaration":53635,"src":"8274:28:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,bytes memory,uint128,uint128) external"}},"id":55151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8274:75:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55152,"nodeType":"ExpressionStatement","src":"8274:75:81"},{"expression":{"id":55153,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8367:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":55068,"id":55154,"nodeType":"Return","src":"8360:14:81"}]},"baseFunctions":[53930],"functionSelector":"8074b455","implemented":true,"kind":"function","modifiers":[],"name":"createProgram","nameLocation":"7357:13:81","parameters":{"id":55065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55058,"mutability":"mutable","name":"codeId","nameLocation":"7379:6:81","nodeType":"VariableDeclaration","scope":55156,"src":"7371:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55057,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7371:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55060,"mutability":"mutable","name":"salt","nameLocation":"7395:4:81","nodeType":"VariableDeclaration","scope":55156,"src":"7387:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55059,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7387:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55062,"mutability":"mutable","name":"payload","nameLocation":"7416:7:81","nodeType":"VariableDeclaration","scope":55156,"src":"7401:22:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":55061,"name":"bytes","nodeType":"ElementaryTypeName","src":"7401:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":55064,"mutability":"mutable","name":"_value","nameLocation":"7433:6:81","nodeType":"VariableDeclaration","scope":55156,"src":"7425:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55063,"name":"uint128","nodeType":"ElementaryTypeName","src":"7425:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7370:70:81"},"returnParameters":{"id":55068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55156,"src":"7491:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55066,"name":"address","nodeType":"ElementaryTypeName","src":"7491:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7490:9:81"},"scope":55996,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":55269,"nodeType":"FunctionDefinition","src":"8387:1117:81","nodes":[],"body":{"id":55268,"nodeType":"Block","src":"8494:1010:81","nodes":[],"statements":[{"assignments":[55168],"declarations":[{"constant":false,"id":55168,"mutability":"mutable","name":"router","nameLocation":"8520:6:81","nodeType":"VariableDeclaration","scope":55268,"src":"8504:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55167,"nodeType":"UserDefinedTypeName","pathNode":{"id":55166,"name":"Storage","nameLocations":["8504:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"8504:7:81"},"referencedDeclaration":53684,"src":"8504:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55171,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55169,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"8529:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8529:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8504:38:81"},{"assignments":[55173],"declarations":[{"constant":false,"id":55173,"mutability":"mutable","name":"codeCommetmentsHashes","nameLocation":"8566:21:81","nodeType":"VariableDeclaration","scope":55268,"src":"8553:34:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55172,"name":"bytes","nodeType":"ElementaryTypeName","src":"8553:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55174,"nodeType":"VariableDeclarationStatement","src":"8553:34:81"},{"body":{"id":55259,"nodeType":"Block","src":"8656:766:81","statements":[{"assignments":[55188],"declarations":[{"constant":false,"id":55188,"mutability":"mutable","name":"codeCommitment","nameLocation":"8694:14:81","nodeType":"VariableDeclaration","scope":55259,"src":"8670:38:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment"},"typeName":{"id":55187,"nodeType":"UserDefinedTypeName","pathNode":{"id":55186,"name":"CodeCommitment","nameLocations":["8670:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"8670:14:81"},"referencedDeclaration":53693,"src":"8670:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"visibility":"internal"}],"id":55192,"initialValue":{"baseExpression":{"id":55189,"name":"codeCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55160,"src":"8711:20:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata[] calldata"}},"id":55191,"indexExpression":{"id":55190,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8732:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8711:23:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"8670:64:81"},{"assignments":[55194],"declarations":[{"constant":false,"id":55194,"mutability":"mutable","name":"codeCommitmentHash","nameLocation":"8757:18:81","nodeType":"VariableDeclaration","scope":55259,"src":"8749:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55193,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8749:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55198,"initialValue":{"arguments":[{"id":55196,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"8798:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}],"id":55195,"name":"_codeCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55853,"src":"8778:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_CodeCommitment_$53693_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.CodeCommitment calldata) pure returns (bytes32)"}},"id":55197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8778:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8749:64:81"},{"expression":{"id":55206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55199,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"8828:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55203,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"8865:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55204,"name":"codeCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55194,"src":"8888:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8852:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55200,"name":"bytes","nodeType":"ElementaryTypeName","src":"8852:5:81","typeDescriptions":{}}},"id":55202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8858:6:81","memberName":"concat","nodeType":"MemberAccess","src":"8852:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8852:55:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"8828:79:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55207,"nodeType":"ExpressionStatement","src":"8828:79:81"},{"assignments":[55209],"declarations":[{"constant":false,"id":55209,"mutability":"mutable","name":"codeId","nameLocation":"8930:6:81","nodeType":"VariableDeclaration","scope":55259,"src":"8922:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55208,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8922:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55212,"initialValue":{"expression":{"id":55210,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"8939:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8954:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53690,"src":"8939:17:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8922:34:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55214,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"8978:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8985:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"8978:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55217,"indexExpression":{"id":55216,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"8991:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8978:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55218,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"9002:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55219,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9012:19:81","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":53686,"src":"9002:29:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"8978:53:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f64652073686f756c642062652072657175657374656420666f722076616c69646174696f6e","id":55221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9033:41:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f0f0146c5c6578abd878317fc7dbe7872a552fba3ce3a30a1e42dfd172e27f7","typeString":"literal_string \"code should be requested for validation\""},"value":"code should be requested for validation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9f0f0146c5c6578abd878317fc7dbe7872a552fba3ce3a30a1e42dfd172e27f7","typeString":"literal_string \"code should be requested for validation\""}],"id":55213,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8970:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8970:105:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55223,"nodeType":"ExpressionStatement","src":"8970:105:81"},{"condition":{"expression":{"id":55224,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"9094:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9109:5:81","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":53692,"src":"9094:20:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55257,"nodeType":"Block","src":"9297:115:81","statements":[{"expression":{"id":55250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9315:27:81","subExpression":{"baseExpression":{"expression":{"id":55246,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9322:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9329:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"9322:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55249,"indexExpression":{"id":55248,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9335:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9322:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55251,"nodeType":"ExpressionStatement","src":"9315:27:81"},{"eventCall":{"arguments":[{"id":55253,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9383:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"66616c7365","id":55254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9391:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":55252,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53762,"src":"9366:16:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":55255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9366:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55256,"nodeType":"EmitStatement","src":"9361:36:81"}]},"id":55258,"nodeType":"IfStatement","src":"9090:322:81","trueBody":{"id":55245,"nodeType":"Block","src":"9116:175:81","statements":[{"expression":{"id":55233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55226,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9134:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9141:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"9134:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55230,"indexExpression":{"id":55228,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9147:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9134:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55231,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"9157:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9167:9:81","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":53687,"src":"9157:19:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"9134:42:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"id":55234,"nodeType":"ExpressionStatement","src":"9134:42:81"},{"expression":{"id":55238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9194:28:81","subExpression":{"expression":{"id":55235,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9194:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9201:19:81","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":53677,"src":"9194:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55239,"nodeType":"ExpressionStatement","src":"9194:28:81"},{"eventCall":{"arguments":[{"id":55241,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9263:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":55242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9271:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":55240,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53762,"src":"9246:16:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":55243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9246:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55244,"nodeType":"EmitStatement","src":"9241:35:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55179,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8618:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55180,"name":"codeCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55160,"src":"8622:20:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata[] calldata"}},"id":55181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8643:6:81","memberName":"length","nodeType":"MemberAccess","src":"8622:27:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8618:31:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55260,"initializationExpression":{"assignments":[55176],"declarations":[{"constant":false,"id":55176,"mutability":"mutable","name":"i","nameLocation":"8611:1:81","nodeType":"VariableDeclaration","scope":55260,"src":"8603:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55175,"name":"uint256","nodeType":"ElementaryTypeName","src":"8603:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55178,"initialValue":{"hexValue":"30","id":55177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8615:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8603:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8651:3:81","subExpression":{"id":55183,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8651:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55185,"nodeType":"ExpressionStatement","src":"8651:3:81"},"nodeType":"ForStatement","src":"8598:824:81"},{"expression":{"arguments":[{"arguments":[{"id":55263,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"9462:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55262,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9452:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9452:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55265,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55163,"src":"9486:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":55261,"name":"_validateSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"9432:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes calldata[] calldata) view"}},"id":55266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9432:65:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55267,"nodeType":"ExpressionStatement","src":"9432:65:81"}]},"baseFunctions":[53940],"functionSelector":"e97d3eb3","implemented":true,"kind":"function","modifiers":[],"name":"commitCodes","nameLocation":"8396:11:81","parameters":{"id":55164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55160,"mutability":"mutable","name":"codeCommitmentsArray","nameLocation":"8434:20:81","nodeType":"VariableDeclaration","scope":55269,"src":"8408:46:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment[]"},"typeName":{"baseType":{"id":55158,"nodeType":"UserDefinedTypeName","pathNode":{"id":55157,"name":"CodeCommitment","nameLocations":["8408:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"8408:14:81"},"referencedDeclaration":53693,"src":"8408:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"id":55159,"nodeType":"ArrayTypeName","src":"8408:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_storage_$dyn_storage_ptr","typeString":"struct IRouter.CodeCommitment[]"}},"visibility":"internal"},{"constant":false,"id":55163,"mutability":"mutable","name":"signatures","nameLocation":"8473:10:81","nodeType":"VariableDeclaration","scope":55269,"src":"8456:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55161,"name":"bytes","nodeType":"ElementaryTypeName","src":"8456:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55162,"nodeType":"ArrayTypeName","src":"8456:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"8407:77:81"},"returnParameters":{"id":55165,"nodeType":"ParameterList","parameters":[],"src":"8494:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55325,"nodeType":"FunctionDefinition","src":"9510:571:81","nodes":[],"body":{"id":55324,"nodeType":"Block","src":"9620:461:81","nodes":[],"statements":[{"assignments":[55280],"declarations":[{"constant":false,"id":55280,"mutability":"mutable","name":"blockCommitmentsHashes","nameLocation":"9643:22:81","nodeType":"VariableDeclaration","scope":55324,"src":"9630:35:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55279,"name":"bytes","nodeType":"ElementaryTypeName","src":"9630:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55281,"nodeType":"VariableDeclarationStatement","src":"9630:35:81"},{"body":{"id":55315,"nodeType":"Block","src":"9735:263:81","statements":[{"assignments":[55295],"declarations":[{"constant":false,"id":55295,"mutability":"mutable","name":"blockCommitment","nameLocation":"9774:15:81","nodeType":"VariableDeclaration","scope":55315,"src":"9749:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment"},"typeName":{"id":55294,"nodeType":"UserDefinedTypeName","pathNode":{"id":55293,"name":"BlockCommitment","nameLocations":["9749:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"9749:15:81"},"referencedDeclaration":53704,"src":"9749:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"visibility":"internal"}],"id":55299,"initialValue":{"baseExpression":{"id":55296,"name":"blockCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55273,"src":"9792:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata[] calldata"}},"id":55298,"indexExpression":{"id":55297,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9814:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9792:24:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"9749:67:81"},{"assignments":[55301],"declarations":[{"constant":false,"id":55301,"mutability":"mutable","name":"blockCommitmentHash","nameLocation":"9839:19:81","nodeType":"VariableDeclaration","scope":55315,"src":"9831:27:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55300,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9831:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55305,"initialValue":{"arguments":[{"id":55303,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55295,"src":"9874:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}],"id":55302,"name":"_commitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55510,"src":"9861:12:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_BlockCommitment_$53704_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.BlockCommitment calldata) returns (bytes32)"}},"id":55304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9861:29:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9831:59:81"},{"expression":{"id":55313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55306,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"9905:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55310,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"9943:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55311,"name":"blockCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55301,"src":"9967:19:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55308,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9930:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55307,"name":"bytes","nodeType":"ElementaryTypeName","src":"9930:5:81","typeDescriptions":{}}},"id":55309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9936:6:81","memberName":"concat","nodeType":"MemberAccess","src":"9930:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9930:57:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"9905:82:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55314,"nodeType":"ExpressionStatement","src":"9905:82:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55286,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9696:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55287,"name":"blockCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55273,"src":"9700:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata[] calldata"}},"id":55288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9722:6:81","memberName":"length","nodeType":"MemberAccess","src":"9700:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9696:32:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55316,"initializationExpression":{"assignments":[55283],"declarations":[{"constant":false,"id":55283,"mutability":"mutable","name":"i","nameLocation":"9689:1:81","nodeType":"VariableDeclaration","scope":55316,"src":"9681:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55282,"name":"uint256","nodeType":"ElementaryTypeName","src":"9681:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55285,"initialValue":{"hexValue":"30","id":55284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9693:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9681:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9730:3:81","subExpression":{"id":55290,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9730:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55292,"nodeType":"ExpressionStatement","src":"9730:3:81"},"nodeType":"ForStatement","src":"9676:322:81"},{"expression":{"arguments":[{"arguments":[{"id":55319,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"10038:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55318,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10028:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10028:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55321,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55276,"src":"10063:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":55317,"name":"_validateSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"10008:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes calldata[] calldata) view"}},"id":55322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10008:66:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55323,"nodeType":"ExpressionStatement","src":"10008:66:81"}]},"baseFunctions":[53950],"functionSelector":"fa97ed6d","implemented":true,"kind":"function","modifiers":[],"name":"commitBlocks","nameLocation":"9519:12:81","parameters":{"id":55277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55273,"mutability":"mutable","name":"blockCommitmentsArray","nameLocation":"9559:21:81","nodeType":"VariableDeclaration","scope":55325,"src":"9532:48:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment[]"},"typeName":{"baseType":{"id":55271,"nodeType":"UserDefinedTypeName","pathNode":{"id":55270,"name":"BlockCommitment","nameLocations":["9532:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"9532:15:81"},"referencedDeclaration":53704,"src":"9532:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"id":55272,"nodeType":"ArrayTypeName","src":"9532:17:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_storage_$dyn_storage_ptr","typeString":"struct IRouter.BlockCommitment[]"}},"visibility":"internal"},{"constant":false,"id":55276,"mutability":"mutable","name":"signatures","nameLocation":"9599:10:81","nodeType":"VariableDeclaration","scope":55325,"src":"9582:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55274,"name":"bytes","nodeType":"ElementaryTypeName","src":"9582:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55275,"nodeType":"ArrayTypeName","src":"9582:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"9531:79:81"},"returnParameters":{"id":55278,"nodeType":"ParameterList","parameters":[],"src":"9620:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55414,"nodeType":"FunctionDefinition","src":"10123:844:81","nodes":[],"body":{"id":55413,"nodeType":"Block","src":"10212:755:81","nodes":[],"statements":[{"assignments":[55335],"declarations":[{"constant":false,"id":55335,"mutability":"mutable","name":"router","nameLocation":"10238:6:81","nodeType":"VariableDeclaration","scope":55413,"src":"10222:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55334,"nodeType":"UserDefinedTypeName","pathNode":{"id":55333,"name":"Storage","nameLocations":["10222:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"10222:7:81"},"referencedDeclaration":53684,"src":"10222:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55338,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55336,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"10247:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10247:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10222:38:81"},{"assignments":[55340],"declarations":[{"constant":false,"id":55340,"mutability":"mutable","name":"threshold","nameLocation":"10279:9:81","nodeType":"VariableDeclaration","scope":55413,"src":"10271:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55339,"name":"uint256","nodeType":"ElementaryTypeName","src":"10271:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55343,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55341,"name":"validatorsThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54841,"src":"10291:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":55342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10291:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10271:41:81"},{"assignments":[55345],"declarations":[{"constant":false,"id":55345,"mutability":"mutable","name":"messageHash","nameLocation":"10331:11:81","nodeType":"VariableDeclaration","scope":55413,"src":"10323:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55344,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10323:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55356,"initialValue":{"arguments":[{"arguments":[{"id":55353,"name":"dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55327,"src":"10408:8:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55351,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10391:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10395:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"10391:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10391:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":55348,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10353:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}],"id":55347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10345:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55346,"name":"address","nodeType":"ElementaryTypeName","src":"10345:7:81","typeDescriptions":{}}},"id":55349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10345:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10359:31:81","memberName":"toDataWithIntendedValidatorHash","nodeType":"MemberAccess","referencedDeclaration":43448,"src":"10345:45:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes32_$attached_to$_t_address_$","typeString":"function (address,bytes memory) pure returns (bytes32)"}},"id":55355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10345:73:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"10323:95:81"},{"assignments":[55358],"declarations":[{"constant":false,"id":55358,"mutability":"mutable","name":"validSignatures","nameLocation":"10436:15:81","nodeType":"VariableDeclaration","scope":55413,"src":"10428:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55357,"name":"uint256","nodeType":"ElementaryTypeName","src":"10428:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55360,"initialValue":{"hexValue":"30","id":55359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10454:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10428:27:81"},{"body":{"id":55404,"nodeType":"Block","src":"10514:368:81","statements":[{"assignments":[55373],"declarations":[{"constant":false,"id":55373,"mutability":"mutable","name":"signature","nameLocation":"10543:9:81","nodeType":"VariableDeclaration","scope":55404,"src":"10528:24:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":55372,"name":"bytes","nodeType":"ElementaryTypeName","src":"10528:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55377,"initialValue":{"baseExpression":{"id":55374,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"10555:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":55376,"indexExpression":{"id":55375,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10566:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10555:13:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"nodeType":"VariableDeclarationStatement","src":"10528:40:81"},{"assignments":[55379],"declarations":[{"constant":false,"id":55379,"mutability":"mutable","name":"validator","nameLocation":"10591:9:81","nodeType":"VariableDeclaration","scope":55404,"src":"10583:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55378,"name":"address","nodeType":"ElementaryTypeName","src":"10583:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55384,"initialValue":{"arguments":[{"id":55382,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55373,"src":"10623:9:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":55380,"name":"messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55345,"src":"10603:11:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10615:7:81","memberName":"recover","nodeType":"MemberAccess","referencedDeclaration":43143,"src":"10603:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bytes memory) pure returns (address)"}},"id":55383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10603:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10583:50:81"},{"condition":{"baseExpression":{"expression":{"id":55385,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55335,"src":"10652:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55386,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10659:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"10652:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55388,"indexExpression":{"id":55387,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55379,"src":"10670:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10652:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55402,"nodeType":"Block","src":"10802:70:81","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":55398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10828:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"696e636f7272656374207369676e6174757265","id":55399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10835:21:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_641ab7289dc6df3dff0edafbede614b21294e2bb9f09800443d88f57818afe8f","typeString":"literal_string \"incorrect signature\""},"value":"incorrect signature"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_641ab7289dc6df3dff0edafbede614b21294e2bb9f09800443d88f57818afe8f","typeString":"literal_string \"incorrect signature\""}],"id":55397,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10820:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10820:37:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55401,"nodeType":"ExpressionStatement","src":"10820:37:81"}]},"id":55403,"nodeType":"IfStatement","src":"10648:224:81","trueBody":{"id":55396,"nodeType":"Block","src":"10682:114:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10704:17:81","subExpression":{"id":55389,"name":"validSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"10706:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55391,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55340,"src":"10725:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10704:30:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55395,"nodeType":"IfStatement","src":"10700:82:81","trueBody":{"id":55394,"nodeType":"Block","src":"10736:46:81","statements":[{"id":55393,"nodeType":"Break","src":"10758:5:81"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55365,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10486:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55366,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"10490:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":55367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10501:6:81","memberName":"length","nodeType":"MemberAccess","src":"10490:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10486:21:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55405,"initializationExpression":{"assignments":[55362],"declarations":[{"constant":false,"id":55362,"mutability":"mutable","name":"i","nameLocation":"10479:1:81","nodeType":"VariableDeclaration","scope":55405,"src":"10471:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55361,"name":"uint256","nodeType":"ElementaryTypeName","src":"10471:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55364,"initialValue":{"hexValue":"30","id":55363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10483:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10471:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10509:3:81","subExpression":{"id":55369,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10509:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55371,"nodeType":"ExpressionStatement","src":"10509:3:81"},"nodeType":"ForStatement","src":"10466:416:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55407,"name":"validSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"10900:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":55408,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55340,"src":"10919:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10900:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e6f7420656e6f7567682076616c6964207369676e617475726573","id":55410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10930:29:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_8852ba723d98bcf316aab69f38fb5da08e0bfb912ef589b19218c396aac3c0bc","typeString":"literal_string \"not enough valid signatures\""},"value":"not enough valid signatures"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8852ba723d98bcf316aab69f38fb5da08e0bfb912ef589b19218c396aac3c0bc","typeString":"literal_string \"not enough valid signatures\""}],"id":55406,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10892:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10892:68:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55412,"nodeType":"ExpressionStatement","src":"10892:68:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateSignatures","nameLocation":"10132:19:81","parameters":{"id":55331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55327,"mutability":"mutable","name":"dataHash","nameLocation":"10160:8:81","nodeType":"VariableDeclaration","scope":55414,"src":"10152:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55326,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10152:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55330,"mutability":"mutable","name":"signatures","nameLocation":"10187:10:81","nodeType":"VariableDeclaration","scope":55414,"src":"10170:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55328,"name":"bytes","nodeType":"ElementaryTypeName","src":"10170:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55329,"nodeType":"ArrayTypeName","src":"10170:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"10151:47:81"},"returnParameters":{"id":55332,"nodeType":"ParameterList","parameters":[],"src":"10212:0:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":55510,"nodeType":"FunctionDefinition","src":"10973:1114:81","nodes":[],"body":{"id":55509,"nodeType":"Block","src":"11063:1024:81","nodes":[],"statements":[{"assignments":[55424],"declarations":[{"constant":false,"id":55424,"mutability":"mutable","name":"router","nameLocation":"11089:6:81","nodeType":"VariableDeclaration","scope":55509,"src":"11073:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55423,"nodeType":"UserDefinedTypeName","pathNode":{"id":55422,"name":"Storage","nameLocations":["11073:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"11073:7:81"},"referencedDeclaration":53684,"src":"11073:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55427,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55425,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"11098:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11098:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"11073:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55429,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"11143:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11150:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"11143:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55431,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11177:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11193:18:81","memberName":"prevCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53697,"src":"11177:34:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11143:68:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c69642070726576696f757320636f6d6d69746d656e742068617368","id":55434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11213:34:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_fef95c9e1944529fb91083689c978504d88f59fdb02e6fd241a073fa572e7d3e","typeString":"literal_string \"invalid previous commitment hash\""},"value":"invalid previous commitment hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fef95c9e1944529fb91083689c978504d88f59fdb02e6fd241a073fa572e7d3e","typeString":"literal_string \"invalid previous commitment hash\""}],"id":55428,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11122:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11122:135:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55436,"nodeType":"ExpressionStatement","src":"11122:135:81"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":55439,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11294:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11310:13:81","memberName":"predBlockHash","nodeType":"MemberAccess","referencedDeclaration":53699,"src":"11294:29:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55438,"name":"_isPredecessorHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55554,"src":"11275:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32) view returns (bool)"}},"id":55441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11275:49:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f756e64","id":55442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11326:37:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_7d09fbc5a1c193a0826cadcc2903c8170aac2d31f22b53e69a64923153c8207e","typeString":"literal_string \"allowed predecessor block not found\""},"value":"allowed predecessor block not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7d09fbc5a1c193a0826cadcc2903c8170aac2d31f22b53e69a64923153c8207e","typeString":"literal_string \"allowed predecessor block not found\""}],"id":55437,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11267:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11267:97:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55444,"nodeType":"ExpressionStatement","src":"11267:97:81"},{"assignments":[55446],"declarations":[{"constant":false,"id":55446,"mutability":"mutable","name":"transitionsHashes","nameLocation":"11388:17:81","nodeType":"VariableDeclaration","scope":55509,"src":"11375:30:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55445,"name":"bytes","nodeType":"ElementaryTypeName","src":"11375:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55447,"nodeType":"VariableDeclarationStatement","src":"11375:30:81"},{"body":{"id":55483,"nodeType":"Block","src":"11481:255:81","statements":[{"assignments":[55462],"declarations":[{"constant":false,"id":55462,"mutability":"mutable","name":"stateTransition","nameLocation":"11520:15:81","nodeType":"VariableDeclaration","scope":55483,"src":"11495:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition"},"typeName":{"id":55461,"nodeType":"UserDefinedTypeName","pathNode":{"id":55460,"name":"StateTransition","nameLocations":["11495:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53719,"src":"11495:15:81"},"referencedDeclaration":53719,"src":"11495:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_storage_ptr","typeString":"struct IRouter.StateTransition"}},"visibility":"internal"}],"id":55467,"initialValue":{"baseExpression":{"expression":{"id":55463,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11538:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11554:11:81","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":53703,"src":"11538:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$53719_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.StateTransition calldata[] calldata"}},"id":55466,"indexExpression":{"id":55465,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11566:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11538:30:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"nodeType":"VariableDeclarationStatement","src":"11495:73:81"},{"assignments":[55469],"declarations":[{"constant":false,"id":55469,"mutability":"mutable","name":"transitionHash","nameLocation":"11591:14:81","nodeType":"VariableDeclaration","scope":55483,"src":"11583:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55468,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11583:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55473,"initialValue":{"arguments":[{"id":55471,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55462,"src":"11627:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}],"id":55470,"name":"_doStateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55754,"src":"11608:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_StateTransition_$53719_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.StateTransition calldata) returns (bytes32)"}},"id":55472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11608:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"11583:60:81"},{"expression":{"id":55481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55474,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"11658:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55478,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"11691:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55479,"name":"transitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55469,"src":"11710:14:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11678:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55475,"name":"bytes","nodeType":"ElementaryTypeName","src":"11678:5:81","typeDescriptions":{}}},"id":55477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11684:6:81","memberName":"concat","nodeType":"MemberAccess","src":"11678:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11678:47:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"11658:67:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55482,"nodeType":"ExpressionStatement","src":"11658:67:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55452,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11436:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55453,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11440:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11456:11:81","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":53703,"src":"11440:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$53719_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.StateTransition calldata[] calldata"}},"id":55455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11468:6:81","memberName":"length","nodeType":"MemberAccess","src":"11440:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11436:38:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55484,"initializationExpression":{"assignments":[55449],"declarations":[{"constant":false,"id":55449,"mutability":"mutable","name":"i","nameLocation":"11429:1:81","nodeType":"VariableDeclaration","scope":55484,"src":"11421:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55448,"name":"uint256","nodeType":"ElementaryTypeName","src":"11421:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55451,"initialValue":{"hexValue":"30","id":55450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11433:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11421:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11476:3:81","subExpression":{"id":55457,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11476:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55459,"nodeType":"ExpressionStatement","src":"11476:3:81"},"nodeType":"ForStatement","src":"11416:320:81"},{"expression":{"id":55490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":55485,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"11746:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11753:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"11746:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55488,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11779:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11795:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11779:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11746:58:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55491,"nodeType":"ExpressionStatement","src":"11746:58:81"},{"eventCall":{"arguments":[{"expression":{"id":55493,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11834:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11850:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11834:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55492,"name":"BlockCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53748,"src":"11819:14:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":55495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11819:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55496,"nodeType":"EmitStatement","src":"11814:46:81"},{"expression":{"arguments":[{"expression":{"id":55498,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11912:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11928:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11912:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55500,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11951:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11967:18:81","memberName":"prevCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53697,"src":"11951:34:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55502,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11999:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12015:13:81","memberName":"predBlockHash","nodeType":"MemberAccess","referencedDeclaration":53699,"src":"11999:29:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":55505,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"12052:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55504,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"12042:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12042:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55497,"name":"_blockCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55778,"src":"11878:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32,bytes32) pure returns (bytes32)"}},"id":55507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11878:202:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55421,"id":55508,"nodeType":"Return","src":"11871:209:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitBlock","nameLocation":"10982:12:81","parameters":{"id":55418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55417,"mutability":"mutable","name":"blockCommitment","nameLocation":"11020:15:81","nodeType":"VariableDeclaration","scope":55510,"src":"10995:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment"},"typeName":{"id":55416,"nodeType":"UserDefinedTypeName","pathNode":{"id":55415,"name":"BlockCommitment","nameLocations":["10995:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"10995:15:81"},"referencedDeclaration":53704,"src":"10995:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"visibility":"internal"}],"src":"10994:42:81"},"returnParameters":{"id":55421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55510,"src":"11054:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55419,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11054:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11053:9:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55554,"nodeType":"FunctionDefinition","src":"12093:338:81","nodes":[],"body":{"id":55553,"nodeType":"Block","src":"12163:268:81","nodes":[],"statements":[{"body":{"id":55549,"nodeType":"Block","src":"12220:183:81","statements":[{"assignments":[55531],"declarations":[{"constant":false,"id":55531,"mutability":"mutable","name":"ret","nameLocation":"12242:3:81","nodeType":"VariableDeclaration","scope":55549,"src":"12234:11:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55530,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12234:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55535,"initialValue":{"arguments":[{"id":55533,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12258:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55532,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"12248:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":55534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12248:12:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12234:26:81"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55536,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"12278:3:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55537,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55512,"src":"12285:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12278:11:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55542,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"12345:3:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12352:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12345:8:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55547,"nodeType":"IfStatement","src":"12341:52:81","trueBody":{"id":55546,"nodeType":"Block","src":"12355:38:81","statements":[{"id":55545,"nodeType":"Break","src":"12373:5:81"}]}},"id":55548,"nodeType":"IfStatement","src":"12274:119:81","trueBody":{"id":55541,"nodeType":"Block","src":"12291:44:81","statements":[{"expression":{"hexValue":"74727565","id":55539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12316:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":55516,"id":55540,"nodeType":"Return","src":"12309:11:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55524,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12208:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":55525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12212:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12208:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55550,"initializationExpression":{"assignments":[55518],"declarations":[{"constant":false,"id":55518,"mutability":"mutable","name":"i","nameLocation":"12186:1:81","nodeType":"VariableDeclaration","scope":55550,"src":"12178:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55517,"name":"uint256","nodeType":"ElementaryTypeName","src":"12178:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55523,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55519,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12190:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":55520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12196:6:81","memberName":"number","nodeType":"MemberAccess","src":"12190:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":55521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12205:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12190:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12178:28:81"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":55528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"12215:3:81","subExpression":{"id":55527,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12215:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55529,"nodeType":"ExpressionStatement","src":"12215:3:81"},"nodeType":"ForStatement","src":"12173:230:81"},{"expression":{"hexValue":"66616c7365","id":55551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12419:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":55516,"id":55552,"nodeType":"Return","src":"12412:12:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_isPredecessorHash","nameLocation":"12102:18:81","parameters":{"id":55513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55512,"mutability":"mutable","name":"hash","nameLocation":"12129:4:81","nodeType":"VariableDeclaration","scope":55554,"src":"12121:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12121:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12120:14:81"},"returnParameters":{"id":55516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55515,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55554,"src":"12157:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":55514,"name":"bool","nodeType":"ElementaryTypeName","src":"12157:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12156:6:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":55754,"nodeType":"FunctionDefinition","src":"12437:2170:81","nodes":[],"body":{"id":55753,"nodeType":"Block","src":"12533:2074:81","nodes":[],"statements":[{"assignments":[55564],"declarations":[{"constant":false,"id":55564,"mutability":"mutable","name":"router","nameLocation":"12559:6:81","nodeType":"VariableDeclaration","scope":55753,"src":"12543:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55563,"nodeType":"UserDefinedTypeName","pathNode":{"id":55562,"name":"Storage","nameLocations":["12543:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"12543:7:81"},"referencedDeclaration":53684,"src":"12543:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55567,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55565,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"12568:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12568:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"12543:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55569,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55564,"src":"12600:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12607:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"12600:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":55573,"indexExpression":{"expression":{"id":55571,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12616:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12632:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12616:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12600:40:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12644:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12600:45:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420706572666f726d207472616e736974696f6e20666f7220756e6b6e6f776e2070726f6772616d","id":55576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12647:49:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""},"value":"couldn't perform transition for unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""}],"id":55568,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12592:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12592:105:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55578,"nodeType":"ExpressionStatement","src":"12592:105:81"},{"assignments":[55581],"declarations":[{"constant":false,"id":55581,"mutability":"mutable","name":"wrappedVaraActor","nameLocation":"12721:16:81","nodeType":"VariableDeclaration","scope":55753,"src":"12708:29:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":55580,"nodeType":"UserDefinedTypeName","pathNode":{"id":55579,"name":"IWrappedVara","nameLocations":["12708:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"12708:12:81"},"referencedDeclaration":53962,"src":"12708:12:81","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":55586,"initialValue":{"arguments":[{"expression":{"id":55583,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55564,"src":"12753:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12760:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"12753:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55582,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"12740:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":55585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12740:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"12708:64:81"},{"expression":{"arguments":[{"expression":{"id":55590,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12808:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12824:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12808:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55592,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12833:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12849:14:81","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":53710,"src":"12833:30:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55587,"name":"wrappedVaraActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55581,"src":"12782:16:81","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":55589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12799:8:81","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":41873,"src":"12782:25:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":55594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12782:82:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55595,"nodeType":"ExpressionStatement","src":"12782:82:81"},{"assignments":[55598],"declarations":[{"constant":false,"id":55598,"mutability":"mutable","name":"mirrorActor","nameLocation":"12883:11:81","nodeType":"VariableDeclaration","scope":55753,"src":"12875:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"},"typeName":{"id":55597,"nodeType":"UserDefinedTypeName","pathNode":{"id":55596,"name":"IMirror","nameLocations":["12875:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53636,"src":"12875:7:81"},"referencedDeclaration":53636,"src":"12875:7:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"visibility":"internal"}],"id":55603,"initialValue":{"arguments":[{"expression":{"id":55600,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12905:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12921:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12905:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55599,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"12897:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$53636_$","typeString":"type(contract IMirror)"}},"id":55602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12897:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"nodeType":"VariableDeclarationStatement","src":"12875:54:81"},{"assignments":[55605],"declarations":[{"constant":false,"id":55605,"mutability":"mutable","name":"valueClaimsBytes","nameLocation":"12953:16:81","nodeType":"VariableDeclaration","scope":55753,"src":"12940:29:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55604,"name":"bytes","nodeType":"ElementaryTypeName","src":"12940:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55606,"nodeType":"VariableDeclarationStatement","src":"12940:29:81"},{"body":{"id":55655,"nodeType":"Block","src":"13045:367:81","statements":[{"assignments":[55621],"declarations":[{"constant":false,"id":55621,"mutability":"mutable","name":"valueClaim","nameLocation":"13079:10:81","nodeType":"VariableDeclaration","scope":55655,"src":"13059:30:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim"},"typeName":{"id":55620,"nodeType":"UserDefinedTypeName","pathNode":{"id":55619,"name":"ValueClaim","nameLocations":["13059:10:81"],"nodeType":"IdentifierPath","referencedDeclaration":53726,"src":"13059:10:81"},"referencedDeclaration":53726,"src":"13059:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_storage_ptr","typeString":"struct IRouter.ValueClaim"}},"visibility":"internal"}],"id":55626,"initialValue":{"baseExpression":{"expression":{"id":55622,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13092:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13108:11:81","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":53714,"src":"13092:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$53726_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata[] calldata"}},"id":55625,"indexExpression":{"id":55624,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13120:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13092:30:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"nodeType":"VariableDeclarationStatement","src":"13059:63:81"},{"expression":{"id":55642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55627,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"13137:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55631,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"13186:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"expression":{"id":55634,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13221:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13232:9:81","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":53721,"src":"13221:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55636,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13243:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13254:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53723,"src":"13243:22:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55638,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13267:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13278:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53725,"src":"13267:16:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55632,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13204:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13208:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"13204:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13204:80:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":55629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13156:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55628,"name":"bytes","nodeType":"ElementaryTypeName","src":"13156:5:81","typeDescriptions":{}}},"id":55630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13162:6:81","memberName":"concat","nodeType":"MemberAccess","src":"13156:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13156:142:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13137:161:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55643,"nodeType":"ExpressionStatement","src":"13137:161:81"},{"expression":{"arguments":[{"expression":{"id":55647,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13338:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13349:9:81","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":53721,"src":"13338:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55649,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13360:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13371:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53723,"src":"13360:22:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55651,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13384:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13395:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53725,"src":"13384:16:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55644,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13313:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13325:12:81","memberName":"valueClaimed","nodeType":"MemberAccess","referencedDeclaration":53619,"src":"13313:24:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint128) external"}},"id":55653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13313:88:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55654,"nodeType":"ExpressionStatement","src":"13313:88:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55611,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13000:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55612,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13004:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13020:11:81","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":53714,"src":"13004:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$53726_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata[] calldata"}},"id":55614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13032:6:81","memberName":"length","nodeType":"MemberAccess","src":"13004:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13000:38:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55656,"initializationExpression":{"assignments":[55608],"declarations":[{"constant":false,"id":55608,"mutability":"mutable","name":"i","nameLocation":"12993:1:81","nodeType":"VariableDeclaration","scope":55656,"src":"12985:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55607,"name":"uint256","nodeType":"ElementaryTypeName","src":"12985:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55610,"initialValue":{"hexValue":"30","id":55609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12997:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12985:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13040:3:81","subExpression":{"id":55616,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13040:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55618,"nodeType":"ExpressionStatement","src":"13040:3:81"},"nodeType":"ForStatement","src":"12980:432:81"},{"assignments":[55658],"declarations":[{"constant":false,"id":55658,"mutability":"mutable","name":"messagesHashes","nameLocation":"13435:14:81","nodeType":"VariableDeclaration","scope":55753,"src":"13422:27:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55657,"name":"bytes","nodeType":"ElementaryTypeName","src":"13422:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55659,"nodeType":"VariableDeclarationStatement","src":"13422:27:81"},{"body":{"id":55729,"nodeType":"Block","src":"13522:764:81","statements":[{"assignments":[55674],"declarations":[{"constant":false,"id":55674,"mutability":"mutable","name":"outgoingMessage","nameLocation":"13561:15:81","nodeType":"VariableDeclaration","scope":55729,"src":"13536:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage"},"typeName":{"id":55673,"nodeType":"UserDefinedTypeName","pathNode":{"id":55672,"name":"OutgoingMessage","nameLocations":["13536:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53738,"src":"13536:15:81"},"referencedDeclaration":53738,"src":"13536:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_storage_ptr","typeString":"struct IRouter.OutgoingMessage"}},"visibility":"internal"}],"id":55679,"initialValue":{"baseExpression":{"expression":{"id":55675,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13579:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13595:8:81","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":53718,"src":"13579:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata[] calldata"}},"id":55678,"indexExpression":{"id":55677,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13604:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13579:27:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"nodeType":"VariableDeclarationStatement","src":"13536:70:81"},{"expression":{"id":55689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55680,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"13621:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55684,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"13651:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":55686,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13688:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}],"id":55685,"name":"_outgoingMessageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55834,"src":"13667:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.OutgoingMessage calldata) pure returns (bytes32)"}},"id":55687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13667:37:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13638:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55681,"name":"bytes","nodeType":"ElementaryTypeName","src":"13638:5:81","typeDescriptions":{}}},"id":55683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13644:6:81","memberName":"concat","nodeType":"MemberAccess","src":"13638:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13638:67:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13621:84:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55690,"nodeType":"ExpressionStatement","src":"13621:84:81"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":55691,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13724:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13740:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"13724:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13753:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"13724:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13759:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13724:36:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55727,"nodeType":"Block","src":"13959:317:81","statements":[{"expression":{"arguments":[{"expression":{"id":55713,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14020:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14036:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"14020:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55715,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14069:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14085:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"14069:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55717,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14114:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14130:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"14114:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":55719,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14157:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14173:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"14157:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14186:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"14157:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":55722,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14210:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14226:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"14210:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14239:4:81","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":53742,"src":"14210:33:81","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":55710,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13977:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13989:9:81","memberName":"replySent","nodeType":"MemberAccess","referencedDeclaration":53610,"src":"13977:21:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (address,bytes memory,uint128,bytes32,bytes4) external"}},"id":55725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13977:284:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55726,"nodeType":"ExpressionStatement","src":"13977:284:81"}]},"id":55728,"nodeType":"IfStatement","src":"13720:556:81","trueBody":{"id":55709,"nodeType":"Block","src":"13762:191:81","statements":[{"expression":{"arguments":[{"expression":{"id":55699,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13825:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13841:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53728,"src":"13825:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55701,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13845:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13861:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"13845:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55703,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13874:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13890:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"13874:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55705,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13899:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13915:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"13899:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55696,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13780:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13792:11:81","memberName":"messageSent","nodeType":"MemberAccess","referencedDeclaration":53597,"src":"13780:23:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128) external"}},"id":55707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13780:158:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55708,"nodeType":"ExpressionStatement","src":"13780:158:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55664,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13480:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55665,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13484:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13500:8:81","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":53718,"src":"13484:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata[] calldata"}},"id":55667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13509:6:81","memberName":"length","nodeType":"MemberAccess","src":"13484:31:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13480:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55730,"initializationExpression":{"assignments":[55661],"declarations":[{"constant":false,"id":55661,"mutability":"mutable","name":"i","nameLocation":"13473:1:81","nodeType":"VariableDeclaration","scope":55730,"src":"13465:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55660,"name":"uint256","nodeType":"ElementaryTypeName","src":"13465:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55663,"initialValue":{"hexValue":"30","id":55662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13477:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13465:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13517:3:81","subExpression":{"id":55669,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13517:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55671,"nodeType":"ExpressionStatement","src":"13517:3:81"},"nodeType":"ForStatement","src":"13460:826:81"},{"expression":{"arguments":[{"expression":{"id":55734,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14320:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14336:12:81","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":53708,"src":"14320:28:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55731,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"14296:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14308:11:81","memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":53586,"src":"14296:23:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32) external"}},"id":55736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14296:53:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55737,"nodeType":"ExpressionStatement","src":"14296:53:81"},{"expression":{"arguments":[{"expression":{"id":55739,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14401:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14417:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"14401:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55741,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14438:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14454:12:81","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":53708,"src":"14438:28:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55743,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14480:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14496:14:81","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":53710,"src":"14480:30:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[{"id":55746,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"14534:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55745,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14524:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14524:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":55749,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"14575:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55748,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14565:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14565:25:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55738,"name":"_stateTransitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55805,"src":"14367:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_uint128_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,bytes32,uint128,bytes32,bytes32) pure returns (bytes32)"}},"id":55751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14367:233:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55561,"id":55752,"nodeType":"Return","src":"14360:240:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_doStateTransition","nameLocation":"12446:18:81","parameters":{"id":55558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55557,"mutability":"mutable","name":"stateTransition","nameLocation":"12490:15:81","nodeType":"VariableDeclaration","scope":55754,"src":"12465:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition"},"typeName":{"id":55556,"nodeType":"UserDefinedTypeName","pathNode":{"id":55555,"name":"StateTransition","nameLocations":["12465:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53719,"src":"12465:15:81"},"referencedDeclaration":53719,"src":"12465:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_storage_ptr","typeString":"struct IRouter.StateTransition"}},"visibility":"internal"}],"src":"12464:42:81"},"returnParameters":{"id":55561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55754,"src":"12524:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55559,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12524:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12523:9:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55778,"nodeType":"FunctionDefinition","src":"14613:320:81","nodes":[],"body":{"id":55777,"nodeType":"Block","src":"14813:120:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":55770,"name":"blockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55756,"src":"14857:9:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55771,"name":"prevCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55758,"src":"14868:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55772,"name":"predBlockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55760,"src":"14888:13:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55773,"name":"transitionsHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55762,"src":"14903:21:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55768,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14840:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14844:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"14840:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14840:85:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55767,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14830:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14830:96:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55766,"id":55776,"nodeType":"Return","src":"14823:103:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_blockCommitmentHash","nameLocation":"14622:20:81","parameters":{"id":55763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55756,"mutability":"mutable","name":"blockHash","nameLocation":"14660:9:81","nodeType":"VariableDeclaration","scope":55778,"src":"14652:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55755,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14652:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55758,"mutability":"mutable","name":"prevCommitmentHash","nameLocation":"14687:18:81","nodeType":"VariableDeclaration","scope":55778,"src":"14679:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55757,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14679:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55760,"mutability":"mutable","name":"predBlockHash","nameLocation":"14723:13:81","nodeType":"VariableDeclaration","scope":55778,"src":"14715:21:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55759,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14715:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55762,"mutability":"mutable","name":"transitionsHashesHash","nameLocation":"14754:21:81","nodeType":"VariableDeclaration","scope":55778,"src":"14746:29:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55761,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14746:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14642:139:81"},"returnParameters":{"id":55766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55778,"src":"14804:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55764,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14804:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14803:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55805,"nodeType":"FunctionDefinition","src":"14939:350:81","nodes":[],"body":{"id":55804,"nodeType":"Block","src":"15162:127:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":55796,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55780,"src":"15206:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55797,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55782,"src":"15215:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55798,"name":"valueToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55784,"src":"15229:14:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":55799,"name":"valueClaimsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55786,"src":"15245:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55800,"name":"messagesHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55788,"src":"15262:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55794,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15189:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15193:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15189:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15189:92:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55793,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15179:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15179:103:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55792,"id":55803,"nodeType":"Return","src":"15172:110:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_stateTransitionHash","nameLocation":"14948:20:81","parameters":{"id":55789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55780,"mutability":"mutable","name":"actorId","nameLocation":"14986:7:81","nodeType":"VariableDeclaration","scope":55805,"src":"14978:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55779,"name":"address","nodeType":"ElementaryTypeName","src":"14978:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55782,"mutability":"mutable","name":"newStateHash","nameLocation":"15011:12:81","nodeType":"VariableDeclaration","scope":55805,"src":"15003:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55781,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15003:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55784,"mutability":"mutable","name":"valueToReceive","nameLocation":"15041:14:81","nodeType":"VariableDeclaration","scope":55805,"src":"15033:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55783,"name":"uint128","nodeType":"ElementaryTypeName","src":"15033:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":55786,"mutability":"mutable","name":"valueClaimsHash","nameLocation":"15073:15:81","nodeType":"VariableDeclaration","scope":55805,"src":"15065:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55785,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15065:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55788,"mutability":"mutable","name":"messagesHashesHash","nameLocation":"15106:18:81","nodeType":"VariableDeclaration","scope":55805,"src":"15098:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55787,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15098:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14968:162:81"},"returnParameters":{"id":55792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55791,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55805,"src":"15153:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55790,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15153:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15152:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55834,"nodeType":"FunctionDefinition","src":"15295:451:81","nodes":[],"body":{"id":55833,"nodeType":"Block","src":"15398:348:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":55816,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15472:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15488:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53728,"src":"15472:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55818,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15508:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15524:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"15508:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55820,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15553:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15569:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"15553:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55822,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15594:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15610:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"15594:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":55824,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15633:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15649:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"15633:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15662:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"15633:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":55827,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15682:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15698:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"15682:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15711:4:81","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":53742,"src":"15682:33:81","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":55814,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15438:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15442:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15438:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15438:291:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55813,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15415:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15415:324:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55812,"id":55832,"nodeType":"Return","src":"15408:331:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_outgoingMessageHash","nameLocation":"15304:20:81","parameters":{"id":55809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55808,"mutability":"mutable","name":"outgoingMessage","nameLocation":"15350:15:81","nodeType":"VariableDeclaration","scope":55834,"src":"15325:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage"},"typeName":{"id":55807,"nodeType":"UserDefinedTypeName","pathNode":{"id":55806,"name":"OutgoingMessage","nameLocations":["15325:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53738,"src":"15325:15:81"},"referencedDeclaration":53738,"src":"15325:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_storage_ptr","typeString":"struct IRouter.OutgoingMessage"}},"visibility":"internal"}],"src":"15324:42:81"},"returnParameters":{"id":55812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55834,"src":"15389:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55810,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15389:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15388:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55853,"nodeType":"FunctionDefinition","src":"15752:192:81","nodes":[],"body":{"id":55852,"nodeType":"Block","src":"15852:92:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":55845,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55837,"src":"15896:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15911:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53690,"src":"15896:17:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55847,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55837,"src":"15915:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15930:5:81","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":53692,"src":"15915:20:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":55843,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15879:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55844,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15883:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15879:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15879:57:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55842,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15869:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15869:68:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55841,"id":55851,"nodeType":"Return","src":"15862:75:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_codeCommitmentHash","nameLocation":"15761:19:81","parameters":{"id":55838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55837,"mutability":"mutable","name":"codeCommitment","nameLocation":"15805:14:81","nodeType":"VariableDeclaration","scope":55853,"src":"15781:38:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment"},"typeName":{"id":55836,"nodeType":"UserDefinedTypeName","pathNode":{"id":55835,"name":"CodeCommitment","nameLocations":["15781:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"15781:14:81"},"referencedDeclaration":53693,"src":"15781:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"visibility":"internal"}],"src":"15780:40:81"},"returnParameters":{"id":55841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55840,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55853,"src":"15843:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15843:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15842:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55886,"nodeType":"FunctionDefinition","src":"15950:257:81","nodes":[],"body":{"id":55885,"nodeType":"Block","src":"15998:209:81","nodes":[],"statements":[{"assignments":[55860],"declarations":[{"constant":false,"id":55860,"mutability":"mutable","name":"router","nameLocation":"16024:6:81","nodeType":"VariableDeclaration","scope":55885,"src":"16008:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55859,"nodeType":"UserDefinedTypeName","pathNode":{"id":55858,"name":"Storage","nameLocations":["16008:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16008:7:81"},"referencedDeclaration":53684,"src":"16008:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55863,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55861,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16033:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16033:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16008:38:81"},{"assignments":[55865],"declarations":[{"constant":false,"id":55865,"mutability":"mutable","name":"success","nameLocation":"16062:7:81","nodeType":"VariableDeclaration","scope":55885,"src":"16057:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":55864,"name":"bool","nodeType":"ElementaryTypeName","src":"16057:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":55879,"initialValue":{"arguments":[{"expression":{"id":55871,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"16112:2:81","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":55872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16115:6:81","memberName":"origin","nodeType":"MemberAccess","src":"16112:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55875,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16131:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}],"id":55874,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16123:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55873,"name":"address","nodeType":"ElementaryTypeName","src":"16123:7:81","typeDescriptions":{}}},"id":55876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16123:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55877,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55855,"src":"16138:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":55867,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55860,"src":"16079:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16086:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"16079:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55866,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41906,"src":"16072:6:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$41906_$","typeString":"type(contract IERC20)"}},"id":55869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16072:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$41906","typeString":"contract IERC20"}},"id":55870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16099:12:81","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":41905,"src":"16072:39:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":55878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16072:73:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"16057:88:81"},{"expression":{"arguments":[{"id":55881,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55865,"src":"16164:7:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":55882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16173:26:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":55880,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"16156:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16156:44:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55884,"nodeType":"ExpressionStatement","src":"16156:44:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValue","nameLocation":"15959:14:81","parameters":{"id":55856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55855,"mutability":"mutable","name":"_value","nameLocation":"15982:6:81","nodeType":"VariableDeclaration","scope":55886,"src":"15974:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55854,"name":"uint128","nodeType":"ElementaryTypeName","src":"15974:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"15973:16:81"},"returnParameters":{"id":55857,"nodeType":"ParameterList","parameters":[],"src":"15998:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55927,"nodeType":"FunctionDefinition","src":"16213:317:81","nodes":[],"body":{"id":55926,"nodeType":"Block","src":"16249:281:81","nodes":[],"statements":[{"assignments":[55891],"declarations":[{"constant":false,"id":55891,"mutability":"mutable","name":"router","nameLocation":"16275:6:81","nodeType":"VariableDeclaration","scope":55926,"src":"16259:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55890,"nodeType":"UserDefinedTypeName","pathNode":{"id":55889,"name":"Storage","nameLocations":["16259:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16259:7:81"},"referencedDeclaration":53684,"src":"16259:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55894,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55892,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16284:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16284:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16259:38:81"},{"body":{"id":55920,"nodeType":"Block","src":"16367:118:81","statements":[{"assignments":[55908],"declarations":[{"constant":false,"id":55908,"mutability":"mutable","name":"validator","nameLocation":"16389:9:81","nodeType":"VariableDeclaration","scope":55920,"src":"16381:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55907,"name":"address","nodeType":"ElementaryTypeName","src":"16381:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55913,"initialValue":{"baseExpression":{"expression":{"id":55909,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16401:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55910,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16408:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16401:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55912,"indexExpression":{"id":55911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16423:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16401:24:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16381:44:81"},{"expression":{"id":55918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"16439:35:81","subExpression":{"baseExpression":{"expression":{"id":55914,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16446:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16453:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"16446:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55917,"indexExpression":{"id":55916,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55908,"src":"16464:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16446:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55919,"nodeType":"ExpressionStatement","src":"16439:35:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16328:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55900,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16332:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16339:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16332:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16354:6:81","memberName":"length","nodeType":"MemberAccess","src":"16332:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16328:32:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55921,"initializationExpression":{"assignments":[55896],"declarations":[{"constant":false,"id":55896,"mutability":"mutable","name":"i","nameLocation":"16321:1:81","nodeType":"VariableDeclaration","scope":55921,"src":"16313:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55895,"name":"uint256","nodeType":"ElementaryTypeName","src":"16313:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55898,"initialValue":{"hexValue":"30","id":55897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16325:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16313:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16362:3:81","subExpression":{"id":55904,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16362:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55906,"nodeType":"ExpressionStatement","src":"16362:3:81"},"nodeType":"ForStatement","src":"16308:177:81"},{"expression":{"id":55924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"16495:28:81","subExpression":{"expression":{"id":55922,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16502:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16509:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16502:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55925,"nodeType":"ExpressionStatement","src":"16495:28:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_cleanValidators","nameLocation":"16222:16:81","parameters":{"id":55887,"nodeType":"ParameterList","parameters":[],"src":"16238:2:81"},"returnParameters":{"id":55888,"nodeType":"ParameterList","parameters":[],"src":"16249:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55982,"nodeType":"FunctionDefinition","src":"16536:442:81","nodes":[],"body":{"id":55981,"nodeType":"Block","src":"16603:375:81","nodes":[],"statements":[{"assignments":[55935],"declarations":[{"constant":false,"id":55935,"mutability":"mutable","name":"router","nameLocation":"16629:6:81","nodeType":"VariableDeclaration","scope":55981,"src":"16613:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55934,"nodeType":"UserDefinedTypeName","pathNode":{"id":55933,"name":"Storage","nameLocations":["16613:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16613:7:81"},"referencedDeclaration":53684,"src":"16613:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55938,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55936,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16638:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16638:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16613:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":55940,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16670:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16677:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16670:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16692:6:81","memberName":"length","nodeType":"MemberAccess","src":"16670:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16702:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16670:33:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726576696f75732076616c696461746f727320776572656e27742072656d6f766564","id":55945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16705:37:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_cbe432dd5148cbcd3965634d2fa4c608dba4822bc479da840b7f667e6442b9d2","typeString":"literal_string \"previous validators weren't removed\""},"value":"previous validators weren't removed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cbe432dd5148cbcd3965634d2fa4c608dba4822bc479da840b7f667e6442b9d2","typeString":"literal_string \"previous validators weren't removed\""}],"id":55939,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"16662:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16662:81:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55947,"nodeType":"ExpressionStatement","src":"16662:81:81"},{"body":{"id":55973,"nodeType":"Block","src":"16808:113:81","statements":[{"assignments":[55960],"declarations":[{"constant":false,"id":55960,"mutability":"mutable","name":"validator","nameLocation":"16830:9:81","nodeType":"VariableDeclaration","scope":55973,"src":"16822:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55959,"name":"address","nodeType":"ElementaryTypeName","src":"16822:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55964,"initialValue":{"baseExpression":{"id":55961,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16842:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55963,"indexExpression":{"id":55962,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16859:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16842:19:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16822:39:81"},{"expression":{"id":55971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55965,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16875:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16882:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"16875:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55969,"indexExpression":{"id":55967,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55960,"src":"16893:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16875:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":55970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16906:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"16875:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55972,"nodeType":"ExpressionStatement","src":"16875:35:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55952,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16774:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55953,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16778:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16795:6:81","memberName":"length","nodeType":"MemberAccess","src":"16778:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16774:27:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55974,"initializationExpression":{"assignments":[55949],"declarations":[{"constant":false,"id":55949,"mutability":"mutable","name":"i","nameLocation":"16767:1:81","nodeType":"VariableDeclaration","scope":55974,"src":"16759:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55948,"name":"uint256","nodeType":"ElementaryTypeName","src":"16759:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55951,"initialValue":{"hexValue":"30","id":55950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16771:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16759:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16803:3:81","subExpression":{"id":55956,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16803:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55958,"nodeType":"ExpressionStatement","src":"16803:3:81"},"nodeType":"ForStatement","src":"16754:167:81"},{"expression":{"id":55979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":55975,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16931:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55977,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16938:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16931:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55978,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16955:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"16931:40:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55980,"nodeType":"ExpressionStatement","src":"16931:40:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setValidators","nameLocation":"16545:14:81","parameters":{"id":55931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55930,"mutability":"mutable","name":"_validatorsArray","nameLocation":"16577:16:81","nodeType":"VariableDeclaration","scope":55982,"src":"16560:33:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55928,"name":"address","nodeType":"ElementaryTypeName","src":"16560:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55929,"nodeType":"ArrayTypeName","src":"16560:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"16559:35:81"},"returnParameters":{"id":55932,"nodeType":"ParameterList","parameters":[],"src":"16603:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55995,"nodeType":"FunctionDefinition","src":"16984:222:81","nodes":[],"body":{"id":55994,"nodeType":"Block","src":"17053:153:81","nodes":[],"statements":[{"assignments":[55989],"declarations":[{"constant":false,"id":55989,"mutability":"mutable","name":"slot","nameLocation":"17071:4:81","nodeType":"VariableDeclaration","scope":55994,"src":"17063:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55988,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17063:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55992,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55990,"name":"getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54597,"src":"17078:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":55991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17078:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"17063:31:81"},{"AST":{"nativeSrc":"17157:43:81","nodeType":"YulBlock","src":"17157:43:81","statements":[{"nativeSrc":"17171:19:81","nodeType":"YulAssignment","src":"17171:19:81","value":{"name":"slot","nativeSrc":"17186:4:81","nodeType":"YulIdentifier","src":"17186:4:81"},"variableNames":[{"name":"router.slot","nativeSrc":"17171:11:81","nodeType":"YulIdentifier","src":"17171:11:81"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":55986,"isOffset":false,"isSlot":true,"src":"17171:11:81","suffix":"slot","valueSize":1},{"declaration":55989,"isOffset":false,"isSlot":false,"src":"17186:4:81","valueSize":1}],"id":55993,"nodeType":"InlineAssembly","src":"17148:52:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorage","nameLocation":"16993:11:81","parameters":{"id":55983,"nodeType":"ParameterList","parameters":[],"src":"17004:2:81"},"returnParameters":{"id":55987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55986,"mutability":"mutable","name":"router","nameLocation":"17045:6:81","nodeType":"VariableDeclaration","scope":55995,"src":"17029:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55985,"nodeType":"UserDefinedTypeName","pathNode":{"id":55984,"name":"Storage","nameLocations":["17029:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"17029:7:81"},"referencedDeclaration":53684,"src":"17029:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"17028:24:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":54400,"name":"IRouter","nameLocations":["800:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53951,"src":"800:7:81"},"id":54401,"nodeType":"InheritanceSpecifier","src":"800:7:81"},{"baseName":{"id":54402,"name":"OwnableUpgradeable","nameLocations":["809:18:81"],"nodeType":"IdentifierPath","referencedDeclaration":39024,"src":"809:18:81"},"id":54403,"nodeType":"InheritanceSpecifier","src":"809:18:81"},{"baseName":{"id":54404,"name":"ReentrancyGuardTransient","nameLocations":["829:24:81"],"nodeType":"IdentifierPath","referencedDeclaration":42400,"src":"829:24:81"},"id":54405,"nodeType":"InheritanceSpecifier","src":"829:24:81"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[55996,42400,39024,40172,39278,53951],"name":"Router","nameLocation":"790:6:81","scope":55997,"usedErrors":[38860,38865,39041,39044,42267,42273,42344,43050,43055,43060],"usedEvents":[38871,39049,53748,53755,53762,53769,53772,53775,53780,53785]}],"license":"UNLICENSED"},"id":81} \ No newline at end of file diff --git a/ethexe/ethereum/TransparentUpgradeableProxy.json b/ethexe/ethereum/TransparentUpgradeableProxy.json index df470e5c516..d55910b3855 100644 --- a/ethexe/ethereum/TransparentUpgradeableProxy.json +++ b/ethexe/ethereum/TransparentUpgradeableProxy.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_logic","type":"address","internalType":"address"},{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_data","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"fallback","stateMutability":"payable"},{"type":"event","name":"AdminChanged","inputs":[{"name":"previousAdmin","type":"address","indexed":false,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidAdmin","inputs":[{"name":"admin","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"ProxyDeniedAdminAccess","inputs":[]}],"bytecode":{"object":"0x60a0604052610a99803803806100148161026b565b92833981016060828203126102675761002c82610290565b61003860208401610290565b604084015190936001600160401b03821161026757019180601f8401121561026757825161006d610068826102a4565b61026b565b9381855260208501926020838301011161026757815f926020809301855e85010152813b15610246577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561022e575f809161012d945190845af43d15610226573d9161011e610068846102a4565b9283523d5f602085013e6102bf565b505b604051906104428083016001600160401b0381118482101761021257602092849261063784396001600160a01b031681520301905ff080156102075760018060a01b0316806080525f80516020610a79833981519152547f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6040805160018060a01b0384168152846020820152a181156101f4576001600160a01b031916175f80516020610a7983398151915255604051610319908161031e82396080518160070152f35b633173bdd160e11b5f525f60045260245ffd5b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b6060916102bf565b505050341561012f5763b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761021257604052565b51906001600160a01b038216820361026757565b6001600160401b03811161021257601f01601f191660200190565b906102e357508051156102d457805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610314575b6102f4575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102ec56fe6080604052337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610066575f356001600160e01b03191663278f794360e11b1461005c576334ad5dbb60e21b5f5260045ffd5b61006461010a565b005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545f9081906001600160a01b0316368280378136915af43d5f803e156100ab573d5ff35b3d5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176100e957604052565b6100af565b67ffffffffffffffff81116100e957601f01601f191660200190565b36600411610193576040366003190112610193576004356001600160a01b03811690819003610193576024359067ffffffffffffffff8211610193573660238301121561019357816004013590610168610163836100ee565b6100c3565b918083523660248286010111610193576020815f92602461019197018387013784010152610197565b565b5f80fd5b90813b1561022b577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610213576102109161024c565b50565b50503461021c57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f8061027e93602081519101845af43d15610281573d9161026f610163846100ee565b9283523d5f602085013e610285565b90565b6060915b906102a9575080511561029a57805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806102da575b6102ba575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102b256fea2646970667358221220f8c4862c2f667058e1e953c94e53338920f93e3cff7433729018a6ca31ae9b8764736f6c634300081a003360803460b857601f61044238819003918201601f19168301916001600160401b0383118484101760bc5780849260209460405283398101031260b857516001600160a01b0381169081900360b857801560a5575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a361037190816100d18239f35b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f803560e01c8063715018a6146102785780638da5cb5b146102515780639623609d1461012e578063ad3cb1cc146100e15763f2fde38b14610051575f80fd5b346100de5760203660031901126100de576004356001600160a01b038116908190036100da5761007f610315565b80156100c65781546001600160a01b03198116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b5080fd5b80fd5b50346100de57806003193601126100de575061012a6040516101046040826102cf565b60058152640352e302e360dc1b60208201526040519182916020835260208301906102f1565b0390f35b506060366003190112610239576004356001600160a01b03811690819003610239576024356001600160a01b038116908190036102395760443567ffffffffffffffff8111610239573660238201121561023957806004013567ffffffffffffffff811161023d57604051916101ae601f8301601f1916602001846102cf565b818352366024838301011161023957815f9260246020930183860137830101526101d6610315565b823b156102395761020c925f9260405180958194829363278f794360e11b845260048401526040602484015260448301906102f1565b039134905af1801561022e57610220575080f35b61022c91505f906102cf565b005b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b34610239575f366003190112610239575f546040516001600160a01b039091168152602090f35b34610239575f36600319011261023957610290610315565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f8019910116810190811067ffffffffffffffff82111761023d57604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b5f546001600160a01b0316330361032857565b63118cdaa760e01b5f523360045260245ffdfea26469706673582212209cf4e242a748d0fa8d93e9ba36cfbfba352a79c78840df9f239bdbe73004db9d64736f6c634300081a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","sourceMap":"4239:2231:44:-:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4239:2231:44;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;4239:2231:44;;;;;;;;;;;1758:29:38;;:34;1754:119;;821:66;4239:2231:44;;-1:-1:-1;;;;;;4239:2231:44;-1:-1:-1;;;;;4239:2231:44;;;;;;;;2417:36:38;-1:-1:-1;;2417:36:38;4239:2231:44;;2468:15:38;:11;;-1:-1:-1;4049:25:48;;4091:55;4049:25;;;;;;4239:2231:44;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;4239:2231:44;;;;4091:55:48;:::i;:::-;;2464:148:38;4239:2231:44;;;5215:28;;;;-1:-1:-1;;;;;5215:28:44;;;;;;;;4239:2231;5215:28;;;;;;-1:-1:-1;;;;;4239:2231:44;;;5215:28;;;-1:-1:-1;5215:28:44;;;;;4239:2231;;;;;;5198:46;;;-1:-1:-1;;;;;;;;;;;2878:66:38;3900:43;4239:2231:44;;;;;;;;;;;;;;;;;3900:43:38;3559:22;;3555:91;;-1:-1:-1;;;;;;4239:2231:44;;-1:-1:-1;;;;;;;;;;;4239:2231:44;;;;;;;;;5198:46;4239:2231;;;;;;3555:91:38;3604:31;;;-1:-1:-1;3604:31:38;-1:-1:-1;3604:31:38;4239:2231:44;;-1:-1:-1;3604:31:38;5215:28:44;4239:2231;;;-1:-1:-1;4239:2231:44;;;;;5215:28;4239:2231;;;-1:-1:-1;4239:2231:44;;;;;-1:-1:-1;4239:2231:44;;;;4091:55:48;:::i;2464:148:38:-;6173:9;;;;6169:70;2464:148;6169:70;6209:19;;;-1:-1:-1;6209:19:38;;-1:-1:-1;6209:19:38;1754:119;-1:-1:-1;;;;;1815:47:38;;;-1:-1:-1;;;;;4239:2231:44;;;;1815:47:38;4239:2231:44;;;1815:47:38;4239:2231:44;-1:-1:-1;4239:2231:44;;;;;;;;;-1:-1:-1;;4239:2231:44;;;-1:-1:-1;;;;;4239:2231:44;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;4239:2231:44;;;;;;:::o;:::-;-1:-1:-1;;;;;4239:2231:44;;;;;;-1:-1:-1;;4239:2231:44;;;;:::o;4421:582:48:-;;4593:8;;-1:-1:-1;4239:2231:44;;5674:21:48;:17;;5846:142;;;;;;5670:385;6025:19;;;5694:1;6025:19;;5694:1;6025:19;4589:408;4239:2231:44;;4841:22:48;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:48;4917:24;;;-1:-1:-1;;;;;4239:2231:44;;;;4917:24:48;4239:2231:44;;;4917:24:48;4841:49;4867:18;;;:23;4841:49;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610066575f356001600160e01b03191663278f794360e11b1461005c576334ad5dbb60e21b5f5260045ffd5b61006461010a565b005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545f9081906001600160a01b0316368280378136915af43d5f803e156100ab573d5ff35b3d5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176100e957604052565b6100af565b67ffffffffffffffff81116100e957601f01601f191660200190565b36600411610193576040366003190112610193576004356001600160a01b03811690819003610193576024359067ffffffffffffffff8211610193573660238301121561019357816004013590610168610163836100ee565b6100c3565b918083523660248286010111610193576020815f92602461019197018387013784010152610197565b565b5f80fd5b90813b1561022b577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610213576102109161024c565b50565b50503461021c57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f8061027e93602081519101845af43d15610281573d9161026f610163846100ee565b9283523d5f602085013e610285565b90565b6060915b906102a9575080511561029a57805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806102da575b6102ba575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102b256fea2646970667358221220f8c4862c2f667058e1e953c94e53338920f93e3cff7433729018a6ca31ae9b8764736f6c634300081a0033","sourceMap":"4239:2231:44:-:0;;;5741:10;5525:6;-1:-1:-1;;;;;4239:2231:44;5741:27;4239:2231;;5788:7;;-1:-1:-1;;;;;;5788:7:44;-1:-1:-1;;;5788:65:44;5799:54;;5880:24;;;5788:7;5880:24;;5788:7;5880:24;5784:201;;;:::i;:::-;4239:2231;5737:306;821:66:38;;-1:-1:-1;;;;;;;;;4239:2231:44;1019:819:39;-1:-1:-1;;1019:819:39;;;;;;;-1:-1:-1;1019:819:39;;;;;;-1:-1:-1;1019:819:39;;;-1:-1:-1;1019:819:39;4239:2231:44;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4239:2231:44;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;-1:-1:-1;;4239:2231:44;;;;:::o;6251:217::-;6366:8;6375:1;4239:2231;;;;6366:8;-1:-1:-1;;4239:2231:44;;;;6375:1;4239:2231;-1:-1:-1;;;;;4239:2231:44;;;;;;;;;;;;;;;;6366:8;4239:2231;;;;;;;;6375:1;4239:2231;;;;;;;:::i;:::-;;:::i;:::-;;;;;6366:8;4239:2231;;;;;;;;;;6366:8;4239:2231;;6456:4;4239:2231;;;;;;;;;;6456:4;:::i;:::-;6251:217::o;4239:2231::-;6366:8;4239:2231;;2274:344:38;;1758:29;;:34;1754:119;;821:66;4239:2231:44;;-1:-1:-1;;;;;;4239:2231:44;-1:-1:-1;;;;;4239:2231:44;;;;;;;;2417:36:38;-1:-1:-1;;2417:36:38;4239:2231:44;;2468:15:38;:11;;2499:53;;;:::i;:::-;;2274:344::o;2464:148::-;6173:9;;;6169:70;;2274:344::o;6169:70::-;6209:19;;;1791:1;6209:19;;1791:1;6209:19;1754:119;-1:-1:-1;;;;1791:1:38;1815:47;;;-1:-1:-1;;;;;4239:2231:44;;;;1815:47:38;4239:2231:44;;;1815:47:38;3900:253:48;4049:25;3900:253;4091:55;3900:253;4049:25;;;;;;;;4239:2231:44;;;;;;;;;;:::i;:::-;;;;;4049:25:48;;4239:2231:44;;;4091:55:48;:::i;:::-;3900:253;:::o;4239:2231:44:-;;;4421:582:48;;4593:8;;-1:-1:-1;4239:2231:44;;5674:21:48;:17;;5846:142;;;;;;5670:385;6025:19;;;5694:1;6025:19;;5694:1;6025:19;4589:408;4239:2231:44;;4841:22:48;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:48;4917:24;;;-1:-1:-1;;;;;4239:2231:44;;;;4917:24:48;4239:2231:44;;;4917:24:48;4841:49;4867:18;;;:23;4841:49;","linkReferences":{},"immutableReferences":{"41719":[{"start":7,"length":32}]}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProxyDeniedAdminAccess\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself. 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating the proxy admin cannot fallback to the target implementation. These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract. IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an undesirable state where the admin slot is different from the actual admin. Relying on the value of the admin slot is generally fine if the implementation is trusted. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidAdmin(address)\":[{\"details\":\"The `admin` of the proxy is invalid.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"ProxyDeniedAdminAccess()\":[{\"details\":\"The proxy caller is the current admin, and can't fallback to the proxy target.\"}]},\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0x31b7f755099238afdf101d132e356ca59a2f5aa3c9d6957bc320c3a89c6b29a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c1ef7fce6c908e6912cbea81d4655489fb29e328b03502b6dc680a4eda65ae5\",\"dweb:/ipfs/QmQMasWF2fg4DvwYuXto8qvkDYVsrTDmBCgjRPTvn6PgpD\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5\",\"dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol\":{\"keccak256\":\"0x3cfd70b5e57ac16134caf206c6a71ea5ff113bc2032cd6d845231793f5c62995\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://984097ae51f9be9b94d2a3f5be7f284bd525fd9f0a0ccdca34cfaa7f0e1625d1\",\"dweb:/ipfs/QmXSL4rFMM25pJzvuTzN1DX4ddAwTCnmxS2axDwaZyzNHL\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0x11e3f4156c76feda27ffa117c3f624972471124411067e8f02c9a6909f35d035\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://beb0d9fe2c5fae15f1ca8a22b2c8cfaaa75984f6c8a94534ba85f98366caa6a5\",\"dweb:/ipfs/QmQEFQtyLACb6j7XajAT7Z1KzANE6JzqDYMEQeG8yzrfqP\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b\",\"dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"type":"error","name":"ERC1967InvalidAdmin"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"ProxyDeniedAdminAccess"},{"inputs":[{"internalType":"address","name":"previousAdmin","type":"address","indexed":false},{"internalType":"address","name":"newAdmin","type":"address","indexed":false}],"type":"event","name":"AdminChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":"TransparentUpgradeableProxy"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"keccak256":"0x31b7f755099238afdf101d132e356ca59a2f5aa3c9d6957bc320c3a89c6b29a8","urls":["bzz-raw://6c1ef7fce6c908e6912cbea81d4655489fb29e328b03502b6dc680a4eda65ae5","dweb:/ipfs/QmQMasWF2fg4DvwYuXto8qvkDYVsrTDmBCgjRPTvn6PgpD"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311","urls":["bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5","dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd","urls":["bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac","dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol":{"keccak256":"0x3cfd70b5e57ac16134caf206c6a71ea5ff113bc2032cd6d845231793f5c62995","urls":["bzz-raw://984097ae51f9be9b94d2a3f5be7f284bd525fd9f0a0ccdca34cfaa7f0e1625d1","dweb:/ipfs/QmXSL4rFMM25pJzvuTzN1DX4ddAwTCnmxS2axDwaZyzNHL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":{"keccak256":"0x11e3f4156c76feda27ffa117c3f624972471124411067e8f02c9a6909f35d035","urls":["bzz-raw://beb0d9fe2c5fae15f1ca8a22b2c8cfaaa75984f6c8a94534ba85f98366caa6a5","dweb:/ipfs/QmQEFQtyLACb6j7XajAT7Z1KzANE6JzqDYMEQeG8yzrfqP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84","urls":["bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b","dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol","id":41829,"exportedSymbols":{"ERC1967Proxy":[41159],"ERC1967Utils":[41453],"IERC1967":[40796],"ITransparentUpgradeableProxy":[41714],"ProxyAdmin":[41693],"TransparentUpgradeableProxy":[41828]},"nodeType":"SourceUnit","src":"133:6338:44","nodes":[{"id":41695,"nodeType":"PragmaDirective","src":"133:24:44","nodes":[],"literals":["solidity","^","0.8",".20"]},{"id":41697,"nodeType":"ImportDirective","src":"159:57:44","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","file":"../ERC1967/ERC1967Utils.sol","nameLocation":"-1:-1:-1","scope":41829,"sourceUnit":41454,"symbolAliases":[{"foreign":{"id":41696,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41453,"src":"167:12:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":41699,"nodeType":"ImportDirective","src":"217:57:44","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","file":"../ERC1967/ERC1967Proxy.sol","nameLocation":"-1:-1:-1","scope":41829,"sourceUnit":41160,"symbolAliases":[{"foreign":{"id":41698,"name":"ERC1967Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41159,"src":"225:12:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":41701,"nodeType":"ImportDirective","src":"275:55:44","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol","file":"../../interfaces/IERC1967.sol","nameLocation":"-1:-1:-1","scope":41829,"sourceUnit":40797,"symbolAliases":[{"foreign":{"id":41700,"name":"IERC1967","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40796,"src":"283:8:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":41703,"nodeType":"ImportDirective","src":"331:44:44","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol","file":"./ProxyAdmin.sol","nameLocation":"-1:-1:-1","scope":41829,"sourceUnit":41694,"symbolAliases":[{"foreign":{"id":41702,"name":"ProxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41693,"src":"339:10:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":41714,"nodeType":"ContractDefinition","src":"823:127:44","nodes":[{"id":41713,"nodeType":"FunctionDefinition","src":"880:68:44","nodes":[],"functionSelector":"4f1ef286","implemented":false,"kind":"function","modifiers":[],"name":"upgradeToAndCall","nameLocation":"889:16:44","parameters":{"id":41711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41713,"src":"906:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41707,"name":"address","nodeType":"ElementaryTypeName","src":"906:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41710,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41713,"src":"915:14:44","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":41709,"name":"bytes","nodeType":"ElementaryTypeName","src":"915:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"905:25:44"},"returnParameters":{"id":41712,"nodeType":"ParameterList","parameters":[],"src":"947:0:44"},"scope":41714,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":41705,"name":"IERC1967","nameLocations":["865:8:44"],"nodeType":"IdentifierPath","referencedDeclaration":40796,"src":"865:8:44"},"id":41706,"nodeType":"InheritanceSpecifier","src":"865:8:44"}],"canonicalName":"ITransparentUpgradeableProxy","contractDependencies":[],"contractKind":"interface","documentation":{"id":41704,"nodeType":"StructuredDocumentation","src":"377:445:44","text":" @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\n does not implement this interface directly, and its upgradeability mechanism is implemented by an internal dispatch\n mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\n include them in the ABI so this interface must be used to interact with it."},"fullyImplemented":false,"linearizedBaseContracts":[41714,40796],"name":"ITransparentUpgradeableProxy","nameLocation":"833:28:44","scope":41829,"usedErrors":[],"usedEvents":[40783,40790,40795]},{"id":41828,"nodeType":"ContractDefinition","src":"4239:2231:44","nodes":[{"id":41719,"nodeType":"VariableDeclaration","src":"4633:32:44","nodes":[],"constant":false,"mutability":"immutable","name":"_admin","nameLocation":"4659:6:44","scope":41828,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41718,"name":"address","nodeType":"ElementaryTypeName","src":"4633:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"id":41722,"nodeType":"ErrorDefinition","src":"4779:31:44","nodes":[],"documentation":{"id":41720,"nodeType":"StructuredDocumentation","src":"4672:102:44","text":" @dev The proxy caller is the current admin, and can't fallback to the proxy target."},"errorSelector":"d2b576ec","name":"ProxyDeniedAdminAccess","nameLocation":"4785:22:44","parameters":{"id":41721,"nodeType":"ParameterList","parameters":[],"src":"4807:2:44"}},{"id":41755,"nodeType":"FunctionDefinition","src":"5082:296:44","nodes":[],"body":{"id":41754,"nodeType":"Block","src":"5188:190:44","nodes":[],"statements":[{"expression":{"id":41745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41736,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41719,"src":"5198:6:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":41742,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41727,"src":"5230:12:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"5215:14:44","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$returns$_t_contract$_ProxyAdmin_$41693_$","typeString":"function (address) returns (contract ProxyAdmin)"},"typeName":{"id":41740,"nodeType":"UserDefinedTypeName","pathNode":{"id":41739,"name":"ProxyAdmin","nameLocations":["5219:10:44"],"nodeType":"IdentifierPath","referencedDeclaration":41693,"src":"5219:10:44"},"referencedDeclaration":41693,"src":"5219:10:44","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$41693","typeString":"contract ProxyAdmin"}}},"id":41743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5215:28:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$41693","typeString":"contract ProxyAdmin"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProxyAdmin_$41693","typeString":"contract ProxyAdmin"}],"id":41738,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5207:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41737,"name":"address","nodeType":"ElementaryTypeName","src":"5207:7:44","typeDescriptions":{}}},"id":41744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5207:37:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5198:46:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41746,"nodeType":"ExpressionStatement","src":"5198:46:44"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":41750,"name":"_proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41764,"src":"5357:11:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":41751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5357:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":41747,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41453,"src":"5332:12:44","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$41453_$","typeString":"type(library ERC1967Utils)"}},"id":41749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5345:11:44","memberName":"changeAdmin","nodeType":"MemberAccess","referencedDeclaration":41335,"src":"5332:24:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":41752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5332:39:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41753,"nodeType":"ExpressionStatement","src":"5332:39:44"}]},"documentation":{"id":41723,"nodeType":"StructuredDocumentation","src":"4816:261:44","text":" @dev Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`,\n backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in\n {ERC1967Proxy-constructor}."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":41732,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41725,"src":"5173:6:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41733,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41729,"src":"5181:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":41734,"kind":"baseConstructorSpecifier","modifierName":{"id":41731,"name":"ERC1967Proxy","nameLocations":["5160:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":41159,"src":"5160:12:44"},"nodeType":"ModifierInvocation","src":"5160:27:44"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":41730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41725,"mutability":"mutable","name":"_logic","nameLocation":"5102:6:44","nodeType":"VariableDeclaration","scope":41755,"src":"5094:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41724,"name":"address","nodeType":"ElementaryTypeName","src":"5094:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41727,"mutability":"mutable","name":"initialOwner","nameLocation":"5118:12:44","nodeType":"VariableDeclaration","scope":41755,"src":"5110:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41726,"name":"address","nodeType":"ElementaryTypeName","src":"5110:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41729,"mutability":"mutable","name":"_data","nameLocation":"5145:5:44","nodeType":"VariableDeclaration","scope":41755,"src":"5132:18:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41728,"name":"bytes","nodeType":"ElementaryTypeName","src":"5132:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5093:58:44"},"returnParameters":{"id":41735,"nodeType":"ParameterList","parameters":[],"src":"5188:0:44"},"scope":41828,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":41764,"nodeType":"FunctionDefinition","src":"5445:93:44","nodes":[],"body":{"id":41763,"nodeType":"Block","src":"5508:30:44","nodes":[],"statements":[{"expression":{"id":41761,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41719,"src":"5525:6:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":41760,"id":41762,"nodeType":"Return","src":"5518:13:44"}]},"documentation":{"id":41756,"nodeType":"StructuredDocumentation","src":"5384:56:44","text":" @dev Returns the admin of this proxy."},"implemented":true,"kind":"function","modifiers":[],"name":"_proxyAdmin","nameLocation":"5454:11:44","parameters":{"id":41757,"nodeType":"ParameterList","parameters":[],"src":"5465:2:44"},"returnParameters":{"id":41760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41759,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41764,"src":"5499:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41758,"name":"address","nodeType":"ElementaryTypeName","src":"5499:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5498:9:44"},"scope":41828,"stateMutability":"view","virtual":true,"visibility":"internal"},{"id":41798,"nodeType":"FunctionDefinition","src":"5680:369:44","nodes":[],"body":{"id":41797,"nodeType":"Block","src":"5727:322:44","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41769,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5741:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:6:44","memberName":"sender","nodeType":"MemberAccess","src":"5741:10:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":41771,"name":"_proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41764,"src":"5755:11:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":41772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5755:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5741:27:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41795,"nodeType":"Block","src":"6001:42:44","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":41790,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6015:5:44","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_TransparentUpgradeableProxy_$41828_$","typeString":"type(contract super TransparentUpgradeableProxy)"}},"id":41792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6021:9:44","memberName":"_fallback","nodeType":"MemberAccess","referencedDeclaration":41480,"src":"6015:15:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":41793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6015:17:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41794,"nodeType":"ExpressionStatement","src":"6015:17:44"}]},"id":41796,"nodeType":"IfStatement","src":"5737:306:44","trueBody":{"id":41789,"nodeType":"Block","src":"5770:225:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":41779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41774,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5788:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5792:3:44","memberName":"sig","nodeType":"MemberAccess","src":"5788:7:44","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":41776,"name":"ITransparentUpgradeableProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41714,"src":"5799:28:44","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ITransparentUpgradeableProxy_$41714_$","typeString":"type(contract ITransparentUpgradeableProxy)"}},"id":41777,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5828:16:44","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":41713,"src":"5799:45:44","typeDescriptions":{"typeIdentifier":"t_function_declaration_payable$_t_address_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function ITransparentUpgradeableProxy.upgradeToAndCall(address,bytes calldata) payable"}},"id":41778,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5845:8:44","memberName":"selector","nodeType":"MemberAccess","src":"5799:54:44","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"5788:65:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41787,"nodeType":"Block","src":"5925:60:44","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":41784,"name":"_dispatchUpgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41827,"src":"5943:25:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":41785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5943:27:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41786,"nodeType":"ExpressionStatement","src":"5943:27:44"}]},"id":41788,"nodeType":"IfStatement","src":"5784:201:44","trueBody":{"id":41783,"nodeType":"Block","src":"5855:64:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":41780,"name":"ProxyDeniedAdminAccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41722,"src":"5880:22:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":41781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5880:24:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":41782,"nodeType":"RevertStatement","src":"5873:31:44"}]}}]}}]},"baseFunctions":[41480],"documentation":{"id":41765,"nodeType":"StructuredDocumentation","src":"5544:131:44","text":" @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior."},"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"5689:9:44","overrides":{"id":41767,"nodeType":"OverrideSpecifier","overrides":[],"src":"5718:8:44"},"parameters":{"id":41766,"nodeType":"ParameterList","parameters":[],"src":"5698:2:44"},"returnParameters":{"id":41768,"nodeType":"ParameterList","parameters":[],"src":"5727:0:44"},"scope":41828,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":41827,"nodeType":"FunctionDefinition","src":"6251:217:44","nodes":[],"body":{"id":41826,"nodeType":"Block","src":"6296:172:44","nodes":[],"statements":[{"assignments":[41803,41805],"declarations":[{"constant":false,"id":41803,"mutability":"mutable","name":"newImplementation","nameLocation":"6315:17:44","nodeType":"VariableDeclaration","scope":41826,"src":"6307:25:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41802,"name":"address","nodeType":"ElementaryTypeName","src":"6307:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41805,"mutability":"mutable","name":"data","nameLocation":"6347:4:44","nodeType":"VariableDeclaration","scope":41826,"src":"6334:17:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41804,"name":"bytes","nodeType":"ElementaryTypeName","src":"6334:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":41818,"initialValue":{"arguments":[{"baseExpression":{"expression":{"id":41808,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6366:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6370:4:44","memberName":"data","nodeType":"MemberAccess","src":"6366:8:44","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":41811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexRangeAccess","src":"6366:12:44","startExpression":{"hexValue":"34","id":41810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6375:1:44","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"}},{"components":[{"id":41813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6381:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41812,"name":"address","nodeType":"ElementaryTypeName","src":"6381:7:44","typeDescriptions":{}}},{"id":41815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6390:5:44","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41814,"name":"bytes","nodeType":"ElementaryTypeName","src":"6390:5:44","typeDescriptions":{}}}],"id":41816,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6380:16:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(address),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(address),type(bytes storage pointer))"}],"expression":{"id":41806,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6355:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":41807,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6359:6:44","memberName":"decode","nodeType":"MemberAccess","src":"6355:10:44","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":41817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6355:42:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_bytes_memory_ptr_$","typeString":"tuple(address payable,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6306:91:44"},{"expression":{"arguments":[{"id":41822,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41803,"src":"6437:17:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41823,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41805,"src":"6456:4:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":41819,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41453,"src":"6407:12:44","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$41453_$","typeString":"type(library ERC1967Utils)"}},"id":41821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6420:16:44","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":41268,"src":"6407:29:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":41824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6407:54:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41825,"nodeType":"ExpressionStatement","src":"6407:54:44"}]},"documentation":{"id":41799,"nodeType":"StructuredDocumentation","src":"6055:191:44","text":" @dev Upgrade the implementation of the proxy. See {ERC1967Utils-upgradeToAndCall}.\n Requirements:\n - If `data` is empty, `msg.value` must be zero."},"implemented":true,"kind":"function","modifiers":[],"name":"_dispatchUpgradeToAndCall","nameLocation":"6260:25:44","parameters":{"id":41800,"nodeType":"ParameterList","parameters":[],"src":"6285:2:44"},"returnParameters":{"id":41801,"nodeType":"ParameterList","parameters":[],"src":"6296:0:44"},"scope":41828,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":41716,"name":"ERC1967Proxy","nameLocations":["4279:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":41159,"src":"4279:12:44"},"id":41717,"nodeType":"InheritanceSpecifier","src":"4279:12:44"}],"canonicalName":"TransparentUpgradeableProxy","contractDependencies":[41693],"contractKind":"contract","documentation":{"id":41715,"nodeType":"StructuredDocumentation","src":"952:3286:44","text":" @dev This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance.\n To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n clashing], which can potentially be used in an attack, this contract uses the\n https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n things that go hand in hand:\n 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself.\n 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to\n the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating\n the proxy admin cannot fallback to the target implementation.\n These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a\n dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to\n call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and\n allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative\n interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership.\n NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\n inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch\n mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\n fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\n implementation.\n NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a\n meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract.\n IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an\n immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be\n overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an\n undesirable state where the admin slot is different from the actual admin. Relying on the value of the admin slot\n is generally fine if the implementation is trusted.\n WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the\n compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new\n function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This\n could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency."},"fullyImplemented":true,"linearizedBaseContracts":[41828,41159,41489],"name":"TransparentUpgradeableProxy","nameLocation":"4248:27:44","scope":41829,"usedErrors":[41179,41184,41192,41722,41978,42270],"usedEvents":[40783,40790]}],"license":"MIT"},"id":44} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_logic","type":"address","internalType":"address"},{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_data","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"fallback","stateMutability":"payable"},{"type":"event","name":"AdminChanged","inputs":[{"name":"previousAdmin","type":"address","indexed":false,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidAdmin","inputs":[{"name":"admin","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"ProxyDeniedAdminAccess","inputs":[]}],"bytecode":{"object":"0x60a0604052610a99803803806100148161026b565b92833981016060828203126102675761002c82610290565b61003860208401610290565b604084015190936001600160401b03821161026757019180601f8401121561026757825161006d610068826102a4565b61026b565b9381855260208501926020838301011161026757815f926020809301855e85010152813b15610246577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561022e575f809161012d945190845af43d15610226573d9161011e610068846102a4565b9283523d5f602085013e6102bf565b505b604051906104428083016001600160401b0381118482101761021257602092849261063784396001600160a01b031681520301905ff080156102075760018060a01b0316806080525f80516020610a79833981519152547f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6040805160018060a01b0384168152846020820152a181156101f4576001600160a01b031916175f80516020610a7983398151915255604051610319908161031e82396080518160070152f35b633173bdd160e11b5f525f60045260245ffd5b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b6060916102bf565b505050341561012f5763b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761021257604052565b51906001600160a01b038216820361026757565b6001600160401b03811161021257601f01601f191660200190565b906102e357508051156102d457805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610314575b6102f4575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102ec56fe6080604052337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610066575f356001600160e01b03191663278f794360e11b1461005c576334ad5dbb60e21b5f5260045ffd5b61006461010a565b005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545f9081906001600160a01b0316368280378136915af43d5f803e156100ab573d5ff35b3d5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176100e957604052565b6100af565b67ffffffffffffffff81116100e957601f01601f191660200190565b36600411610193576040366003190112610193576004356001600160a01b03811690819003610193576024359067ffffffffffffffff8211610193573660238301121561019357816004013590610168610163836100ee565b6100c3565b918083523660248286010111610193576020815f92602461019197018387013784010152610197565b565b5f80fd5b90813b1561022b577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610213576102109161024c565b50565b50503461021c57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f8061027e93602081519101845af43d15610281573d9161026f610163846100ee565b9283523d5f602085013e610285565b90565b6060915b906102a9575080511561029a57805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806102da575b6102ba575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102b256fea26469706673582212201edb4fb1bf2eaaf67b77df3fc0311b71bb6a2bd9cdd9532fa802a5e5a245f1c664736f6c634300081a003360803460b857601f61044238819003918201601f19168301916001600160401b0383118484101760bc5780849260209460405283398101031260b857516001600160a01b0381169081900360b857801560a5575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a361037190816100d18239f35b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f803560e01c8063715018a6146102785780638da5cb5b146102515780639623609d1461012e578063ad3cb1cc146100e15763f2fde38b14610051575f80fd5b346100de5760203660031901126100de576004356001600160a01b038116908190036100da5761007f610315565b80156100c65781546001600160a01b03198116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b5080fd5b80fd5b50346100de57806003193601126100de575061012a6040516101046040826102cf565b60058152640352e302e360dc1b60208201526040519182916020835260208301906102f1565b0390f35b506060366003190112610239576004356001600160a01b03811690819003610239576024356001600160a01b038116908190036102395760443567ffffffffffffffff8111610239573660238201121561023957806004013567ffffffffffffffff811161023d57604051916101ae601f8301601f1916602001846102cf565b818352366024838301011161023957815f9260246020930183860137830101526101d6610315565b823b156102395761020c925f9260405180958194829363278f794360e11b845260048401526040602484015260448301906102f1565b039134905af1801561022e57610220575080f35b61022c91505f906102cf565b005b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b34610239575f366003190112610239575f546040516001600160a01b039091168152602090f35b34610239575f36600319011261023957610290610315565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f8019910116810190811067ffffffffffffffff82111761023d57604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b5f546001600160a01b0316330361032857565b63118cdaa760e01b5f523360045260245ffdfea2646970667358221220a66a8d3547be6a913d76cc474a0232562bfb572a8eea897bf2358f237387a78464736f6c634300081a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103","sourceMap":"4239:2231:44:-:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4239:2231:44;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;4239:2231:44;;;;;;;;;;;1758:29:38;;:34;1754:119;;821:66;4239:2231:44;;-1:-1:-1;;;;;;4239:2231:44;-1:-1:-1;;;;;4239:2231:44;;;;;;;;2417:36:38;-1:-1:-1;;2417:36:38;4239:2231:44;;2468:15:38;:11;;-1:-1:-1;4049:25:48;;4091:55;4049:25;;;;;;4239:2231:44;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;4239:2231:44;;;;4091:55:48;:::i;:::-;;2464:148:38;4239:2231:44;;;5215:28;;;;-1:-1:-1;;;;;5215:28:44;;;;;;;;4239:2231;5215:28;;;;;;-1:-1:-1;;;;;4239:2231:44;;;5215:28;;;-1:-1:-1;5215:28:44;;;;;4239:2231;;;;;;5198:46;;;-1:-1:-1;;;;;;;;;;;2878:66:38;3900:43;4239:2231:44;;;;;;;;;;;;;;;;;3900:43:38;3559:22;;3555:91;;-1:-1:-1;;;;;;4239:2231:44;;-1:-1:-1;;;;;;;;;;;4239:2231:44;;;;;;;;;5198:46;4239:2231;;;;;;3555:91:38;3604:31;;;-1:-1:-1;3604:31:38;-1:-1:-1;3604:31:38;4239:2231:44;;-1:-1:-1;3604:31:38;5215:28:44;4239:2231;;;-1:-1:-1;4239:2231:44;;;;;5215:28;4239:2231;;;-1:-1:-1;4239:2231:44;;;;;-1:-1:-1;4239:2231:44;;;;4091:55:48;:::i;2464:148:38:-;6173:9;;;;6169:70;2464:148;6169:70;6209:19;;;-1:-1:-1;6209:19:38;;-1:-1:-1;6209:19:38;1754:119;-1:-1:-1;;;;;1815:47:38;;;-1:-1:-1;;;;;4239:2231:44;;;;1815:47:38;4239:2231:44;;;1815:47:38;4239:2231:44;-1:-1:-1;4239:2231:44;;;;;;;;;-1:-1:-1;;4239:2231:44;;;-1:-1:-1;;;;;4239:2231:44;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;4239:2231:44;;;;;;:::o;:::-;-1:-1:-1;;;;;4239:2231:44;;;;;;-1:-1:-1;;4239:2231:44;;;;:::o;4421:582:48:-;;4593:8;;-1:-1:-1;4239:2231:44;;5674:21:48;:17;;5846:142;;;;;;5670:385;6025:19;;;5694:1;6025:19;;5694:1;6025:19;4589:408;4239:2231:44;;4841:22:48;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:48;4917:24;;;-1:-1:-1;;;;;4239:2231:44;;;;4917:24:48;4239:2231:44;;;4917:24:48;4841:49;4867:18;;;:23;4841:49;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610066575f356001600160e01b03191663278f794360e11b1461005c576334ad5dbb60e21b5f5260045ffd5b61006461010a565b005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545f9081906001600160a01b0316368280378136915af43d5f803e156100ab573d5ff35b3d5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff8111838210176100e957604052565b6100af565b67ffffffffffffffff81116100e957601f01601f191660200190565b36600411610193576040366003190112610193576004356001600160a01b03811690819003610193576024359067ffffffffffffffff8211610193573660238301121561019357816004013590610168610163836100ee565b6100c3565b918083523660248286010111610193576020815f92602461019197018387013784010152610197565b565b5f80fd5b90813b1561022b577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610213576102109161024c565b50565b50503461021c57565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b5f8061027e93602081519101845af43d15610281573d9161026f610163846100ee565b9283523d5f602085013e610285565b90565b6060915b906102a9575080511561029a57805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806102da575b6102ba575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156102b256fea26469706673582212201edb4fb1bf2eaaf67b77df3fc0311b71bb6a2bd9cdd9532fa802a5e5a245f1c664736f6c634300081a0033","sourceMap":"4239:2231:44:-:0;;;5741:10;5525:6;-1:-1:-1;;;;;4239:2231:44;5741:27;4239:2231;;5788:7;;-1:-1:-1;;;;;;5788:7:44;-1:-1:-1;;;5788:65:44;5799:54;;5880:24;;;5788:7;5880:24;;5788:7;5880:24;5784:201;;;:::i;:::-;4239:2231;5737:306;821:66:38;;-1:-1:-1;;;;;;;;;4239:2231:44;1019:819:39;-1:-1:-1;;1019:819:39;;;;;;;-1:-1:-1;1019:819:39;;;;;;-1:-1:-1;1019:819:39;;;-1:-1:-1;1019:819:39;4239:2231:44;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4239:2231:44;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;-1:-1:-1;;4239:2231:44;;;;:::o;6251:217::-;6366:8;6375:1;4239:2231;;;;6366:8;-1:-1:-1;;4239:2231:44;;;;6375:1;4239:2231;-1:-1:-1;;;;;4239:2231:44;;;;;;;;;;;;;;;;6366:8;4239:2231;;;;;;;;6375:1;4239:2231;;;;;;;:::i;:::-;;:::i;:::-;;;;;6366:8;4239:2231;;;;;;;;;;6366:8;4239:2231;;6456:4;4239:2231;;;;;;;;;;6456:4;:::i;:::-;6251:217::o;4239:2231::-;6366:8;4239:2231;;2274:344:38;;1758:29;;:34;1754:119;;821:66;4239:2231:44;;-1:-1:-1;;;;;;4239:2231:44;-1:-1:-1;;;;;4239:2231:44;;;;;;;;2417:36:38;-1:-1:-1;;2417:36:38;4239:2231:44;;2468:15:38;:11;;2499:53;;;:::i;:::-;;2274:344::o;2464:148::-;6173:9;;;6169:70;;2274:344::o;6169:70::-;6209:19;;;1791:1;6209:19;;1791:1;6209:19;1754:119;-1:-1:-1;;;;1791:1:38;1815:47;;;-1:-1:-1;;;;;4239:2231:44;;;;1815:47:38;4239:2231:44;;;1815:47:38;3900:253:48;4049:25;3900:253;4091:55;3900:253;4049:25;;;;;;;;4239:2231:44;;;;;;;;;;:::i;:::-;;;;;4049:25:48;;4239:2231:44;;;4091:55:48;:::i;:::-;3900:253;:::o;4239:2231:44:-;;;4421:582:48;;4593:8;;-1:-1:-1;4239:2231:44;;5674:21:48;:17;;5846:142;;;;;;5670:385;6025:19;;;5694:1;6025:19;;5694:1;6025:19;4589:408;4239:2231:44;;4841:22:48;:49;;;4589:408;4837:119;;4969:17;;:::o;4837:119::-;-1:-1:-1;;;4862:1:48;4917:24;;;-1:-1:-1;;;;;4239:2231:44;;;;4917:24:48;4239:2231:44;;;4917:24:48;4841:49;4867:18;;;:23;4841:49;","linkReferences":{},"immutableReferences":{"41719":[{"start":7,"length":32}]}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProxyDeniedAdminAccess\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself. 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating the proxy admin cannot fallback to the target implementation. These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract. IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an undesirable state where the admin slot is different from the actual admin. Relying on the value of the admin slot is generally fine if the implementation is trusted. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidAdmin(address)\":[{\"details\":\"The `admin` of the proxy is invalid.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"ProxyDeniedAdminAccess()\":[{\"details\":\"The proxy caller is the current admin, and can't fallback to the proxy target.\"}]},\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0x31b7f755099238afdf101d132e356ca59a2f5aa3c9d6957bc320c3a89c6b29a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c1ef7fce6c908e6912cbea81d4655489fb29e328b03502b6dc680a4eda65ae5\",\"dweb:/ipfs/QmQMasWF2fg4DvwYuXto8qvkDYVsrTDmBCgjRPTvn6PgpD\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5\",\"dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol\":{\"keccak256\":\"0x3cfd70b5e57ac16134caf206c6a71ea5ff113bc2032cd6d845231793f5c62995\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://984097ae51f9be9b94d2a3f5be7f284bd525fd9f0a0ccdca34cfaa7f0e1625d1\",\"dweb:/ipfs/QmXSL4rFMM25pJzvuTzN1DX4ddAwTCnmxS2axDwaZyzNHL\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0x11e3f4156c76feda27ffa117c3f624972471124411067e8f02c9a6909f35d035\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://beb0d9fe2c5fae15f1ca8a22b2c8cfaaa75984f6c8a94534ba85f98366caa6a5\",\"dweb:/ipfs/QmQEFQtyLACb6j7XajAT7Z1KzANE6JzqDYMEQeG8yzrfqP\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b\",\"dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"type":"error","name":"ERC1967InvalidAdmin"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"ProxyDeniedAdminAccess"},{"inputs":[{"internalType":"address","name":"previousAdmin","type":"address","indexed":false},{"internalType":"address","name":"newAdmin","type":"address","indexed":false}],"type":"event","name":"AdminChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":"TransparentUpgradeableProxy"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol":{"keccak256":"0x31b7f755099238afdf101d132e356ca59a2f5aa3c9d6957bc320c3a89c6b29a8","urls":["bzz-raw://6c1ef7fce6c908e6912cbea81d4655489fb29e328b03502b6dc680a4eda65ae5","dweb:/ipfs/QmQMasWF2fg4DvwYuXto8qvkDYVsrTDmBCgjRPTvn6PgpD"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x5f3770f82f75d132e210b43c071d3feec1bef13c385d1d799763a366e8bda311","urls":["bzz-raw://3a50b7702cbd525c4a0fd3c36d1e116432b5f645f84cb25e4473dc9c88a917c5","dweb:/ipfs/QmaN5QKZwgypVK3zAwdgXfsygEeauRYa4sSe4x8yKXDRtV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol":{"keccak256":"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd","urls":["bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac","dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol":{"keccak256":"0x3cfd70b5e57ac16134caf206c6a71ea5ff113bc2032cd6d845231793f5c62995","urls":["bzz-raw://984097ae51f9be9b94d2a3f5be7f284bd525fd9f0a0ccdca34cfaa7f0e1625d1","dweb:/ipfs/QmXSL4rFMM25pJzvuTzN1DX4ddAwTCnmxS2axDwaZyzNHL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol":{"keccak256":"0x11e3f4156c76feda27ffa117c3f624972471124411067e8f02c9a6909f35d035","urls":["bzz-raw://beb0d9fe2c5fae15f1ca8a22b2c8cfaaa75984f6c8a94534ba85f98366caa6a5","dweb:/ipfs/QmQEFQtyLACb6j7XajAT7Z1KzANE6JzqDYMEQeG8yzrfqP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x80b4189de089dc632b752b365a16c5063b58cc24da0dd38b82f2c25f56d25c84","urls":["bzz-raw://81e2717e78844156a86733f1cada84dba906ffe03e4957de12ca219c65e9191b","dweb:/ipfs/QmW8vg3AafPJRo7EC75RQJTtjiaYmfPa4U4sqmEuBXXzaP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol","id":41829,"exportedSymbols":{"ERC1967Proxy":[41159],"ERC1967Utils":[41453],"IERC1967":[40796],"ITransparentUpgradeableProxy":[41714],"ProxyAdmin":[41693],"TransparentUpgradeableProxy":[41828]},"nodeType":"SourceUnit","src":"133:6338:44","nodes":[{"id":41695,"nodeType":"PragmaDirective","src":"133:24:44","nodes":[],"literals":["solidity","^","0.8",".20"]},{"id":41697,"nodeType":"ImportDirective","src":"159:57:44","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol","file":"../ERC1967/ERC1967Utils.sol","nameLocation":"-1:-1:-1","scope":41829,"sourceUnit":41454,"symbolAliases":[{"foreign":{"id":41696,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41453,"src":"167:12:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":41699,"nodeType":"ImportDirective","src":"217:57:44","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol","file":"../ERC1967/ERC1967Proxy.sol","nameLocation":"-1:-1:-1","scope":41829,"sourceUnit":41160,"symbolAliases":[{"foreign":{"id":41698,"name":"ERC1967Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41159,"src":"225:12:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":41701,"nodeType":"ImportDirective","src":"275:55:44","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol","file":"../../interfaces/IERC1967.sol","nameLocation":"-1:-1:-1","scope":41829,"sourceUnit":40797,"symbolAliases":[{"foreign":{"id":41700,"name":"IERC1967","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40796,"src":"283:8:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":41703,"nodeType":"ImportDirective","src":"331:44:44","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/transparent/ProxyAdmin.sol","file":"./ProxyAdmin.sol","nameLocation":"-1:-1:-1","scope":41829,"sourceUnit":41694,"symbolAliases":[{"foreign":{"id":41702,"name":"ProxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41693,"src":"339:10:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":41714,"nodeType":"ContractDefinition","src":"823:127:44","nodes":[{"id":41713,"nodeType":"FunctionDefinition","src":"880:68:44","nodes":[],"functionSelector":"4f1ef286","implemented":false,"kind":"function","modifiers":[],"name":"upgradeToAndCall","nameLocation":"889:16:44","parameters":{"id":41711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41713,"src":"906:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41707,"name":"address","nodeType":"ElementaryTypeName","src":"906:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41710,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41713,"src":"915:14:44","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":41709,"name":"bytes","nodeType":"ElementaryTypeName","src":"915:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"905:25:44"},"returnParameters":{"id":41712,"nodeType":"ParameterList","parameters":[],"src":"947:0:44"},"scope":41714,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":41705,"name":"IERC1967","nameLocations":["865:8:44"],"nodeType":"IdentifierPath","referencedDeclaration":40796,"src":"865:8:44"},"id":41706,"nodeType":"InheritanceSpecifier","src":"865:8:44"}],"canonicalName":"ITransparentUpgradeableProxy","contractDependencies":[],"contractKind":"interface","documentation":{"id":41704,"nodeType":"StructuredDocumentation","src":"377:445:44","text":" @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\n does not implement this interface directly, and its upgradeability mechanism is implemented by an internal dispatch\n mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\n include them in the ABI so this interface must be used to interact with it."},"fullyImplemented":false,"linearizedBaseContracts":[41714,40796],"name":"ITransparentUpgradeableProxy","nameLocation":"833:28:44","scope":41829,"usedErrors":[],"usedEvents":[40783,40790,40795]},{"id":41828,"nodeType":"ContractDefinition","src":"4239:2231:44","nodes":[{"id":41719,"nodeType":"VariableDeclaration","src":"4633:32:44","nodes":[],"constant":false,"mutability":"immutable","name":"_admin","nameLocation":"4659:6:44","scope":41828,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41718,"name":"address","nodeType":"ElementaryTypeName","src":"4633:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"id":41722,"nodeType":"ErrorDefinition","src":"4779:31:44","nodes":[],"documentation":{"id":41720,"nodeType":"StructuredDocumentation","src":"4672:102:44","text":" @dev The proxy caller is the current admin, and can't fallback to the proxy target."},"errorSelector":"d2b576ec","name":"ProxyDeniedAdminAccess","nameLocation":"4785:22:44","parameters":{"id":41721,"nodeType":"ParameterList","parameters":[],"src":"4807:2:44"}},{"id":41755,"nodeType":"FunctionDefinition","src":"5082:296:44","nodes":[],"body":{"id":41754,"nodeType":"Block","src":"5188:190:44","nodes":[],"statements":[{"expression":{"id":41745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41736,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41719,"src":"5198:6:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":41742,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41727,"src":"5230:12:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"5215:14:44","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$returns$_t_contract$_ProxyAdmin_$41693_$","typeString":"function (address) returns (contract ProxyAdmin)"},"typeName":{"id":41740,"nodeType":"UserDefinedTypeName","pathNode":{"id":41739,"name":"ProxyAdmin","nameLocations":["5219:10:44"],"nodeType":"IdentifierPath","referencedDeclaration":41693,"src":"5219:10:44"},"referencedDeclaration":41693,"src":"5219:10:44","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$41693","typeString":"contract ProxyAdmin"}}},"id":41743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5215:28:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$41693","typeString":"contract ProxyAdmin"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProxyAdmin_$41693","typeString":"contract ProxyAdmin"}],"id":41738,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5207:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41737,"name":"address","nodeType":"ElementaryTypeName","src":"5207:7:44","typeDescriptions":{}}},"id":41744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5207:37:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5198:46:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41746,"nodeType":"ExpressionStatement","src":"5198:46:44"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":41750,"name":"_proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41764,"src":"5357:11:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":41751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5357:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":41747,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41453,"src":"5332:12:44","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$41453_$","typeString":"type(library ERC1967Utils)"}},"id":41749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5345:11:44","memberName":"changeAdmin","nodeType":"MemberAccess","referencedDeclaration":41335,"src":"5332:24:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":41752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5332:39:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41753,"nodeType":"ExpressionStatement","src":"5332:39:44"}]},"documentation":{"id":41723,"nodeType":"StructuredDocumentation","src":"4816:261:44","text":" @dev Initializes an upgradeable proxy managed by an instance of a {ProxyAdmin} with an `initialOwner`,\n backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in\n {ERC1967Proxy-constructor}."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":41732,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41725,"src":"5173:6:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41733,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41729,"src":"5181:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":41734,"kind":"baseConstructorSpecifier","modifierName":{"id":41731,"name":"ERC1967Proxy","nameLocations":["5160:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":41159,"src":"5160:12:44"},"nodeType":"ModifierInvocation","src":"5160:27:44"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":41730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41725,"mutability":"mutable","name":"_logic","nameLocation":"5102:6:44","nodeType":"VariableDeclaration","scope":41755,"src":"5094:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41724,"name":"address","nodeType":"ElementaryTypeName","src":"5094:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41727,"mutability":"mutable","name":"initialOwner","nameLocation":"5118:12:44","nodeType":"VariableDeclaration","scope":41755,"src":"5110:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41726,"name":"address","nodeType":"ElementaryTypeName","src":"5110:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41729,"mutability":"mutable","name":"_data","nameLocation":"5145:5:44","nodeType":"VariableDeclaration","scope":41755,"src":"5132:18:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41728,"name":"bytes","nodeType":"ElementaryTypeName","src":"5132:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5093:58:44"},"returnParameters":{"id":41735,"nodeType":"ParameterList","parameters":[],"src":"5188:0:44"},"scope":41828,"stateMutability":"payable","virtual":false,"visibility":"public"},{"id":41764,"nodeType":"FunctionDefinition","src":"5445:93:44","nodes":[],"body":{"id":41763,"nodeType":"Block","src":"5508:30:44","nodes":[],"statements":[{"expression":{"id":41761,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41719,"src":"5525:6:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":41760,"id":41762,"nodeType":"Return","src":"5518:13:44"}]},"documentation":{"id":41756,"nodeType":"StructuredDocumentation","src":"5384:56:44","text":" @dev Returns the admin of this proxy."},"implemented":true,"kind":"function","modifiers":[],"name":"_proxyAdmin","nameLocation":"5454:11:44","parameters":{"id":41757,"nodeType":"ParameterList","parameters":[],"src":"5465:2:44"},"returnParameters":{"id":41760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41759,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41764,"src":"5499:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41758,"name":"address","nodeType":"ElementaryTypeName","src":"5499:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5498:9:44"},"scope":41828,"stateMutability":"view","virtual":true,"visibility":"internal"},{"id":41798,"nodeType":"FunctionDefinition","src":"5680:369:44","nodes":[],"body":{"id":41797,"nodeType":"Block","src":"5727:322:44","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41769,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5741:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:6:44","memberName":"sender","nodeType":"MemberAccess","src":"5741:10:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":41771,"name":"_proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41764,"src":"5755:11:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":41772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5755:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5741:27:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41795,"nodeType":"Block","src":"6001:42:44","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":41790,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6015:5:44","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_TransparentUpgradeableProxy_$41828_$","typeString":"type(contract super TransparentUpgradeableProxy)"}},"id":41792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6021:9:44","memberName":"_fallback","nodeType":"MemberAccess","referencedDeclaration":41480,"src":"6015:15:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":41793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6015:17:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41794,"nodeType":"ExpressionStatement","src":"6015:17:44"}]},"id":41796,"nodeType":"IfStatement","src":"5737:306:44","trueBody":{"id":41789,"nodeType":"Block","src":"5770:225:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":41779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41774,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5788:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5792:3:44","memberName":"sig","nodeType":"MemberAccess","src":"5788:7:44","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":41776,"name":"ITransparentUpgradeableProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41714,"src":"5799:28:44","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ITransparentUpgradeableProxy_$41714_$","typeString":"type(contract ITransparentUpgradeableProxy)"}},"id":41777,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5828:16:44","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":41713,"src":"5799:45:44","typeDescriptions":{"typeIdentifier":"t_function_declaration_payable$_t_address_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function ITransparentUpgradeableProxy.upgradeToAndCall(address,bytes calldata) payable"}},"id":41778,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5845:8:44","memberName":"selector","nodeType":"MemberAccess","src":"5799:54:44","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"5788:65:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41787,"nodeType":"Block","src":"5925:60:44","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":41784,"name":"_dispatchUpgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41827,"src":"5943:25:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":41785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5943:27:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41786,"nodeType":"ExpressionStatement","src":"5943:27:44"}]},"id":41788,"nodeType":"IfStatement","src":"5784:201:44","trueBody":{"id":41783,"nodeType":"Block","src":"5855:64:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":41780,"name":"ProxyDeniedAdminAccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41722,"src":"5880:22:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":41781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5880:24:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":41782,"nodeType":"RevertStatement","src":"5873:31:44"}]}}]}}]},"baseFunctions":[41480],"documentation":{"id":41765,"nodeType":"StructuredDocumentation","src":"5544:131:44","text":" @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior."},"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"5689:9:44","overrides":{"id":41767,"nodeType":"OverrideSpecifier","overrides":[],"src":"5718:8:44"},"parameters":{"id":41766,"nodeType":"ParameterList","parameters":[],"src":"5698:2:44"},"returnParameters":{"id":41768,"nodeType":"ParameterList","parameters":[],"src":"5727:0:44"},"scope":41828,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":41827,"nodeType":"FunctionDefinition","src":"6251:217:44","nodes":[],"body":{"id":41826,"nodeType":"Block","src":"6296:172:44","nodes":[],"statements":[{"assignments":[41803,41805],"declarations":[{"constant":false,"id":41803,"mutability":"mutable","name":"newImplementation","nameLocation":"6315:17:44","nodeType":"VariableDeclaration","scope":41826,"src":"6307:25:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41802,"name":"address","nodeType":"ElementaryTypeName","src":"6307:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41805,"mutability":"mutable","name":"data","nameLocation":"6347:4:44","nodeType":"VariableDeclaration","scope":41826,"src":"6334:17:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41804,"name":"bytes","nodeType":"ElementaryTypeName","src":"6334:5:44","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":41818,"initialValue":{"arguments":[{"baseExpression":{"expression":{"id":41808,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6366:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6370:4:44","memberName":"data","nodeType":"MemberAccess","src":"6366:8:44","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":41811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexRangeAccess","src":"6366:12:44","startExpression":{"hexValue":"34","id":41810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6375:1:44","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"}},{"components":[{"id":41813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6381:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41812,"name":"address","nodeType":"ElementaryTypeName","src":"6381:7:44","typeDescriptions":{}}},{"id":41815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6390:5:44","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41814,"name":"bytes","nodeType":"ElementaryTypeName","src":"6390:5:44","typeDescriptions":{}}}],"id":41816,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6380:16:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(address),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr_slice","typeString":"bytes calldata slice"},{"typeIdentifier":"t_tuple$_t_type$_t_address_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(address),type(bytes storage pointer))"}],"expression":{"id":41806,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6355:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":41807,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6359:6:44","memberName":"decode","nodeType":"MemberAccess","src":"6355:10:44","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":41817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6355:42:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_payable_$_t_bytes_memory_ptr_$","typeString":"tuple(address payable,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6306:91:44"},{"expression":{"arguments":[{"id":41822,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41803,"src":"6437:17:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41823,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41805,"src":"6456:4:44","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":41819,"name":"ERC1967Utils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41453,"src":"6407:12:44","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Utils_$41453_$","typeString":"type(library ERC1967Utils)"}},"id":41821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6420:16:44","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":41268,"src":"6407:29:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":41824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6407:54:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41825,"nodeType":"ExpressionStatement","src":"6407:54:44"}]},"documentation":{"id":41799,"nodeType":"StructuredDocumentation","src":"6055:191:44","text":" @dev Upgrade the implementation of the proxy. See {ERC1967Utils-upgradeToAndCall}.\n Requirements:\n - If `data` is empty, `msg.value` must be zero."},"implemented":true,"kind":"function","modifiers":[],"name":"_dispatchUpgradeToAndCall","nameLocation":"6260:25:44","parameters":{"id":41800,"nodeType":"ParameterList","parameters":[],"src":"6285:2:44"},"returnParameters":{"id":41801,"nodeType":"ParameterList","parameters":[],"src":"6296:0:44"},"scope":41828,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":41716,"name":"ERC1967Proxy","nameLocations":["4279:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":41159,"src":"4279:12:44"},"id":41717,"nodeType":"InheritanceSpecifier","src":"4279:12:44"}],"canonicalName":"TransparentUpgradeableProxy","contractDependencies":[41693],"contractKind":"contract","documentation":{"id":41715,"nodeType":"StructuredDocumentation","src":"952:3286:44","text":" @dev This contract implements a proxy that is upgradeable through an associated {ProxyAdmin} instance.\n To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n clashing], which can potentially be used in an attack, this contract uses the\n https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n things that go hand in hand:\n 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n that call matches the {ITransparentUpgradeableProxy-upgradeToAndCall} function exposed by the proxy itself.\n 2. If the admin calls the proxy, it can call the `upgradeToAndCall` function but any other call won't be forwarded to\n the implementation. If the admin tries to call a function on the implementation it will fail with an error indicating\n the proxy admin cannot fallback to the target implementation.\n These properties mean that the admin account can only be used for upgrading the proxy, so it's best if it's a\n dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to\n call a function from the proxy implementation. For this reason, the proxy deploys an instance of {ProxyAdmin} and\n allows upgrades only if they come through it. You should think of the `ProxyAdmin` instance as the administrative\n interface of the proxy, including the ability to change who can trigger upgrades by transferring ownership.\n NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\n inherit from that interface, and instead `upgradeToAndCall` is implicitly implemented using a custom dispatch\n mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\n fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\n implementation.\n NOTE: This proxy does not inherit from {Context} deliberately. The {ProxyAdmin} of this contract won't send a\n meta-transaction in any way, and any other meta-transaction setup should be made in the implementation contract.\n IMPORTANT: This contract avoids unnecessary storage reads by setting the admin only during construction as an\n immutable variable, preventing any changes thereafter. However, the admin slot defined in ERC-1967 can still be\n overwritten by the implementation logic pointed to by this proxy. In such cases, the contract may end up in an\n undesirable state where the admin slot is different from the actual admin. Relying on the value of the admin slot\n is generally fine if the implementation is trusted.\n WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the\n compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new\n function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This\n could render the `upgradeToAndCall` function inaccessible, preventing upgradeability and compromising transparency."},"fullyImplemented":true,"linearizedBaseContracts":[41828,41159,41489],"name":"TransparentUpgradeableProxy","nameLocation":"4248:27:44","scope":41829,"usedErrors":[41179,41184,41192,41722,41978,42270],"usedEvents":[40783,40790]}],"license":"MIT"},"id":44} \ No newline at end of file diff --git a/ethexe/ethereum/WrappedVara.json b/ethexe/ethereum/WrappedVara.json index f5047d175f0..46e72b8c725 100644 --- a/ethexe/ethereum/WrappedVara.json +++ b/ethexe/ethereum/WrappedVara.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burnFrom","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b604051611cc090816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120f578063095ea7b3146111e957806318160ddd146111c057806323b872dd14611188578063313ce5671461116d5780633644e5151461114b57806340c10f191461110e57806342966c68146110f15780636c2eb3501461105757806370a0823114611013578063715018a614610fac57806379cc679014610f7c5780637ecebe0014610f2657806384b0196e14610c525780638da5cb5b14610c1e57806395d89b4114610b24578063a9059cbb14610af3578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112f0565b6101246115b4565b6113ae565b005b5f80fd5b3461012b57604036600319011261012b576101486112f0565b610159610153611306565b91611376565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112f0565b610197611306565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611354565b5190206102636117c2565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611854565b909291926118e1565b6001600160a01b03168481036102ae5750610129935061169d565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112f0565b5f80516020611c6b833981519152549060ff8260401c16159167ffffffffffffffff811680159081610aeb575b6001149081610ae1575b159081610ad8575b50610ac95767ffffffffffffffff1981166001175f80516020611c6b8339815191525582610a9d575b5060405191610369604084611354565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611354565b6005835264575641524160d81b60208401526103ab611829565b6103b3611829565b835167ffffffffffffffff81116107aa576103db5f80516020611b8b8339815191525461131c565b601f8111610a2e575b50602094601f82116001146109b3579481929394955f926109a8575b50508160011b915f199060031b1c1916175f80516020611b8b833981519152555b825167ffffffffffffffff81116107aa576104495f80516020611beb8339815191525461131c565b601f8111610939575b506020601f82116001146108be57819293945f926108b3575b50508160011b915f199060031b1c1916175f80516020611beb833981519152555b610494611829565b61049c611829565b6104a4611829565b6104ad816113ae565b604051916104bc604084611354565b600c83526b57726170706564205661726160a01b60208401526104dd611829565b604051916104ec604084611354565b60018352603160f81b6020840152610502611829565b835167ffffffffffffffff81116107aa5761052a5f80516020611bcb8339815191525461131c565b601f8111610844575b50602094601f82116001146107c9579481929394955f926107be575b50508160011b915f199060031b1c1916175f80516020611bcb833981519152555b825167ffffffffffffffff81116107aa576105985f80516020611c4b8339815191525461131c565b601f811161073b575b506020601f82116001146106c057819293945f926106b5575b50508160011b915f199060031b1c1916175f80516020611c4b833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a25769d3c21bcecceda100000061064591611700565b61064b57005b68ff0000000000000000195f80516020611c6b83398151915254165f80516020611c6b833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f80516020611c4b8339815191525f52805f20915f5b8181106107235750958360019596971061070b575b505050811b015f80516020611c4b833981519152556105db565b01515f1960f88460031b161c191690558480806106f1565b9192602060018192868b0151815501940192016106dc565b5f80516020611c4b8339815191525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c810191602084106107a0575b601f0160051c01905b81811061079557506105a1565b5f8155600101610788565b909150819061077f565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f80516020611bcb8339815191525f52805f20915f5b88811061082c57508360019596979810610814575b505050811b015f80516020611bcb83398151915255610570565b01515f1960f88460031b161c191690558580806107fa565b919260206001819286850151815501940192016107e5565b5f80516020611bcb8339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a9575b601f0160051c01905b81811061089e5750610533565b5f8155600101610891565b9091508190610888565b01519050848061046b565b601f198216905f80516020611beb8339815191525f52805f20915f5b81811061092157509583600195969710610909575b505050811b015f80516020611beb8339815191525561048c565b01515f1960f88460031b161c191690558480806108ef565b9192602060018192868b0151815501940192016108da565b5f80516020611beb8339815191525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099e575b601f0160051c01905b8181106109935750610452565b5f8155600101610986565b909150819061097d565b015190508580610400565b601f198216955f80516020611b8b8339815191525f52805f20915f5b888110610a16575083600195969798106109fe575b505050811b015f80516020611b8b83398151915255610421565b01515f1960f88460031b161c191690558580806109e4565b919260206001819286850151815501940192016109cf565b5f80516020611b8b8339815191525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a93575b601f0160051c01905b818110610a8857506103e4565b5f8155600101610a7b565b9091508190610a72565b68ffffffffffffffffff191668010000000000000001175f80516020611c6b8339815191525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b19610b0f6112f0565b60243590336114e3565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f80516020611beb83398151915254610b508161131c565b8084529060018116908115610bfa5750600114610b90575b610b8c83610b7881850382611354565b6040519182916020835260208301906112cc565b0390f35b5f80516020611beb8339815191525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610be057509091508101602001610b78610b68565b919260018160209254838588010152019101909291610bc8565b60ff191660208086019190915291151560051b84019091019150610b789050610b68565b3461012b575f36600319011261012b575f80516020611c0b833981519152546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efd575b15610ec0576040515f80516020611bcb83398151915254815f610cad8361131c565b8083529260018116908115610ea15750600114610e36575b610cd192500382611354565b6040515f80516020611c4b83398151915254815f610cee8361131c565b8083529260018116908115610e175750600114610dac575b610d1991925092610d5094930382611354565b6020610d5e60405192610d2c8385611354565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112cc565b9085820360408701526112cc565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9557505050500390f35b835185528695509381019392810192600101610d86565b505f80516020611c4b8339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610dfb575050906020610d1992820101610d06565b6020919350806001915483858801015201910190918392610de3565b60209250610d1994915060ff191682840152151560051b820101610d06565b505f80516020611bcb8339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e85575050906020610cd192820101610cc5565b6020919350806001915483858801015201910190918392610e6d565b60209250610cd194915060ff191682840152151560051b820101610cc5565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c8b565b3461012b57602036600319011261012b57610f3f6112f0565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f986112f0565b60243590610fa782338361141f565b6115e7565b3461012b575f36600319011261012b57610fc46115b4565b5f80516020611c0b83398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110346112f0565b165f525f80516020611bab833981519152602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106f6115b4565b5f80516020611c6b8339815191525460ff8160401c1680156110dc575b610ac95760029068ffffffffffffffffff1916175f80516020611c6b833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108c565b3461012b57602036600319011261012b57610129600435336115e7565b3461012b57604036600319011261012b576111276112f0565b61112f6115b4565b6001600160a01b038116156106a2576101299060243590611700565b3461012b575f36600319011261012b5760206111656117c2565b604051908152f35b3461012b575f36600319011261012b57602060405160128152f35b3461012b57606036600319011261012b57610b196111a46112f0565b6111ac611306565b604435916111bb83338361141f565b6114e3565b3461012b575f36600319011261012b5760205f80516020611c2b83398151915254604051908152f35b3461012b57604036600319011261012b57610b196112056112f0565b602435903361169d565b3461012b575f36600319011261012b576040515f5f80516020611b8b8339815191525461123b8161131c565b8084529060018116908115610bfa575060011461126257610b8c83610b7881850382611354565b5f80516020611b8b8339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b257509091508101602001610b78610b68565b91926001816020925483858801015201910190929161129a565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c9216801561134a575b602083101461133657565b634e487b7160e01b5f52602260045260245ffd5b91607f169161132b565b90601f8019910116810190811067ffffffffffffffff8211176107aa57604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140c575f80516020611c0b83398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142a83611376565b60018060a01b0382165f5260205260405f2054925f19840361144d575b50505050565b8284106114c0576001600160a01b038116156114ad576001600160a01b0382161561149a5761147b90611376565b9060018060a01b03165f5260205260405f20910390555f808080611447565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b03169081156115a1576001600160a01b03169182156106a257815f525f80516020611bab83398151915260205260405f205481811061158857817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f80516020611bab83398151915284520360405f2055845f525f80516020611bab833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f80516020611c0b833981519152546001600160a01b031633036115d457565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b031680156115a157805f525f80516020611bab83398151915260205260405f2054838110611683576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020611bab8339815191528452036040862055805f80516020611c2b83398151915254035f80516020611c2b83398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ad576001600160a01b031692831561149a577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ec602092611376565b855f5282528060405f2055604051908152a3565b5f80516020611c2b83398151915254908282018092116117ae575f80516020611c2b833981519152919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178c57805f80516020611c2b83398151915254035f80516020611c2b833981519152555b604051908152a3565b8484525f80516020611bab833981519152825260408420818154019055611783565b634e487b7160e01b5f52601160045260245ffd5b6117ca611955565b6117d2611a82565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182360c082611354565b51902090565b60ff5f80516020611c6b8339815191525460401c161561184557565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d6579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118cb575f516001600160a01b038116156118c157905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561194157806118f3575050565b6001810361190a5763f645eedf60e01b5f5260045ffd5b60028103611925575063fce698f760e01b5f5260045260245ffd5b60031461192f5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f80516020611bcb83398151915254905f816119738461131c565b9182825260208201946001811690815f14611a6657506001146119fb575b61199d92500382611354565b519081156119a9572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d65790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f80516020611bcb8339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4a57505090602061199d92820101611991565b6020919350806001915483858801015201910190918392611a32565b60ff191686525061199d92151560051b82016020019050611991565b6040515f80516020611c4b83398151915254905f81611aa08461131c565b9182825260208201946001811690815f14611b6e5750600114611b03575b611aca92500382611354565b51908115611ad6572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d65790565b505f80516020611c4b8339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b52575050906020611aca92820101611abe565b6020919350806001915483858801015201910190918392611b3a565b60ff1916865250611aca92151560051b82016020019050611abe56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212209da26bb79b9ef65d56e69c8dd0f9b8882c07271218158f84deaaef27e65e2ebb64736f6c634300081a0033","sourceMap":"632:901:82:-:0;;;;;;;8837:64:25;632:901:82;;;;;;7896:76:25;;-1:-1:-1;;;;;;;;;;;632:901:82;;7985:34:25;7981:146;;-1:-1:-1;632:901:82;;;;;;;;;7981:146:25;-1:-1:-1;;;;;;632:901:82;-1:-1:-1;;;;;632:901:82;;;8837:64:25;632:901:82;;;8087:29:25;;632:901:82;;8087:29:25;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:25;;-1:-1:-1;7938:23:25;632:901:82;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120f578063095ea7b3146111e957806318160ddd146111c057806323b872dd14611188578063313ce5671461116d5780633644e5151461114b57806340c10f191461110e57806342966c68146110f15780636c2eb3501461105757806370a0823114611013578063715018a614610fac57806379cc679014610f7c5780637ecebe0014610f2657806384b0196e14610c525780638da5cb5b14610c1e57806395d89b4114610b24578063a9059cbb14610af3578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112f0565b6101246115b4565b6113ae565b005b5f80fd5b3461012b57604036600319011261012b576101486112f0565b610159610153611306565b91611376565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112f0565b610197611306565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611354565b5190206102636117c2565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611854565b909291926118e1565b6001600160a01b03168481036102ae5750610129935061169d565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112f0565b5f80516020611c6b833981519152549060ff8260401c16159167ffffffffffffffff811680159081610aeb575b6001149081610ae1575b159081610ad8575b50610ac95767ffffffffffffffff1981166001175f80516020611c6b8339815191525582610a9d575b5060405191610369604084611354565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611354565b6005835264575641524160d81b60208401526103ab611829565b6103b3611829565b835167ffffffffffffffff81116107aa576103db5f80516020611b8b8339815191525461131c565b601f8111610a2e575b50602094601f82116001146109b3579481929394955f926109a8575b50508160011b915f199060031b1c1916175f80516020611b8b833981519152555b825167ffffffffffffffff81116107aa576104495f80516020611beb8339815191525461131c565b601f8111610939575b506020601f82116001146108be57819293945f926108b3575b50508160011b915f199060031b1c1916175f80516020611beb833981519152555b610494611829565b61049c611829565b6104a4611829565b6104ad816113ae565b604051916104bc604084611354565b600c83526b57726170706564205661726160a01b60208401526104dd611829565b604051916104ec604084611354565b60018352603160f81b6020840152610502611829565b835167ffffffffffffffff81116107aa5761052a5f80516020611bcb8339815191525461131c565b601f8111610844575b50602094601f82116001146107c9579481929394955f926107be575b50508160011b915f199060031b1c1916175f80516020611bcb833981519152555b825167ffffffffffffffff81116107aa576105985f80516020611c4b8339815191525461131c565b601f811161073b575b506020601f82116001146106c057819293945f926106b5575b50508160011b915f199060031b1c1916175f80516020611c4b833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a25769d3c21bcecceda100000061064591611700565b61064b57005b68ff0000000000000000195f80516020611c6b83398151915254165f80516020611c6b833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f80516020611c4b8339815191525f52805f20915f5b8181106107235750958360019596971061070b575b505050811b015f80516020611c4b833981519152556105db565b01515f1960f88460031b161c191690558480806106f1565b9192602060018192868b0151815501940192016106dc565b5f80516020611c4b8339815191525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c810191602084106107a0575b601f0160051c01905b81811061079557506105a1565b5f8155600101610788565b909150819061077f565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f80516020611bcb8339815191525f52805f20915f5b88811061082c57508360019596979810610814575b505050811b015f80516020611bcb83398151915255610570565b01515f1960f88460031b161c191690558580806107fa565b919260206001819286850151815501940192016107e5565b5f80516020611bcb8339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a9575b601f0160051c01905b81811061089e5750610533565b5f8155600101610891565b9091508190610888565b01519050848061046b565b601f198216905f80516020611beb8339815191525f52805f20915f5b81811061092157509583600195969710610909575b505050811b015f80516020611beb8339815191525561048c565b01515f1960f88460031b161c191690558480806108ef565b9192602060018192868b0151815501940192016108da565b5f80516020611beb8339815191525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099e575b601f0160051c01905b8181106109935750610452565b5f8155600101610986565b909150819061097d565b015190508580610400565b601f198216955f80516020611b8b8339815191525f52805f20915f5b888110610a16575083600195969798106109fe575b505050811b015f80516020611b8b83398151915255610421565b01515f1960f88460031b161c191690558580806109e4565b919260206001819286850151815501940192016109cf565b5f80516020611b8b8339815191525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a93575b601f0160051c01905b818110610a8857506103e4565b5f8155600101610a7b565b9091508190610a72565b68ffffffffffffffffff191668010000000000000001175f80516020611c6b8339815191525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b19610b0f6112f0565b60243590336114e3565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f80516020611beb83398151915254610b508161131c565b8084529060018116908115610bfa5750600114610b90575b610b8c83610b7881850382611354565b6040519182916020835260208301906112cc565b0390f35b5f80516020611beb8339815191525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610be057509091508101602001610b78610b68565b919260018160209254838588010152019101909291610bc8565b60ff191660208086019190915291151560051b84019091019150610b789050610b68565b3461012b575f36600319011261012b575f80516020611c0b833981519152546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efd575b15610ec0576040515f80516020611bcb83398151915254815f610cad8361131c565b8083529260018116908115610ea15750600114610e36575b610cd192500382611354565b6040515f80516020611c4b83398151915254815f610cee8361131c565b8083529260018116908115610e175750600114610dac575b610d1991925092610d5094930382611354565b6020610d5e60405192610d2c8385611354565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112cc565b9085820360408701526112cc565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9557505050500390f35b835185528695509381019392810192600101610d86565b505f80516020611c4b8339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610dfb575050906020610d1992820101610d06565b6020919350806001915483858801015201910190918392610de3565b60209250610d1994915060ff191682840152151560051b820101610d06565b505f80516020611bcb8339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e85575050906020610cd192820101610cc5565b6020919350806001915483858801015201910190918392610e6d565b60209250610cd194915060ff191682840152151560051b820101610cc5565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c8b565b3461012b57602036600319011261012b57610f3f6112f0565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f986112f0565b60243590610fa782338361141f565b6115e7565b3461012b575f36600319011261012b57610fc46115b4565b5f80516020611c0b83398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110346112f0565b165f525f80516020611bab833981519152602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106f6115b4565b5f80516020611c6b8339815191525460ff8160401c1680156110dc575b610ac95760029068ffffffffffffffffff1916175f80516020611c6b833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108c565b3461012b57602036600319011261012b57610129600435336115e7565b3461012b57604036600319011261012b576111276112f0565b61112f6115b4565b6001600160a01b038116156106a2576101299060243590611700565b3461012b575f36600319011261012b5760206111656117c2565b604051908152f35b3461012b575f36600319011261012b57602060405160128152f35b3461012b57606036600319011261012b57610b196111a46112f0565b6111ac611306565b604435916111bb83338361141f565b6114e3565b3461012b575f36600319011261012b5760205f80516020611c2b83398151915254604051908152f35b3461012b57604036600319011261012b57610b196112056112f0565b602435903361169d565b3461012b575f36600319011261012b576040515f5f80516020611b8b8339815191525461123b8161131c565b8084529060018116908115610bfa575060011461126257610b8c83610b7881850382611354565b5f80516020611b8b8339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b257509091508101602001610b78610b68565b91926001816020925483858801015201910190929161129a565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c9216801561134a575b602083101461133657565b634e487b7160e01b5f52602260045260245ffd5b91607f169161132b565b90601f8019910116810190811067ffffffffffffffff8211176107aa57604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140c575f80516020611c0b83398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142a83611376565b60018060a01b0382165f5260205260405f2054925f19840361144d575b50505050565b8284106114c0576001600160a01b038116156114ad576001600160a01b0382161561149a5761147b90611376565b9060018060a01b03165f5260205260405f20910390555f808080611447565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b03169081156115a1576001600160a01b03169182156106a257815f525f80516020611bab83398151915260205260405f205481811061158857817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f80516020611bab83398151915284520360405f2055845f525f80516020611bab833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f80516020611c0b833981519152546001600160a01b031633036115d457565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b031680156115a157805f525f80516020611bab83398151915260205260405f2054838110611683576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020611bab8339815191528452036040862055805f80516020611c2b83398151915254035f80516020611c2b83398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ad576001600160a01b031692831561149a577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ec602092611376565b855f5282528060405f2055604051908152a3565b5f80516020611c2b83398151915254908282018092116117ae575f80516020611c2b833981519152919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178c57805f80516020611c2b83398151915254035f80516020611c2b833981519152555b604051908152a3565b8484525f80516020611bab833981519152825260408420818154019055611783565b634e487b7160e01b5f52601160045260245ffd5b6117ca611955565b6117d2611a82565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182360c082611354565b51902090565b60ff5f80516020611c6b8339815191525460401c161561184557565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d6579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118cb575f516001600160a01b038116156118c157905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561194157806118f3575050565b6001810361190a5763f645eedf60e01b5f5260045ffd5b60028103611925575063fce698f760e01b5f5260045260245ffd5b60031461192f5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f80516020611bcb83398151915254905f816119738461131c565b9182825260208201946001811690815f14611a6657506001146119fb575b61199d92500382611354565b519081156119a9572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d65790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f80516020611bcb8339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4a57505090602061199d92820101611991565b6020919350806001915483858801015201910190918392611a32565b60ff191686525061199d92151560051b82016020019050611991565b6040515f80516020611c4b83398151915254905f81611aa08461131c565b9182825260208201946001811690815f14611b6e5750600114611b03575b611aca92500382611354565b51908115611ad6572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d65790565b505f80516020611c4b8339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b52575050906020611aca92820101611abe565b6020919350806001915483858801015201910190918392611b3a565b60ff1916865250611aca92151560051b82016020019050611abe56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212209da26bb79b9ef65d56e69c8dd0f9b8882c07271218158f84deaaef27e65e2ebb64736f6c634300081a0033","sourceMap":"632:901:82:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;2357:1:24;632:901:82;;:::i;:::-;2303:62:24;;:::i;:::-;2357:1;:::i;:::-;632:901:82;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;;;:::i;:::-;4867:20:26;632:901:82;;:::i;:::-;4867:20:26;;:::i;:::-;:29;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;;-1:-1:-1;632:901:82;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;2301:15:28;;:26;2297:97;;6967:25:55;7021:8;632:901:82;;;;;;;;;;;;972:64:30;632:901:82;;;;;;;;;;;;;;;;2435:78:28;632:901:82;2435:78:28;;632:901:82;1279:95:28;632:901:82;;1279:95:28;632:901:82;1279:95:28;;632:901:82;;;;;;;;;1279:95:28;;632:901:82;1279:95:28;632:901:82;1279:95:28;;632:901:82;;1279:95:28;;632:901:82;;1279:95:28;;632:901:82;;2435:78:28;;;632:901:82;2435:78:28;;:::i;:::-;632:901:82;2425:89:28;;4094:23:31;;:::i;:::-;3515:233:56;632:901:82;3515:233:56;;-1:-1:-1;;;3515:233:56;;;;;;;;;;632:901:82;;;3515:233:56;632:901:82;;3515:233:56;;6967:25:55;:::i;:::-;7021:8;;;;;:::i;:::-;-1:-1:-1;;;;;632:901:82;2638:15:28;;;2634:88;;10117:4:26;;;;;:::i;2634:88:28:-;2676:35;;;;;632:901:82;2676:35:28;632:901:82;;;;;;2676:35:28;2297:97;2350:33;;;;632:901:82;2350:33:28;632:901:82;;;;2350:33:28;632:901:82;;;;;;-1:-1:-1;;632:901:82;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;4301:16:25;632:901:82;;;;4726:16:25;;:34;;;;632:901:82;4805:1:25;4790:16;:50;;;;632:901:82;4855:13:25;:30;;;;632:901:82;4851:91:25;;;-1:-1:-1;;632:901:82;;4805:1:25;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;4979:67:25;;632:901:82;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:901:82;;;;;;;;;;;:::i;:::-;821:14;632:901;;-1:-1:-1;;;632:901:82;821:14;;;6893:76:25;;:::i;:::-;;;:::i;:::-;632:901:82;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;2600:7:26;632:901:82;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;2600:7:26;632:901:82;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;6893:76:25;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;6961:1;;;:::i;:::-;632:901:82;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:901:82;;;;6893:76:25;;:::i;:::-;632:901:82;;;;;;;:::i;:::-;4805:1:25;632:901:82;;-1:-1:-1;;;632:901:82;;;;6893:76:25;;:::i;:::-;632:901:82;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;2600:7:26;632:901:82;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;2600:7:26;632:901:82;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;2806:64:31;632:901:82;;;3902:16:31;632:901:82;-1:-1:-1;;;;;632:901:82;;8803:21:26;8799:91;;941:9:82;8928:5:26;;;:::i;:::-;5066:101:25;;632:901:82;5066:101:25;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;5142:14:25;632:901:82;;;4805:1:25;632:901:82;;5142:14:25;632:901:82;8799:91:26;8847:32;;;632:901:82;8847:32:26;632:901:82;;;;;8847:32:26;632:901:82;;;;-1:-1:-1;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;2600:7:26;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;821:14;632:901;;;;;;;;;;;;821:14;632:901;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;2600:7:26;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;821:14;632:901;;;;;;;;;;;;821:14;632:901;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;2600:7:26;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;821:14;632:901;;;;;;;;;;;;821:14;632:901;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;2600:7:26;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;821:14;632:901;;;;;;;;;;;;821:14;632:901;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;4979:67:25;-1:-1:-1;;632:901:82;;;-1:-1:-1;;;;;;;;;;;632:901:82;4979:67:25;;;4851:91;6498:23;;;632:901:82;4908:23:25;632:901:82;;4908:23:25;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:25;;4726:34;;;-1:-1:-1;4726:34:25;;632:901:82;;;;;;-1:-1:-1;;632:901:82;;;;4616:5:26;632:901:82;;:::i;:::-;;;966:10:29;;4616:5:26;:::i;:::-;632:901:82;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;-1:-1:-1;632:901:82;;;;;;;-1:-1:-1;632:901:82;;-1:-1:-1;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:901:82;;-1:-1:-1;632:901:82;;;;;;;;-1:-1:-1;;632:901:82;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;-1:-1:-1;;;;;632:901:82;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;2806:64:31;632:901:82;5777:18:31;:43;;;632:901:82;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5965:13:31;632:901:82;;;;6000:4:31;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;632:901:82;;;;;;;;;;;;-1:-1:-1;;;632:901:82;;;;;;;5777:43:31;632:901:82;5799:16:31;632:901:82;5799:21:31;5777:43;;632:901:82;;;;;;-1:-1:-1;;632:901:82;;;;;;:::i;:::-;;;;;;;;;972:64:30;632:901:82;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;1479:5:27;632:901:82;;:::i;:::-;;;966:10:29;1448:5:27;966:10:29;;1448:5:27;;:::i;:::-;1479;:::i;632:901:82:-;;;;;;-1:-1:-1;;632:901:82;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:901:82;;-1:-1:-1;;;;;;632:901:82;;;;;;;-1:-1:-1;;;;;632:901:82;3975:40:24;632:901:82;;3975:40:24;632:901:82;;;;;;;-1:-1:-1;;632:901:82;;;;-1:-1:-1;;;;;632:901:82;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;6431:44:25;;;;632:901:82;6427:105:25;;1427:1:82;632:901;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;6656:20:25;632:901:82;;;1427:1;632:901;;6656:20:25;632:901:82;6431:44:25;632:901:82;1427:1;632:901;;;6450:25:25;;6431:44;;632:901:82;;;;;;-1:-1:-1;;632:901:82;;;;1005:5:27;632:901:82;;966:10:29;1005:5:27;:::i;632:901:82:-;;;;;;-1:-1:-1;;632:901:82;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;632:901:82;;8803:21:26;8799:91;;8928:5;632:901:82;;;8928:5:26;;:::i;632:901:82:-;;;;;;-1:-1:-1;;632:901:82;;;;;4094:23:31;;:::i;:::-;632:901:82;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;;;;3827:2:26;632:901:82;;;;;;;;;-1:-1:-1;;632:901:82;;;;6198:5:26;632:901:82;;:::i;:::-;;;:::i;:::-;;;966:10:29;6162:5:26;966:10:29;;6162:5:26;;:::i;:::-;6198;:::i;632:901:82:-;;;;;;-1:-1:-1;;632:901:82;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;10117:4:26;632:901:82;;:::i;:::-;;;966:10:29;;10117:4:26;:::i;632:901:82:-;;;;;;-1:-1:-1;;632:901:82;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;-1:-1:-1;632:901:82;;;;;;;-1:-1:-1;632:901:82;;-1:-1:-1;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:901:82;;;;;;;;-1:-1:-1;;632:901:82;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:901:82;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:901:82;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;632:901:82;;;;;4867:13:26;632:901:82;;;;;;:::o;3405:215:24:-;-1:-1:-1;;;;;632:901:82;3489:22:24;;3485:91;;-1:-1:-1;;;;;;;;;;;632:901:82;;-1:-1:-1;;;;;;632:901:82;;;;;;;-1:-1:-1;;;;;632:901:82;3975:40:24;-1:-1:-1;;3975:40:24;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;632:901:82;;3509:1:24;3534:31;11745:477:26;;;4867:20;;;:::i;:::-;632:901:82;;;;;;;-1:-1:-1;632:901:82;;;;-1:-1:-1;632:901:82;;;;;11910:37:26;;11906:310;;11745:477;;;;;:::o;11906:310::-;11967:24;;;11963:130;;-1:-1:-1;;;;;632:901:82;;11141:19:26;11137:89;;-1:-1:-1;;;;;632:901:82;;11239:21:26;11235:90;;11334:20;;;:::i;:::-;:29;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;-1:-1:-1;632:901:82;;;;;11906:310:26;;;;;;11235:90;11283:31;;;-1:-1:-1;11283:31:26;-1:-1:-1;11283:31:26;632:901:82;;-1:-1:-1;11283:31:26;11137:89;11183:32;;;-1:-1:-1;11183:32:26;-1:-1:-1;11183:32:26;632:901:82;;-1:-1:-1;11183:32:26;11963:130;12018:60;;;;;;-1:-1:-1;12018:60:26;632:901:82;;;;;;12018:60:26;632:901:82;;;;;;-1:-1:-1;12018:60:26;6605:300;-1:-1:-1;;;;;632:901:82;;6688:18:26;;6684:86;;-1:-1:-1;;;;;632:901:82;;6783:16:26;;6779:86;;632:901:82;6704:1:26;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;;6704:1:26;632:901:82;;7609:19:26;;;7605:115;;632:901:82;8358:25:26;632:901:82;;;;6704:1:26;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;;;6704:1:26;632:901:82;;;6704:1:26;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;;6704:1:26;632:901:82;;;;;;;;;;;;8358:25:26;6605:300::o;7605:115::-;7655:50;;;;6704:1;7655:50;;632:901:82;;;;;;6704:1:26;7655:50;6684:86;6729:30;;;6704:1;6729:30;6704:1;6729:30;632:901:82;;6704:1:26;6729:30;2658:162:24;-1:-1:-1;;;;;;;;;;;632:901:82;-1:-1:-1;;;;;632:901:82;966:10:29;2717:23:24;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:24;966:10:29;2763:40:24;632:901:82;;-1:-1:-1;2763:40:24;9259:206:26;;;;-1:-1:-1;;;;;632:901:82;9329:21:26;;9325:89;;632:901:82;9348:1:26;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;;9348:1:26;632:901:82;;7609:19:26;;;7605:115;;632:901:82;;9348:1:26;632:901:82;;8358:25:26;632:901:82;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;8358:25:26;9259:206::o;7605:115::-;7655:50;;;;;9348:1;7655:50;;632:901:82;;;;;;9348:1:26;7655:50;10976:487;;-1:-1:-1;;;;;632:901:82;;;11141:19:26;;11137:89;;-1:-1:-1;;;;;632:901:82;;11239:21:26;;11235:90;;11415:31;11334:20;;632:901:82;11334:20:26;;:::i;:::-;632:901:82;-1:-1:-1;632:901:82;;;;;-1:-1:-1;632:901:82;;;;;;;11415:31:26;10976:487::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;-1:-1:-1;;;;;632:901:82;;;;8358:25:26;;632:901:82;;7918:16:26;632:901:82;;;-1:-1:-1;;;;;;;;;;;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;7914:429:26;632:901:82;;;;;8358:25:26;7220:1170::o;7914:429::-;632:901:82;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;7914:429:26;;632:901:82;;;;;941:9;;;;;632:901;941:9;4130:191:31;4243:17;;:::i;:::-;4262:20;;:::i;:::-;632:901:82;;4221:92:31;;;;632:901:82;2073:95:31;632:901:82;;;2073:95:31;;632:901:82;2073:95:31;;;632:901:82;4284:13:31;2073:95;;;632:901:82;4307:4:31;2073:95;;;632:901:82;2073:95:31;4221:92;;;;;;:::i;:::-;632:901:82;4211:103:31;;4130:191;:::o;7084:141:25:-;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;;;7150:18:25;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:25;;-1:-1:-1;7191:17:25;5140:1530:55;;;6199:66;6186:79;;6182:164;;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;;;;;;;;;;6457:24:55;;;;;;;;;-1:-1:-1;6457:24:55;-1:-1:-1;;;;;632:901:82;;6495:20:55;6491:113;;6614:49;-1:-1:-1;6614:49:55;-1:-1:-1;5140:1530:55;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:55;6457:24;6531:62;-1:-1:-1;6531:62:55;:::o;6457:24::-;632:901:82;;;-1:-1:-1;632:901:82;;;;;6182:164:55;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o;7196:532::-;632:901:82;;;;;;7282:29:55;;;7327:7;;:::o;7278:444::-;632:901:82;7378:38:55;;632:901:82;;7439:23:55;;;7291:20;7439:23;632:901:82;7291:20:55;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;632:901:82;;;7291:20:55;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;632:901:82;;;7291:20:55;7679:32;632:901:82;;;;7291:20:55;632:901:82;;;;;7291:20:55;632:901:82;7058:687:31;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7230:22:31;;;;7275;7268:29;:::o;7226:513::-;-1:-1:-1;;2806:64:31;632:901:82;7603:15:31;;;;7638:17;:::o;7599:130::-;7694:20;7701:13;7694:20;:::o;632:901:82:-;-1:-1:-1;;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;-1:-1:-1;632:901:82;;;;;;;;;;;-1:-1:-1;632:901:82;;7966:723:31;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;8147:25:31;;;;8195;8188:32;:::o;8143:540::-;-1:-1:-1;;8507:16:31;632:901:82;8541:18:31;;;;8579:20;:::o;632:901:82:-;-1:-1:-1;;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;-1:-1:-1;632:901:82;;;;;;;;;;;-1:-1:-1;632:901:82;","linkReferences":{}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","eip712Domain()":"84b0196e","initialize(address)":"c4d66de8","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","owner()":"8da5cb5b","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WrappedVara.sol\":\"WrappedVara\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152\",\"dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"keccak256\":\"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f\",\"dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x6ff1ff6f25ebee2f778775b26d81610a04e37993bc06a7f54e0c768330ef1506\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f1fa246b88750fe26a30495db812eb2788dba8e5191a11f9dedb37bd6f4d883\",\"dweb:/ipfs/QmZUcDXW1a9xEAfQwqUG6NXQ6AwCs5gfv89NkwzTCeDify\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol\":{\"keccak256\":\"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827\",\"dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x06d93977f6018359ef432d3b649b7c92efb0326d3ddbbeaf08648105bdcacbbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8574fdb7ffb0e8e9841ba6394432d3e31b496a0953baa6f64837062fb29b02e\",\"dweb:/ipfs/QmdjZNdnBUVzzWXMYXsFmHdvh2KL5Lnc1uBfvbuqPNU9X3\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x9cac1f97ecc92043dd19235d6677e40cf6bac382886a94f7a80a957846b24229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1e0c924e0edfdfd4abceeb552d99f1cd95c0d387b38ccb1f67c583607e3d155\",\"dweb:/ipfs/QmZAi6qKa66zuS3jyEhsQR9bBNnZe1wSognYqw9nvseyUz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xe9d36d0c892aea68546d53f21e02223f7f542295c10110a0764336f9ffeab6d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://34d4d72a89193f4d5223763e6d871443fb32a22d6024566843f4ee42eed68bdd\",\"dweb:/ipfs/Qmbsc6kJJNhrkNXP7g7KeqzRETQEvzSXg3ZmJmVLhaEahB\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/WrappedVara.sol\":{\"keccak256\":\"0x546b478734d72773f420a95e83f146771966ea29f4448e8ff9c7a739d13bba43\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e61793dfd06dfc3393a06527a7ca1c51aeb0a273bbfcc5d10f966cfd5f98e0b4\",\"dweb:/ipfs/Qmed9Ksq1uscNucYVuccr3NigGgYgJ5vFqEXvEGLrjTmoJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burnFrom"},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"burn(uint256)":{"details":"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}."},"burnFrom(address,uint256)":{"details":"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`."},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"See {IERC-5267}."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"owner()":{"details":"Returns the address of the current owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/WrappedVara.sol":"WrappedVara"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72","urls":["bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152","dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"keccak256":"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f","urls":["bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f","dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol":{"keccak256":"0x6ff1ff6f25ebee2f778775b26d81610a04e37993bc06a7f54e0c768330ef1506","urls":["bzz-raw://6f1fa246b88750fe26a30495db812eb2788dba8e5191a11f9dedb37bd6f4d883","dweb:/ipfs/QmZUcDXW1a9xEAfQwqUG6NXQ6AwCs5gfv89NkwzTCeDify"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol":{"keccak256":"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4","urls":["bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827","dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol":{"keccak256":"0x06d93977f6018359ef432d3b649b7c92efb0326d3ddbbeaf08648105bdcacbbf","urls":["bzz-raw://c8574fdb7ffb0e8e9841ba6394432d3e31b496a0953baa6f64837062fb29b02e","dweb:/ipfs/QmdjZNdnBUVzzWXMYXsFmHdvh2KL5Lnc1uBfvbuqPNU9X3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol":{"keccak256":"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92","urls":["bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a","dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x9cac1f97ecc92043dd19235d6677e40cf6bac382886a94f7a80a957846b24229","urls":["bzz-raw://a1e0c924e0edfdfd4abceeb552d99f1cd95c0d387b38ccb1f67c583607e3d155","dweb:/ipfs/QmZAi6qKa66zuS3jyEhsQR9bBNnZe1wSognYqw9nvseyUz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xe9d36d0c892aea68546d53f21e02223f7f542295c10110a0764336f9ffeab6d1","urls":["bzz-raw://34d4d72a89193f4d5223763e6d871443fb32a22d6024566843f4ee42eed68bdd","dweb:/ipfs/Qmbsc6kJJNhrkNXP7g7KeqzRETQEvzSXg3ZmJmVLhaEahB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/WrappedVara.sol":{"keccak256":"0x546b478734d72773f420a95e83f146771966ea29f4448e8ff9c7a739d13bba43","urls":["bzz-raw://e61793dfd06dfc3393a06527a7ca1c51aeb0a273bbfcc5d10f966cfd5f98e0b4","dweb:/ipfs/Qmed9Ksq1uscNucYVuccr3NigGgYgJ5vFqEXvEGLrjTmoJ"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/WrappedVara.sol","id":56095,"exportedSymbols":{"ERC20BurnableUpgradeable":[39957],"ERC20PermitUpgradeable":[40126],"ERC20Upgradeable":[39895],"Initializable":[39278],"OwnableUpgradeable":[39024],"WrappedVara":[56094]},"nodeType":"SourceUnit","src":"39:1495:82","nodes":[{"id":55998,"nodeType":"PragmaDirective","src":"39:24:82","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":56000,"nodeType":"ImportDirective","src":"65:96:82","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":56095,"sourceUnit":39279,"symbolAliases":[{"foreign":{"id":55999,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39278,"src":"73:13:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56002,"nodeType":"ImportDirective","src":"162:102:82","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","nameLocation":"-1:-1:-1","scope":56095,"sourceUnit":39896,"symbolAliases":[{"foreign":{"id":56001,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39895,"src":"170:16:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56004,"nodeType":"ImportDirective","src":"265:133:82","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":56095,"sourceUnit":39958,"symbolAliases":[{"foreign":{"id":56003,"name":"ERC20BurnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39957,"src":"273:24:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56006,"nodeType":"ImportDirective","src":"399:101:82","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":56095,"sourceUnit":39025,"symbolAliases":[{"foreign":{"id":56005,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39024,"src":"407:18:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56008,"nodeType":"ImportDirective","src":"501:129:82","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol","nameLocation":"-1:-1:-1","scope":56095,"sourceUnit":40127,"symbolAliases":[{"foreign":{"id":56007,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40126,"src":"509:22:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56094,"nodeType":"ContractDefinition","src":"632:901:82","nodes":[{"id":56021,"nodeType":"VariableDeclaration","src":"784:51:82","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_NAME","nameLocation":"808:10:82","scope":56094,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":56019,"name":"string","nodeType":"ElementaryTypeName","src":"784:6:82","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"577261707065642056617261","id":56020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"821:14:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_985e2e9885ca23de2896caee5fad5adf116e2558361aa44c502ff8b2c1b2a41b","typeString":"literal_string \"Wrapped Vara\""},"value":"Wrapped Vara"},"visibility":"private"},{"id":56024,"nodeType":"VariableDeclaration","src":"841:46:82","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_SYMBOL","nameLocation":"865:12:82","scope":56094,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":56022,"name":"string","nodeType":"ElementaryTypeName","src":"841:6:82","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"5756415241","id":56023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"880:7:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_203a7c23d1b412674989fae6808de72f52c6953d49ac548796ba3c05451693a4","typeString":"literal_string \"WVARA\""},"value":"WVARA"},"visibility":"private"},{"id":56027,"nodeType":"VariableDeclaration","src":"893:57:82","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_INITIAL_SUPPLY","nameLocation":"918:20:82","scope":56094,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56025,"name":"uint256","nodeType":"ElementaryTypeName","src":"893:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"315f3030305f303030","id":56026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"941:9:82","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1_000_000"},"visibility":"private"},{"id":56035,"nodeType":"FunctionDefinition","src":"1010:53:82","nodes":[],"body":{"id":56034,"nodeType":"Block","src":"1024:39:82","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":56031,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39246,"src":"1034:20:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":56032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1034:22:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56033,"nodeType":"ExpressionStatement","src":"1034:22:82"}]},"documentation":{"id":56028,"nodeType":"StructuredDocumentation","src":"957:48:82","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":56029,"nodeType":"ParameterList","parameters":[],"src":"1021:2:82"},"returnParameters":{"id":56030,"nodeType":"ParameterList","parameters":[],"src":"1024:0:82"},"scope":56094,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56069,"nodeType":"FunctionDefinition","src":"1069:297:82","nodes":[],"body":{"id":56068,"nodeType":"Block","src":"1130:236:82","nodes":[],"statements":[{"expression":{"arguments":[{"id":56043,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56021,"src":"1153:10:82","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":56044,"name":"TOKEN_SYMBOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56024,"src":"1165:12:82","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":56042,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39346,"src":"1140:12:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":56045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1140:38:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56046,"nodeType":"ExpressionStatement","src":"1140:38:82"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":56047,"name":"__ERC20Burnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39916,"src":"1188:20:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":56048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1188:22:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56049,"nodeType":"ExpressionStatement","src":"1188:22:82"},{"expression":{"arguments":[{"id":56051,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56037,"src":"1235:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56050,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38884,"src":"1220:14:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":56052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1220:28:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56053,"nodeType":"ExpressionStatement","src":"1220:28:82"},{"expression":{"arguments":[{"id":56055,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56021,"src":"1277:10:82","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":56054,"name":"__ERC20Permit_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40013,"src":"1258:18:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":56056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1258:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56057,"nodeType":"ExpressionStatement","src":"1258:30:82"},{"expression":{"arguments":[{"id":56059,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56037,"src":"1305:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56060,"name":"TOKEN_INITIAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56027,"src":"1319:20:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":56061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1342:2:82","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":56062,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39415,"src":"1348:8:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint8_$","typeString":"function () view returns (uint8)"}},"id":56063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1348:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1342:16:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1319:39:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56058,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39727,"src":"1299:5:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":56066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1299:60:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56067,"nodeType":"ExpressionStatement","src":"1299:60:82"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":56040,"kind":"modifierInvocation","modifierName":{"id":56039,"name":"initializer","nameLocations":["1118:11:82"],"nodeType":"IdentifierPath","referencedDeclaration":39132,"src":"1118:11:82"},"nodeType":"ModifierInvocation","src":"1118:11:82"}],"name":"initialize","nameLocation":"1078:10:82","parameters":{"id":56038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56037,"mutability":"mutable","name":"initialOwner","nameLocation":"1097:12:82","nodeType":"VariableDeclaration","scope":56069,"src":"1089:20:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56036,"name":"address","nodeType":"ElementaryTypeName","src":"1089:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1088:22:82"},"returnParameters":{"id":56041,"nodeType":"ParameterList","parameters":[],"src":"1130:0:82"},"scope":56094,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56078,"nodeType":"FunctionDefinition","src":"1372:60:82","nodes":[],"body":{"id":56077,"nodeType":"Block","src":"1430:2:82","nodes":[],"statements":[]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":56072,"kind":"modifierInvocation","modifierName":{"id":56071,"name":"onlyOwner","nameLocations":["1403:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"1403:9:82"},"nodeType":"ModifierInvocation","src":"1403:9:82"},{"arguments":[{"hexValue":"32","id":56074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1427:1:82","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":56075,"kind":"modifierInvocation","modifierName":{"id":56073,"name":"reinitializer","nameLocations":["1413:13:82"],"nodeType":"IdentifierPath","referencedDeclaration":39179,"src":"1413:13:82"},"nodeType":"ModifierInvocation","src":"1413:16:82"}],"name":"reinitialize","nameLocation":"1381:12:82","parameters":{"id":56070,"nodeType":"ParameterList","parameters":[],"src":"1393:2:82"},"returnParameters":{"id":56076,"nodeType":"ParameterList","parameters":[],"src":"1430:0:82"},"scope":56094,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56093,"nodeType":"FunctionDefinition","src":"1438:93:82","nodes":[],"body":{"id":56092,"nodeType":"Block","src":"1497:34:82","nodes":[],"statements":[{"expression":{"arguments":[{"id":56088,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56080,"src":"1513:2:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56089,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56082,"src":"1517:6:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56087,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39727,"src":"1507:5:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":56090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1507:17:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56091,"nodeType":"ExpressionStatement","src":"1507:17:82"}]},"functionSelector":"40c10f19","implemented":true,"kind":"function","modifiers":[{"id":56085,"kind":"modifierInvocation","modifierName":{"id":56084,"name":"onlyOwner","nameLocations":["1487:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"1487:9:82"},"nodeType":"ModifierInvocation","src":"1487:9:82"}],"name":"mint","nameLocation":"1447:4:82","parameters":{"id":56083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56080,"mutability":"mutable","name":"to","nameLocation":"1460:2:82","nodeType":"VariableDeclaration","scope":56093,"src":"1452:10:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56079,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56082,"mutability":"mutable","name":"amount","nameLocation":"1472:6:82","nodeType":"VariableDeclaration","scope":56093,"src":"1464:14:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56081,"name":"uint256","nodeType":"ElementaryTypeName","src":"1464:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1451:28:82"},"returnParameters":{"id":56086,"nodeType":"ParameterList","parameters":[],"src":"1497:0:82"},"scope":56094,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":56009,"name":"Initializable","nameLocations":["660:13:82"],"nodeType":"IdentifierPath","referencedDeclaration":39278,"src":"660:13:82"},"id":56010,"nodeType":"InheritanceSpecifier","src":"660:13:82"},{"baseName":{"id":56011,"name":"ERC20Upgradeable","nameLocations":["679:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":39895,"src":"679:16:82"},"id":56012,"nodeType":"InheritanceSpecifier","src":"679:16:82"},{"baseName":{"id":56013,"name":"ERC20BurnableUpgradeable","nameLocations":["701:24:82"],"nodeType":"IdentifierPath","referencedDeclaration":39957,"src":"701:24:82"},"id":56014,"nodeType":"InheritanceSpecifier","src":"701:24:82"},{"baseName":{"id":56015,"name":"OwnableUpgradeable","nameLocations":["731:18:82"],"nodeType":"IdentifierPath","referencedDeclaration":39024,"src":"731:18:82"},"id":56016,"nodeType":"InheritanceSpecifier","src":"731:18:82"},{"baseName":{"id":56017,"name":"ERC20PermitUpgradeable","nameLocations":["755:22:82"],"nodeType":"IdentifierPath","referencedDeclaration":40126,"src":"755:22:82"},"id":56018,"nodeType":"InheritanceSpecifier","src":"755:22:82"}],"canonicalName":"WrappedVara","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[56094,40126,40283,40627,40821,41968,39024,39957,39895,40863,41932,41906,40172,39278],"name":"WrappedVara","nameLocation":"641:11:82","scope":56095,"usedErrors":[38860,38865,39041,39044,39992,39999,40186,40833,40838,40843,40852,40857,40862,43050,43055,43060],"usedEvents":[38871,39049,40801,41840,41849]}],"license":"UNLICENSED"},"id":82} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"burnFrom","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"eip712Domain","inputs":[],"outputs":[{"name":"fields","type":"bytes1","internalType":"bytes1"},{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"verifyingContract","type":"address","internalType":"address"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"extensions","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EIP712DomainChanged","inputs":[],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC2612ExpiredSignature","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC2612InvalidSigner","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAccountNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"currentNonce","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b604051611cc090816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120f578063095ea7b3146111e957806318160ddd146111c057806323b872dd14611188578063313ce5671461116d5780633644e5151461114b57806340c10f191461110e57806342966c68146110f15780636c2eb3501461105757806370a0823114611013578063715018a614610fac57806379cc679014610f7c5780637ecebe0014610f2657806384b0196e14610c525780638da5cb5b14610c1e57806395d89b4114610b24578063a9059cbb14610af3578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112f0565b6101246115b4565b6113ae565b005b5f80fd5b3461012b57604036600319011261012b576101486112f0565b610159610153611306565b91611376565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112f0565b610197611306565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611354565b5190206102636117c2565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611854565b909291926118e1565b6001600160a01b03168481036102ae5750610129935061169d565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112f0565b5f80516020611c6b833981519152549060ff8260401c16159167ffffffffffffffff811680159081610aeb575b6001149081610ae1575b159081610ad8575b50610ac95767ffffffffffffffff1981166001175f80516020611c6b8339815191525582610a9d575b5060405191610369604084611354565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611354565b6005835264575641524160d81b60208401526103ab611829565b6103b3611829565b835167ffffffffffffffff81116107aa576103db5f80516020611b8b8339815191525461131c565b601f8111610a2e575b50602094601f82116001146109b3579481929394955f926109a8575b50508160011b915f199060031b1c1916175f80516020611b8b833981519152555b825167ffffffffffffffff81116107aa576104495f80516020611beb8339815191525461131c565b601f8111610939575b506020601f82116001146108be57819293945f926108b3575b50508160011b915f199060031b1c1916175f80516020611beb833981519152555b610494611829565b61049c611829565b6104a4611829565b6104ad816113ae565b604051916104bc604084611354565b600c83526b57726170706564205661726160a01b60208401526104dd611829565b604051916104ec604084611354565b60018352603160f81b6020840152610502611829565b835167ffffffffffffffff81116107aa5761052a5f80516020611bcb8339815191525461131c565b601f8111610844575b50602094601f82116001146107c9579481929394955f926107be575b50508160011b915f199060031b1c1916175f80516020611bcb833981519152555b825167ffffffffffffffff81116107aa576105985f80516020611c4b8339815191525461131c565b601f811161073b575b506020601f82116001146106c057819293945f926106b5575b50508160011b915f199060031b1c1916175f80516020611c4b833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a25769d3c21bcecceda100000061064591611700565b61064b57005b68ff0000000000000000195f80516020611c6b83398151915254165f80516020611c6b833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f80516020611c4b8339815191525f52805f20915f5b8181106107235750958360019596971061070b575b505050811b015f80516020611c4b833981519152556105db565b01515f1960f88460031b161c191690558480806106f1565b9192602060018192868b0151815501940192016106dc565b5f80516020611c4b8339815191525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c810191602084106107a0575b601f0160051c01905b81811061079557506105a1565b5f8155600101610788565b909150819061077f565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f80516020611bcb8339815191525f52805f20915f5b88811061082c57508360019596979810610814575b505050811b015f80516020611bcb83398151915255610570565b01515f1960f88460031b161c191690558580806107fa565b919260206001819286850151815501940192016107e5565b5f80516020611bcb8339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a9575b601f0160051c01905b81811061089e5750610533565b5f8155600101610891565b9091508190610888565b01519050848061046b565b601f198216905f80516020611beb8339815191525f52805f20915f5b81811061092157509583600195969710610909575b505050811b015f80516020611beb8339815191525561048c565b01515f1960f88460031b161c191690558480806108ef565b9192602060018192868b0151815501940192016108da565b5f80516020611beb8339815191525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099e575b601f0160051c01905b8181106109935750610452565b5f8155600101610986565b909150819061097d565b015190508580610400565b601f198216955f80516020611b8b8339815191525f52805f20915f5b888110610a16575083600195969798106109fe575b505050811b015f80516020611b8b83398151915255610421565b01515f1960f88460031b161c191690558580806109e4565b919260206001819286850151815501940192016109cf565b5f80516020611b8b8339815191525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a93575b601f0160051c01905b818110610a8857506103e4565b5f8155600101610a7b565b9091508190610a72565b68ffffffffffffffffff191668010000000000000001175f80516020611c6b8339815191525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b19610b0f6112f0565b60243590336114e3565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f80516020611beb83398151915254610b508161131c565b8084529060018116908115610bfa5750600114610b90575b610b8c83610b7881850382611354565b6040519182916020835260208301906112cc565b0390f35b5f80516020611beb8339815191525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610be057509091508101602001610b78610b68565b919260018160209254838588010152019101909291610bc8565b60ff191660208086019190915291151560051b84019091019150610b789050610b68565b3461012b575f36600319011261012b575f80516020611c0b833981519152546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efd575b15610ec0576040515f80516020611bcb83398151915254815f610cad8361131c565b8083529260018116908115610ea15750600114610e36575b610cd192500382611354565b6040515f80516020611c4b83398151915254815f610cee8361131c565b8083529260018116908115610e175750600114610dac575b610d1991925092610d5094930382611354565b6020610d5e60405192610d2c8385611354565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112cc565b9085820360408701526112cc565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9557505050500390f35b835185528695509381019392810192600101610d86565b505f80516020611c4b8339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610dfb575050906020610d1992820101610d06565b6020919350806001915483858801015201910190918392610de3565b60209250610d1994915060ff191682840152151560051b820101610d06565b505f80516020611bcb8339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e85575050906020610cd192820101610cc5565b6020919350806001915483858801015201910190918392610e6d565b60209250610cd194915060ff191682840152151560051b820101610cc5565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c8b565b3461012b57602036600319011261012b57610f3f6112f0565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f986112f0565b60243590610fa782338361141f565b6115e7565b3461012b575f36600319011261012b57610fc46115b4565b5f80516020611c0b83398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110346112f0565b165f525f80516020611bab833981519152602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106f6115b4565b5f80516020611c6b8339815191525460ff8160401c1680156110dc575b610ac95760029068ffffffffffffffffff1916175f80516020611c6b833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108c565b3461012b57602036600319011261012b57610129600435336115e7565b3461012b57604036600319011261012b576111276112f0565b61112f6115b4565b6001600160a01b038116156106a2576101299060243590611700565b3461012b575f36600319011261012b5760206111656117c2565b604051908152f35b3461012b575f36600319011261012b57602060405160128152f35b3461012b57606036600319011261012b57610b196111a46112f0565b6111ac611306565b604435916111bb83338361141f565b6114e3565b3461012b575f36600319011261012b5760205f80516020611c2b83398151915254604051908152f35b3461012b57604036600319011261012b57610b196112056112f0565b602435903361169d565b3461012b575f36600319011261012b576040515f5f80516020611b8b8339815191525461123b8161131c565b8084529060018116908115610bfa575060011461126257610b8c83610b7881850382611354565b5f80516020611b8b8339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b257509091508101602001610b78610b68565b91926001816020925483858801015201910190929161129a565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c9216801561134a575b602083101461133657565b634e487b7160e01b5f52602260045260245ffd5b91607f169161132b565b90601f8019910116810190811067ffffffffffffffff8211176107aa57604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140c575f80516020611c0b83398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142a83611376565b60018060a01b0382165f5260205260405f2054925f19840361144d575b50505050565b8284106114c0576001600160a01b038116156114ad576001600160a01b0382161561149a5761147b90611376565b9060018060a01b03165f5260205260405f20910390555f808080611447565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b03169081156115a1576001600160a01b03169182156106a257815f525f80516020611bab83398151915260205260405f205481811061158857817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f80516020611bab83398151915284520360405f2055845f525f80516020611bab833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f80516020611c0b833981519152546001600160a01b031633036115d457565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b031680156115a157805f525f80516020611bab83398151915260205260405f2054838110611683576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020611bab8339815191528452036040862055805f80516020611c2b83398151915254035f80516020611c2b83398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ad576001600160a01b031692831561149a577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ec602092611376565b855f5282528060405f2055604051908152a3565b5f80516020611c2b83398151915254908282018092116117ae575f80516020611c2b833981519152919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178c57805f80516020611c2b83398151915254035f80516020611c2b833981519152555b604051908152a3565b8484525f80516020611bab833981519152825260408420818154019055611783565b634e487b7160e01b5f52601160045260245ffd5b6117ca611955565b6117d2611a82565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182360c082611354565b51902090565b60ff5f80516020611c6b8339815191525460401c161561184557565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d6579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118cb575f516001600160a01b038116156118c157905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561194157806118f3575050565b6001810361190a5763f645eedf60e01b5f5260045ffd5b60028103611925575063fce698f760e01b5f5260045260245ffd5b60031461192f5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f80516020611bcb83398151915254905f816119738461131c565b9182825260208201946001811690815f14611a6657506001146119fb575b61199d92500382611354565b519081156119a9572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d65790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f80516020611bcb8339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4a57505090602061199d92820101611991565b6020919350806001915483858801015201910190918392611a32565b60ff191686525061199d92151560051b82016020019050611991565b6040515f80516020611c4b83398151915254905f81611aa08461131c565b9182825260208201946001811690815f14611b6e5750600114611b03575b611aca92500382611354565b51908115611ad6572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d65790565b505f80516020611c4b8339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b52575050906020611aca92820101611abe565b6020919350806001915483858801015201910190918392611b3a565b60ff1916865250611aca92151560051b82016020019050611abe56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212207c01710bc450b8bcdeda1ea230921ccc8081b1aba057bcb3f67d3d95cb5fa00c64736f6c634300081a0033","sourceMap":"632:901:82:-:0;;;;;;;8837:64:25;632:901:82;;;;;;7896:76:25;;-1:-1:-1;;;;;;;;;;;632:901:82;;7985:34:25;7981:146;;-1:-1:-1;632:901:82;;;;;;;;;7981:146:25;-1:-1:-1;;;;;;632:901:82;-1:-1:-1;;;;;632:901:82;;;8837:64:25;632:901:82;;;8087:29:25;;632:901:82;;8087:29:25;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:25;;-1:-1:-1;7938:23:25;632:901:82;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461120f578063095ea7b3146111e957806318160ddd146111c057806323b872dd14611188578063313ce5671461116d5780633644e5151461114b57806340c10f191461110e57806342966c68146110f15780636c2eb3501461105757806370a0823114611013578063715018a614610fac57806379cc679014610f7c5780637ecebe0014610f2657806384b0196e14610c525780638da5cb5b14610c1e57806395d89b4114610b24578063a9059cbb14610af3578063c4d66de8146102d8578063d505accf14610176578063dd62ed3e1461012f5763f2fde38b14610100575f80fd5b3461012b57602036600319011261012b5761012961011c6112f0565b6101246115b4565b6113ae565b005b5f80fd5b3461012b57604036600319011261012b576101486112f0565b610159610153611306565b91611376565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461012b5760e036600319011261012b5761018f6112f0565b610197611306565b604435906064359260843560ff8116810361012b578442116102c55761028a6102939160018060a01b03841696875f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260405f20908154916001830190556040519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c984528a604084015260018060a01b038916606084015289608084015260a083015260c082015260c0815261025860e082611354565b5190206102636117c2565b906040519161190160f01b83526002830152602282015260c43591604260a4359220611854565b909291926118e1565b6001600160a01b03168481036102ae5750610129935061169d565b84906325c0072360e11b5f5260045260245260445ffd5b8463313c898160e11b5f5260045260245ffd5b3461012b57602036600319011261012b576102f16112f0565b5f80516020611c6b833981519152549060ff8260401c16159167ffffffffffffffff811680159081610aeb575b6001149081610ae1575b159081610ad8575b50610ac95767ffffffffffffffff1981166001175f80516020611c6b8339815191525582610a9d575b5060405191610369604084611354565b600c83526b57726170706564205661726160a01b602084015260405191610391604084611354565b6005835264575641524160d81b60208401526103ab611829565b6103b3611829565b835167ffffffffffffffff81116107aa576103db5f80516020611b8b8339815191525461131c565b601f8111610a2e575b50602094601f82116001146109b3579481929394955f926109a8575b50508160011b915f199060031b1c1916175f80516020611b8b833981519152555b825167ffffffffffffffff81116107aa576104495f80516020611beb8339815191525461131c565b601f8111610939575b506020601f82116001146108be57819293945f926108b3575b50508160011b915f199060031b1c1916175f80516020611beb833981519152555b610494611829565b61049c611829565b6104a4611829565b6104ad816113ae565b604051916104bc604084611354565b600c83526b57726170706564205661726160a01b60208401526104dd611829565b604051916104ec604084611354565b60018352603160f81b6020840152610502611829565b835167ffffffffffffffff81116107aa5761052a5f80516020611bcb8339815191525461131c565b601f8111610844575b50602094601f82116001146107c9579481929394955f926107be575b50508160011b915f199060031b1c1916175f80516020611bcb833981519152555b825167ffffffffffffffff81116107aa576105985f80516020611c4b8339815191525461131c565b601f811161073b575b506020601f82116001146106c057819293945f926106b5575b50508160011b915f199060031b1c1916175f80516020611c4b833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008190557fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556001600160a01b038116156106a25769d3c21bcecceda100000061064591611700565b61064b57005b68ff0000000000000000195f80516020611c6b83398151915254165f80516020611c6b833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b63ec442f0560e01b5f525f60045260245ffd5b0151905084806105ba565b601f198216905f80516020611c4b8339815191525f52805f20915f5b8181106107235750958360019596971061070b575b505050811b015f80516020611c4b833981519152556105db565b01515f1960f88460031b161c191690558480806106f1565b9192602060018192868b0151815501940192016106dc565b5f80516020611c4b8339815191525f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f830160051c810191602084106107a0575b601f0160051c01905b81811061079557506105a1565b5f8155600101610788565b909150819061077f565b634e487b7160e01b5f52604160045260245ffd5b01519050858061054f565b601f198216955f80516020611bcb8339815191525f52805f20915f5b88811061082c57508360019596979810610814575b505050811b015f80516020611bcb83398151915255610570565b01515f1960f88460031b161c191690558580806107fa565b919260206001819286850151815501940192016107e5565b5f80516020611bcb8339815191525f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f830160051c810191602084106108a9575b601f0160051c01905b81811061089e5750610533565b5f8155600101610891565b9091508190610888565b01519050848061046b565b601f198216905f80516020611beb8339815191525f52805f20915f5b81811061092157509583600195969710610909575b505050811b015f80516020611beb8339815191525561048c565b01515f1960f88460031b161c191690558480806108ef565b9192602060018192868b0151815501940192016108da565b5f80516020611beb8339815191525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f830160051c8101916020841061099e575b601f0160051c01905b8181106109935750610452565b5f8155600101610986565b909150819061097d565b015190508580610400565b601f198216955f80516020611b8b8339815191525f52805f20915f5b888110610a16575083600195969798106109fe575b505050811b015f80516020611b8b83398151915255610421565b01515f1960f88460031b161c191690558580806109e4565b919260206001819286850151815501940192016109cf565b5f80516020611b8b8339815191525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f830160051c81019160208410610a93575b601f0160051c01905b818110610a8857506103e4565b5f8155600101610a7b565b9091508190610a72565b68ffffffffffffffffff191668010000000000000001175f80516020611c6b8339815191525582610359565b63f92ee8a960e01b5f5260045ffd5b90501584610330565b303b159150610328565b84915061031e565b3461012b57604036600319011261012b57610b19610b0f6112f0565b60243590336114e3565b602060405160018152f35b3461012b575f36600319011261012b576040515f5f80516020611beb83398151915254610b508161131c565b8084529060018116908115610bfa5750600114610b90575b610b8c83610b7881850382611354565b6040519182916020835260208301906112cc565b0390f35b5f80516020611beb8339815191525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210610be057509091508101602001610b78610b68565b919260018160209254838588010152019101909291610bc8565b60ff191660208086019190915291151560051b84019091019150610b789050610b68565b3461012b575f36600319011261012b575f80516020611c0b833981519152546040516001600160a01b039091168152602090f35b3461012b575f36600319011261012b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610efd575b15610ec0576040515f80516020611bcb83398151915254815f610cad8361131c565b8083529260018116908115610ea15750600114610e36575b610cd192500382611354565b6040515f80516020611c4b83398151915254815f610cee8361131c565b8083529260018116908115610e175750600114610dac575b610d1991925092610d5094930382611354565b6020610d5e60405192610d2c8385611354565b5f84525f368137604051958695600f60f81b875260e08588015260e08701906112cc565b9085820360408701526112cc565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d9557505050500390f35b835185528695509381019392810192600101610d86565b505f80516020611c4b8339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310610dfb575050906020610d1992820101610d06565b6020919350806001915483858801015201910190918392610de3565b60209250610d1994915060ff191682840152151560051b820101610d06565b505f80516020611bcb8339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310610e85575050906020610cd192820101610cc5565b6020919350806001915483858801015201910190918392610e6d565b60209250610cd194915060ff191682840152151560051b820101610cc5565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c8b565b3461012b57602036600319011261012b57610f3f6112f0565b60018060a01b03165f527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052602060405f2054604051908152f35b3461012b57604036600319011261012b57610129610f986112f0565b60243590610fa782338361141f565b6115e7565b3461012b575f36600319011261012b57610fc46115b4565b5f80516020611c0b83398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461012b57602036600319011261012b576001600160a01b036110346112f0565b165f525f80516020611bab833981519152602052602060405f2054604051908152f35b3461012b575f36600319011261012b5761106f6115b4565b5f80516020611c6b8339815191525460ff8160401c1680156110dc575b610ac95760029068ffffffffffffffffff1916175f80516020611c6b833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160028152a1005b50600267ffffffffffffffff8216101561108c565b3461012b57602036600319011261012b57610129600435336115e7565b3461012b57604036600319011261012b576111276112f0565b61112f6115b4565b6001600160a01b038116156106a2576101299060243590611700565b3461012b575f36600319011261012b5760206111656117c2565b604051908152f35b3461012b575f36600319011261012b57602060405160128152f35b3461012b57606036600319011261012b57610b196111a46112f0565b6111ac611306565b604435916111bb83338361141f565b6114e3565b3461012b575f36600319011261012b5760205f80516020611c2b83398151915254604051908152f35b3461012b57604036600319011261012b57610b196112056112f0565b602435903361169d565b3461012b575f36600319011261012b576040515f5f80516020611b8b8339815191525461123b8161131c565b8084529060018116908115610bfa575060011461126257610b8c83610b7881850382611354565b5f80516020611b8b8339815191525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b8082106112b257509091508101602001610b78610b68565b91926001816020925483858801015201910190929161129a565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361012b57565b602435906001600160a01b038216820361012b57565b90600182811c9216801561134a575b602083101461133657565b634e487b7160e01b5f52602260045260245ffd5b91607f169161132b565b90601f8019910116810190811067ffffffffffffffff8211176107aa57604052565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b6001600160a01b0316801561140c575f80516020611c0b83398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b919061142a83611376565b60018060a01b0382165f5260205260405f2054925f19840361144d575b50505050565b8284106114c0576001600160a01b038116156114ad576001600160a01b0382161561149a5761147b90611376565b9060018060a01b03165f5260205260405f20910390555f808080611447565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b03169081156115a1576001600160a01b03169182156106a257815f525f80516020611bab83398151915260205260405f205481811061158857817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f80516020611bab83398151915284520360405f2055845f525f80516020611bab833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b5f80516020611c0b833981519152546001600160a01b031633036115d457565b63118cdaa760e01b5f523360045260245ffd5b9091906001600160a01b031680156115a157805f525f80516020611bab83398151915260205260405f2054838110611683576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f80516020611bab8339815191528452036040862055805f80516020611c2b83398151915254035f80516020611c2b83398151915255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b916001600160a01b0383169182156114ad576001600160a01b031692831561149a577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916116ec602092611376565b855f5282528060405f2055604051908152a3565b5f80516020611c2b83398151915254908282018092116117ae575f80516020611c2b833981519152919091556001600160a01b0316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020908461178c57805f80516020611c2b83398151915254035f80516020611c2b833981519152555b604051908152a3565b8484525f80516020611bab833981519152825260408420818154019055611783565b634e487b7160e01b5f52601160045260245ffd5b6117ca611955565b6117d2611a82565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261182360c082611354565b51902090565b60ff5f80516020611c6b8339815191525460401c161561184557565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116118d6579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156118cb575f516001600160a01b038116156118c157905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600481101561194157806118f3575050565b6001810361190a5763f645eedf60e01b5f5260045ffd5b60028103611925575063fce698f760e01b5f5260045260245ffd5b60031461192f5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b6040515f80516020611bcb83398151915254905f816119738461131c565b9182825260208201946001811690815f14611a6657506001146119fb575b61199d92500382611354565b519081156119a9572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156119d65790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b505f80516020611bcb8339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310611a4a57505090602061199d92820101611991565b6020919350806001915483858801015201910190918392611a32565b60ff191686525061199d92151560051b82016020019050611991565b6040515f80516020611c4b83398151915254905f81611aa08461131c565b9182825260208201946001811690815f14611b6e5750600114611b03575b611aca92500382611354565b51908115611ad6572090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156119d65790565b505f80516020611c4b8339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310611b52575050906020611aca92820101611abe565b6020919350806001915483858801015201910190918392611b3a565b60ff1916865250611aca92151560051b82016020019050611abe56fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10252c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace049016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212207c01710bc450b8bcdeda1ea230921ccc8081b1aba057bcb3f67d3d95cb5fa00c64736f6c634300081a0033","sourceMap":"632:901:82:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;2357:1:24;632:901:82;;:::i;:::-;2303:62:24;;:::i;:::-;2357:1;:::i;:::-;632:901:82;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;;;:::i;:::-;4867:20:26;632:901:82;;:::i;:::-;4867:20:26;;:::i;:::-;:29;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;;-1:-1:-1;632:901:82;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;2301:15:28;;:26;2297:97;;6967:25:55;7021:8;632:901:82;;;;;;;;;;;;972:64:30;632:901:82;;;;;;;;;;;;;;;;2435:78:28;632:901:82;2435:78:28;;632:901:82;1279:95:28;632:901:82;;1279:95:28;632:901:82;1279:95:28;;632:901:82;;;;;;;;;1279:95:28;;632:901:82;1279:95:28;632:901:82;1279:95:28;;632:901:82;;1279:95:28;;632:901:82;;1279:95:28;;632:901:82;;2435:78:28;;;632:901:82;2435:78:28;;:::i;:::-;632:901:82;2425:89:28;;4094:23:31;;:::i;:::-;3515:233:56;632:901:82;3515:233:56;;-1:-1:-1;;;3515:233:56;;;;;;;;;;632:901:82;;;3515:233:56;632:901:82;;3515:233:56;;6967:25:55;:::i;:::-;7021:8;;;;;:::i;:::-;-1:-1:-1;;;;;632:901:82;2638:15:28;;;2634:88;;10117:4:26;;;;;:::i;2634:88:28:-;2676:35;;;;;632:901:82;2676:35:28;632:901:82;;;;;;2676:35:28;2297:97;2350:33;;;;632:901:82;2350:33:28;632:901:82;;;;2350:33:28;632:901:82;;;;;;-1:-1:-1;;632:901:82;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;4301:16:25;632:901:82;;;;4726:16:25;;:34;;;;632:901:82;4805:1:25;4790:16;:50;;;;632:901:82;4855:13:25;:30;;;;632:901:82;4851:91:25;;;-1:-1:-1;;632:901:82;;4805:1:25;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;4979:67:25;;632:901:82;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:901:82;;;;;;;;;;;:::i;:::-;821:14;632:901;;-1:-1:-1;;;632:901:82;821:14;;;6893:76:25;;:::i;:::-;;;:::i;:::-;632:901:82;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;2600:7:26;632:901:82;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;2600:7:26;632:901:82;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;6893:76:25;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;6961:1;;;:::i;:::-;632:901:82;;;;;;;:::i;:::-;;;;-1:-1:-1;;;632:901:82;;;;6893:76:25;;:::i;:::-;632:901:82;;;;;;;:::i;:::-;4805:1:25;632:901:82;;-1:-1:-1;;;632:901:82;;;;6893:76:25;;:::i;:::-;632:901:82;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;2600:7:26;632:901:82;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;2600:7:26;632:901:82;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;2806:64:31;632:901:82;;;3902:16:31;632:901:82;-1:-1:-1;;;;;632:901:82;;8803:21:26;8799:91;;941:9:82;8928:5:26;;;:::i;:::-;5066:101:25;;632:901:82;5066:101:25;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;5142:14:25;632:901:82;;;4805:1:25;632:901:82;;5142:14:25;632:901:82;8799:91:26;8847:32;;;632:901:82;8847:32:26;632:901:82;;;;;8847:32:26;632:901:82;;;;-1:-1:-1;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;2600:7:26;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;821:14;632:901;;;;;;;;;;;;821:14;632:901;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;2600:7:26;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;821:14;632:901;;;;;;;;;;;;821:14;632:901;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;2600:7:26;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;821:14;632:901;;;;;;;;;;;;821:14;632:901;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;2600:7:26;632:901:82;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;821:14;632:901;;;;;;;;;;;;821:14;632:901;;;;;;;;;;;;;;;;4805:1:25;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;4979:67:25;-1:-1:-1;;632:901:82;;;-1:-1:-1;;;;;;;;;;;632:901:82;4979:67:25;;;4851:91;6498:23;;;632:901:82;4908:23:25;632:901:82;;4908:23:25;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:25;;4726:34;;;-1:-1:-1;4726:34:25;;632:901:82;;;;;;-1:-1:-1;;632:901:82;;;;4616:5:26;632:901:82;;:::i;:::-;;;966:10:29;;4616:5:26;:::i;:::-;632:901:82;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;-1:-1:-1;632:901:82;;;;;;;-1:-1:-1;632:901:82;;-1:-1:-1;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:901:82;;-1:-1:-1;632:901:82;;;;;;;;-1:-1:-1;;632:901:82;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;-1:-1:-1;;;;;632:901:82;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;2806:64:31;632:901:82;5777:18:31;:43;;;632:901:82;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5965:13:31;632:901:82;;;;6000:4:31;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;632:901:82;;;;;;;;;;;;-1:-1:-1;;;632:901:82;;;;;;;5777:43:31;632:901:82;5799:16:31;632:901:82;5799:21:31;5777:43;;632:901:82;;;;;;-1:-1:-1;;632:901:82;;;;;;:::i;:::-;;;;;;;;;972:64:30;632:901:82;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;1479:5:27;632:901:82;;:::i;:::-;;;966:10:29;1448:5:27;966:10:29;;1448:5:27;;:::i;:::-;1479;:::i;632:901:82:-;;;;;;-1:-1:-1;;632:901:82;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:901:82;;-1:-1:-1;;;;;;632:901:82;;;;;;;-1:-1:-1;;;;;632:901:82;3975:40:24;632:901:82;;3975:40:24;632:901:82;;;;;;;-1:-1:-1;;632:901:82;;;;-1:-1:-1;;;;;632:901:82;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;6431:44:25;;;;632:901:82;6427:105:25;;1427:1:82;632:901;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;6656:20:25;632:901:82;;;1427:1;632:901;;6656:20:25;632:901:82;6431:44:25;632:901:82;1427:1;632:901;;;6450:25:25;;6431:44;;632:901:82;;;;;;-1:-1:-1;;632:901:82;;;;1005:5:27;632:901:82;;966:10:29;1005:5:27;:::i;632:901:82:-;;;;;;-1:-1:-1;;632:901:82;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;632:901:82;;8803:21:26;8799:91;;8928:5;632:901:82;;;8928:5:26;;:::i;632:901:82:-;;;;;;-1:-1:-1;;632:901:82;;;;;4094:23:31;;:::i;:::-;632:901:82;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;;;;3827:2:26;632:901:82;;;;;;;;;-1:-1:-1;;632:901:82;;;;6198:5:26;632:901:82;;:::i;:::-;;;:::i;:::-;;;966:10:29;6162:5:26;966:10:29;;6162:5:26;;:::i;:::-;6198;:::i;632:901:82:-;;;;;;-1:-1:-1;;632:901:82;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;;10117:4:26;632:901:82;;:::i;:::-;;;966:10:29;;10117:4:26;:::i;632:901:82:-;;;;;;-1:-1:-1;;632:901:82;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;-1:-1:-1;632:901:82;;;;;;;-1:-1:-1;632:901:82;;-1:-1:-1;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;632:901:82;;;;;;;;-1:-1:-1;;632:901:82;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:901:82;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;632:901:82;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;632:901:82;;;;;4867:13:26;632:901:82;;;;;;:::o;3405:215:24:-;-1:-1:-1;;;;;632:901:82;3489:22:24;;3485:91;;-1:-1:-1;;;;;;;;;;;632:901:82;;-1:-1:-1;;;;;;632:901:82;;;;;;;-1:-1:-1;;;;;632:901:82;3975:40:24;-1:-1:-1;;3975:40:24;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;632:901:82;;3509:1:24;3534:31;11745:477:26;;;4867:20;;;:::i;:::-;632:901:82;;;;;;;-1:-1:-1;632:901:82;;;;-1:-1:-1;632:901:82;;;;;11910:37:26;;11906:310;;11745:477;;;;;:::o;11906:310::-;11967:24;;;11963:130;;-1:-1:-1;;;;;632:901:82;;11141:19:26;11137:89;;-1:-1:-1;;;;;632:901:82;;11239:21:26;11235:90;;11334:20;;;:::i;:::-;:29;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;-1:-1:-1;632:901:82;;;;;11906:310:26;;;;;;11235:90;11283:31;;;-1:-1:-1;11283:31:26;-1:-1:-1;11283:31:26;632:901:82;;-1:-1:-1;11283:31:26;11137:89;11183:32;;;-1:-1:-1;11183:32:26;-1:-1:-1;11183:32:26;632:901:82;;-1:-1:-1;11183:32:26;11963:130;12018:60;;;;;;-1:-1:-1;12018:60:26;632:901:82;;;;;;12018:60:26;632:901:82;;;;;;-1:-1:-1;12018:60:26;6605:300;-1:-1:-1;;;;;632:901:82;;6688:18:26;;6684:86;;-1:-1:-1;;;;;632:901:82;;6783:16:26;;6779:86;;632:901:82;6704:1:26;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;;6704:1:26;632:901:82;;7609:19:26;;;7605:115;;632:901:82;8358:25:26;632:901:82;;;;6704:1:26;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;;;6704:1:26;632:901:82;;;6704:1:26;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;;6704:1:26;632:901:82;;;;;;;;;;;;8358:25:26;6605:300::o;7605:115::-;7655:50;;;;6704:1;7655:50;;632:901:82;;;;;;6704:1:26;7655:50;6684:86;6729:30;;;6704:1;6729:30;6704:1;6729:30;632:901:82;;6704:1:26;6729:30;2658:162:24;-1:-1:-1;;;;;;;;;;;632:901:82;-1:-1:-1;;;;;632:901:82;966:10:29;2717:23:24;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:24;966:10:29;2763:40:24;632:901:82;;-1:-1:-1;2763:40:24;9259:206:26;;;;-1:-1:-1;;;;;632:901:82;9329:21:26;;9325:89;;632:901:82;9348:1:26;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;;9348:1:26;632:901:82;;7609:19:26;;;7605:115;;632:901:82;;9348:1:26;632:901:82;;8358:25:26;632:901:82;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;8358:25:26;9259:206::o;7605:115::-;7655:50;;;;;9348:1;7655:50;;632:901:82;;;;;;9348:1:26;7655:50;10976:487;;-1:-1:-1;;;;;632:901:82;;;11141:19:26;;11137:89;;-1:-1:-1;;;;;632:901:82;;11239:21:26;;11235:90;;11415:31;11334:20;;632:901:82;11334:20:26;;:::i;:::-;632:901:82;-1:-1:-1;632:901:82;;;;;-1:-1:-1;632:901:82;;;;;;;11415:31:26;10976:487::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;-1:-1:-1;;;;;632:901:82;;;;8358:25:26;;632:901:82;;7918:16:26;632:901:82;;;-1:-1:-1;;;;;;;;;;;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;7914:429:26;632:901:82;;;;;8358:25:26;7220:1170::o;7914:429::-;632:901:82;;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;;;;;7914:429:26;;632:901:82;;;;;941:9;;;;;632:901;941:9;4130:191:31;4243:17;;:::i;:::-;4262:20;;:::i;:::-;632:901:82;;4221:92:31;;;;632:901:82;2073:95:31;632:901:82;;;2073:95:31;;632:901:82;2073:95:31;;;632:901:82;4284:13:31;2073:95;;;632:901:82;4307:4:31;2073:95;;;632:901:82;2073:95:31;4221:92;;;;;;:::i;:::-;632:901:82;4211:103:31;;4130:191;:::o;7084:141:25:-;632:901:82;-1:-1:-1;;;;;;;;;;;632:901:82;;;;7150:18:25;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:25;;-1:-1:-1;7191:17:25;5140:1530:55;;;6199:66;6186:79;;6182:164;;632:901:82;;;;;;-1:-1:-1;632:901:82;;;;;;;;;;;;;;;;;;;6457:24:55;;;;;;;;;-1:-1:-1;6457:24:55;-1:-1:-1;;;;;632:901:82;;6495:20:55;6491:113;;6614:49;-1:-1:-1;6614:49:55;-1:-1:-1;5140:1530:55;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:55;6457:24;6531:62;-1:-1:-1;6531:62:55;:::o;6457:24::-;632:901:82;;;-1:-1:-1;632:901:82;;;;;6182:164:55;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o;7196:532::-;632:901:82;;;;;;7282:29:55;;;7327:7;;:::o;7278:444::-;632:901:82;7378:38:55;;632:901:82;;7439:23:55;;;7291:20;7439:23;632:901:82;7291:20:55;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;632:901:82;;;7291:20:55;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;632:901:82;;;7291:20:55;7679:32;632:901:82;;;;7291:20:55;632:901:82;;;;;7291:20:55;632:901:82;7058:687:31;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7230:22:31;;;;7275;7268:29;:::o;7226:513::-;-1:-1:-1;;2806:64:31;632:901:82;7603:15:31;;;;7638:17;:::o;7599:130::-;7694:20;7701:13;7694:20;:::o;632:901:82:-;-1:-1:-1;;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;-1:-1:-1;632:901:82;;;;;;;;;;;-1:-1:-1;632:901:82;;7966:723:31;632:901:82;;-1:-1:-1;;;;;;;;;;;632:901:82;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;8147:25:31;;;;8195;8188:32;:::o;8143:540::-;-1:-1:-1;;8507:16:31;632:901:82;8541:18:31;;;;8579:20;:::o;632:901:82:-;-1:-1:-1;;;;;;;;;;;;632:901:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;632:901:82;;;-1:-1:-1;632:901:82;;;;;;;;;;;-1:-1:-1;632:901:82;","linkReferences":{}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","burnFrom(address,uint256)":"79cc6790","decimals()":"313ce567","eip712Domain()":"84b0196e","initialize(address)":"c4d66de8","mint(address,uint256)":"40c10f19","name()":"06fdde03","nonces(address)":"7ecebe00","owner()":"8da5cb5b","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`.\"},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WrappedVara.sol\":\"WrappedVara\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152\",\"dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"keccak256\":\"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f\",\"dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x6ff1ff6f25ebee2f778775b26d81610a04e37993bc06a7f54e0c768330ef1506\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f1fa246b88750fe26a30495db812eb2788dba8e5191a11f9dedb37bd6f4d883\",\"dweb:/ipfs/QmZUcDXW1a9xEAfQwqUG6NXQ6AwCs5gfv89NkwzTCeDify\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol\":{\"keccak256\":\"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827\",\"dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x06d93977f6018359ef432d3b649b7c92efb0326d3ddbbeaf08648105bdcacbbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8574fdb7ffb0e8e9841ba6394432d3e31b496a0953baa6f64837062fb29b02e\",\"dweb:/ipfs/QmdjZNdnBUVzzWXMYXsFmHdvh2KL5Lnc1uBfvbuqPNU9X3\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x9cac1f97ecc92043dd19235d6677e40cf6bac382886a94f7a80a957846b24229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1e0c924e0edfdfd4abceeb552d99f1cd95c0d387b38ccb1f67c583607e3d155\",\"dweb:/ipfs/QmZAi6qKa66zuS3jyEhsQR9bBNnZe1wSognYqw9nvseyUz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xe9d36d0c892aea68546d53f21e02223f7f542295c10110a0764336f9ffeab6d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://34d4d72a89193f4d5223763e6d871443fb32a22d6024566843f4ee42eed68bdd\",\"dweb:/ipfs/Qmbsc6kJJNhrkNXP7g7KeqzRETQEvzSXg3ZmJmVLhaEahB\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/WrappedVara.sol\":{\"keccak256\":\"0x546b478734d72773f420a95e83f146771966ea29f4448e8ff9c7a739d13bba43\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e61793dfd06dfc3393a06527a7ca1c51aeb0a273bbfcc5d10f966cfd5f98e0b4\",\"dweb:/ipfs/Qmed9Ksq1uscNucYVuccr3NigGgYgJ5vFqEXvEGLrjTmoJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"ERC2612ExpiredSignature"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"ERC2612InvalidSigner"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"type":"error","name":"InvalidAccountNonce"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[],"type":"event","name":"EIP712DomainChanged","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burnFrom"},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function","name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"permit"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"burn(uint256)":{"details":"Destroys a `value` amount of tokens from the caller. See {ERC20-_burn}."},"burnFrom(address,uint256)":{"details":"Destroys a `value` amount of tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `value`."},"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"eip712Domain()":{"details":"See {IERC-5267}."},"name()":{"details":"Returns the name of the token."},"nonces(address)":{"details":"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."},"owner()":{"details":"Returns the address of the current owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/WrappedVara.sol":"WrappedVara"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x5a5f22721ffb66d3e1ecc568c0d37c91f91223d8663c8a5e78396e780b849c72","urls":["bzz-raw://bdd108133c98ea251513424bf17905090c8a7e0755562a6d12a81b8bccbd6152","dweb:/ipfs/QmahpnB63Up9aVx4jDqxEgry5BRN5itHRvy9rwBvMT2yqL"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol":{"keccak256":"0xe74dd150d031e8ecf9755893a2aae02dec954158140424f11c28ff689a48492f","urls":["bzz-raw://554e0934aecff6725e10d4aeb2e70ff214384b68782b1ba9f9322a0d16105a2f","dweb:/ipfs/QmVvmHc7xPftEkWvJRNAqv7mXihKLEAVXpiebG7RT5rhMW"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol":{"keccak256":"0x6ff1ff6f25ebee2f778775b26d81610a04e37993bc06a7f54e0c768330ef1506","urls":["bzz-raw://6f1fa246b88750fe26a30495db812eb2788dba8e5191a11f9dedb37bd6f4d883","dweb:/ipfs/QmZUcDXW1a9xEAfQwqUG6NXQ6AwCs5gfv89NkwzTCeDify"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol":{"keccak256":"0x778f4a1546a1c6c726ecc8e2348a2789690fb8f26e12bd9d89537669167b79a4","urls":["bzz-raw://851d3dfe724e918ff0a064b206e1ef46b27ab0df2aa2c8af976973a22ef59827","dweb:/ipfs/Qmd4wb7zX8ueYhMVBy5PJjfsANK3Ra3pKPN7qQkNsdwGHn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol":{"keccak256":"0x06d93977f6018359ef432d3b649b7c92efb0326d3ddbbeaf08648105bdcacbbf","urls":["bzz-raw://c8574fdb7ffb0e8e9841ba6394432d3e31b496a0953baa6f64837062fb29b02e","dweb:/ipfs/QmdjZNdnBUVzzWXMYXsFmHdvh2KL5Lnc1uBfvbuqPNU9X3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol":{"keccak256":"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92","urls":["bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a","dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x9cac1f97ecc92043dd19235d6677e40cf6bac382886a94f7a80a957846b24229","urls":["bzz-raw://a1e0c924e0edfdfd4abceeb552d99f1cd95c0d387b38ccb1f67c583607e3d155","dweb:/ipfs/QmZAi6qKa66zuS3jyEhsQR9bBNnZe1wSognYqw9nvseyUz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xe9d36d0c892aea68546d53f21e02223f7f542295c10110a0764336f9ffeab6d1","urls":["bzz-raw://34d4d72a89193f4d5223763e6d871443fb32a22d6024566843f4ee42eed68bdd","dweb:/ipfs/Qmbsc6kJJNhrkNXP7g7KeqzRETQEvzSXg3ZmJmVLhaEahB"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/WrappedVara.sol":{"keccak256":"0x546b478734d72773f420a95e83f146771966ea29f4448e8ff9c7a739d13bba43","urls":["bzz-raw://e61793dfd06dfc3393a06527a7ca1c51aeb0a273bbfcc5d10f966cfd5f98e0b4","dweb:/ipfs/Qmed9Ksq1uscNucYVuccr3NigGgYgJ5vFqEXvEGLrjTmoJ"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/WrappedVara.sol","id":56095,"exportedSymbols":{"ERC20BurnableUpgradeable":[39957],"ERC20PermitUpgradeable":[40126],"ERC20Upgradeable":[39895],"Initializable":[39278],"OwnableUpgradeable":[39024],"WrappedVara":[56094]},"nodeType":"SourceUnit","src":"39:1495:82","nodes":[{"id":55998,"nodeType":"PragmaDirective","src":"39:24:82","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":56000,"nodeType":"ImportDirective","src":"65:96:82","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":56095,"sourceUnit":39279,"symbolAliases":[{"foreign":{"id":55999,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39278,"src":"73:13:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56002,"nodeType":"ImportDirective","src":"162:102:82","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol","nameLocation":"-1:-1:-1","scope":56095,"sourceUnit":39896,"symbolAliases":[{"foreign":{"id":56001,"name":"ERC20Upgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39895,"src":"170:16:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56004,"nodeType":"ImportDirective","src":"265:133:82","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":56095,"sourceUnit":39958,"symbolAliases":[{"foreign":{"id":56003,"name":"ERC20BurnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39957,"src":"273:24:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56006,"nodeType":"ImportDirective","src":"399:101:82","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":56095,"sourceUnit":39025,"symbolAliases":[{"foreign":{"id":56005,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39024,"src":"407:18:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56008,"nodeType":"ImportDirective","src":"501:129:82","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol","nameLocation":"-1:-1:-1","scope":56095,"sourceUnit":40127,"symbolAliases":[{"foreign":{"id":56007,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40126,"src":"509:22:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56094,"nodeType":"ContractDefinition","src":"632:901:82","nodes":[{"id":56021,"nodeType":"VariableDeclaration","src":"784:51:82","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_NAME","nameLocation":"808:10:82","scope":56094,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":56019,"name":"string","nodeType":"ElementaryTypeName","src":"784:6:82","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"577261707065642056617261","id":56020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"821:14:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_985e2e9885ca23de2896caee5fad5adf116e2558361aa44c502ff8b2c1b2a41b","typeString":"literal_string \"Wrapped Vara\""},"value":"Wrapped Vara"},"visibility":"private"},{"id":56024,"nodeType":"VariableDeclaration","src":"841:46:82","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_SYMBOL","nameLocation":"865:12:82","scope":56094,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":56022,"name":"string","nodeType":"ElementaryTypeName","src":"841:6:82","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"5756415241","id":56023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"880:7:82","typeDescriptions":{"typeIdentifier":"t_stringliteral_203a7c23d1b412674989fae6808de72f52c6953d49ac548796ba3c05451693a4","typeString":"literal_string \"WVARA\""},"value":"WVARA"},"visibility":"private"},{"id":56027,"nodeType":"VariableDeclaration","src":"893:57:82","nodes":[],"constant":true,"mutability":"constant","name":"TOKEN_INITIAL_SUPPLY","nameLocation":"918:20:82","scope":56094,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56025,"name":"uint256","nodeType":"ElementaryTypeName","src":"893:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"315f3030305f303030","id":56026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"941:9:82","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1_000_000"},"visibility":"private"},{"id":56035,"nodeType":"FunctionDefinition","src":"1010:53:82","nodes":[],"body":{"id":56034,"nodeType":"Block","src":"1024:39:82","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":56031,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39246,"src":"1034:20:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":56032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1034:22:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56033,"nodeType":"ExpressionStatement","src":"1034:22:82"}]},"documentation":{"id":56028,"nodeType":"StructuredDocumentation","src":"957:48:82","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":56029,"nodeType":"ParameterList","parameters":[],"src":"1021:2:82"},"returnParameters":{"id":56030,"nodeType":"ParameterList","parameters":[],"src":"1024:0:82"},"scope":56094,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56069,"nodeType":"FunctionDefinition","src":"1069:297:82","nodes":[],"body":{"id":56068,"nodeType":"Block","src":"1130:236:82","nodes":[],"statements":[{"expression":{"arguments":[{"id":56043,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56021,"src":"1153:10:82","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":56044,"name":"TOKEN_SYMBOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56024,"src":"1165:12:82","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":56042,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39346,"src":"1140:12:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":56045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1140:38:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56046,"nodeType":"ExpressionStatement","src":"1140:38:82"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":56047,"name":"__ERC20Burnable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39916,"src":"1188:20:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":56048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1188:22:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56049,"nodeType":"ExpressionStatement","src":"1188:22:82"},{"expression":{"arguments":[{"id":56051,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56037,"src":"1235:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56050,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38884,"src":"1220:14:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":56052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1220:28:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56053,"nodeType":"ExpressionStatement","src":"1220:28:82"},{"expression":{"arguments":[{"id":56055,"name":"TOKEN_NAME","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56021,"src":"1277:10:82","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":56054,"name":"__ERC20Permit_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40013,"src":"1258:18:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":56056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1258:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56057,"nodeType":"ExpressionStatement","src":"1258:30:82"},{"expression":{"arguments":[{"id":56059,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56037,"src":"1305:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56060,"name":"TOKEN_INITIAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56027,"src":"1319:20:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":56061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1342:2:82","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":56062,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39415,"src":"1348:8:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint8_$","typeString":"function () view returns (uint8)"}},"id":56063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1348:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1342:16:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1319:39:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56058,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39727,"src":"1299:5:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":56066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1299:60:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56067,"nodeType":"ExpressionStatement","src":"1299:60:82"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":56040,"kind":"modifierInvocation","modifierName":{"id":56039,"name":"initializer","nameLocations":["1118:11:82"],"nodeType":"IdentifierPath","referencedDeclaration":39132,"src":"1118:11:82"},"nodeType":"ModifierInvocation","src":"1118:11:82"}],"name":"initialize","nameLocation":"1078:10:82","parameters":{"id":56038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56037,"mutability":"mutable","name":"initialOwner","nameLocation":"1097:12:82","nodeType":"VariableDeclaration","scope":56069,"src":"1089:20:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56036,"name":"address","nodeType":"ElementaryTypeName","src":"1089:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1088:22:82"},"returnParameters":{"id":56041,"nodeType":"ParameterList","parameters":[],"src":"1130:0:82"},"scope":56094,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56078,"nodeType":"FunctionDefinition","src":"1372:60:82","nodes":[],"body":{"id":56077,"nodeType":"Block","src":"1430:2:82","nodes":[],"statements":[]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":56072,"kind":"modifierInvocation","modifierName":{"id":56071,"name":"onlyOwner","nameLocations":["1403:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"1403:9:82"},"nodeType":"ModifierInvocation","src":"1403:9:82"},{"arguments":[{"hexValue":"32","id":56074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1427:1:82","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":56075,"kind":"modifierInvocation","modifierName":{"id":56073,"name":"reinitializer","nameLocations":["1413:13:82"],"nodeType":"IdentifierPath","referencedDeclaration":39179,"src":"1413:13:82"},"nodeType":"ModifierInvocation","src":"1413:16:82"}],"name":"reinitialize","nameLocation":"1381:12:82","parameters":{"id":56070,"nodeType":"ParameterList","parameters":[],"src":"1393:2:82"},"returnParameters":{"id":56076,"nodeType":"ParameterList","parameters":[],"src":"1430:0:82"},"scope":56094,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56093,"nodeType":"FunctionDefinition","src":"1438:93:82","nodes":[],"body":{"id":56092,"nodeType":"Block","src":"1497:34:82","nodes":[],"statements":[{"expression":{"arguments":[{"id":56088,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56080,"src":"1513:2:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56089,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56082,"src":"1517:6:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56087,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39727,"src":"1507:5:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":56090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1507:17:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56091,"nodeType":"ExpressionStatement","src":"1507:17:82"}]},"functionSelector":"40c10f19","implemented":true,"kind":"function","modifiers":[{"id":56085,"kind":"modifierInvocation","modifierName":{"id":56084,"name":"onlyOwner","nameLocations":["1487:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"1487:9:82"},"nodeType":"ModifierInvocation","src":"1487:9:82"}],"name":"mint","nameLocation":"1447:4:82","parameters":{"id":56083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56080,"mutability":"mutable","name":"to","nameLocation":"1460:2:82","nodeType":"VariableDeclaration","scope":56093,"src":"1452:10:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56079,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56082,"mutability":"mutable","name":"amount","nameLocation":"1472:6:82","nodeType":"VariableDeclaration","scope":56093,"src":"1464:14:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56081,"name":"uint256","nodeType":"ElementaryTypeName","src":"1464:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1451:28:82"},"returnParameters":{"id":56086,"nodeType":"ParameterList","parameters":[],"src":"1497:0:82"},"scope":56094,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":56009,"name":"Initializable","nameLocations":["660:13:82"],"nodeType":"IdentifierPath","referencedDeclaration":39278,"src":"660:13:82"},"id":56010,"nodeType":"InheritanceSpecifier","src":"660:13:82"},{"baseName":{"id":56011,"name":"ERC20Upgradeable","nameLocations":["679:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":39895,"src":"679:16:82"},"id":56012,"nodeType":"InheritanceSpecifier","src":"679:16:82"},{"baseName":{"id":56013,"name":"ERC20BurnableUpgradeable","nameLocations":["701:24:82"],"nodeType":"IdentifierPath","referencedDeclaration":39957,"src":"701:24:82"},"id":56014,"nodeType":"InheritanceSpecifier","src":"701:24:82"},{"baseName":{"id":56015,"name":"OwnableUpgradeable","nameLocations":["731:18:82"],"nodeType":"IdentifierPath","referencedDeclaration":39024,"src":"731:18:82"},"id":56016,"nodeType":"InheritanceSpecifier","src":"731:18:82"},{"baseName":{"id":56017,"name":"ERC20PermitUpgradeable","nameLocations":["755:22:82"],"nodeType":"IdentifierPath","referencedDeclaration":40126,"src":"755:22:82"},"id":56018,"nodeType":"InheritanceSpecifier","src":"755:22:82"}],"canonicalName":"WrappedVara","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[56094,40126,40283,40627,40821,41968,39024,39957,39895,40863,41932,41906,40172,39278],"name":"WrappedVara","nameLocation":"641:11:82","scope":56095,"usedErrors":[38860,38865,39041,39044,39992,39999,40186,40833,40838,40843,40852,40857,40862,43050,43055,43060],"usedEvents":[38871,39049,40801,41840,41849]}],"license":"UNLICENSED"},"id":82} \ No newline at end of file diff --git a/ethexe/ethereum/src/router/mod.rs b/ethexe/ethereum/src/router/mod.rs index 195c67b8bee..e8b93e49635 100644 --- a/ethexe/ethereum/src/router/mod.rs +++ b/ethexe/ethereum/src/router/mod.rs @@ -271,7 +271,7 @@ impl RouterQuery { } pub async fn validators(&self) -> Result> { - self.0 + self.instance .validators() .call() .await @@ -280,7 +280,7 @@ impl RouterQuery { } pub async fn threshold_percentage(&self) -> Result { - self.0 + self.instance .signingThresholdPercentage() .call() .await diff --git a/ethexe/network/src/lib.rs b/ethexe/network/src/lib.rs index a1eea907b52..73f1e466302 100644 --- a/ethexe/network/src/lib.rs +++ b/ethexe/network/src/lib.rs @@ -526,7 +526,7 @@ mod tests { // Send a commitment from service1 let commitment_data = b"test commitment".to_vec(); - sender.publish_commitments(commitment_data.clone()); + sender.publish_message(commitment_data.clone()); let mut gossip_stream = service2.gossip_stream; From ce7a6b67364690a3eed3c0e12984729a9246009c Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 22 Aug 2024 12:40:17 +0200 Subject: [PATCH 33/44] update json --- ethexe/ethereum/Mirror.json | 2 +- ethexe/ethereum/Router.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ethexe/ethereum/Mirror.json b/ethexe/ethereum/Mirror.json index 6aafca49f70..69ceaff6bd2 100644 --- a/ethexe/ethereum/Mirror.json +++ b/ethexe/ethereum/Mirror.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"claimValue","inputs":[{"name":"_claimedId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executableBalanceBurned","inputs":[{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executableBalanceTopUp","inputs":[{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"initMessage","inputs":[{"name":"source","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"executableBalance","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"messageSent","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"replySent","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyTo","type":"bytes32","internalType":"bytes32"},{"name":"replyCode","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sendMessage","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"sendReply","inputs":[{"name":"_repliedTo","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"stateHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"updateState","inputs":[{"name":"newStateHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"valueClaimed","inputs":[{"name":"claimedId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExecutableBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Message","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageQueueingRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Reply","inputs":[{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyQueueingRequested","inputs":[{"name":"repliedTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"StateChanged","inputs":[{"name":"stateHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValueClaimed","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"ValueClaimingRequested","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234601557610c2f908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806314503e51146106df57806329336f3914610610578063701da98e146105f4578063704ed542146105a25780638ea59e1d1461054157806391d5a64c14610500578063affed0e0146104e3578063c2df60091461044d578063c78bde7714610386578063d56242221461023f578063dca4a37314610201578063de1dd2e0146100d85763f887ea40146100a8575f80fd5b346100d4575f3660031901126100d45760206100c2610958565b6040516001600160a01b039091168152f35b5f80fd5b346100d45760803660031901126100d4576100f161076b565b60243567ffffffffffffffff81116100d4576101327f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c69136906004016107c3565b926101fc61013e610781565b6101466107ad565b956101626001600160a01b0361015a610958565b1633146107f1565b7f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206001546101918161092b565b6001556040513060601b6bffffffffffffffffffffffff191683820190815260148101929092526101cf81603484015b03601f198101835282610854565b519020986001600160801b0360405191168152a16040516001600160a01b039094169693948594856108fd565b0390a2005b346100d45760203660031901126100d45761023d61021d610797565b6102306001600160a01b0361015a610958565b610238610958565b6109c3565b005b60403660031901126100d45760043567ffffffffffffffff81116100d45761026b9036906004016107c3565b602435916001600160801b03831683036100d45760049260206001600160a01b03610294610958565b16604051958680926337792e1d60e11b82525afa90811561037b576102ed6102e8827f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6946020985f9161034e575b506108a9565b610aee565b6001546102f98161092b565b6001556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261032d81603484016101c1565b51902093610343604051928392329688856108fd565b0390a2604051908152f35b61036e9150893d8b11610374575b6103668183610854565b81019061088a565b896102e2565b503d61035c565b6040513d5f823e3d90fd5b346100d45760a03660031901126100d45761039f61076b565b60243567ffffffffffffffff81116100d4576103bf9036906004016107c3565b91906103c9610781565b926084359363ffffffff60e01b85168095036100d4577fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c69361041a9082906102386001600160a01b0361015a610958565b6001600160801b036104396040519485946060865260608601916108dd565b9116602083015260643560408301520390a2005b346100d45760803660031901126100d457610466610755565b60443567ffffffffffffffff81116100d4576104a77f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117739136906004016107c3565b90926101fc6104b46107ad565b6104c76001600160a01b0361015a610958565b6040516001600160a01b039093169592938493600435856108fd565b346100d4575f3660031901126100d4576020600154604051908152f35b346100d45760203660031901126100d45760405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203292a2005b346100d45760203660031901126100d4576004356105686001600160a01b0361015a610958565b805f540361057257005b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930925f55604051908152a1005b60203660031901126100d4577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206105d9610797565b6105e281610aee565b6001600160801b0360405191168152a1005b346100d4575f3660031901126100d45760205f54604051908152f35b60603660031901126100d45760243567ffffffffffffffff81116100d45761063d600491369083016107c3565b610648929192610781565b9060206001600160a01b0361065b610958565b16604051948580926337792e1d60e11b82525afa92831561037b576102e8837fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f956106ac935f916106c057506108a9565b6101fc6040519283923296600435856108fd565b6106d9915060203d602011610374576103668183610854565b886102e2565b346100d45760603660031901126100d4577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783604061071b610755565b61073c610726610781565b9182906102386001600160a01b0361015a610958565b6001600160801b038251916004358352166020820152a1005b602435906001600160a01b03821682036100d457565b600435906001600160a01b03821682036100d457565b604435906001600160801b03821682036100d457565b600435906001600160801b03821682036100d457565b606435906001600160801b03821682036100d457565b9181601f840112156100d45782359167ffffffffffffffff83116100d457602083818601950101116100d457565b156107f857565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b90601f8019910116810190811067ffffffffffffffff82111761087657604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126100d457516001600160801b03811681036100d45790565b906001600160801b03809116911601906001600160801b0382116108c957565b634e487b7160e01b5f52601160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610924916001600160801b039397969786526060602087015260608601916108dd565b9416910152565b5f1981146108c95760010190565b908160209103126100d457516001600160a01b03811681036100d45790565b6040516303e21fa960e61b8152602081600481305afa90811561037b575f9161097f575090565b6109a1915060203d6020116109a4575b6109998183610854565b810190610939565b90565b503d61098f565b908160209103126100d4575180151581036100d45790565b60049160206001600160a01b036109d8610958565b166040519485809263088f50cf60e41b82525afa92831561037b575f93610ac4575b506001600160801b031680610a0e57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af190811561037b575f91610a95575b5015610a5957565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b610ab7915060203d602011610abd575b610aaf8183610854565b8101906109ab565b5f610a51565b503d610aa5565b6001600160801b03919350610ae79060203d6020116109a4576109998183610854565b92906109fa565b6001600160a01b03610afe610958565b60405163088f50cf60e41b8152911691602082600481865afa801561037b576001600160801b03935f6064926020958291610bdc575b5060405196879586946323b872dd60e01b8652326004870152602486015216604484015260018060a01b03165af190811561037b575f91610bbd575b5015610b7857565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b610bd6915060203d602011610abd57610aaf8183610854565b5f610b70565b610bf39150863d88116109a4576109998183610854565b5f610b3456fea2646970667358221220ca64c276619ac31ecce5c592723338e0383e76764d83328d9600001f4577ae3364736f6c634300081a0033","sourceMap":"285:3800:79:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806314503e51146106df57806329336f3914610610578063701da98e146105f4578063704ed542146105a25780638ea59e1d1461054157806391d5a64c14610500578063affed0e0146104e3578063c2df60091461044d578063c78bde7714610386578063d56242221461023f578063dca4a37314610201578063de1dd2e0146100d85763f887ea40146100a8575f80fd5b346100d4575f3660031901126100d45760206100c2610958565b6040516001600160a01b039091168152f35b5f80fd5b346100d45760803660031901126100d4576100f161076b565b60243567ffffffffffffffff81116100d4576101327f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c69136906004016107c3565b926101fc61013e610781565b6101466107ad565b956101626001600160a01b0361015a610958565b1633146107f1565b7f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206001546101918161092b565b6001556040513060601b6bffffffffffffffffffffffff191683820190815260148101929092526101cf81603484015b03601f198101835282610854565b519020986001600160801b0360405191168152a16040516001600160a01b039094169693948594856108fd565b0390a2005b346100d45760203660031901126100d45761023d61021d610797565b6102306001600160a01b0361015a610958565b610238610958565b6109c3565b005b60403660031901126100d45760043567ffffffffffffffff81116100d45761026b9036906004016107c3565b602435916001600160801b03831683036100d45760049260206001600160a01b03610294610958565b16604051958680926337792e1d60e11b82525afa90811561037b576102ed6102e8827f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6946020985f9161034e575b506108a9565b610aee565b6001546102f98161092b565b6001556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261032d81603484016101c1565b51902093610343604051928392329688856108fd565b0390a2604051908152f35b61036e9150893d8b11610374575b6103668183610854565b81019061088a565b896102e2565b503d61035c565b6040513d5f823e3d90fd5b346100d45760a03660031901126100d45761039f61076b565b60243567ffffffffffffffff81116100d4576103bf9036906004016107c3565b91906103c9610781565b926084359363ffffffff60e01b85168095036100d4577fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c69361041a9082906102386001600160a01b0361015a610958565b6001600160801b036104396040519485946060865260608601916108dd565b9116602083015260643560408301520390a2005b346100d45760803660031901126100d457610466610755565b60443567ffffffffffffffff81116100d4576104a77f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117739136906004016107c3565b90926101fc6104b46107ad565b6104c76001600160a01b0361015a610958565b6040516001600160a01b039093169592938493600435856108fd565b346100d4575f3660031901126100d4576020600154604051908152f35b346100d45760203660031901126100d45760405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203292a2005b346100d45760203660031901126100d4576004356105686001600160a01b0361015a610958565b805f540361057257005b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930925f55604051908152a1005b60203660031901126100d4577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206105d9610797565b6105e281610aee565b6001600160801b0360405191168152a1005b346100d4575f3660031901126100d45760205f54604051908152f35b60603660031901126100d45760243567ffffffffffffffff81116100d45761063d600491369083016107c3565b610648929192610781565b9060206001600160a01b0361065b610958565b16604051948580926337792e1d60e11b82525afa92831561037b576102e8837fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f956106ac935f916106c057506108a9565b6101fc6040519283923296600435856108fd565b6106d9915060203d602011610374576103668183610854565b886102e2565b346100d45760603660031901126100d4577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783604061071b610755565b61073c610726610781565b9182906102386001600160a01b0361015a610958565b6001600160801b038251916004358352166020820152a1005b602435906001600160a01b03821682036100d457565b600435906001600160a01b03821682036100d457565b604435906001600160801b03821682036100d457565b600435906001600160801b03821682036100d457565b606435906001600160801b03821682036100d457565b9181601f840112156100d45782359167ffffffffffffffff83116100d457602083818601950101116100d457565b156107f857565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b90601f8019910116810190811067ffffffffffffffff82111761087657604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126100d457516001600160801b03811681036100d45790565b906001600160801b03809116911601906001600160801b0382116108c957565b634e487b7160e01b5f52601160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610924916001600160801b039397969786526060602087015260608601916108dd565b9416910152565b5f1981146108c95760010190565b908160209103126100d457516001600160a01b03811681036100d45790565b6040516303e21fa960e61b8152602081600481305afa90811561037b575f9161097f575090565b6109a1915060203d6020116109a4575b6109998183610854565b810190610939565b90565b503d61098f565b908160209103126100d4575180151581036100d45790565b60049160206001600160a01b036109d8610958565b166040519485809263088f50cf60e41b82525afa92831561037b575f93610ac4575b506001600160801b031680610a0e57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af190811561037b575f91610a95575b5015610a5957565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b610ab7915060203d602011610abd575b610aaf8183610854565b8101906109ab565b5f610a51565b503d610aa5565b6001600160801b03919350610ae79060203d6020116109a4576109998183610854565b92906109fa565b6001600160a01b03610afe610958565b60405163088f50cf60e41b8152911691602082600481865afa801561037b576001600160801b03935f6064926020958291610bdc575b5060405196879586946323b872dd60e01b8652326004870152602486015216604484015260018060a01b03165af190811561037b575f91610bbd575b5015610b7857565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b610bd6915060203d602011610abd57610aaf8183610854565b5f610b70565b610bf39150863d88116109a4576109998183610854565b5f610b3456fea2646970667358221220ca64c276619ac31ecce5c592723338e0383e76764d83328d9600001f4577ae3364736f6c634300081a0033","sourceMap":"285:3800:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;3193:52;285:3800;;;;;;:::i;:::-;;3193:52;285:3800;;:::i;:::-;;;:::i;:::-;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;:::-;285:3800;3298:10;:22;3290:81;:::i;:::-;3128:50;285:3800;3029:7;285:3800;3029:7;;;:::i;:::-;;285:3800;;;3094:4;285:3800;;-1:-1:-1;;285:3800:79;3069:42;;;285:3800;;;;;;;;;;3069:42;285:3800;;;;3069:42;;869:40;;3069:42;;;;;;:::i;:::-;285:3800;3059:53;;285:3800;-1:-1:-1;;;;;285:3800:79;;;;;;3128:50;285:3800;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;3193:52;:::i;:::-;;;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;2768:5;285:3800;;:::i;:::-;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;2758:8;;:::i;:::-;2768:5;:::i;:::-;285:3800;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;-1:-1:-1;;;;;766:8:79;;:::i;:::-;285:3800;;;;;;;;;;758:27;;;;;;;;;818:16;;758:27;926:57;758:27;285:3800;758:27;285:3800;758:27;;;285:3800;818:16;;:::i;:::-;;:::i;:::-;901:7;285:3800;901:7;;;:::i;:::-;;285:3800;;;894:4;285:3800;;-1:-1:-1;;285:3800:79;869:40;;;285:3800;;;;;;;;;;869:40;285:3800;;;;869:40;285:3800;869:40;285:3800;859:51;;285:3800;926:57;285:3800;;955:9;;;;926:57;;;;:::i;:::-;;;;285:3800;;;;;;758:27;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;285:3800;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;2415:41;;2393:5;;285:3800;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;2393:5::-;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2415:41;;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;2150:40;285:3800;;;;;;:::i;:::-;;;2150:40;285:3800;;:::i;:::-;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;285:3800;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;2150:40;:::i;285:3800::-;;;;;;-1:-1:-1;;285:3800:79;;;;;420:20;285:3800;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;1442:45;285:3800;1477:9;1442:45;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;285:3800;;;1802:25;1798:123;;285:3800;1798:123;285:3800;;1887:23;285:3800;;;;;;;;1887:23;285:3800;;;;-1:-1:-1;;285:3800:79;;;;1621:39;285:3800;;;:::i;:::-;1598:6;;;:::i;:::-;-1:-1:-1;;;;;285:3800:79;;;;;;1621:39;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1149:8:79;;:::i;:::-;285:3800;;;;;;;;;;1141:27;;;;;;;;;1201:16;1141:27;1234:63;1141:27;1201:16;1141:27;285:3800;1141:27;;;1201:16;;:::i;:::-;1234:63;285:3800;;1269:9;;;;285:3800;;;1234:63;;:::i;1141:27::-;;;;285:3800;1141:27;285:3800;1141:27;;;;;;;:::i;:::-;;;;285:3800;;;;;;-1:-1:-1;;285:3800:79;;;;2624:30;285:3800;;;:::i;:::-;2602:5;285:3800;;:::i;:::-;;;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;2602:5::-;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;2624:30;285:3800;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;285:3800:79;;;;;;;;;;;;;;;;;-1:-1:-1;;;285:3800:79;;;;;;;;;;869:40;;285:3800;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;285:3800:79;;;;;-1:-1:-1;285:3800:79;;;;;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;:::o;:::-;;-1:-1:-1;;;;;285:3800:79;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;285:3800:79;;;;;;;;-1:-1:-1;;285:3800:79;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;-1:-1:-1;;285:3800:79;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;:::o;489:108::-;285:3800;;-1:-1:-1;;;554:36:79;;;285:3800;554:36;285:3800;575:4;554:36;;;;;;;-1:-1:-1;554:36:79;;;547:43;489:108;:::o;554:36::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;489:108;:::o;554:36::-;;;;;285:3800;;;;;;;;;;;;;;;;;;:::o;3767:316::-;3883:31;;;-1:-1:-1;;;;;3891:8:79;;:::i;:::-;285:3800;;;;;;;;;;3883:31;;;;;;;;;-1:-1:-1;3883:31:79;;;3767:316;285:3800;-1:-1:-1;;;;;285:3800:79;3930:10;3926:151;;3767:316;;;:::o;3926:151::-;285:3800;;-1:-1:-1;;;3971:40:79;;-1:-1:-1;;;;;285:3800:79;;;3883:31;3971:40;;285:3800;;;;;;;;;3883:31;;285:3800;;3971:40;;285:3800;;-1:-1:-1;;285:3800:79;3971:40;;;;;;;-1:-1:-1;3971:40:79;;;3926:151;285:3800;;;;3767:316::o;285:3800::-;;;-1:-1:-1;;;285:3800:79;;3883:31;;285:3800;;;;;;;;-1:-1:-1;;;3971:40:79;285:3800;;;;;;3971:40;;;;3883:31;3971:40;3883:31;3971:40;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3883:31;-1:-1:-1;;;;;3883:31:79;;;;;;;;;;;;;;;:::i;:::-;;;;;3429:332;-1:-1:-1;;;;;3519:8:79;;:::i;:::-;285:3800;;-1:-1:-1;;;3578:36:79;;285:3800;;;3578:36;285:3800;3578:36;285:3800;;3578:36;;;;;;-1:-1:-1;;;;;3578:36:79;-1:-1:-1;3641:58:79;3578:36;;;;;;;3429:332;285:3800;;;;;;;;;;;3641:58;;3666:9;3578:36;3641:58;;285:3800;;;;;;;;;;;;;;;;3641:58;;;;;;;-1:-1:-1;3641:58:79;;;3429:332;285:3800;;;;3429:332::o;285:3800::-;;;-1:-1:-1;;;285:3800:79;;3578:36;;285:3800;;;;;;;;;;;;;3641:58;;285:3800;3641:58;;;;3578:36;3641:58;3578:36;3641:58;;;;;;;:::i;:::-;;;;3578:36;;;;;;;;;;;;;;:::i;:::-;;;","linkReferences":{}},"methodIdentifiers":{"claimValue(bytes32)":"91d5a64c","executableBalanceBurned(uint128)":"dca4a373","executableBalanceTopUp(uint128)":"704ed542","initMessage(address,bytes,uint128,uint128)":"de1dd2e0","messageSent(bytes32,address,bytes,uint128)":"c2df6009","nonce()":"affed0e0","replySent(address,bytes,uint128,bytes32,bytes4)":"c78bde77","router()":"f887ea40","sendMessage(bytes,uint128)":"d5624222","sendReply(bytes32,bytes,uint128)":"29336f39","stateHash()":"701da98e","updateState(bytes32)":"8ea59e1d","valueClaimed(bytes32,address,uint128)":"14503e51"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ExecutableBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"Message\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"MessageQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"Reply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"repliedTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ReplyQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"name\":\"StateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ValueClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"ValueClaimingRequested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimedId\",\"type\":\"bytes32\"}],\"name\":\"claimValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceBurned\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceTopUp\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"executableBalance\",\"type\":\"uint128\"}],\"name\":\"initMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"messageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"replySent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_repliedTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendReply\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"}],\"name\":\"updateState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"valueClaimed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ExecutableBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's executable balance top up with his tokens. NOTE: It's event for NODES: it requires to top up balance of the program.\"},\"Message(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when the program sends outgoing message. NOTE: It's event for USERS: it informs about new message sent from program.\"},\"MessageQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new message is sent to be queued. NOTE: It's event for NODES: it requires to insert message in the program's queue.\"},\"Reply(bytes,uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program sends reply message. NOTE: It's event for USERS: it informs about new reply sent from program.\"},\"ReplyQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new reply is sent and requested to be verified and queued. NOTE: It's event for NODES: it requires to insert message in the program's queue, if message, exists.\"},\"StateChanged(bytes32)\":{\"details\":\"Emitted when the state hash of program is changed. NOTE: It's event for USERS: it informs about state changes.\"},\"ValueClaimed(bytes32,uint128)\":{\"details\":\"Emitted when a user succeed in claiming value request and receives balance. NOTE: It's event for USERS: it informs about value claimed.\"},\"ValueClaimingRequested(bytes32,address)\":{\"details\":\"Emitted when a reply's value is requested to be verified and claimed. NOTE: It's event for NODES: it requires to claim value from message, if exists.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Mirror.sol\":\"Mirror\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf\",\"dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde\",\"dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Mirror.sol\":{\"keccak256\":\"0x855debb1eedc59a930167ab2178bd306fdd9a780ad7ed95fdae0c2a344336c10\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b94e02729ecce1dab9019b3441840bb7ccebddba00d0c4f266ba490f44a78a77\",\"dweb:/ipfs/Qmf2ibL2SdGbU6bLvcTEm9dR3tr3hTYT6qrDkyVFWrTKV8\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ExecutableBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"Message","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"MessageQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"Reply","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"repliedTo","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ReplyQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"stateHash","type":"bytes32","indexed":false}],"type":"event","name":"StateChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ValueClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true}],"type":"event","name":"ValueClaimingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_claimedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"claimValue"},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"executableBalanceBurned"},{"inputs":[{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"executableBalanceTopUp"},{"inputs":[{"internalType":"address","name":"source","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"uint128","name":"executableBalance","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"initMessage"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"messageSent"},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"bytes32","name":"replyTo","type":"bytes32"},{"internalType":"bytes4","name":"replyCode","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"replySent"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_repliedTo","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendReply"},{"inputs":[],"stateMutability":"view","type":"function","name":"stateHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"newStateHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateState"},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"valueClaimed"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Mirror.sol":"Mirror"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6","urls":["bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf","dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL"],"license":"UNLICENSED"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3","urls":["bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde","dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Mirror.sol":{"keccak256":"0x855debb1eedc59a930167ab2178bd306fdd9a780ad7ed95fdae0c2a344336c10","urls":["bzz-raw://b94e02729ecce1dab9019b3441840bb7ccebddba00d0c4f266ba490f44a78a77","dweb:/ipfs/Qmf2ibL2SdGbU6bLvcTEm9dR3tr3hTYT6qrDkyVFWrTKV8"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[{"astId":53976,"contract":"src/Mirror.sol:Mirror","label":"stateHash","offset":0,"slot":"0","type":"t_bytes32"},{"astId":53978,"contract":"src/Mirror.sol:Mirror","label":"nonce","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/Mirror.sol","id":54340,"exportedSymbols":{"IMirror":[53636],"IMirrorProxy":[53644],"IRouter":[53951],"IWrappedVara":[53962],"Mirror":[54339]},"nodeType":"SourceUnit","src":"39:4047:79","nodes":[{"id":53964,"nodeType":"PragmaDirective","src":"39:24:79","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":53966,"nodeType":"ImportDirective","src":"65:48:79","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53645,"symbolAliases":[{"foreign":{"id":53965,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53644,"src":"73:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53968,"nodeType":"ImportDirective","src":"114:38:79","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53637,"symbolAliases":[{"foreign":{"id":53967,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"122:7:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53970,"nodeType":"ImportDirective","src":"153:38:79","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53952,"symbolAliases":[{"foreign":{"id":53969,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"161:7:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53972,"nodeType":"ImportDirective","src":"192:48:79","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53963,"symbolAliases":[{"foreign":{"id":53971,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"200:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54339,"nodeType":"ContractDefinition","src":"285:3800:79","nodes":[{"id":53976,"nodeType":"VariableDeclaration","src":"318:24:79","nodes":[],"baseFunctions":[53543],"constant":false,"functionSelector":"701da98e","mutability":"mutable","name":"stateHash","nameLocation":"333:9:79","scope":54339,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":53975,"name":"bytes32","nodeType":"ElementaryTypeName","src":"318:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":53978,"nodeType":"VariableDeclaration","src":"420:20:79","nodes":[],"baseFunctions":[53548],"constant":false,"functionSelector":"affed0e0","mutability":"mutable","name":"nonce","nameLocation":"435:5:79","scope":54339,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53977,"name":"uint256","nodeType":"ElementaryTypeName","src":"420:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":53993,"nodeType":"FunctionDefinition","src":"489:108:79","nodes":[],"body":{"id":53992,"nodeType":"Block","src":"537:60:79","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":53986,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"575:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":53985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"567:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":53984,"name":"address","nodeType":"ElementaryTypeName","src":"567:7:79","typeDescriptions":{}}},"id":53987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"567:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":53983,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53644,"src":"554:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorProxy_$53644_$","typeString":"type(contract IMirrorProxy)"}},"id":53988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"554:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorProxy_$53644","typeString":"contract IMirrorProxy"}},"id":53989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"582:6:79","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":53643,"src":"554:34:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":53990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"554:36:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":53982,"id":53991,"nodeType":"Return","src":"547:43:79"}]},"baseFunctions":[53553],"functionSelector":"f887ea40","implemented":true,"kind":"function","modifiers":[],"name":"router","nameLocation":"498:6:79","parameters":{"id":53979,"nodeType":"ParameterList","parameters":[],"src":"504:2:79"},"returnParameters":{"id":53982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":53993,"src":"528:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":53980,"name":"address","nodeType":"ElementaryTypeName","src":"528:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"527:9:79"},"scope":54339,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54042,"nodeType":"FunctionDefinition","src":"633:377:79","nodes":[],"body":{"id":54041,"nodeType":"Block","src":"730:280:79","nodes":[],"statements":[{"assignments":[54003],"declarations":[{"constant":false,"id":54003,"mutability":"mutable","name":"baseFee","nameLocation":"748:7:79","nodeType":"VariableDeclaration","scope":54041,"src":"740:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54002,"name":"uint128","nodeType":"ElementaryTypeName","src":"740:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":54010,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54005,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"766:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"766:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54004,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"758:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"758:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"776:7:79","memberName":"baseFee","nodeType":"MemberAccess","referencedDeclaration":53910,"src":"758:25:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":54009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"758:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"740:45:79"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54012,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54003,"src":"818:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":54013,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53997,"src":"828:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"818:16:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54011,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"795:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"795:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54016,"nodeType":"ExpressionStatement","src":"795:40:79"},{"assignments":[54018],"declarations":[{"constant":false,"id":54018,"mutability":"mutable","name":"id","nameLocation":"854:2:79","nodeType":"VariableDeclaration","scope":54041,"src":"846:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54017,"name":"bytes32","nodeType":"ElementaryTypeName","src":"846:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54030,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":54024,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"894:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":54023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"886:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54022,"name":"address","nodeType":"ElementaryTypeName","src":"886:7:79","typeDescriptions":{}}},"id":54025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"886:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"901:7:79","subExpression":{"id":54026,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53978,"src":"901:5:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54020,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"869:3:79","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"873:12:79","memberName":"encodePacked","nodeType":"MemberAccess","src":"869:16:79","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"869:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54019,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"859:9:79","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"859:51:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"846:64:79"},{"eventCall":{"arguments":[{"id":54032,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54018,"src":"951:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54033,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"955:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"958:6:79","memberName":"origin","nodeType":"MemberAccess","src":"955:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54035,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53995,"src":"966:8:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54036,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53997,"src":"976:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54031,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53486,"src":"926:24:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"926:57:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54038,"nodeType":"EmitStatement","src":"921:62:79"},{"expression":{"id":54039,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54018,"src":"1001:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54001,"id":54040,"nodeType":"Return","src":"994:9:79"}]},"baseFunctions":[53562],"functionSelector":"d5624222","implemented":true,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"642:11:79","parameters":{"id":53998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53995,"mutability":"mutable","name":"_payload","nameLocation":"669:8:79","nodeType":"VariableDeclaration","scope":54042,"src":"654:23:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":53994,"name":"bytes","nodeType":"ElementaryTypeName","src":"654:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":53997,"mutability":"mutable","name":"_value","nameLocation":"687:6:79","nodeType":"VariableDeclaration","scope":54042,"src":"679:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":53996,"name":"uint128","nodeType":"ElementaryTypeName","src":"679:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"653:41:79"},"returnParameters":{"id":54001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54000,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54042,"src":"721:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":53999,"name":"bytes32","nodeType":"ElementaryTypeName","src":"721:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"720:9:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54075,"nodeType":"FunctionDefinition","src":"1016:288:79","nodes":[],"body":{"id":54074,"nodeType":"Block","src":"1113:191:79","nodes":[],"statements":[{"assignments":[54052],"declarations":[{"constant":false,"id":54052,"mutability":"mutable","name":"baseFee","nameLocation":"1131:7:79","nodeType":"VariableDeclaration","scope":54074,"src":"1123:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54051,"name":"uint128","nodeType":"ElementaryTypeName","src":"1123:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":54059,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54054,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"1149:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1149:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54053,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"1141:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1159:7:79","memberName":"baseFee","nodeType":"MemberAccess","referencedDeclaration":53910,"src":"1141:25:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":54058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1123:45:79"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54061,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54052,"src":"1201:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":54062,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54048,"src":"1211:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1201:16:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54060,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"1178:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1178:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54065,"nodeType":"ExpressionStatement","src":"1178:40:79"},{"eventCall":{"arguments":[{"id":54067,"name":"_repliedTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54044,"src":"1257:10:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54068,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"1269:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1272:6:79","memberName":"origin","nodeType":"MemberAccess","src":"1269:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54070,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54046,"src":"1280:8:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54071,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54048,"src":"1290:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54066,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53497,"src":"1234:22:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1234:63:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54073,"nodeType":"EmitStatement","src":"1229:68:79"}]},"baseFunctions":[53571],"functionSelector":"29336f39","implemented":true,"kind":"function","modifiers":[],"name":"sendReply","nameLocation":"1025:9:79","parameters":{"id":54049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54044,"mutability":"mutable","name":"_repliedTo","nameLocation":"1043:10:79","nodeType":"VariableDeclaration","scope":54075,"src":"1035:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54043,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1035:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54046,"mutability":"mutable","name":"_payload","nameLocation":"1070:8:79","nodeType":"VariableDeclaration","scope":54075,"src":"1055:23:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54045,"name":"bytes","nodeType":"ElementaryTypeName","src":"1055:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54048,"mutability":"mutable","name":"_value","nameLocation":"1088:6:79","nodeType":"VariableDeclaration","scope":54075,"src":"1080:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54047,"name":"uint128","nodeType":"ElementaryTypeName","src":"1080:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1034:61:79"},"returnParameters":{"id":54050,"nodeType":"ParameterList","parameters":[],"src":"1113:0:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54087,"nodeType":"FunctionDefinition","src":"1310:184:79","nodes":[],"body":{"id":54086,"nodeType":"Block","src":"1359:135:79","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":54081,"name":"_claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54077,"src":"1465:10:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54082,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"1477:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1480:6:79","memberName":"origin","nodeType":"MemberAccess","src":"1477:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54080,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53504,"src":"1442:22:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":54084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54085,"nodeType":"EmitStatement","src":"1437:50:79"}]},"baseFunctions":[53576],"functionSelector":"91d5a64c","implemented":true,"kind":"function","modifiers":[],"name":"claimValue","nameLocation":"1319:10:79","parameters":{"id":54078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54077,"mutability":"mutable","name":"_claimedId","nameLocation":"1338:10:79","nodeType":"VariableDeclaration","scope":54087,"src":"1330:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54076,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1330:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1329:20:79"},"returnParameters":{"id":54079,"nodeType":"ParameterList","parameters":[],"src":"1359:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54101,"nodeType":"FunctionDefinition","src":"1500:167:79","nodes":[],"body":{"id":54100,"nodeType":"Block","src":"1565:102:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54093,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54089,"src":"1598:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54092,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"1575:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1575:30:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54095,"nodeType":"ExpressionStatement","src":"1575:30:79"},{"eventCall":{"arguments":[{"id":54097,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54089,"src":"1653:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54096,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53509,"src":"1621:31:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1621:39:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54099,"nodeType":"EmitStatement","src":"1616:44:79"}]},"baseFunctions":[53581],"functionSelector":"704ed542","implemented":true,"kind":"function","modifiers":[],"name":"executableBalanceTopUp","nameLocation":"1509:22:79","parameters":{"id":54090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54089,"mutability":"mutable","name":"_value","nameLocation":"1540:6:79","nodeType":"VariableDeclaration","scope":54101,"src":"1532:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54088,"name":"uint128","nodeType":"ElementaryTypeName","src":"1532:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1531:16:79"},"returnParameters":{"id":54091,"nodeType":"ParameterList","parameters":[],"src":"1565:0:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54122,"nodeType":"FunctionDefinition","src":"1725:202:79","nodes":[],"body":{"id":54121,"nodeType":"Block","src":"1788:139:79","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":54110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54108,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1802:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":54109,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54103,"src":"1815:12:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1802:25:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54120,"nodeType":"IfStatement","src":"1798:123:79","trueBody":{"id":54119,"nodeType":"Block","src":"1829:92:79","statements":[{"expression":{"id":54113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54111,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1843:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54112,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54103,"src":"1855:12:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1843:24:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54114,"nodeType":"ExpressionStatement","src":"1843:24:79"},{"eventCall":{"arguments":[{"id":54116,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1900:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":54115,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53475,"src":"1887:12:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":54117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1887:23:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54118,"nodeType":"EmitStatement","src":"1882:28:79"}]}}]},"baseFunctions":[53586],"functionSelector":"8ea59e1d","implemented":true,"kind":"function","modifiers":[{"id":54106,"kind":"modifierInvocation","modifierName":{"id":54105,"name":"onlyRouter","nameLocations":["1777:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"1777:10:79"},"nodeType":"ModifierInvocation","src":"1777:10:79"}],"name":"updateState","nameLocation":"1734:11:79","parameters":{"id":54104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54103,"mutability":"mutable","name":"newStateHash","nameLocation":"1754:12:79","nodeType":"VariableDeclaration","scope":54122,"src":"1746:20:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54102,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1746:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1745:22:79"},"returnParameters":{"id":54107,"nodeType":"ParameterList","parameters":[],"src":"1788:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54143,"nodeType":"FunctionDefinition","src":"1933:264:79","nodes":[],"body":{"id":54142,"nodeType":"Block","src":"2046:151:79","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":54136,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54124,"src":"2158:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54137,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54126,"src":"2162:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54138,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54128,"src":"2175:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54139,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54130,"src":"2184:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54135,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53520,"src":"2150:7:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2150:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54141,"nodeType":"EmitStatement","src":"2145:45:79"}]},"baseFunctions":[53597],"functionSelector":"c2df6009","implemented":true,"kind":"function","modifiers":[{"id":54133,"kind":"modifierInvocation","modifierName":{"id":54132,"name":"onlyRouter","nameLocations":["2035:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2035:10:79"},"nodeType":"ModifierInvocation","src":"2035:10:79"}],"name":"messageSent","nameLocation":"1942:11:79","parameters":{"id":54131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54124,"mutability":"mutable","name":"id","nameLocation":"1962:2:79","nodeType":"VariableDeclaration","scope":54143,"src":"1954:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54123,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1954:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54126,"mutability":"mutable","name":"destination","nameLocation":"1974:11:79","nodeType":"VariableDeclaration","scope":54143,"src":"1966:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54125,"name":"address","nodeType":"ElementaryTypeName","src":"1966:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54128,"mutability":"mutable","name":"payload","nameLocation":"2002:7:79","nodeType":"VariableDeclaration","scope":54143,"src":"1987:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54127,"name":"bytes","nodeType":"ElementaryTypeName","src":"1987:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54130,"mutability":"mutable","name":"value","nameLocation":"2019:5:79","nodeType":"VariableDeclaration","scope":54143,"src":"2011:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54129,"name":"uint128","nodeType":"ElementaryTypeName","src":"2011:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1953:72:79"},"returnParameters":{"id":54134,"nodeType":"ParameterList","parameters":[],"src":"2046:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54171,"nodeType":"FunctionDefinition","src":"2203:260:79","nodes":[],"body":{"id":54170,"nodeType":"Block","src":"2357:106:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54159,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54145,"src":"2380:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54160,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54149,"src":"2393:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54158,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2367:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2367:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54162,"nodeType":"ExpressionStatement","src":"2367:32:79"},{"eventCall":{"arguments":[{"id":54164,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54147,"src":"2421:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54165,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54149,"src":"2430:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":54166,"name":"replyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54151,"src":"2437:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54167,"name":"replyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54153,"src":"2446:9:79","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":54163,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53531,"src":"2415:5:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":54168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2415:41:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54169,"nodeType":"EmitStatement","src":"2410:46:79"}]},"baseFunctions":[53610],"functionSelector":"c78bde77","implemented":true,"kind":"function","modifiers":[{"id":54156,"kind":"modifierInvocation","modifierName":{"id":54155,"name":"onlyRouter","nameLocations":["2342:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2342:10:79"},"nodeType":"ModifierInvocation","src":"2342:10:79"}],"name":"replySent","nameLocation":"2212:9:79","parameters":{"id":54154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54145,"mutability":"mutable","name":"destination","nameLocation":"2230:11:79","nodeType":"VariableDeclaration","scope":54171,"src":"2222:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54144,"name":"address","nodeType":"ElementaryTypeName","src":"2222:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54147,"mutability":"mutable","name":"payload","nameLocation":"2258:7:79","nodeType":"VariableDeclaration","scope":54171,"src":"2243:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54146,"name":"bytes","nodeType":"ElementaryTypeName","src":"2243:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54149,"mutability":"mutable","name":"value","nameLocation":"2275:5:79","nodeType":"VariableDeclaration","scope":54171,"src":"2267:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54148,"name":"uint128","nodeType":"ElementaryTypeName","src":"2267:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":54151,"mutability":"mutable","name":"replyTo","nameLocation":"2290:7:79","nodeType":"VariableDeclaration","scope":54171,"src":"2282:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54150,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2282:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54153,"mutability":"mutable","name":"replyCode","nameLocation":"2306:9:79","nodeType":"VariableDeclaration","scope":54171,"src":"2299:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":54152,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2299:6:79","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2221:95:79"},"returnParameters":{"id":54157,"nodeType":"ParameterList","parameters":[],"src":"2357:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54193,"nodeType":"FunctionDefinition","src":"2469:192:79","nodes":[],"body":{"id":54192,"nodeType":"Block","src":"2566:95:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54183,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54175,"src":"2589:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54184,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54177,"src":"2602:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54182,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2576:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2576:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54186,"nodeType":"ExpressionStatement","src":"2576:32:79"},{"eventCall":{"arguments":[{"id":54188,"name":"claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54173,"src":"2637:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54189,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54177,"src":"2648:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54187,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53538,"src":"2624:12:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":54190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2624:30:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54191,"nodeType":"EmitStatement","src":"2619:35:79"}]},"baseFunctions":[53619],"functionSelector":"14503e51","implemented":true,"kind":"function","modifiers":[{"id":54180,"kind":"modifierInvocation","modifierName":{"id":54179,"name":"onlyRouter","nameLocations":["2555:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2555:10:79"},"nodeType":"ModifierInvocation","src":"2555:10:79"}],"name":"valueClaimed","nameLocation":"2478:12:79","parameters":{"id":54178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54173,"mutability":"mutable","name":"claimedId","nameLocation":"2499:9:79","nodeType":"VariableDeclaration","scope":54193,"src":"2491:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54172,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2491:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54175,"mutability":"mutable","name":"destination","nameLocation":"2518:11:79","nodeType":"VariableDeclaration","scope":54193,"src":"2510:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54174,"name":"address","nodeType":"ElementaryTypeName","src":"2510:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54177,"mutability":"mutable","name":"value","nameLocation":"2539:5:79","nodeType":"VariableDeclaration","scope":54193,"src":"2531:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54176,"name":"uint128","nodeType":"ElementaryTypeName","src":"2531:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2490:55:79"},"returnParameters":{"id":54181,"nodeType":"ParameterList","parameters":[],"src":"2566:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54207,"nodeType":"FunctionDefinition","src":"2667:114:79","nodes":[],"body":{"id":54206,"nodeType":"Block","src":"2735:46:79","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54201,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"2758:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2758:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54203,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54195,"src":"2768:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54200,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2745:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2745:29:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54205,"nodeType":"ExpressionStatement","src":"2745:29:79"}]},"baseFunctions":[53624],"functionSelector":"dca4a373","implemented":true,"kind":"function","modifiers":[{"id":54198,"kind":"modifierInvocation","modifierName":{"id":54197,"name":"onlyRouter","nameLocations":["2724:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2724:10:79"},"nodeType":"ModifierInvocation","src":"2724:10:79"}],"name":"executableBalanceBurned","nameLocation":"2676:23:79","parameters":{"id":54196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54195,"mutability":"mutable","name":"value","nameLocation":"2708:5:79","nodeType":"VariableDeclaration","scope":54207,"src":"2700:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54194,"name":"uint128","nodeType":"ElementaryTypeName","src":"2700:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2699:15:79"},"returnParameters":{"id":54199,"nodeType":"ParameterList","parameters":[],"src":"2735:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54250,"nodeType":"FunctionDefinition","src":"2787:465:79","nodes":[],"body":{"id":54249,"nodeType":"Block","src":"2930:322:79","nodes":[],"statements":[{"assignments":[54221],"declarations":[{"constant":false,"id":54221,"mutability":"mutable","name":"initNonce","nameLocation":"3017:9:79","nodeType":"VariableDeclaration","scope":54249,"src":"3009:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54220,"name":"uint256","nodeType":"ElementaryTypeName","src":"3009:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54224,"initialValue":{"id":54223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3029:7:79","subExpression":{"id":54222,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53978,"src":"3029:5:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3009:27:79"},{"assignments":[54226],"declarations":[{"constant":false,"id":54226,"mutability":"mutable","name":"id","nameLocation":"3054:2:79","nodeType":"VariableDeclaration","scope":54249,"src":"3046:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54225,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3046:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54237,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":54232,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3094:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":54231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3086:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54230,"name":"address","nodeType":"ElementaryTypeName","src":"3086:7:79","typeDescriptions":{}}},"id":54233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3086:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54234,"name":"initNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54221,"src":"3101:9:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54228,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3069:3:79","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3073:12:79","memberName":"encodePacked","nodeType":"MemberAccess","src":"3069:16:79","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3069:42:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54227,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3059:9:79","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3059:53:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3046:66:79"},{"eventCall":{"arguments":[{"id":54239,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54215,"src":"3160:17:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54238,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53509,"src":"3128:31:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3128:50:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54241,"nodeType":"EmitStatement","src":"3123:55:79"},{"eventCall":{"arguments":[{"id":54243,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54226,"src":"3218:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54244,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54209,"src":"3222:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54245,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54211,"src":"3230:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54246,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54213,"src":"3239:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54242,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53486,"src":"3193:24:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3193:52:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54248,"nodeType":"EmitStatement","src":"3188:57:79"}]},"baseFunctions":[53635],"functionSelector":"de1dd2e0","implemented":true,"kind":"function","modifiers":[{"id":54218,"kind":"modifierInvocation","modifierName":{"id":54217,"name":"onlyRouter","nameLocations":["2915:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2915:10:79"},"nodeType":"ModifierInvocation","src":"2915:10:79"}],"name":"initMessage","nameLocation":"2796:11:79","parameters":{"id":54216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54209,"mutability":"mutable","name":"source","nameLocation":"2816:6:79","nodeType":"VariableDeclaration","scope":54250,"src":"2808:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54208,"name":"address","nodeType":"ElementaryTypeName","src":"2808:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54211,"mutability":"mutable","name":"payload","nameLocation":"2839:7:79","nodeType":"VariableDeclaration","scope":54250,"src":"2824:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54210,"name":"bytes","nodeType":"ElementaryTypeName","src":"2824:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54213,"mutability":"mutable","name":"value","nameLocation":"2856:5:79","nodeType":"VariableDeclaration","scope":54250,"src":"2848:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54212,"name":"uint128","nodeType":"ElementaryTypeName","src":"2848:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":54215,"mutability":"mutable","name":"executableBalance","nameLocation":"2871:17:79","nodeType":"VariableDeclaration","scope":54250,"src":"2863:25:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54214,"name":"uint128","nodeType":"ElementaryTypeName","src":"2863:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2807:82:79"},"returnParameters":{"id":54219,"nodeType":"ParameterList","parameters":[],"src":"2930:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54263,"nodeType":"ModifierDefinition","src":"3258:131:79","nodes":[],"body":{"id":54262,"nodeType":"Block","src":"3280:109:79","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":54257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54253,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3298:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3302:6:79","memberName":"sender","nodeType":"MemberAccess","src":"3298:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54255,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3312:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3312:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3298:22:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6520666f72206f7065726174696f6e","id":54258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3322:48:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""},"value":"only router contract is eligible for operation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""}],"id":54252,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3290:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3290:81:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54260,"nodeType":"ExpressionStatement","src":"3290:81:79"},{"id":54261,"nodeType":"PlaceholderStatement","src":"3381:1:79"}]},"name":"onlyRouter","nameLocation":"3267:10:79","parameters":{"id":54251,"nodeType":"ParameterList","parameters":[],"src":"3277:2:79"},"virtual":false,"visibility":"internal"},{"id":54300,"nodeType":"FunctionDefinition","src":"3429:332:79","nodes":[],"body":{"id":54299,"nodeType":"Block","src":"3485:276:79","nodes":[],"statements":[{"assignments":[54269],"declarations":[{"constant":false,"id":54269,"mutability":"mutable","name":"routerAddress","nameLocation":"3503:13:79","nodeType":"VariableDeclaration","scope":54299,"src":"3495:21:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54268,"name":"address","nodeType":"ElementaryTypeName","src":"3495:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54272,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54270,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3519:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3519:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3495:32:79"},{"assignments":[54275],"declarations":[{"constant":false,"id":54275,"mutability":"mutable","name":"wrappedVara","nameLocation":"3551:11:79","nodeType":"VariableDeclaration","scope":54299,"src":"3538:24:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":54274,"nodeType":"UserDefinedTypeName","pathNode":{"id":54273,"name":"IWrappedVara","nameLocations":["3538:12:79"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"3538:12:79"},"referencedDeclaration":53962,"src":"3538:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":54283,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":54278,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54269,"src":"3586:13:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54277,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"3578:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3578:22:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3601:11:79","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53810,"src":"3578:34:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":54281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3578:36:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54276,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"3565:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":54282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3565:50:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"3538:77:79"},{"assignments":[54285],"declarations":[{"constant":false,"id":54285,"mutability":"mutable","name":"success","nameLocation":"3631:7:79","nodeType":"VariableDeclaration","scope":54299,"src":"3626:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54284,"name":"bool","nodeType":"ElementaryTypeName","src":"3626:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":54293,"initialValue":{"arguments":[{"expression":{"id":54288,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"3666:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3669:6:79","memberName":"origin","nodeType":"MemberAccess","src":"3666:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54290,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54269,"src":"3677:13:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54291,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54265,"src":"3692:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":54286,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54275,"src":"3641:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":54287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3653:12:79","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":41905,"src":"3641:24:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":54292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3641:58:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3626:73:79"},{"expression":{"arguments":[{"id":54295,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54285,"src":"3718:7:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":54296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3727:26:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":54294,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3710:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3710:44:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54298,"nodeType":"ExpressionStatement","src":"3710:44:79"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValueToRouter","nameLocation":"3438:22:79","parameters":{"id":54266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54265,"mutability":"mutable","name":"_value","nameLocation":"3469:6:79","nodeType":"VariableDeclaration","scope":54300,"src":"3461:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54264,"name":"uint128","nodeType":"ElementaryTypeName","src":"3461:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3460:16:79"},"returnParameters":{"id":54267,"nodeType":"ParameterList","parameters":[],"src":"3485:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":54338,"nodeType":"FunctionDefinition","src":"3767:316:79","nodes":[],"body":{"id":54337,"nodeType":"Block","src":"3833:250:79","nodes":[],"statements":[{"assignments":[54309],"declarations":[{"constant":false,"id":54309,"mutability":"mutable","name":"wrappedVara","nameLocation":"3856:11:79","nodeType":"VariableDeclaration","scope":54337,"src":"3843:24:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":54308,"nodeType":"UserDefinedTypeName","pathNode":{"id":54307,"name":"IWrappedVara","nameLocations":["3843:12:79"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"3843:12:79"},"referencedDeclaration":53962,"src":"3843:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":54318,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54312,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3891:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3891:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54311,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"3883:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3883:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3901:11:79","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53810,"src":"3883:29:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":54316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3883:31:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54310,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"3870:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":54317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3870:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"3843:72:79"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54319,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54304,"src":"3930:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":54320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3939:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3930:10:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54336,"nodeType":"IfStatement","src":"3926:151:79","trueBody":{"id":54335,"nodeType":"Block","src":"3942:135:79","statements":[{"assignments":[54323],"declarations":[{"constant":false,"id":54323,"mutability":"mutable","name":"success","nameLocation":"3961:7:79","nodeType":"VariableDeclaration","scope":54335,"src":"3956:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54322,"name":"bool","nodeType":"ElementaryTypeName","src":"3956:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":54329,"initialValue":{"arguments":[{"id":54326,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54302,"src":"3992:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54327,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54304,"src":"4005:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":54324,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54309,"src":"3971:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":54325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3983:8:79","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":41873,"src":"3971:20:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":54328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3971:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3956:55:79"},{"expression":{"arguments":[{"id":54331,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54323,"src":"4034:7:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f2073656e64205756617261","id":54332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4043:22:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""},"value":"failed to send WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""}],"id":54330,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4026:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4026:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54334,"nodeType":"ExpressionStatement","src":"4026:40:79"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_sendValueTo","nameLocation":"3776:12:79","parameters":{"id":54305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54302,"mutability":"mutable","name":"destination","nameLocation":"3797:11:79","nodeType":"VariableDeclaration","scope":54338,"src":"3789:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54301,"name":"address","nodeType":"ElementaryTypeName","src":"3789:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54304,"mutability":"mutable","name":"value","nameLocation":"3818:5:79","nodeType":"VariableDeclaration","scope":54338,"src":"3810:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54303,"name":"uint128","nodeType":"ElementaryTypeName","src":"3810:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3788:36:79"},"returnParameters":{"id":54306,"nodeType":"ParameterList","parameters":[],"src":"3833:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":53973,"name":"IMirror","nameLocations":["304:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":53636,"src":"304:7:79"},"id":53974,"nodeType":"InheritanceSpecifier","src":"304:7:79"}],"canonicalName":"Mirror","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[54339,53636],"name":"Mirror","nameLocation":"294:6:79","scope":54340,"usedErrors":[],"usedEvents":[53475,53486,53497,53504,53509,53520,53531,53538]}],"license":"UNLICENSED"},"id":79} \ No newline at end of file +{"abi":[{"type":"function","name":"claimValue","inputs":[{"name":"_claimedId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executableBalanceBurned","inputs":[{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"executableBalanceTopUp","inputs":[{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"initMessage","inputs":[{"name":"source","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"executableBalance","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"messageSent","inputs":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"nonce","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"replySent","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyTo","type":"bytes32","internalType":"bytes32"},{"name":"replyCode","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sendMessage","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"sendReply","inputs":[{"name":"_repliedTo","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"stateHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"updateState","inputs":[{"name":"newStateHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"valueClaimed","inputs":[{"name":"claimedId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ExecutableBalanceTopUpRequested","inputs":[{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Message","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destination","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"MessageQueueingRequested","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"Reply","inputs":[{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"replyTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"replyCode","type":"bytes4","indexed":true,"internalType":"bytes4"}],"anonymous":false},{"type":"event","name":"ReplyQueueingRequested","inputs":[{"name":"repliedTo","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"},{"name":"payload","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"StateChanged","inputs":[{"name":"stateHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ValueClaimed","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"value","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"event","name":"ValueClaimingRequested","inputs":[{"name":"claimedId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"source","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234601557610c2f908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806314503e51146106df57806329336f3914610610578063701da98e146105f4578063704ed542146105a25780638ea59e1d1461054157806391d5a64c14610500578063affed0e0146104e3578063c2df60091461044d578063c78bde7714610386578063d56242221461023f578063dca4a37314610201578063de1dd2e0146100d85763f887ea40146100a8575f80fd5b346100d4575f3660031901126100d45760206100c2610958565b6040516001600160a01b039091168152f35b5f80fd5b346100d45760803660031901126100d4576100f161076b565b60243567ffffffffffffffff81116100d4576101327f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c69136906004016107c3565b926101fc61013e610781565b6101466107ad565b956101626001600160a01b0361015a610958565b1633146107f1565b7f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206001546101918161092b565b6001556040513060601b6bffffffffffffffffffffffff191683820190815260148101929092526101cf81603484015b03601f198101835282610854565b519020986001600160801b0360405191168152a16040516001600160a01b039094169693948594856108fd565b0390a2005b346100d45760203660031901126100d45761023d61021d610797565b6102306001600160a01b0361015a610958565b610238610958565b6109c3565b005b60403660031901126100d45760043567ffffffffffffffff81116100d45761026b9036906004016107c3565b602435916001600160801b03831683036100d45760049260206001600160a01b03610294610958565b16604051958680926337792e1d60e11b82525afa90811561037b576102ed6102e8827f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6946020985f9161034e575b506108a9565b610aee565b6001546102f98161092b565b6001556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261032d81603484016101c1565b51902093610343604051928392329688856108fd565b0390a2604051908152f35b61036e9150893d8b11610374575b6103668183610854565b81019061088a565b896102e2565b503d61035c565b6040513d5f823e3d90fd5b346100d45760a03660031901126100d45761039f61076b565b60243567ffffffffffffffff81116100d4576103bf9036906004016107c3565b91906103c9610781565b926084359363ffffffff60e01b85168095036100d4577fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c69361041a9082906102386001600160a01b0361015a610958565b6001600160801b036104396040519485946060865260608601916108dd565b9116602083015260643560408301520390a2005b346100d45760803660031901126100d457610466610755565b60443567ffffffffffffffff81116100d4576104a77f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117739136906004016107c3565b90926101fc6104b46107ad565b6104c76001600160a01b0361015a610958565b6040516001600160a01b039093169592938493600435856108fd565b346100d4575f3660031901126100d4576020600154604051908152f35b346100d45760203660031901126100d45760405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203292a2005b346100d45760203660031901126100d4576004356105686001600160a01b0361015a610958565b805f540361057257005b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930925f55604051908152a1005b60203660031901126100d4577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206105d9610797565b6105e281610aee565b6001600160801b0360405191168152a1005b346100d4575f3660031901126100d45760205f54604051908152f35b60603660031901126100d45760243567ffffffffffffffff81116100d45761063d600491369083016107c3565b610648929192610781565b9060206001600160a01b0361065b610958565b16604051948580926337792e1d60e11b82525afa92831561037b576102e8837fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f956106ac935f916106c057506108a9565b6101fc6040519283923296600435856108fd565b6106d9915060203d602011610374576103668183610854565b886102e2565b346100d45760603660031901126100d4577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783604061071b610755565b61073c610726610781565b9182906102386001600160a01b0361015a610958565b6001600160801b038251916004358352166020820152a1005b602435906001600160a01b03821682036100d457565b600435906001600160a01b03821682036100d457565b604435906001600160801b03821682036100d457565b600435906001600160801b03821682036100d457565b606435906001600160801b03821682036100d457565b9181601f840112156100d45782359167ffffffffffffffff83116100d457602083818601950101116100d457565b156107f857565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b90601f8019910116810190811067ffffffffffffffff82111761087657604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126100d457516001600160801b03811681036100d45790565b906001600160801b03809116911601906001600160801b0382116108c957565b634e487b7160e01b5f52601160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610924916001600160801b039397969786526060602087015260608601916108dd565b9416910152565b5f1981146108c95760010190565b908160209103126100d457516001600160a01b03811681036100d45790565b6040516303e21fa960e61b8152602081600481305afa90811561037b575f9161097f575090565b6109a1915060203d6020116109a4575b6109998183610854565b810190610939565b90565b503d61098f565b908160209103126100d4575180151581036100d45790565b60049160206001600160a01b036109d8610958565b166040519485809263088f50cf60e41b82525afa92831561037b575f93610ac4575b506001600160801b031680610a0e57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af190811561037b575f91610a95575b5015610a5957565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b610ab7915060203d602011610abd575b610aaf8183610854565b8101906109ab565b5f610a51565b503d610aa5565b6001600160801b03919350610ae79060203d6020116109a4576109998183610854565b92906109fa565b6001600160a01b03610afe610958565b60405163088f50cf60e41b8152911691602082600481865afa801561037b576001600160801b03935f6064926020958291610bdc575b5060405196879586946323b872dd60e01b8652326004870152602486015216604484015260018060a01b03165af190811561037b575f91610bbd575b5015610b7857565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b610bd6915060203d602011610abd57610aaf8183610854565b5f610b70565b610bf39150863d88116109a4576109998183610854565b5f610b3456fea2646970667358221220c09c8d87038881298619a6f07f88c2e8690bca0c1b24aa2acdde31effd9998fb64736f6c634300081a0033","sourceMap":"285:3800:79:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c806314503e51146106df57806329336f3914610610578063701da98e146105f4578063704ed542146105a25780638ea59e1d1461054157806391d5a64c14610500578063affed0e0146104e3578063c2df60091461044d578063c78bde7714610386578063d56242221461023f578063dca4a37314610201578063de1dd2e0146100d85763f887ea40146100a8575f80fd5b346100d4575f3660031901126100d45760206100c2610958565b6040516001600160a01b039091168152f35b5f80fd5b346100d45760803660031901126100d4576100f161076b565b60243567ffffffffffffffff81116100d4576101327f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c69136906004016107c3565b926101fc61013e610781565b6101466107ad565b956101626001600160a01b0361015a610958565b1633146107f1565b7f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206001546101918161092b565b6001556040513060601b6bffffffffffffffffffffffff191683820190815260148101929092526101cf81603484015b03601f198101835282610854565b519020986001600160801b0360405191168152a16040516001600160a01b039094169693948594856108fd565b0390a2005b346100d45760203660031901126100d45761023d61021d610797565b6102306001600160a01b0361015a610958565b610238610958565b6109c3565b005b60403660031901126100d45760043567ffffffffffffffff81116100d45761026b9036906004016107c3565b602435916001600160801b03831683036100d45760049260206001600160a01b03610294610958565b16604051958680926337792e1d60e11b82525afa90811561037b576102ed6102e8827f3527a119fe7f25d965cb7abc58139f031e8909b8592488c7926862d569e435c6946020985f9161034e575b506108a9565b610aee565b6001546102f98161092b565b6001556040513060601b6bffffffffffffffffffffffff1916878201908152601481019290925261032d81603484016101c1565b51902093610343604051928392329688856108fd565b0390a2604051908152f35b61036e9150893d8b11610374575b6103668183610854565b81019061088a565b896102e2565b503d61035c565b6040513d5f823e3d90fd5b346100d45760a03660031901126100d45761039f61076b565b60243567ffffffffffffffff81116100d4576103bf9036906004016107c3565b91906103c9610781565b926084359363ffffffff60e01b85168095036100d4577fe240a19e4a4ef8e5861c0eea48f9ab2cdb47bfe98347c94ccabb9c45f7d8d1c69361041a9082906102386001600160a01b0361015a610958565b6001600160801b036104396040519485946060865260608601916108dd565b9116602083015260643560408301520390a2005b346100d45760803660031901126100d457610466610755565b60443567ffffffffffffffff81116100d4576104a77f9c4ffe7286aed9eb205c8adb12b51219122c7e56c67017f312af0e15f80117739136906004016107c3565b90926101fc6104b46107ad565b6104c76001600160a01b0361015a610958565b6040516001600160a01b039093169592938493600435856108fd565b346100d4575f3660031901126100d4576020600154604051908152f35b346100d45760203660031901126100d45760405160043581527f0354817698da67944179457b89e15c1c57ca7b8cfd9d80eab1d09c258f6c497860203292a2005b346100d45760203660031901126100d4576004356105686001600160a01b0361015a610958565b805f540361057257005b6020817f5c601f20d27885120b6fed87a4c313849b86eaddc9d28e7685e2e66a9c080930925f55604051908152a1005b60203660031901126100d4577f85ba4ebb0990fc588bfbb287e2e810a77c858e0a69485d6a938c52c05423666760206105d9610797565b6105e281610aee565b6001600160801b0360405191168152a1005b346100d4575f3660031901126100d45760205f54604051908152f35b60603660031901126100d45760243567ffffffffffffffff81116100d45761063d600491369083016107c3565b610648929192610781565b9060206001600160a01b0361065b610958565b16604051948580926337792e1d60e11b82525afa92831561037b576102e8837fb64dad8a89028819d048f9c75ec4c516341da68972bb68a8e1262b5443c61e7f956106ac935f916106c057506108a9565b6101fc6040519283923296600435856108fd565b6106d9915060203d602011610374576103668183610854565b886102e2565b346100d45760603660031901126100d4577fa217f2987a7942c2966f1fd16d39097862308325249e8b9fb4c00a430fd65783604061071b610755565b61073c610726610781565b9182906102386001600160a01b0361015a610958565b6001600160801b038251916004358352166020820152a1005b602435906001600160a01b03821682036100d457565b600435906001600160a01b03821682036100d457565b604435906001600160801b03821682036100d457565b600435906001600160801b03821682036100d457565b606435906001600160801b03821682036100d457565b9181601f840112156100d45782359167ffffffffffffffff83116100d457602083818601950101116100d457565b156107f857565b60405162461bcd60e51b815260206004820152602e60248201527f6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6560448201526d103337b91037b832b930ba34b7b760911b6064820152608490fd5b90601f8019910116810190811067ffffffffffffffff82111761087657604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126100d457516001600160801b03811681036100d45790565b906001600160801b03809116911601906001600160801b0382116108c957565b634e487b7160e01b5f52601160045260245ffd5b908060209392818452848401375f828201840152601f01601f1916010190565b92604092610924916001600160801b039397969786526060602087015260608601916108dd565b9416910152565b5f1981146108c95760010190565b908160209103126100d457516001600160a01b03811681036100d45790565b6040516303e21fa960e61b8152602081600481305afa90811561037b575f9161097f575090565b6109a1915060203d6020116109a4575b6109998183610854565b810190610939565b90565b503d61098f565b908160209103126100d4575180151581036100d45790565b60049160206001600160a01b036109d8610958565b166040519485809263088f50cf60e41b82525afa92831561037b575f93610ac4575b506001600160801b031680610a0e57505050565b60405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291602091839160449183915f91165af190811561037b575f91610a95575b5015610a5957565b60405162461bcd60e51b81526020600482015260146024820152736661696c656420746f2073656e6420575661726160601b6044820152606490fd5b610ab7915060203d602011610abd575b610aaf8183610854565b8101906109ab565b5f610a51565b503d610aa5565b6001600160801b03919350610ae79060203d6020116109a4576109998183610854565b92906109fa565b6001600160a01b03610afe610958565b60405163088f50cf60e41b8152911691602082600481865afa801561037b576001600160801b03935f6064926020958291610bdc575b5060405196879586946323b872dd60e01b8652326004870152602486015216604484015260018060a01b03165af190811561037b575f91610bbd575b5015610b7857565b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b610bd6915060203d602011610abd57610aaf8183610854565b5f610b70565b610bf39150863d88116109a4576109998183610854565b5f610b3456fea2646970667358221220c09c8d87038881298619a6f07f88c2e8690bca0c1b24aa2acdde31effd9998fb64736f6c634300081a0033","sourceMap":"285:3800:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;3193:52;285:3800;;;;;;:::i;:::-;;3193:52;285:3800;;:::i;:::-;;;:::i;:::-;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;:::-;285:3800;3298:10;:22;3290:81;:::i;:::-;3128:50;285:3800;3029:7;285:3800;3029:7;;;:::i;:::-;;285:3800;;;3094:4;285:3800;;-1:-1:-1;;285:3800:79;3069:42;;;285:3800;;;;;;;;;;3069:42;285:3800;;;;3069:42;;869:40;;3069:42;;;;;;:::i;:::-;285:3800;3059:53;;285:3800;-1:-1:-1;;;;;285:3800:79;;;;;;3128:50;285:3800;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;3193:52;:::i;:::-;;;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;2768:5;285:3800;;:::i;:::-;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;2758:8;;:::i;:::-;2768:5;:::i;:::-;285:3800;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;-1:-1:-1;;;;;766:8:79;;:::i;:::-;285:3800;;;;;;;;;;758:27;;;;;;;;;818:16;;758:27;926:57;758:27;285:3800;758:27;285:3800;758:27;;;285:3800;818:16;;:::i;:::-;;:::i;:::-;901:7;285:3800;901:7;;;:::i;:::-;;285:3800;;;894:4;285:3800;;-1:-1:-1;;285:3800:79;869:40;;;285:3800;;;;;;;;;;869:40;285:3800;;;;869:40;285:3800;869:40;285:3800;859:51;;285:3800;926:57;285:3800;;955:9;;;;926:57;;;;:::i;:::-;;;;285:3800;;;;;;758:27;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;285:3800;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;2415:41;;2393:5;;285:3800;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;2393:5::-;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2415:41;;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;:::i;:::-;;;;;;;;;2150:40;285:3800;;;;;;:::i;:::-;;;2150:40;285:3800;;:::i;:::-;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;285:3800;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;2150:40;:::i;285:3800::-;;;;;;-1:-1:-1;;285:3800:79;;;;;420:20;285:3800;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;1442:45;285:3800;1477:9;1442:45;;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;3290:81::-;285:3800;;;1802:25;1798:123;;285:3800;1798:123;285:3800;;1887:23;285:3800;;;;;;;;1887:23;285:3800;;;;-1:-1:-1;;285:3800:79;;;;1621:39;285:3800;;;:::i;:::-;1598:6;;;:::i;:::-;-1:-1:-1;;;;;285:3800:79;;;;;;1621:39;285:3800;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;-1:-1:-1;;285:3800:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1149:8:79;;:::i;:::-;285:3800;;;;;;;;;;1141:27;;;;;;;;;1201:16;1141:27;1234:63;1141:27;1201:16;1141:27;285:3800;1141:27;;;1201:16;;:::i;:::-;1234:63;285:3800;;1269:9;;;;285:3800;;;1234:63;;:::i;1141:27::-;;;;285:3800;1141:27;285:3800;1141:27;;;;;;;:::i;:::-;;;;285:3800;;;;;;-1:-1:-1;;285:3800:79;;;;2624:30;285:3800;;;:::i;:::-;2602:5;285:3800;;:::i;:::-;;;;3290:81;-1:-1:-1;;;;;3312:8:79;;:::i;2602:5::-;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;2624:30;285:3800;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;285:3800:79;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;285:3800:79;;;;;;;;;;;;;;;;;-1:-1:-1;;;285:3800:79;;;;;;;;;;869:40;;285:3800;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;285:3800:79;;;;;-1:-1:-1;285:3800:79;;;;;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;:::o;:::-;;-1:-1:-1;;;;;285:3800:79;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;285:3800:79;;;;;;;;-1:-1:-1;;285:3800:79;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;-1:-1:-1;;285:3800:79;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;285:3800:79;;;;;;;:::o;489:108::-;285:3800;;-1:-1:-1;;;554:36:79;;;285:3800;554:36;285:3800;575:4;554:36;;;;;;;-1:-1:-1;554:36:79;;;547:43;489:108;:::o;554:36::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;489:108;:::o;554:36::-;;;;;285:3800;;;;;;;;;;;;;;;;;;:::o;3767:316::-;3883:31;;;-1:-1:-1;;;;;3891:8:79;;:::i;:::-;285:3800;;;;;;;;;;3883:31;;;;;;;;;-1:-1:-1;3883:31:79;;;3767:316;285:3800;-1:-1:-1;;;;;285:3800:79;3930:10;3926:151;;3767:316;;;:::o;3926:151::-;285:3800;;-1:-1:-1;;;3971:40:79;;-1:-1:-1;;;;;285:3800:79;;;3883:31;3971:40;;285:3800;;;;;;;;;3883:31;;285:3800;;3971:40;;285:3800;;-1:-1:-1;;285:3800:79;3971:40;;;;;;;-1:-1:-1;3971:40:79;;;3926:151;285:3800;;;;3767:316::o;285:3800::-;;;-1:-1:-1;;;285:3800:79;;3883:31;;285:3800;;;;;;;;-1:-1:-1;;;3971:40:79;285:3800;;;;;;3971:40;;;;3883:31;3971:40;3883:31;3971:40;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3883:31;-1:-1:-1;;;;;3883:31:79;;;;;;;;;;;;;;;:::i;:::-;;;;;3429:332;-1:-1:-1;;;;;3519:8:79;;:::i;:::-;285:3800;;-1:-1:-1;;;3578:36:79;;285:3800;;;3578:36;285:3800;3578:36;285:3800;;3578:36;;;;;;-1:-1:-1;;;;;3578:36:79;-1:-1:-1;3641:58:79;3578:36;;;;;;;3429:332;285:3800;;;;;;;;;;;3641:58;;3666:9;3578:36;3641:58;;285:3800;;;;;;;;;;;;;;;;3641:58;;;;;;;-1:-1:-1;3641:58:79;;;3429:332;285:3800;;;;3429:332::o;285:3800::-;;;-1:-1:-1;;;285:3800:79;;3578:36;;285:3800;;;;;;;;;;;;;3641:58;;285:3800;3641:58;;;;3578:36;3641:58;3578:36;3641:58;;;;;;;:::i;:::-;;;;3578:36;;;;;;;;;;;;;;:::i;:::-;;;","linkReferences":{}},"methodIdentifiers":{"claimValue(bytes32)":"91d5a64c","executableBalanceBurned(uint128)":"dca4a373","executableBalanceTopUp(uint128)":"704ed542","initMessage(address,bytes,uint128,uint128)":"de1dd2e0","messageSent(bytes32,address,bytes,uint128)":"c2df6009","nonce()":"affed0e0","replySent(address,bytes,uint128,bytes32,bytes4)":"c78bde77","router()":"f887ea40","sendMessage(bytes,uint128)":"d5624222","sendReply(bytes32,bytes,uint128)":"29336f39","stateHash()":"701da98e","updateState(bytes32)":"8ea59e1d","valueClaimed(bytes32,address,uint128)":"14503e51"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ExecutableBalanceTopUpRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"Message\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"MessageQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"Reply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"repliedTo\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ReplyQueueingRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"}],\"name\":\"StateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"ValueClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"ValueClaimingRequested\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_claimedId\",\"type\":\"bytes32\"}],\"name\":\"claimValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceBurned\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"executableBalanceTopUp\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"executableBalance\",\"type\":\"uint128\"}],\"name\":\"initMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"messageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"replyTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"replyCode\",\"type\":\"bytes4\"}],\"name\":\"replySent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_repliedTo\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"sendReply\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"}],\"name\":\"updateState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"claimedId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"name\":\"valueClaimed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ExecutableBalanceTopUpRequested(uint128)\":{\"details\":\"Emitted when a user requests program's executable balance top up with his tokens. NOTE: It's event for NODES: it requires to top up balance of the program.\"},\"Message(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when the program sends outgoing message. NOTE: It's event for USERS: it informs about new message sent from program.\"},\"MessageQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new message is sent to be queued. NOTE: It's event for NODES: it requires to insert message in the program's queue.\"},\"Reply(bytes,uint128,bytes32,bytes4)\":{\"details\":\"Emitted when the program sends reply message. NOTE: It's event for USERS: it informs about new reply sent from program.\"},\"ReplyQueueingRequested(bytes32,address,bytes,uint128)\":{\"details\":\"Emitted when a new reply is sent and requested to be verified and queued. NOTE: It's event for NODES: it requires to insert message in the program's queue, if message, exists.\"},\"StateChanged(bytes32)\":{\"details\":\"Emitted when the state hash of program is changed. NOTE: It's event for USERS: it informs about state changes.\"},\"ValueClaimed(bytes32,uint128)\":{\"details\":\"Emitted when a user succeed in claiming value request and receives balance. NOTE: It's event for USERS: it informs about value claimed.\"},\"ValueClaimingRequested(bytes32,address)\":{\"details\":\"Emitted when a reply's value is requested to be verified and claimed. NOTE: It's event for NODES: it requires to claim value from message, if exists.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Mirror.sol\":\"Mirror\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x36e8acfa5a520ec889894f5b7de13b67277bb406a407f4bf79890df52ac73de5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://85ba277000fe1c7438ad1d79fd2c827a3cc25b5a5a5b1a8087d92017de5fa4d6\",\"dweb:/ipfs/Qmd53H2dYuYw8rBHsReR7K7EahV5e64WpH79BVaKAvzfNw\"]},\"src/IMirrorProxy.sol\":{\"keccak256\":\"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469\",\"dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde\",\"dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Mirror.sol\":{\"keccak256\":\"0x855debb1eedc59a930167ab2178bd306fdd9a780ad7ed95fdae0c2a344336c10\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b94e02729ecce1dab9019b3441840bb7ccebddba00d0c4f266ba490f44a78a77\",\"dweb:/ipfs/Qmf2ibL2SdGbU6bLvcTEm9dR3tr3hTYT6qrDkyVFWrTKV8\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ExecutableBalanceTopUpRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"destination","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"Message","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"MessageQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false},{"internalType":"bytes32","name":"replyTo","type":"bytes32","indexed":false},{"internalType":"bytes4","name":"replyCode","type":"bytes4","indexed":true}],"type":"event","name":"Reply","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"repliedTo","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true},{"internalType":"bytes","name":"payload","type":"bytes","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ReplyQueueingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"stateHash","type":"bytes32","indexed":false}],"type":"event","name":"StateChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"uint128","name":"value","type":"uint128","indexed":false}],"type":"event","name":"ValueClaimed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32","indexed":false},{"internalType":"address","name":"source","type":"address","indexed":true}],"type":"event","name":"ValueClaimingRequested","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_claimedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"claimValue"},{"inputs":[{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"executableBalanceBurned"},{"inputs":[{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"executableBalanceTopUp"},{"inputs":[{"internalType":"address","name":"source","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"uint128","name":"executableBalance","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"initMessage"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"messageSent"},{"inputs":[],"stateMutability":"view","type":"function","name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"bytes32","name":"replyTo","type":"bytes32"},{"internalType":"bytes4","name":"replyCode","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"replySent"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_repliedTo","type":"bytes32"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"sendReply"},{"inputs":[],"stateMutability":"view","type":"function","name":"stateHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"newStateHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateState"},{"inputs":[{"internalType":"bytes32","name":"claimedId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"valueClaimed"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Mirror.sol":"Mirror"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x36e8acfa5a520ec889894f5b7de13b67277bb406a407f4bf79890df52ac73de5","urls":["bzz-raw://85ba277000fe1c7438ad1d79fd2c827a3cc25b5a5a5b1a8087d92017de5fa4d6","dweb:/ipfs/Qmd53H2dYuYw8rBHsReR7K7EahV5e64WpH79BVaKAvzfNw"],"license":"UNLICENSED"},"src/IMirrorProxy.sol":{"keccak256":"0x56448b8905cc408f5656d47c893f3cda6623992ef1ba6a2e0a1be06b04c0b570","urls":["bzz-raw://7d148123c4f51abce8b8e92c45830dd7de3829e228f37fd2e9093616dd7b2469","dweb:/ipfs/QmTkohe2uFVsJiCKdu7QBFYff6L3tzvE7rTjnRhnjdgEmG"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3","urls":["bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde","dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Mirror.sol":{"keccak256":"0x855debb1eedc59a930167ab2178bd306fdd9a780ad7ed95fdae0c2a344336c10","urls":["bzz-raw://b94e02729ecce1dab9019b3441840bb7ccebddba00d0c4f266ba490f44a78a77","dweb:/ipfs/Qmf2ibL2SdGbU6bLvcTEm9dR3tr3hTYT6qrDkyVFWrTKV8"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[{"astId":53976,"contract":"src/Mirror.sol:Mirror","label":"stateHash","offset":0,"slot":"0","type":"t_bytes32"},{"astId":53978,"contract":"src/Mirror.sol:Mirror","label":"nonce","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/Mirror.sol","id":54340,"exportedSymbols":{"IMirror":[53636],"IMirrorProxy":[53644],"IRouter":[53951],"IWrappedVara":[53962],"Mirror":[54339]},"nodeType":"SourceUnit","src":"39:4047:79","nodes":[{"id":53964,"nodeType":"PragmaDirective","src":"39:24:79","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":53966,"nodeType":"ImportDirective","src":"65:48:79","nodes":[],"absolutePath":"src/IMirrorProxy.sol","file":"./IMirrorProxy.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53645,"symbolAliases":[{"foreign":{"id":53965,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53644,"src":"73:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53968,"nodeType":"ImportDirective","src":"114:38:79","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53637,"symbolAliases":[{"foreign":{"id":53967,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"122:7:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53970,"nodeType":"ImportDirective","src":"153:38:79","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53952,"symbolAliases":[{"foreign":{"id":53969,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"161:7:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":53972,"nodeType":"ImportDirective","src":"192:48:79","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":54340,"sourceUnit":53963,"symbolAliases":[{"foreign":{"id":53971,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"200:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54339,"nodeType":"ContractDefinition","src":"285:3800:79","nodes":[{"id":53976,"nodeType":"VariableDeclaration","src":"318:24:79","nodes":[],"baseFunctions":[53543],"constant":false,"functionSelector":"701da98e","mutability":"mutable","name":"stateHash","nameLocation":"333:9:79","scope":54339,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":53975,"name":"bytes32","nodeType":"ElementaryTypeName","src":"318:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":53978,"nodeType":"VariableDeclaration","src":"420:20:79","nodes":[],"baseFunctions":[53548],"constant":false,"functionSelector":"affed0e0","mutability":"mutable","name":"nonce","nameLocation":"435:5:79","scope":54339,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53977,"name":"uint256","nodeType":"ElementaryTypeName","src":"420:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"id":53993,"nodeType":"FunctionDefinition","src":"489:108:79","nodes":[],"body":{"id":53992,"nodeType":"Block","src":"537:60:79","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":53986,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"575:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":53985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"567:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":53984,"name":"address","nodeType":"ElementaryTypeName","src":"567:7:79","typeDescriptions":{}}},"id":53987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"567:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":53983,"name":"IMirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53644,"src":"554:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirrorProxy_$53644_$","typeString":"type(contract IMirrorProxy)"}},"id":53988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"554:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirrorProxy_$53644","typeString":"contract IMirrorProxy"}},"id":53989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"582:6:79","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":53643,"src":"554:34:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":53990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"554:36:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":53982,"id":53991,"nodeType":"Return","src":"547:43:79"}]},"baseFunctions":[53553],"functionSelector":"f887ea40","implemented":true,"kind":"function","modifiers":[],"name":"router","nameLocation":"498:6:79","parameters":{"id":53979,"nodeType":"ParameterList","parameters":[],"src":"504:2:79"},"returnParameters":{"id":53982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":53993,"src":"528:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":53980,"name":"address","nodeType":"ElementaryTypeName","src":"528:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"527:9:79"},"scope":54339,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54042,"nodeType":"FunctionDefinition","src":"633:377:79","nodes":[],"body":{"id":54041,"nodeType":"Block","src":"730:280:79","nodes":[],"statements":[{"assignments":[54003],"declarations":[{"constant":false,"id":54003,"mutability":"mutable","name":"baseFee","nameLocation":"748:7:79","nodeType":"VariableDeclaration","scope":54041,"src":"740:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54002,"name":"uint128","nodeType":"ElementaryTypeName","src":"740:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":54010,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54005,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"766:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"766:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54004,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"758:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"758:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"776:7:79","memberName":"baseFee","nodeType":"MemberAccess","referencedDeclaration":53910,"src":"758:25:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":54009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"758:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"740:45:79"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54012,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54003,"src":"818:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":54013,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53997,"src":"828:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"818:16:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54011,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"795:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"795:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54016,"nodeType":"ExpressionStatement","src":"795:40:79"},{"assignments":[54018],"declarations":[{"constant":false,"id":54018,"mutability":"mutable","name":"id","nameLocation":"854:2:79","nodeType":"VariableDeclaration","scope":54041,"src":"846:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54017,"name":"bytes32","nodeType":"ElementaryTypeName","src":"846:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54030,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":54024,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"894:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":54023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"886:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54022,"name":"address","nodeType":"ElementaryTypeName","src":"886:7:79","typeDescriptions":{}}},"id":54025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"886:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"901:7:79","subExpression":{"id":54026,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53978,"src":"901:5:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54020,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"869:3:79","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"873:12:79","memberName":"encodePacked","nodeType":"MemberAccess","src":"869:16:79","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"869:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54019,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"859:9:79","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"859:51:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"846:64:79"},{"eventCall":{"arguments":[{"id":54032,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54018,"src":"951:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54033,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"955:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"958:6:79","memberName":"origin","nodeType":"MemberAccess","src":"955:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54035,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53995,"src":"966:8:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54036,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53997,"src":"976:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54031,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53486,"src":"926:24:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"926:57:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54038,"nodeType":"EmitStatement","src":"921:62:79"},{"expression":{"id":54039,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54018,"src":"1001:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54001,"id":54040,"nodeType":"Return","src":"994:9:79"}]},"baseFunctions":[53562],"functionSelector":"d5624222","implemented":true,"kind":"function","modifiers":[],"name":"sendMessage","nameLocation":"642:11:79","parameters":{"id":53998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53995,"mutability":"mutable","name":"_payload","nameLocation":"669:8:79","nodeType":"VariableDeclaration","scope":54042,"src":"654:23:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":53994,"name":"bytes","nodeType":"ElementaryTypeName","src":"654:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":53997,"mutability":"mutable","name":"_value","nameLocation":"687:6:79","nodeType":"VariableDeclaration","scope":54042,"src":"679:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":53996,"name":"uint128","nodeType":"ElementaryTypeName","src":"679:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"653:41:79"},"returnParameters":{"id":54001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54000,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54042,"src":"721:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":53999,"name":"bytes32","nodeType":"ElementaryTypeName","src":"721:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"720:9:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54075,"nodeType":"FunctionDefinition","src":"1016:288:79","nodes":[],"body":{"id":54074,"nodeType":"Block","src":"1113:191:79","nodes":[],"statements":[{"assignments":[54052],"declarations":[{"constant":false,"id":54052,"mutability":"mutable","name":"baseFee","nameLocation":"1131:7:79","nodeType":"VariableDeclaration","scope":54074,"src":"1123:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54051,"name":"uint128","nodeType":"ElementaryTypeName","src":"1123:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":54059,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54054,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"1149:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1149:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54053,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"1141:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1159:7:79","memberName":"baseFee","nodeType":"MemberAccess","referencedDeclaration":53910,"src":"1141:25:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":54058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:27:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1123:45:79"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54061,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54052,"src":"1201:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":54062,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54048,"src":"1211:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1201:16:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54060,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"1178:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1178:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54065,"nodeType":"ExpressionStatement","src":"1178:40:79"},{"eventCall":{"arguments":[{"id":54067,"name":"_repliedTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54044,"src":"1257:10:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54068,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"1269:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1272:6:79","memberName":"origin","nodeType":"MemberAccess","src":"1269:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54070,"name":"_payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54046,"src":"1280:8:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54071,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54048,"src":"1290:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54066,"name":"ReplyQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53497,"src":"1234:22:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1234:63:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54073,"nodeType":"EmitStatement","src":"1229:68:79"}]},"baseFunctions":[53571],"functionSelector":"29336f39","implemented":true,"kind":"function","modifiers":[],"name":"sendReply","nameLocation":"1025:9:79","parameters":{"id":54049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54044,"mutability":"mutable","name":"_repliedTo","nameLocation":"1043:10:79","nodeType":"VariableDeclaration","scope":54075,"src":"1035:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54043,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1035:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54046,"mutability":"mutable","name":"_payload","nameLocation":"1070:8:79","nodeType":"VariableDeclaration","scope":54075,"src":"1055:23:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54045,"name":"bytes","nodeType":"ElementaryTypeName","src":"1055:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54048,"mutability":"mutable","name":"_value","nameLocation":"1088:6:79","nodeType":"VariableDeclaration","scope":54075,"src":"1080:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54047,"name":"uint128","nodeType":"ElementaryTypeName","src":"1080:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1034:61:79"},"returnParameters":{"id":54050,"nodeType":"ParameterList","parameters":[],"src":"1113:0:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54087,"nodeType":"FunctionDefinition","src":"1310:184:79","nodes":[],"body":{"id":54086,"nodeType":"Block","src":"1359:135:79","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":54081,"name":"_claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54077,"src":"1465:10:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54082,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"1477:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1480:6:79","memberName":"origin","nodeType":"MemberAccess","src":"1477:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54080,"name":"ValueClaimingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53504,"src":"1442:22:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":54084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54085,"nodeType":"EmitStatement","src":"1437:50:79"}]},"baseFunctions":[53576],"functionSelector":"91d5a64c","implemented":true,"kind":"function","modifiers":[],"name":"claimValue","nameLocation":"1319:10:79","parameters":{"id":54078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54077,"mutability":"mutable","name":"_claimedId","nameLocation":"1338:10:79","nodeType":"VariableDeclaration","scope":54087,"src":"1330:18:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54076,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1330:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1329:20:79"},"returnParameters":{"id":54079,"nodeType":"ParameterList","parameters":[],"src":"1359:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54101,"nodeType":"FunctionDefinition","src":"1500:167:79","nodes":[],"body":{"id":54100,"nodeType":"Block","src":"1565:102:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54093,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54089,"src":"1598:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54092,"name":"_retrieveValueToRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54300,"src":"1575:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1575:30:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54095,"nodeType":"ExpressionStatement","src":"1575:30:79"},{"eventCall":{"arguments":[{"id":54097,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54089,"src":"1653:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54096,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53509,"src":"1621:31:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1621:39:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54099,"nodeType":"EmitStatement","src":"1616:44:79"}]},"baseFunctions":[53581],"functionSelector":"704ed542","implemented":true,"kind":"function","modifiers":[],"name":"executableBalanceTopUp","nameLocation":"1509:22:79","parameters":{"id":54090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54089,"mutability":"mutable","name":"_value","nameLocation":"1540:6:79","nodeType":"VariableDeclaration","scope":54101,"src":"1532:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54088,"name":"uint128","nodeType":"ElementaryTypeName","src":"1532:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1531:16:79"},"returnParameters":{"id":54091,"nodeType":"ParameterList","parameters":[],"src":"1565:0:79"},"scope":54339,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":54122,"nodeType":"FunctionDefinition","src":"1725:202:79","nodes":[],"body":{"id":54121,"nodeType":"Block","src":"1788:139:79","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":54110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54108,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1802:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":54109,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54103,"src":"1815:12:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1802:25:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54120,"nodeType":"IfStatement","src":"1798:123:79","trueBody":{"id":54119,"nodeType":"Block","src":"1829:92:79","statements":[{"expression":{"id":54113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54111,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1843:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54112,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54103,"src":"1855:12:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1843:24:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54114,"nodeType":"ExpressionStatement","src":"1843:24:79"},{"eventCall":{"arguments":[{"id":54116,"name":"stateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53976,"src":"1900:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":54115,"name":"StateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53475,"src":"1887:12:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":54117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1887:23:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54118,"nodeType":"EmitStatement","src":"1882:28:79"}]}}]},"baseFunctions":[53586],"functionSelector":"8ea59e1d","implemented":true,"kind":"function","modifiers":[{"id":54106,"kind":"modifierInvocation","modifierName":{"id":54105,"name":"onlyRouter","nameLocations":["1777:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"1777:10:79"},"nodeType":"ModifierInvocation","src":"1777:10:79"}],"name":"updateState","nameLocation":"1734:11:79","parameters":{"id":54104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54103,"mutability":"mutable","name":"newStateHash","nameLocation":"1754:12:79","nodeType":"VariableDeclaration","scope":54122,"src":"1746:20:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54102,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1746:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1745:22:79"},"returnParameters":{"id":54107,"nodeType":"ParameterList","parameters":[],"src":"1788:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54143,"nodeType":"FunctionDefinition","src":"1933:264:79","nodes":[],"body":{"id":54142,"nodeType":"Block","src":"2046:151:79","nodes":[],"statements":[{"eventCall":{"arguments":[{"id":54136,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54124,"src":"2158:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54137,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54126,"src":"2162:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54138,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54128,"src":"2175:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54139,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54130,"src":"2184:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54135,"name":"Message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53520,"src":"2150:7:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2150:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54141,"nodeType":"EmitStatement","src":"2145:45:79"}]},"baseFunctions":[53597],"functionSelector":"c2df6009","implemented":true,"kind":"function","modifiers":[{"id":54133,"kind":"modifierInvocation","modifierName":{"id":54132,"name":"onlyRouter","nameLocations":["2035:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2035:10:79"},"nodeType":"ModifierInvocation","src":"2035:10:79"}],"name":"messageSent","nameLocation":"1942:11:79","parameters":{"id":54131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54124,"mutability":"mutable","name":"id","nameLocation":"1962:2:79","nodeType":"VariableDeclaration","scope":54143,"src":"1954:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54123,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1954:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54126,"mutability":"mutable","name":"destination","nameLocation":"1974:11:79","nodeType":"VariableDeclaration","scope":54143,"src":"1966:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54125,"name":"address","nodeType":"ElementaryTypeName","src":"1966:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54128,"mutability":"mutable","name":"payload","nameLocation":"2002:7:79","nodeType":"VariableDeclaration","scope":54143,"src":"1987:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54127,"name":"bytes","nodeType":"ElementaryTypeName","src":"1987:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54130,"mutability":"mutable","name":"value","nameLocation":"2019:5:79","nodeType":"VariableDeclaration","scope":54143,"src":"2011:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54129,"name":"uint128","nodeType":"ElementaryTypeName","src":"2011:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1953:72:79"},"returnParameters":{"id":54134,"nodeType":"ParameterList","parameters":[],"src":"2046:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54171,"nodeType":"FunctionDefinition","src":"2203:260:79","nodes":[],"body":{"id":54170,"nodeType":"Block","src":"2357:106:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54159,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54145,"src":"2380:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54160,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54149,"src":"2393:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54158,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2367:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2367:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54162,"nodeType":"ExpressionStatement","src":"2367:32:79"},{"eventCall":{"arguments":[{"id":54164,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54147,"src":"2421:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54165,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54149,"src":"2430:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":54166,"name":"replyTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54151,"src":"2437:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54167,"name":"replyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54153,"src":"2446:9:79","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":54163,"name":"Reply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53531,"src":"2415:5:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (bytes memory,uint128,bytes32,bytes4)"}},"id":54168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2415:41:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54169,"nodeType":"EmitStatement","src":"2410:46:79"}]},"baseFunctions":[53610],"functionSelector":"c78bde77","implemented":true,"kind":"function","modifiers":[{"id":54156,"kind":"modifierInvocation","modifierName":{"id":54155,"name":"onlyRouter","nameLocations":["2342:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2342:10:79"},"nodeType":"ModifierInvocation","src":"2342:10:79"}],"name":"replySent","nameLocation":"2212:9:79","parameters":{"id":54154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54145,"mutability":"mutable","name":"destination","nameLocation":"2230:11:79","nodeType":"VariableDeclaration","scope":54171,"src":"2222:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54144,"name":"address","nodeType":"ElementaryTypeName","src":"2222:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54147,"mutability":"mutable","name":"payload","nameLocation":"2258:7:79","nodeType":"VariableDeclaration","scope":54171,"src":"2243:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54146,"name":"bytes","nodeType":"ElementaryTypeName","src":"2243:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54149,"mutability":"mutable","name":"value","nameLocation":"2275:5:79","nodeType":"VariableDeclaration","scope":54171,"src":"2267:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54148,"name":"uint128","nodeType":"ElementaryTypeName","src":"2267:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":54151,"mutability":"mutable","name":"replyTo","nameLocation":"2290:7:79","nodeType":"VariableDeclaration","scope":54171,"src":"2282:15:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54150,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2282:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54153,"mutability":"mutable","name":"replyCode","nameLocation":"2306:9:79","nodeType":"VariableDeclaration","scope":54171,"src":"2299:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":54152,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2299:6:79","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2221:95:79"},"returnParameters":{"id":54157,"nodeType":"ParameterList","parameters":[],"src":"2357:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54193,"nodeType":"FunctionDefinition","src":"2469:192:79","nodes":[],"body":{"id":54192,"nodeType":"Block","src":"2566:95:79","nodes":[],"statements":[{"expression":{"arguments":[{"id":54183,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54175,"src":"2589:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54184,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54177,"src":"2602:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54182,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2576:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2576:32:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54186,"nodeType":"ExpressionStatement","src":"2576:32:79"},{"eventCall":{"arguments":[{"id":54188,"name":"claimedId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54173,"src":"2637:9:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54189,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54177,"src":"2648:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54187,"name":"ValueClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53538,"src":"2624:12:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_uint128_$returns$__$","typeString":"function (bytes32,uint128)"}},"id":54190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2624:30:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54191,"nodeType":"EmitStatement","src":"2619:35:79"}]},"baseFunctions":[53619],"functionSelector":"14503e51","implemented":true,"kind":"function","modifiers":[{"id":54180,"kind":"modifierInvocation","modifierName":{"id":54179,"name":"onlyRouter","nameLocations":["2555:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2555:10:79"},"nodeType":"ModifierInvocation","src":"2555:10:79"}],"name":"valueClaimed","nameLocation":"2478:12:79","parameters":{"id":54178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54173,"mutability":"mutable","name":"claimedId","nameLocation":"2499:9:79","nodeType":"VariableDeclaration","scope":54193,"src":"2491:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54172,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2491:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54175,"mutability":"mutable","name":"destination","nameLocation":"2518:11:79","nodeType":"VariableDeclaration","scope":54193,"src":"2510:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54174,"name":"address","nodeType":"ElementaryTypeName","src":"2510:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54177,"mutability":"mutable","name":"value","nameLocation":"2539:5:79","nodeType":"VariableDeclaration","scope":54193,"src":"2531:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54176,"name":"uint128","nodeType":"ElementaryTypeName","src":"2531:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2490:55:79"},"returnParameters":{"id":54181,"nodeType":"ParameterList","parameters":[],"src":"2566:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54207,"nodeType":"FunctionDefinition","src":"2667:114:79","nodes":[],"body":{"id":54206,"nodeType":"Block","src":"2735:46:79","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54201,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"2758:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2758:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54203,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54195,"src":"2768:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54200,"name":"_sendValueTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54338,"src":"2745:12:79","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":54204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2745:29:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54205,"nodeType":"ExpressionStatement","src":"2745:29:79"}]},"baseFunctions":[53624],"functionSelector":"dca4a373","implemented":true,"kind":"function","modifiers":[{"id":54198,"kind":"modifierInvocation","modifierName":{"id":54197,"name":"onlyRouter","nameLocations":["2724:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2724:10:79"},"nodeType":"ModifierInvocation","src":"2724:10:79"}],"name":"executableBalanceBurned","nameLocation":"2676:23:79","parameters":{"id":54196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54195,"mutability":"mutable","name":"value","nameLocation":"2708:5:79","nodeType":"VariableDeclaration","scope":54207,"src":"2700:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54194,"name":"uint128","nodeType":"ElementaryTypeName","src":"2700:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2699:15:79"},"returnParameters":{"id":54199,"nodeType":"ParameterList","parameters":[],"src":"2735:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54250,"nodeType":"FunctionDefinition","src":"2787:465:79","nodes":[],"body":{"id":54249,"nodeType":"Block","src":"2930:322:79","nodes":[],"statements":[{"assignments":[54221],"declarations":[{"constant":false,"id":54221,"mutability":"mutable","name":"initNonce","nameLocation":"3017:9:79","nodeType":"VariableDeclaration","scope":54249,"src":"3009:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54220,"name":"uint256","nodeType":"ElementaryTypeName","src":"3009:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54224,"initialValue":{"id":54223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3029:7:79","subExpression":{"id":54222,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53978,"src":"3029:5:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3009:27:79"},{"assignments":[54226],"declarations":[{"constant":false,"id":54226,"mutability":"mutable","name":"id","nameLocation":"3054:2:79","nodeType":"VariableDeclaration","scope":54249,"src":"3046:10:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54225,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3046:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54237,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":54232,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3094:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Mirror_$54339","typeString":"contract Mirror"}],"id":54231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3086:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54230,"name":"address","nodeType":"ElementaryTypeName","src":"3086:7:79","typeDescriptions":{}}},"id":54233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3086:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54234,"name":"initNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54221,"src":"3101:9:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54228,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3069:3:79","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3073:12:79","memberName":"encodePacked","nodeType":"MemberAccess","src":"3069:16:79","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3069:42:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54227,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3059:9:79","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3059:53:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3046:66:79"},{"eventCall":{"arguments":[{"id":54239,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54215,"src":"3160:17:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54238,"name":"ExecutableBalanceTopUpRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53509,"src":"3128:31:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3128:50:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54241,"nodeType":"EmitStatement","src":"3123:55:79"},{"eventCall":{"arguments":[{"id":54243,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54226,"src":"3218:2:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54244,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54209,"src":"3222:6:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54245,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54211,"src":"3230:7:79","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":54246,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54213,"src":"3239:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54242,"name":"MessageQueueingRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53486,"src":"3193:24:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128)"}},"id":54247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3193:52:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54248,"nodeType":"EmitStatement","src":"3188:57:79"}]},"baseFunctions":[53635],"functionSelector":"de1dd2e0","implemented":true,"kind":"function","modifiers":[{"id":54218,"kind":"modifierInvocation","modifierName":{"id":54217,"name":"onlyRouter","nameLocations":["2915:10:79"],"nodeType":"IdentifierPath","referencedDeclaration":54263,"src":"2915:10:79"},"nodeType":"ModifierInvocation","src":"2915:10:79"}],"name":"initMessage","nameLocation":"2796:11:79","parameters":{"id":54216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54209,"mutability":"mutable","name":"source","nameLocation":"2816:6:79","nodeType":"VariableDeclaration","scope":54250,"src":"2808:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54208,"name":"address","nodeType":"ElementaryTypeName","src":"2808:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54211,"mutability":"mutable","name":"payload","nameLocation":"2839:7:79","nodeType":"VariableDeclaration","scope":54250,"src":"2824:22:79","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":54210,"name":"bytes","nodeType":"ElementaryTypeName","src":"2824:5:79","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":54213,"mutability":"mutable","name":"value","nameLocation":"2856:5:79","nodeType":"VariableDeclaration","scope":54250,"src":"2848:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54212,"name":"uint128","nodeType":"ElementaryTypeName","src":"2848:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":54215,"mutability":"mutable","name":"executableBalance","nameLocation":"2871:17:79","nodeType":"VariableDeclaration","scope":54250,"src":"2863:25:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54214,"name":"uint128","nodeType":"ElementaryTypeName","src":"2863:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"2807:82:79"},"returnParameters":{"id":54219,"nodeType":"ParameterList","parameters":[],"src":"2930:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54263,"nodeType":"ModifierDefinition","src":"3258:131:79","nodes":[],"body":{"id":54262,"nodeType":"Block","src":"3280:109:79","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":54257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54253,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3298:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3302:6:79","memberName":"sender","nodeType":"MemberAccess","src":"3298:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54255,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3312:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3312:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3298:22:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6f6e6c7920726f7574657220636f6e747261637420697320656c696769626c6520666f72206f7065726174696f6e","id":54258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3322:48:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""},"value":"only router contract is eligible for operation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_64d2230e88596248f8ffc0c335875e1b5d3e7ef288684b79c0f3f409577b1f91","typeString":"literal_string \"only router contract is eligible for operation\""}],"id":54252,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3290:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3290:81:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54260,"nodeType":"ExpressionStatement","src":"3290:81:79"},{"id":54261,"nodeType":"PlaceholderStatement","src":"3381:1:79"}]},"name":"onlyRouter","nameLocation":"3267:10:79","parameters":{"id":54251,"nodeType":"ParameterList","parameters":[],"src":"3277:2:79"},"virtual":false,"visibility":"internal"},{"id":54300,"nodeType":"FunctionDefinition","src":"3429:332:79","nodes":[],"body":{"id":54299,"nodeType":"Block","src":"3485:276:79","nodes":[],"statements":[{"assignments":[54269],"declarations":[{"constant":false,"id":54269,"mutability":"mutable","name":"routerAddress","nameLocation":"3503:13:79","nodeType":"VariableDeclaration","scope":54299,"src":"3495:21:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54268,"name":"address","nodeType":"ElementaryTypeName","src":"3495:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54272,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54270,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3519:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3519:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3495:32:79"},{"assignments":[54275],"declarations":[{"constant":false,"id":54275,"mutability":"mutable","name":"wrappedVara","nameLocation":"3551:11:79","nodeType":"VariableDeclaration","scope":54299,"src":"3538:24:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":54274,"nodeType":"UserDefinedTypeName","pathNode":{"id":54273,"name":"IWrappedVara","nameLocations":["3538:12:79"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"3538:12:79"},"referencedDeclaration":53962,"src":"3538:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":54283,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":54278,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54269,"src":"3586:13:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54277,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"3578:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3578:22:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3601:11:79","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53810,"src":"3578:34:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":54281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3578:36:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54276,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"3565:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":54282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3565:50:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"3538:77:79"},{"assignments":[54285],"declarations":[{"constant":false,"id":54285,"mutability":"mutable","name":"success","nameLocation":"3631:7:79","nodeType":"VariableDeclaration","scope":54299,"src":"3626:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54284,"name":"bool","nodeType":"ElementaryTypeName","src":"3626:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":54293,"initialValue":{"arguments":[{"expression":{"id":54288,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"3666:2:79","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":54289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3669:6:79","memberName":"origin","nodeType":"MemberAccess","src":"3666:9:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54290,"name":"routerAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54269,"src":"3677:13:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54291,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54265,"src":"3692:6:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":54286,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54275,"src":"3641:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":54287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3653:12:79","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":41905,"src":"3641:24:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":54292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3641:58:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3626:73:79"},{"expression":{"arguments":[{"id":54295,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54285,"src":"3718:7:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":54296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3727:26:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":54294,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3710:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3710:44:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54298,"nodeType":"ExpressionStatement","src":"3710:44:79"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValueToRouter","nameLocation":"3438:22:79","parameters":{"id":54266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54265,"mutability":"mutable","name":"_value","nameLocation":"3469:6:79","nodeType":"VariableDeclaration","scope":54300,"src":"3461:14:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54264,"name":"uint128","nodeType":"ElementaryTypeName","src":"3461:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3460:16:79"},"returnParameters":{"id":54267,"nodeType":"ParameterList","parameters":[],"src":"3485:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":54338,"nodeType":"FunctionDefinition","src":"3767:316:79","nodes":[],"body":{"id":54337,"nodeType":"Block","src":"3833:250:79","nodes":[],"statements":[{"assignments":[54309],"declarations":[{"constant":false,"id":54309,"mutability":"mutable","name":"wrappedVara","nameLocation":"3856:11:79","nodeType":"VariableDeclaration","scope":54337,"src":"3843:24:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":54308,"nodeType":"UserDefinedTypeName","pathNode":{"id":54307,"name":"IWrappedVara","nameLocations":["3843:12:79"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"3843:12:79"},"referencedDeclaration":53962,"src":"3843:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":54318,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54312,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53993,"src":"3891:6:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":54313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3891:8:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54311,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"3883:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$53951_$","typeString":"type(contract IRouter)"}},"id":54314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3883:17:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$53951","typeString":"contract IRouter"}},"id":54315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3901:11:79","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53810,"src":"3883:29:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":54316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3883:31:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54310,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"3870:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":54317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3870:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"3843:72:79"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":54321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54319,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54304,"src":"3930:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":54320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3939:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3930:10:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54336,"nodeType":"IfStatement","src":"3926:151:79","trueBody":{"id":54335,"nodeType":"Block","src":"3942:135:79","statements":[{"assignments":[54323],"declarations":[{"constant":false,"id":54323,"mutability":"mutable","name":"success","nameLocation":"3961:7:79","nodeType":"VariableDeclaration","scope":54335,"src":"3956:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54322,"name":"bool","nodeType":"ElementaryTypeName","src":"3956:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":54329,"initialValue":{"arguments":[{"id":54326,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54302,"src":"3992:11:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54327,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54304,"src":"4005:5:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":54324,"name":"wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54309,"src":"3971:11:79","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":54325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3983:8:79","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":41873,"src":"3971:20:79","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":54328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3971:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3956:55:79"},{"expression":{"arguments":[{"id":54331,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54323,"src":"4034:7:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f2073656e64205756617261","id":54332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4043:22:79","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""},"value":"failed to send WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ec034c4b2ac47d4229390ddbbb751ebe057cb836b00500cd6f2ff2a9adb713a","typeString":"literal_string \"failed to send WVara\""}],"id":54330,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4026:7:79","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4026:40:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54334,"nodeType":"ExpressionStatement","src":"4026:40:79"}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_sendValueTo","nameLocation":"3776:12:79","parameters":{"id":54305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54302,"mutability":"mutable","name":"destination","nameLocation":"3797:11:79","nodeType":"VariableDeclaration","scope":54338,"src":"3789:19:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54301,"name":"address","nodeType":"ElementaryTypeName","src":"3789:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54304,"mutability":"mutable","name":"value","nameLocation":"3818:5:79","nodeType":"VariableDeclaration","scope":54338,"src":"3810:13:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54303,"name":"uint128","nodeType":"ElementaryTypeName","src":"3810:7:79","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3788:36:79"},"returnParameters":{"id":54306,"nodeType":"ParameterList","parameters":[],"src":"3833:0:79"},"scope":54339,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":53973,"name":"IMirror","nameLocations":["304:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":53636,"src":"304:7:79"},"id":53974,"nodeType":"InheritanceSpecifier","src":"304:7:79"}],"canonicalName":"Mirror","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[54339,53636],"name":"Mirror","nameLocation":"294:6:79","scope":54340,"usedErrors":[],"usedEvents":[53475,53486,53497,53504,53509,53520,53531,53538]}],"license":"UNLICENSED"},"id":79} \ No newline at end of file diff --git a/ethexe/ethereum/Router.json b/ethexe/ethereum/Router.json index 4cf3b4d7aed..c5544c4f9d2 100644 --- a/ethexe/ethereum/Router.json +++ b/ethexe/ethereum/Router.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"baseFee","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"baseWeight","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"codeState","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum IRouter.CodeState"}],"stateMutability":"view"},{"type":"function","name":"commitBlocks","inputs":[{"name":"blockCommitmentsArray","type":"tuple[]","internalType":"struct IRouter.BlockCommitment[]","components":[{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"prevCommitmentHash","type":"bytes32","internalType":"bytes32"},{"name":"predBlockHash","type":"bytes32","internalType":"bytes32"},{"name":"transitions","type":"tuple[]","internalType":"struct IRouter.StateTransition[]","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueClaims","type":"tuple[]","internalType":"struct IRouter.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct IRouter.OutgoingMessage[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct IRouter.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]}]}]}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitCodes","inputs":[{"name":"codeCommitmentsArray","type":"tuple[]","internalType":"struct IRouter.CodeCommitment[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"valid","type":"bool","internalType":"bool"}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createProgram","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"payable"},{"type":"function","name":"genesisBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStorageSlot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_mirror","type":"address","internalType":"address"},{"name":"_mirrorProxy","type":"address","internalType":"address"},{"name":"_wrappedVara","type":"address","internalType":"address"},{"name":"_validatorsKeys","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastBlockCommitmentHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"mirror","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mirrorProxy","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"programCodeId","inputs":[{"name":"program","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"programsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestCodeValidation","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setBaseWeight","inputs":[{"name":"_baseWeight","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMirror","inputs":[{"name":"_mirror","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStorageSlot","inputs":[{"name":"namespace","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValuePerWeight","inputs":[{"name":"_valuePerWeight","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signingThresholdPercentage","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateValidators","inputs":[{"name":"validatorsAddressArray","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatedCodesCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorExists","inputs":[{"name":"validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"validators","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"validatorsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"valuePerWeight","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"wrappedVara","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"BaseWeightChanged","inputs":[{"name":"baseWeight","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"BlockCommitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CodeGotValidated","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"valid","type":"bool","indexed":true,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CodeValidationRequested","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProgramCreated","inputs":[{"name":"actorId","type":"address","indexed":false,"internalType":"address"},{"name":"codeId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StorageSlotChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValidatorsSetChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValuePerWeightChanged","inputs":[{"name":"valuePerWeight","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b60405161289590816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe610200806040526004361015610013575f80fd5b5f6101e0525f3560e01c9081627a32e714611f71575080630834fecc14611f3a5780631c149d8a14611df257806328e24b3d14611dc85780632dacfb6914611d9b5780633d43b41814611d49578063444d917214611d115780635686cad514611c5f5780636c2eb35014611a485780636ef25c3a14611a1d578063715018a6146119b657806378ee5dec1461197e5780638028861a146119015780638074b4551461158557806388f50cf01461154a5780638da5cb5b146115135780638febbd59146114c65780639067088e1461147e578063967082261461145257806396a2ddfa14611422578063a6bbbe1c14611372578063c13911e814611326578063ca1e7819146112a9578063d3fd636414611270578063e71731e41461115e578063e97d3eb314610f0f578063ed612f8c14610edf578063edc8722514610eba578063efd81abc14610e8a578063f2fde38b14610e66578063f8453e7c14610b585763fa97ed6d14610181575f80fd5b34610521576040366003190112610521576004356001600160401b038111610521576101b190369060040161202b565b906024356001600160401b038111610521576101d190369060040161202b565b6101e051606060a052909391925b82821015610b3c57600582901b8101359236829003607e19018412156105215760045f805160206128208339815191525401608052608051546020858401013503610af8576102336040858401013561262e565b15610aa7576101e0516101c0526060958285018701955b610256878786016125ce565b90506101c0511015610a125761026e878786016125ce565b9060e0526101c0511015610536576101c05160051b60e051013560c052609e1960e05136030160c0511215610521575f80516020612820833981519152546102bb60c05160e05101612671565b6001600160a01b03165f908152600b82016020526040902054156109b55760206001600160801b0391600360018060a01b0391015416604461030260c05160e05101612671565b610314604060c05160e0510101612685565b60405163a9059cbb60e01b81526001600160a01b0390921660048301529490941660248501526101e05184928391905af1801561052857610989575b5060c05160e0516001600160a01b039161036a9101612671565b166101a0526101e051606061016081905260c05160e0510101610140525b61039b6101405160c05160e05101612699565b9050811015610550576103b76101405160c05160e05101612699565b9061018052811015610536576103d7602060608302610180510101612671565b6040606083026101805101019061047a6103f083612685565b6040519060208201936060870261018051013585526001600160601b03199060601b1660408301526001600160801b03199060801b1660548201526044815261043a606482611fb1565b60206040519384926101605151808461016051018587015e840190838201906101e0518252519283915e01016101e051815203601f198101835282611fb1565b6101605261049b610495602060608502610180510101612671565b91612685565b6101a0513b15610521576040516314503e5160e01b81526101805160608502013560048201526001600160a01b0390921660248301526001600160801b031660448201526101e0516101a0518290606490829084905af1801561052857610506575b50600101610388565b6101e05161051391611fb1565b6101e051610521575f6104fd565b6101e05180fd5b6040513d6101e051823e3d90fd5b634e487b7160e01b6101e05152603260045260246101e051fd5b50909195929394956101e051610100526060610100526101e0515b60c05160e051610580910160808101906125ce565b90508110156108715760c05160e05161059e910160808101906125ce565b821015610536578160051b8101356101205260be1981360301610120511215610521576106906105d5602061012051840101612671565b605461068460346105f3604061012051880101610120518801612417565b93906106066060610120518a0101612685565b61061760a0610120518b01016126ce565b86604051978894602086019a8d6101205101358c526001600160601b03199060601b166040870152868601378301916001600160801b03199060801b16848301526080610120518b010135606483015263ffffffff60e01b16608482015203016014810184520182611fb1565b519020610100516121a2565b6101005261012051810160800135610779576106b3602061012051830101612671565b610120516106c79083016040810190612417565b90916106da606061012051860101612685565b926101a0513b156105215760405163c2df600960e01b8152610120519095013560048601526001600160a01b039091166024850152608060448501526001600160801b039161072e91608486019190612182565b9116606483015281806101e0519203816101e0516101a0515af180156105285761075e575b506001905b0161056b565b6101e05161076b91611fb1565b6101e051610521575f610753565b61078a602061012051830101612671565b906107a2604061012051830101610120518301612417565b6107b3606061012051850101612685565b926107c560a0610120518301016126ce565b926101a0513b156105215760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701526080926001600160801b039161080e9160a4890191612182565b9416604486015261012051010135606484015263ffffffff60e01b16608483015281806101e0519203816101e0516101a0515af1801561052857610856575b50600190610758565b6101e05161086391611fb1565b6101e051610521575f61084d565b5091909695949392956101a0513b1561052157604051638ea59e1d60e01b8152602060c05160e05101013560048201526101e051816024816101e0516101a0515af180156105285761096e575b5061095d906108d260c05160e05101612671565b6108e4604060c05160e0510101612685565b6101605151602061016051012061010051516020610100510120906040519260208401946001600160601b03199060601b168552602060c05160e05101013560348501526001600160801b03199060801b166054840152606483015260848201526084815261095460a482611fb1565b519020906121a2565b9660016101c051016101c05261024a565b6101e05161097b91611fb1565b6101e051610521575f6108be565b6109a99060203d81116109ae575b6109a18183611fb1565b8101906123ff565b610350565b503d610997565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9391966001939650610a999195808801359182608051557fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a1602081519101206040805192602084019485526020818c010135828501528a0101356060830152608082015260808152610a8e60a082611fb1565b51902060a0516121a2565b60a0520190929391936101df565b60405162461bcd60e51b815260206004820152602360248201527f616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f696e76616c69642070726576696f757320636f6d6d69746d656e7420686173686044820152fd5b610b51858560a05151602060a0510120612449565b6101e05180f35b346105215760a036600319011261052157610b71611f9b565b602435906001600160a01b038216820361052157604435916001600160a01b038316830361052157606435926001600160a01b0384168403610521576084356001600160401b038111610521573660238201121561052157610bdd90369060248160040135910161205b565b905f805160206128408339815191525460ff8160401c1615946001600160401b03821680159081610e5e575b6001149081610e54575b159081610e4b575b50610e365767ffffffffffffffff1982166001175f8051602061284083398151915255610c5e9186610e0a575b50610c51612603565b610c59612603565b61221a565b6040948551610c6d8782611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256310000000000000000008252610ca161228b565b5190205f198101908111610df0578651906020820190815260208252610cc78883611fb1565b60ff19915190201690815f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc6101e0516101e051a15f19430192438411610df057924082556001820180546001600160a01b03199081166001600160a01b03978816179091556002830180548216948716949094179093556003820180549093169416939093179055611a0a60058301556006919091018054680a000000009502f9006001600160c01b0319909116179055610d90906122be565b610d9b576101e05180f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160018152a180610b51565b634e487b7160e01b6101e05152601160045260246101e051fd5b68ffffffffffffffffff191668010000000000000001175f805160206128408339815191525587610c48565b63f92ee8a960e01b6101e0515260046101e051fd5b90501588610c1b565b303b159150610c13565b879150610c09565b3461052157602036600319011261052157610b51610e82611f9b565b610c5961228b565b34610521576101e05136600319011261052157602060055f80516020612820833981519152540154604051908152f35b34610521576101e051366003190112610521576020610ed76121dc565b604051908152f35b34610521576101e05136600319011261052157602060085f80516020612820833981519152540154604051908152f35b34610521576040366003190112610521576004356001600160401b0381116105215736602382011215610521578060040135906001600160401b038211610521573660248360061b83010111610521576024356001600160401b03811161052157610f7f8391369060040161202b565b5f80516020612820833981519152546101e0519460098201939192909160605b8688101561114d576101e051508760061b840197610fed604460248b01359a0192610fc9846121cf565b60405160208101918d8352151560f81b604082015260218152610954604182611fb1565b98806101e051528760205260ff60406101e0512054166003811015611133576001036110de5761101e6001936121cf565b1561108c577f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208285936101e051528a825260406101e051206101e051506101e05150600260ff19825416179055600a8a0161107b8154612174565b9055604051908152a25b0196610f9f565b806101e051528760205260406101e0512080546101e0515060ff191690556040519081527f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960206101e05192a2611085565b60405162461bcd60e51b815260206004820152602760248201527f636f64652073686f756c642062652072657175657374656420666f722076616c60448201526634b230ba34b7b760c91b6064820152608490fd5b634e487b7160e01b6101e05152602160045260246101e051fd5b610b51935060208151910120612449565b34610521576020366003190112610521576004356001600160401b0381116105215761118e90369060040161202b565b61119661228b565b5f80516020612820833981519152546101e0516007820191600801905b81548110156111f3576101e08051839052516020908190208201546001600160a01b03165f9081529084905260409020805460ff191690556001016111b3565b506101e0518154908255915081611249575b61121861121336858761205b565b6122be565b7f144bbc027dc176e94c43b7c1bcff2a8aa58ab434029eec294743cd4ab2e54f516101e0516101e051a16101e05180f35b6101e0515260206101e05120908101905b81811015611205576101e051815560010161125a565b34610521576101e0513660031901126105215760206001600160401b0360065f8051602061282083398151915254015416604051908152f35b34610521576101e051366003190112610521576112d660085f8051602061282083398151915254016120bf565b6040518091602082016020835281518091526020604084019201906101e0515b818110611304575050500390f35b82516001600160a01b03168452859450602093840193909201916001016112f6565b346105215760203660031901126105215760095f8051602061282083398151915254016004356101e0515260205260ff60406101e0512054166040516003821015611133576020918152f35b34610521576020366003190112610521576004356001600160801b03811690818103610521577f9f5e1796f1a0adf311f86170503308a06a16560a7679b7b6da35f4999200d740916020916113c561228b565b5f8051602061282083398151915254600601805477ffffffffffffffffffffffffffffffff00000000000000001916604092831b77ffffffffffffffffffffffffffffffff00000000000000001617905551908152a16101e05180f35b34610521576101e051366003190112610521576020600c5f80516020612820833981519152540154604051908152f35b34610521576101e0513660031901126105215760205f8051602061282083398151915254604051908152f35b3461052157602036600319011261052157611497611f9b565b600b5f8051602061282083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b34610521576020366003190112610521576114df611f9b565b60075f8051602061282083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610521576101e051366003190112610521575f80516020612800833981519152546040516001600160a01b039091168152602090f35b34610521576101e051366003190112610521575f8051602061282083398151915254600301546040516001600160a01b039091168152602090f35b6080366003190112611806576044356004356001600160401b0382116118065736602383011215611806578160040135916001600160401b03831161180657366024848301011161180657606435906001600160801b03821693848303611806575f805160206128208339815191525493805f526009850160205260ff60405f20541660038110156118ed5760020361189157611620612112565b600a6001600160801b03821602946001600160801b03861695860361187d5761164c8661165193612154565b612154565b60038601546040516323b872dd60e01b81523260048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af19081156117fb575f9161185e575b50156118195760028501546e5af43d82803e903d91602b57fd5bf360405160208101908482526024356040820152604081526116e2606082611fb1565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b161760205260018060a01b0390603760095ff51694851561180a57600c90865f52600b81016020528260405f2055016117588154612174565b90557f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf16020604051878152a2833b15611806576117bd945f9360405196879485946306f0ee9760e51b8652326004870152608060248701526024608487019201612182565b9160448401526064830152038183855af19182156117fb576020926117e6575b50604051908152f35b5f6117f091611fb1565b5f6101e052826117dd565b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611877915060203d6020116109ae576109a18183611fb1565b876116a5565b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b34611806576020366003190112611806576004356001600160401b0381168091036118065760207f01326573cfc0bc40a2550923254394ebd7529e3e3301840dfa33cf786aead0c79161195261228b565b5f8051602061282083398151915254600601805467ffffffffffffffff191682179055604051908152a1005b34611806575f366003190112611806575f8051602061282083398151915254600201546040516001600160a01b039091168152602090f35b34611806575f366003190112611806576119ce61228b565b5f8051602061280083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34611806575f366003190112611806576020611a37612112565b6001600160801b0360405191168152f35b34611806575f36600319011261180657611a6061228b565b5f805160206128408339815191525460ff8160401c168015611c4b575b611c3c5768ffffffffffffffffff191668010000000000000002175f80516020612840833981519152555f80516020612820833981519152546001810154600282015460038301546001600160a01b0390811693918116921690611ae3906008016120bf565b906040918251611af38482611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252611b2761228b565b5190205f19810190811161187d578351906020820190815260208252611b4d8583611fb1565b60ff19915190201694855f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f19430143811161187d574086556001860180546001600160a01b03199081166001600160a01b03958616179091556002870180548216968516969096179095556003909501805490941694909116939093179091557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160209190611c0f906122be565b60ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160028152a1005b63f92ee8a960e01b5f5260045ffd5b5060026001600160401b0382161015611a7d565b34611806576020366003190112611806576004356001600160401b038111611806573660238201121561180657611ca0903690602481600401359101611fe6565b611ca861228b565b602081519101205f19810190811161187d57604051906020820190815260208252611cd4604083611fb1565b9051902060ff19165f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a1005b34611806575f366003190112611806575f8051602061282083398151915254600101546040516001600160a01b039091168152602090f35b3461180657602036600319011261180657611d62611f9b565b611d6a61228b565b5f805160206128208339815191525460010180546001600160a01b0319166001600160a01b03909216919091179055005b34611806575f36600319011261180657602060045f80516020612820833981519152540154604051908152f35b34611806575f3660031901126118065760205f805160206128208339815191525454604051908152f35b34611806576040366003190112611806576024356004358115801590611f30575b15611eeb5760095f80516020612820833981519152540190805f528160205260ff60405f20541660038110156118ed57611e8d577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603060248201527f636f64652077697468207375636820696420616c72656164792072657175657360448201526f1d1959081bdc881d985b1a59185d195960821b6064820152608490fd5b60405162461bcd60e51b815260206004820152601c60248201527f626c6f6254784861736820636f756c646e277420626520666f756e64000000006044820152606490fd5b505f491515611e13565b34611806575f366003190112611806576020611a376001600160801b0360065f8051602061282083398151915254015460401c1690565b34611806575f36600319011261180657602090600a5f805160206128208339815191525401548152f35b600435906001600160a01b038216820361180657565b90601f801991011681019081106001600160401b03821117611fd257604052565b634e487b7160e01b5f52604160045260245ffd5b9291926001600160401b038211611fd2576040519161200f601f8201601f191660200184611fb1565b829481845281830111611806578281602093845f960137010152565b9181601f84011215611806578235916001600160401b038311611806576020808501948460051b01011161180657565b9092916001600160401b038411611fd2578360051b91602060405161208282860182611fb1565b809681520192810191821161180657915b81831061209f57505050565b82356001600160a01b038116810361180657815260209283019201612093565b90604051918281549182825260208201905f5260205f20925f5b8181106120f05750506120ee92500383611fb1565b565b84546001600160a01b03168352600194850194879450602090930192016120d9565b5f8051602061282083398151915254600601546001600160401b038116906001600160801b039060401c811616026001600160801b03811690810361187d5790565b906001600160801b03809116911601906001600160801b03821161187d57565b5f19811461187d5760010190565b908060209392818452848401375f828201840152601f01601f1916010190565b6020806120ee928195946040519682889351918291018585015e8201908382015203018085520183611fb1565b3580151581036118065790565b5f8051602061282083398151915254600560088201549101549081810291818304149015171561187d5761270f810180911161187d57612710900490565b6001600160a01b03168015612278575f8051602061280083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f80516020612800833981519152546001600160a01b031633036122ab57565b63118cdaa760e01b5f523360045260245ffd5b5f805160206128208339815191525490600882019081546123ae579091600701905f5b815181101561232057600581901b82016020908101516001600160a01b03165f9081529084905260409020805460ff19166001908117909155016122e1565b5080519291506001600160401b038311611fd257680100000000000000008311611fd2578154838355808410612388575b50602001905f5260205f205f5b83811061236b5750505050565b82516001600160a01b03168183015560209092019160010161235e565b825f528360205f2091820191015b8181106123a35750612351565b5f8155600101612396565b60405162461bcd60e51b815260206004820152602360248201527f70726576696f75732076616c696461746f727320776572656e27742072656d6f6044820152621d995960ea1b6064820152608490fd5b90816020910312611806575180151581036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191813603831361180657565b905f8051602061282083398151915254906124626121dc565b9260405190602082019081526020825261247d604083611fb1565b6124b9603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282611fb1565b5190205f9260070191835b868510156125c2576124fa6124f16124eb6124e48860051b860186612417565b3691611fe6565b856126e3565b9092919261271d565b6001600160a01b03165f9081526020859052604090205460ff16156125875761252290612174565b9385851461253357600101936124c4565b505050509091505b1061254257565b60405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f7567682076616c6964207369676e61747572657300000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606490fd5b9495505050505061253b565b903590601e198136030182121561180657018035906001600160401b03821161180657602001918160051b3603831361180657565b60ff5f805160206128408339815191525460401c161561261f57565b631afcd79f60e31b5f5260045ffd5b905f19430143811161187d57805b612647575b505f9150565b804083810361265857506001925050565b1561266c57801561187d575f19018061263c565b612641565b356001600160a01b03811681036118065790565b356001600160801b03811681036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191606082023603831361180657565b356001600160e01b0319811681036118065790565b81519190604183036127135761270c9250602082015190606060408401519301515f1a9061277d565b9192909190565b50505f9160029190565b60048110156118ed578061272f575050565b600181036127465763f645eedf60e01b5f5260045ffd5b60028103612761575063fce698f760e01b5f5260045260245ffd5b60031461276b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116127f4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156117fb575f516001600160a01b038116156127ea57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220a56ab5c973dc843d6a2342dd7415210e0ce6114c70ea7472e3ce95a65302dcc764736f6c634300081a0033","sourceMap":"781:16427:81:-:0;;;;;;;8837:64:25;781:16427:81;;;;;;7896:76:25;;-1:-1:-1;;;;;;;;;;;781:16427:81;;7985:34:25;7981:146;;-1:-1:-1;781:16427:81;;;;;;;;;7981:146:25;-1:-1:-1;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;;;8837:64:25;781:16427:81;;;8087:29:25;;781:16427:81;;8087:29:25;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:25;;-1:-1:-1;7938:23:25;781:16427:81;;;","linkReferences":{}},"deployedBytecode":{"object":"0x610200806040526004361015610013575f80fd5b5f6101e0525f3560e01c9081627a32e714611f71575080630834fecc14611f3a5780631c149d8a14611df257806328e24b3d14611dc85780632dacfb6914611d9b5780633d43b41814611d49578063444d917214611d115780635686cad514611c5f5780636c2eb35014611a485780636ef25c3a14611a1d578063715018a6146119b657806378ee5dec1461197e5780638028861a146119015780638074b4551461158557806388f50cf01461154a5780638da5cb5b146115135780638febbd59146114c65780639067088e1461147e578063967082261461145257806396a2ddfa14611422578063a6bbbe1c14611372578063c13911e814611326578063ca1e7819146112a9578063d3fd636414611270578063e71731e41461115e578063e97d3eb314610f0f578063ed612f8c14610edf578063edc8722514610eba578063efd81abc14610e8a578063f2fde38b14610e66578063f8453e7c14610b585763fa97ed6d14610181575f80fd5b34610521576040366003190112610521576004356001600160401b038111610521576101b190369060040161202b565b906024356001600160401b038111610521576101d190369060040161202b565b6101e051606060a052909391925b82821015610b3c57600582901b8101359236829003607e19018412156105215760045f805160206128208339815191525401608052608051546020858401013503610af8576102336040858401013561262e565b15610aa7576101e0516101c0526060958285018701955b610256878786016125ce565b90506101c0511015610a125761026e878786016125ce565b9060e0526101c0511015610536576101c05160051b60e051013560c052609e1960e05136030160c0511215610521575f80516020612820833981519152546102bb60c05160e05101612671565b6001600160a01b03165f908152600b82016020526040902054156109b55760206001600160801b0391600360018060a01b0391015416604461030260c05160e05101612671565b610314604060c05160e0510101612685565b60405163a9059cbb60e01b81526001600160a01b0390921660048301529490941660248501526101e05184928391905af1801561052857610989575b5060c05160e0516001600160a01b039161036a9101612671565b166101a0526101e051606061016081905260c05160e0510101610140525b61039b6101405160c05160e05101612699565b9050811015610550576103b76101405160c05160e05101612699565b9061018052811015610536576103d7602060608302610180510101612671565b6040606083026101805101019061047a6103f083612685565b6040519060208201936060870261018051013585526001600160601b03199060601b1660408301526001600160801b03199060801b1660548201526044815261043a606482611fb1565b60206040519384926101605151808461016051018587015e840190838201906101e0518252519283915e01016101e051815203601f198101835282611fb1565b6101605261049b610495602060608502610180510101612671565b91612685565b6101a0513b15610521576040516314503e5160e01b81526101805160608502013560048201526001600160a01b0390921660248301526001600160801b031660448201526101e0516101a0518290606490829084905af1801561052857610506575b50600101610388565b6101e05161051391611fb1565b6101e051610521575f6104fd565b6101e05180fd5b6040513d6101e051823e3d90fd5b634e487b7160e01b6101e05152603260045260246101e051fd5b50909195929394956101e051610100526060610100526101e0515b60c05160e051610580910160808101906125ce565b90508110156108715760c05160e05161059e910160808101906125ce565b821015610536578160051b8101356101205260be1981360301610120511215610521576106906105d5602061012051840101612671565b605461068460346105f3604061012051880101610120518801612417565b93906106066060610120518a0101612685565b61061760a0610120518b01016126ce565b86604051978894602086019a8d6101205101358c526001600160601b03199060601b166040870152868601378301916001600160801b03199060801b16848301526080610120518b010135606483015263ffffffff60e01b16608482015203016014810184520182611fb1565b519020610100516121a2565b6101005261012051810160800135610779576106b3602061012051830101612671565b610120516106c79083016040810190612417565b90916106da606061012051860101612685565b926101a0513b156105215760405163c2df600960e01b8152610120519095013560048601526001600160a01b039091166024850152608060448501526001600160801b039161072e91608486019190612182565b9116606483015281806101e0519203816101e0516101a0515af180156105285761075e575b506001905b0161056b565b6101e05161076b91611fb1565b6101e051610521575f610753565b61078a602061012051830101612671565b906107a2604061012051830101610120518301612417565b6107b3606061012051850101612685565b926107c560a0610120518301016126ce565b926101a0513b156105215760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701526080926001600160801b039161080e9160a4890191612182565b9416604486015261012051010135606484015263ffffffff60e01b16608483015281806101e0519203816101e0516101a0515af1801561052857610856575b50600190610758565b6101e05161086391611fb1565b6101e051610521575f61084d565b5091909695949392956101a0513b1561052157604051638ea59e1d60e01b8152602060c05160e05101013560048201526101e051816024816101e0516101a0515af180156105285761096e575b5061095d906108d260c05160e05101612671565b6108e4604060c05160e0510101612685565b6101605151602061016051012061010051516020610100510120906040519260208401946001600160601b03199060601b168552602060c05160e05101013560348501526001600160801b03199060801b166054840152606483015260848201526084815261095460a482611fb1565b519020906121a2565b9660016101c051016101c05261024a565b6101e05161097b91611fb1565b6101e051610521575f6108be565b6109a99060203d81116109ae575b6109a18183611fb1565b8101906123ff565b610350565b503d610997565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9391966001939650610a999195808801359182608051557fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a1602081519101206040805192602084019485526020818c010135828501528a0101356060830152608082015260808152610a8e60a082611fb1565b51902060a0516121a2565b60a0520190929391936101df565b60405162461bcd60e51b815260206004820152602360248201527f616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f696e76616c69642070726576696f757320636f6d6d69746d656e7420686173686044820152fd5b610b51858560a05151602060a0510120612449565b6101e05180f35b346105215760a036600319011261052157610b71611f9b565b602435906001600160a01b038216820361052157604435916001600160a01b038316830361052157606435926001600160a01b0384168403610521576084356001600160401b038111610521573660238201121561052157610bdd90369060248160040135910161205b565b905f805160206128408339815191525460ff8160401c1615946001600160401b03821680159081610e5e575b6001149081610e54575b159081610e4b575b50610e365767ffffffffffffffff1982166001175f8051602061284083398151915255610c5e9186610e0a575b50610c51612603565b610c59612603565b61221a565b6040948551610c6d8782611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256310000000000000000008252610ca161228b565b5190205f198101908111610df0578651906020820190815260208252610cc78883611fb1565b60ff19915190201690815f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc6101e0516101e051a15f19430192438411610df057924082556001820180546001600160a01b03199081166001600160a01b03978816179091556002830180548216948716949094179093556003820180549093169416939093179055611a0a60058301556006919091018054680a000000009502f9006001600160c01b0319909116179055610d90906122be565b610d9b576101e05180f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160018152a180610b51565b634e487b7160e01b6101e05152601160045260246101e051fd5b68ffffffffffffffffff191668010000000000000001175f805160206128408339815191525587610c48565b63f92ee8a960e01b6101e0515260046101e051fd5b90501588610c1b565b303b159150610c13565b879150610c09565b3461052157602036600319011261052157610b51610e82611f9b565b610c5961228b565b34610521576101e05136600319011261052157602060055f80516020612820833981519152540154604051908152f35b34610521576101e051366003190112610521576020610ed76121dc565b604051908152f35b34610521576101e05136600319011261052157602060085f80516020612820833981519152540154604051908152f35b34610521576040366003190112610521576004356001600160401b0381116105215736602382011215610521578060040135906001600160401b038211610521573660248360061b83010111610521576024356001600160401b03811161052157610f7f8391369060040161202b565b5f80516020612820833981519152546101e0519460098201939192909160605b8688101561114d576101e051508760061b840197610fed604460248b01359a0192610fc9846121cf565b60405160208101918d8352151560f81b604082015260218152610954604182611fb1565b98806101e051528760205260ff60406101e0512054166003811015611133576001036110de5761101e6001936121cf565b1561108c577f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208285936101e051528a825260406101e051206101e051506101e05150600260ff19825416179055600a8a0161107b8154612174565b9055604051908152a25b0196610f9f565b806101e051528760205260406101e0512080546101e0515060ff191690556040519081527f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960206101e05192a2611085565b60405162461bcd60e51b815260206004820152602760248201527f636f64652073686f756c642062652072657175657374656420666f722076616c60448201526634b230ba34b7b760c91b6064820152608490fd5b634e487b7160e01b6101e05152602160045260246101e051fd5b610b51935060208151910120612449565b34610521576020366003190112610521576004356001600160401b0381116105215761118e90369060040161202b565b61119661228b565b5f80516020612820833981519152546101e0516007820191600801905b81548110156111f3576101e08051839052516020908190208201546001600160a01b03165f9081529084905260409020805460ff191690556001016111b3565b506101e0518154908255915081611249575b61121861121336858761205b565b6122be565b7f144bbc027dc176e94c43b7c1bcff2a8aa58ab434029eec294743cd4ab2e54f516101e0516101e051a16101e05180f35b6101e0515260206101e05120908101905b81811015611205576101e051815560010161125a565b34610521576101e0513660031901126105215760206001600160401b0360065f8051602061282083398151915254015416604051908152f35b34610521576101e051366003190112610521576112d660085f8051602061282083398151915254016120bf565b6040518091602082016020835281518091526020604084019201906101e0515b818110611304575050500390f35b82516001600160a01b03168452859450602093840193909201916001016112f6565b346105215760203660031901126105215760095f8051602061282083398151915254016004356101e0515260205260ff60406101e0512054166040516003821015611133576020918152f35b34610521576020366003190112610521576004356001600160801b03811690818103610521577f9f5e1796f1a0adf311f86170503308a06a16560a7679b7b6da35f4999200d740916020916113c561228b565b5f8051602061282083398151915254600601805477ffffffffffffffffffffffffffffffff00000000000000001916604092831b77ffffffffffffffffffffffffffffffff00000000000000001617905551908152a16101e05180f35b34610521576101e051366003190112610521576020600c5f80516020612820833981519152540154604051908152f35b34610521576101e0513660031901126105215760205f8051602061282083398151915254604051908152f35b3461052157602036600319011261052157611497611f9b565b600b5f8051602061282083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b34610521576020366003190112610521576114df611f9b565b60075f8051602061282083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610521576101e051366003190112610521575f80516020612800833981519152546040516001600160a01b039091168152602090f35b34610521576101e051366003190112610521575f8051602061282083398151915254600301546040516001600160a01b039091168152602090f35b6080366003190112611806576044356004356001600160401b0382116118065736602383011215611806578160040135916001600160401b03831161180657366024848301011161180657606435906001600160801b03821693848303611806575f805160206128208339815191525493805f526009850160205260ff60405f20541660038110156118ed5760020361189157611620612112565b600a6001600160801b03821602946001600160801b03861695860361187d5761164c8661165193612154565b612154565b60038601546040516323b872dd60e01b81523260048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af19081156117fb575f9161185e575b50156118195760028501546e5af43d82803e903d91602b57fd5bf360405160208101908482526024356040820152604081526116e2606082611fb1565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b161760205260018060a01b0390603760095ff51694851561180a57600c90865f52600b81016020528260405f2055016117588154612174565b90557f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf16020604051878152a2833b15611806576117bd945f9360405196879485946306f0ee9760e51b8652326004870152608060248701526024608487019201612182565b9160448401526064830152038183855af19182156117fb576020926117e6575b50604051908152f35b5f6117f091611fb1565b5f6101e052826117dd565b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611877915060203d6020116109ae576109a18183611fb1565b876116a5565b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b34611806576020366003190112611806576004356001600160401b0381168091036118065760207f01326573cfc0bc40a2550923254394ebd7529e3e3301840dfa33cf786aead0c79161195261228b565b5f8051602061282083398151915254600601805467ffffffffffffffff191682179055604051908152a1005b34611806575f366003190112611806575f8051602061282083398151915254600201546040516001600160a01b039091168152602090f35b34611806575f366003190112611806576119ce61228b565b5f8051602061280083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34611806575f366003190112611806576020611a37612112565b6001600160801b0360405191168152f35b34611806575f36600319011261180657611a6061228b565b5f805160206128408339815191525460ff8160401c168015611c4b575b611c3c5768ffffffffffffffffff191668010000000000000002175f80516020612840833981519152555f80516020612820833981519152546001810154600282015460038301546001600160a01b0390811693918116921690611ae3906008016120bf565b906040918251611af38482611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252611b2761228b565b5190205f19810190811161187d578351906020820190815260208252611b4d8583611fb1565b60ff19915190201694855f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f19430143811161187d574086556001860180546001600160a01b03199081166001600160a01b03958616179091556002870180548216968516969096179095556003909501805490941694909116939093179091557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160209190611c0f906122be565b60ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160028152a1005b63f92ee8a960e01b5f5260045ffd5b5060026001600160401b0382161015611a7d565b34611806576020366003190112611806576004356001600160401b038111611806573660238201121561180657611ca0903690602481600401359101611fe6565b611ca861228b565b602081519101205f19810190811161187d57604051906020820190815260208252611cd4604083611fb1565b9051902060ff19165f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a1005b34611806575f366003190112611806575f8051602061282083398151915254600101546040516001600160a01b039091168152602090f35b3461180657602036600319011261180657611d62611f9b565b611d6a61228b565b5f805160206128208339815191525460010180546001600160a01b0319166001600160a01b03909216919091179055005b34611806575f36600319011261180657602060045f80516020612820833981519152540154604051908152f35b34611806575f3660031901126118065760205f805160206128208339815191525454604051908152f35b34611806576040366003190112611806576024356004358115801590611f30575b15611eeb5760095f80516020612820833981519152540190805f528160205260ff60405f20541660038110156118ed57611e8d577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603060248201527f636f64652077697468207375636820696420616c72656164792072657175657360448201526f1d1959081bdc881d985b1a59185d195960821b6064820152608490fd5b60405162461bcd60e51b815260206004820152601c60248201527f626c6f6254784861736820636f756c646e277420626520666f756e64000000006044820152606490fd5b505f491515611e13565b34611806575f366003190112611806576020611a376001600160801b0360065f8051602061282083398151915254015460401c1690565b34611806575f36600319011261180657602090600a5f805160206128208339815191525401548152f35b600435906001600160a01b038216820361180657565b90601f801991011681019081106001600160401b03821117611fd257604052565b634e487b7160e01b5f52604160045260245ffd5b9291926001600160401b038211611fd2576040519161200f601f8201601f191660200184611fb1565b829481845281830111611806578281602093845f960137010152565b9181601f84011215611806578235916001600160401b038311611806576020808501948460051b01011161180657565b9092916001600160401b038411611fd2578360051b91602060405161208282860182611fb1565b809681520192810191821161180657915b81831061209f57505050565b82356001600160a01b038116810361180657815260209283019201612093565b90604051918281549182825260208201905f5260205f20925f5b8181106120f05750506120ee92500383611fb1565b565b84546001600160a01b03168352600194850194879450602090930192016120d9565b5f8051602061282083398151915254600601546001600160401b038116906001600160801b039060401c811616026001600160801b03811690810361187d5790565b906001600160801b03809116911601906001600160801b03821161187d57565b5f19811461187d5760010190565b908060209392818452848401375f828201840152601f01601f1916010190565b6020806120ee928195946040519682889351918291018585015e8201908382015203018085520183611fb1565b3580151581036118065790565b5f8051602061282083398151915254600560088201549101549081810291818304149015171561187d5761270f810180911161187d57612710900490565b6001600160a01b03168015612278575f8051602061280083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f80516020612800833981519152546001600160a01b031633036122ab57565b63118cdaa760e01b5f523360045260245ffd5b5f805160206128208339815191525490600882019081546123ae579091600701905f5b815181101561232057600581901b82016020908101516001600160a01b03165f9081529084905260409020805460ff19166001908117909155016122e1565b5080519291506001600160401b038311611fd257680100000000000000008311611fd2578154838355808410612388575b50602001905f5260205f205f5b83811061236b5750505050565b82516001600160a01b03168183015560209092019160010161235e565b825f528360205f2091820191015b8181106123a35750612351565b5f8155600101612396565b60405162461bcd60e51b815260206004820152602360248201527f70726576696f75732076616c696461746f727320776572656e27742072656d6f6044820152621d995960ea1b6064820152608490fd5b90816020910312611806575180151581036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191813603831361180657565b905f8051602061282083398151915254906124626121dc565b9260405190602082019081526020825261247d604083611fb1565b6124b9603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282611fb1565b5190205f9260070191835b868510156125c2576124fa6124f16124eb6124e48860051b860186612417565b3691611fe6565b856126e3565b9092919261271d565b6001600160a01b03165f9081526020859052604090205460ff16156125875761252290612174565b9385851461253357600101936124c4565b505050509091505b1061254257565b60405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f7567682076616c6964207369676e61747572657300000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606490fd5b9495505050505061253b565b903590601e198136030182121561180657018035906001600160401b03821161180657602001918160051b3603831361180657565b60ff5f805160206128408339815191525460401c161561261f57565b631afcd79f60e31b5f5260045ffd5b905f19430143811161187d57805b612647575b505f9150565b804083810361265857506001925050565b1561266c57801561187d575f19018061263c565b612641565b356001600160a01b03811681036118065790565b356001600160801b03811681036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191606082023603831361180657565b356001600160e01b0319811681036118065790565b81519190604183036127135761270c9250602082015190606060408401519301515f1a9061277d565b9192909190565b50505f9160029190565b60048110156118ed578061272f575050565b600181036127465763f645eedf60e01b5f5260045ffd5b60028103612761575063fce698f760e01b5f5260045260245ffd5b60031461276b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116127f4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156117fb575f516001600160a01b038116156127ea57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220a56ab5c973dc843d6a2342dd7415210e0ce6114c70ea7472e3ce95a65302dcc764736f6c634300081a0033","sourceMap":"781:16427:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;;;;9630:35;;781:16427;;;;9730:3;9696:32;;;;;;781:16427;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;11143:30;;;;;781:16427;;;;;11177:34;781:16427;11143:68;781:16427;;11275:49;781:16427;;;;11294:29;781:16427;11275:49;:::i;:::-;781:16427;;;;;11421:13;;781:16427;;;;;11440:27;;;11476:3;11440:27;781:16427;;;;11440:27;:::i;:::-;11436:38;;;;;;;;11538:27;781:16427;;;;11538:27;:::i;:::-;;;;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;12616:23;781:16427;;;;;12616:23;:::i;:::-;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;12600:15;;;781:16427;;;;;;12600:45;781:16427;;;-1:-1:-1;;;;;781:16427:81;12753:18;781:16427;;;;;12753:18;;781:16427;;;12808:23;781:16427;;;;;12808:23;:::i;:::-;12833:30;781:16427;;;;;;12833:30;;:::i;:::-;781:16427;;-1:-1:-1;;;12782:82:81;;-1:-1:-1;;;;;781:16427:81;;;;12782:82;;781:16427;;;;;;;;;;;;;;;;12782:82;;;;;;;;11476:3;-1:-1:-1;781:16427:81;;;;-1:-1:-1;;;;;781:16427:81;12905:23;;781:16427;12905:23;:::i;:::-;781:16427;;;;;;12940:29;;;;781:16427;;;;;13004:27;;;13040:3;13004:27;;;781:16427;;;;;13004:27;:::i;:::-;13000:38;;;;;;;13092:27;;;781:16427;;;;;13092:27;:::i;:::-;;;;781:16427;;;;;13243:22;781:16427;;;;;;;13243:22;;:::i;:::-;781:16427;;;;;;;13267:16;;781:16427;13267:16;;;:::i;:::-;781:16427;;13204:80;781:16427;13204:80;;781:16427;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;13204:80;;;781:16427;13204:80;;:::i;:::-;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13204:80;;781:16427;;;;;;:::i;:::-;13137:161;;13384:16;13360:22;781:16427;;;;;;;13243:22;13360;:::i;:::-;13384:16;;:::i;:::-;13313:88;;;;;;781:16427;;-1:-1:-1;;;13313:88:81;;781:16427;;;;;;;;13313:88;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;13313:88;;781:16427;;;;;;;;13313:88;;;;;;;;13040:3;;781:16427;;12985:13;;13313:88;781:16427;;13313:88;;;:::i;:::-;781:16427;;;;13313:88;;;781:16427;;;;;13313:88;781:16427;;;;;;;;;;;;;;;;;;;;;;;;13000:38;;;;;;;;;781:16427;;13422:27;;781:16427;13422:27;;781:16427;;13517:3;781:16427;;;;13484:24;;781:16427;;13484:24;;;;:::i;:::-;13480:35;;;;;;;781:16427;;;;13579:24;;781:16427;;13484:24;;;13579;:::i;:::-;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;13638:67;15508:27;781:16427;;;;;15508:27;;:::i;:::-;781:16427;15438:291;781:16427;15553:23;781:16427;;;;;15553:23;781:16427;;;;15553:23;:::i;:::-;781:16427;;15594:21;781:16427;;;;;15594:21;;:::i;:::-;15682:33;14840:85;781:16427;;;;15682:33;;:::i;:::-;781:16427;;;15438:291;;;781:16427;15438:291;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;15633:28;781:16427;;;;;;;;;;;;;15438:291;;;;;;;;;;:::i;:::-;781:16427;15415:324;;13638:67;;;:::i;:::-;13621:84;;781:16427;;;;;15633:28;781:16427;;;13845:27;781:16427;;;;;15508:27;13845;:::i;:::-;781:16427;;13874:23;;781:16427;;;15553:23;;;13874;:::i;:::-;781:16427;;13899:21;781:16427;;;;;15594:21;13899;:::i;:::-;13780:158;;;;;;;781:16427;;-1:-1:-1;;;13780:158:81;;781:16427;;;;;;;13780:158;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;:::i;:::-;;;;;;;;;;;13780:158;;781:16427;;;13780:158;;;;;;;;;;13720:556;;781:16427;13720:556;;781:16427;13465:13;;13780:158;781:16427;;13780:158;;;:::i;:::-;781:16427;;;;13780:158;;;13720:556;14020:27;781:16427;;;;;15508:27;14020;:::i;:::-;781:16427;14069:23;781:16427;;;;;15553:23;781:16427;;;;14069:23;:::i;:::-;14114:21;781:16427;;;;;15594:21;14114;:::i;:::-;781:16427;14210:33;14840:85;781:16427;;;;15682:33;14210;:::i;:::-;13977:284;;;;;;;781:16427;;-1:-1:-1;;;13977:284:81;;-1:-1:-1;;;;;781:16427:81;;;;13977:284;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;15189:92;781:16427;;;;:::i;:::-;;;;;;;;;;15633:28;781:16427;;;;;;;;;;;;;;;;;13977:284;;781:16427;;;13977:284;;;;;;;;;;13720:556;;781:16427;13720:556;;;13977:284;781:16427;;13977:284;;;:::i;:::-;781:16427;;;;13977:284;;;13480:35;;;;;;;;;;14296:53;;;;;;781:16427;;;;;14296:53;;781:16427;;;;;;14320:28;781:16427;;14296:53;;781:16427;;;;;;;;14296:53;;;;;;;;;;13460:826;781:16427;11678:47;781:16427;14401:23;781:16427;;;;;14401:23;:::i;:::-;14480:30;781:16427;;;;;;12833:30;14480;:::i;:::-;14524:27;;781:16427;;14524:27;;781:16427;14524:27;14565:25;;781:16427;;14565:25;;781:16427;14565:25;781:16427;;;15189:92;781:16427;15189:92;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;14320:28;781:16427;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;15189:92;;;;;;:::i;:::-;781:16427;15179:103;;11678:47;;:::i;:::-;11476:3;781:16427;11476:3;;781:16427;11476:3;;11421:13;;14296:53;781:16427;;14296:53;;;:::i;:::-;781:16427;;;;14296:53;;;12782:82;;;781:16427;12782:82;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;11436:38;;;;781:16427;11436:38;;;9930:57;11436:38;;781:16427;;;;1072:66;;;;;11819:41;781:16427;;;;;;11819:41;781:16427;;;;;12042:28;781:16427;;;14840:85;781:16427;14840:85;;781:16427;;;;;;;11177:34;781:16427;;;;;;;11294:29;781:16427;;;;;;;;;;14840:85;;;;;;:::i;:::-;781:16427;14830:96;;9930:57;;;:::i;:::-;9905:82;;781:16427;9681:13;;;;;;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9696:32;10063:10;9696:32;;10028:33;;781:16427;;10028:33;;781:16427;10028:33;10063:10;:::i;:::-;781:16427;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;4301:16:25;781:16427:81;-1:-1:-1;;;;;781:16427:81;;4726:16:25;;:34;;;;781:16427:81;4805:1:25;4790:16;:50;;;;781:16427:81;4855:13:25;:30;;;;781:16427:81;4851:91:25;;;-1:-1:-1;;781:16427:81;;4805:1:25;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6961:1:25;;781:16427:81;4979:67:25;;781:16427:81;6893:76:25;;;:::i;:::-;;;:::i;:::-;6961:1;:::i;:::-;781:16427:81;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:24;;:::i;:::-;781:16427:81;2944:27;;-1:-1:-1;;781:16427:81;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;;;;:::i;:::-;781:16427;;;;2915:63;;:89;1072:66;;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;;;;3084:20;781:16427;;1644:12;781:16427;1644:12;;781:16427;;;;1634:27;;1072:66;;4805:1:25;1671:13:81;;781:16427;;-1:-1:-1;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;1704:18;;;781:16427;;;;;;;;;;;;;;1747:18;;;781:16427;;;;;;;;;;;;;1826:4;1790:33;;;1072:66;1868:17;;;;;781:16427;;;-1:-1:-1;;;;;;781:16427:81;;;;;;1962:15;;;:::i;:::-;5066:101:25;;781:16427:81;;;;5066:101:25;781:16427:81;5142:14:25;781:16427:81;-1:-1:-1;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;;;;;;781:16427:81;;4805:1:25;781:16427:81;;5142:14:25;5066:101;;;781:16427:81;;;;;;;;;;;;;;4979:67:25;-1:-1:-1;;781:16427:81;;;-1:-1:-1;;;;;;;;;;;781:16427:81;4979:67:25;;;4851:91;6498:23;;;781:16427:81;;4908:23:25;781:16427:81;;;4908:23:25;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:25;;4726:34;;;-1:-1:-1;4726:34:25;;781:16427:81;;;;;;-1:-1:-1;;781:16427:81;;;;2357:1:24;781:16427:81;;:::i;:::-;2303:62:24;;:::i;781:16427:81:-;;;;;;;-1:-1:-1;;781:16427:81;;;;;4918:33;-1:-1:-1;;;;;;;;;;;781:16427:81;4918:33;781:16427;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;5296:21;-1:-1:-1;;;;;;;;;;;781:16427:81;5296:21;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;8978:12;;;;781:16427;;;;;8651:3;8618:31;;;;;;-1:-1:-1;;781:16427:81;;;;;;;8852:55;15915:20;781:16427;;;;15915:20;;;;;;:::i;:::-;781:16427;;;15879:57;;781:16427;;;;;;;;;;;;;15879:57;;;;;;:::i;8852:55::-;781:16427;;;;;;;;;;;;;;;;;;;;;;8978:53;781:16427;;9094:20;781:16427;9094:20;;:::i;:::-;;;;9246:30;781:16427;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;9157:19;781:16427;;;;;;;;9194:26;;;:28;781:16427;;9194:28;:::i;:::-;1072:66;;781:16427;;;;;9246:30;9090:322;781:16427;8603:13;;;9090:322;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;;;9366:31;781:16427;;;9366:31;;9090:322;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;8618:31;9486:10;8618:31;;781:16427;;;;;9452:32;9486:10;:::i;781:16427::-;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;16446:17;;;;16332:21;;;16362:3;781:16427;;16328:32;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;16313:13;;16328:32;-1:-1:-1;781:16427:81;;;;;;;;-1:-1:-1;781:16427:81;;;16308:177;5857:38;781:16427;;;;;:::i;:::-;5857:38;:::i;:::-;5911:22;781:16427;;;;5911:22;781:16427;;;;;-1:-1:-1;;781:16427:81;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;6110:17:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6110:17;781:16427;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;5640:21;-1:-1:-1;;;;;;;;;;;781:16427:81;5640:21;781:16427;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;4382:12;-1:-1:-1;;;;;;;;;;;781:16427:81;4382:12;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;6689:38;2303:62:24;781:16427:81;2303:62:24;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;6634:21;;781:16427;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;;;6689:38;781:16427;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;4535:20;-1:-1:-1;;;;;;;;;;;781:16427:81;4535:20;781:16427;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;4703:15;-1:-1:-1;;;;;;;;;;;781:16427:81;4703:15;:24;781:16427;;;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;5473:17;-1:-1:-1;;;;;;;;;;;781:16427:81;5473:17;:28;781:16427;;;;;;-1:-1:-1;781:16427:81;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3567:18;;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;7571:12;;;781:16427;;;;;;;;;;;;;;7595:19;7571:43;781:16427;;7699:9;;:::i;:::-;781:16427;-1:-1:-1;;;;;781:16427:81;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;7795:32;;:41;:32;;:::i;:::-;:41;:::i;:::-;781:16427;16079:18;;781:16427;;;-1:-1:-1;;;16072:73:81;;16112:9;781:16427;16072:73;;781:16427;16131:4;781:16427;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;16072:73;;;;;;;781:16427;16072:73;;;781:16427;;;;;7595:19;8078:18;;781:16427;3743:569:36;781:16427:81;;;8108:30;;781:16427;;;;;;;;;;;8108:30;;;781:16427;8108:30;;:::i;:::-;781:16427;8098:41;;3743:569:36;;;;;;;;781:16427:81;3743:569:36;;;;;;;;781:16427:81;3743:569:36;781:16427:81;;;;;3743:569:36;;7571:12:81;781:16427;3743:569:36;781:16427:81;4325:22:36;;;4321:85;;8194:20:81;8151:24;781:16427;;;8151:15;;;781:16427;;;;;;1072:66;8194:20;:22;781:16427;;8194:22;:::i;:::-;1072:66;;8232:31;781:16427;;;;;;8232:31;8274:75;;;;;781:16427;;;;;;;;;;;;;;8274:75;;16112:9;781:16427;8274:75;;781:16427;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8274:75;;;;;;;;;;;781:16427;8274:75;;;781:16427;;;;;;;;8274:75;781:16427;8274:75;;;:::i;:::-;781:16427;;;8274:75;;;;781:16427;;;;;;;;;8274:75;781:16427;;;4321:85:36;4370:25;;;781:16427:81;4370:25:36;781:16427:81;;4370:25:36;781:16427:81;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;16072:73;;;;781:16427;16072:73;781:16427;16072:73;;;;;;;:::i;:::-;;;;781:16427;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;6307:30;2303:62:24;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;6260:17;;781:16427;;-1:-1:-1;;781:16427:81;;;;;;;;;;6307:30;781:16427;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3716:18;;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;3975:40:24;781:16427:81;;3975:40:24;781:16427:81;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;:::i;:::-;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;6431:44:25;;;;781:16427:81;6427:105:25;;-1:-1:-1;;781:16427:81;;;-1:-1:-1;;;;;;;;;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;2129:16;;781:16427;2046:1;2178:21;;781:16427;2232:21;;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;2298:24;;781:16427;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:24;;:::i;:::-;781:16427:81;2944:27;;-1:-1:-1;;781:16427:81;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;;;;:::i;:::-;781:16427;;;;2915:63;;:89;1072:66;;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;3084:20;;781:16427;;2469:12;781:16427;2469:12;781:16427;;;;2459:27;1072:66;;6593:4:25;2496:13:81;;781:16427;;-1:-1:-1;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;2046:1;2529:18;;781:16427;;;;;;;;;;;;;;2232:21;2572:18;;;781:16427;;;;;;;;;;;;;;;;6656:20:25;;781:16427:81;;-1:-1:-1;2630:15:81;;;:::i;:::-;-1:-1:-1;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;;;;;;781:16427:81;;2046:1;781:16427;;6656:20:25;781:16427:81;6427:105:25;6498:23;;;781:16427:81;6498:23:25;781:16427:81;;6498:23:25;6431:44;781:16427:81;2046:1;-1:-1:-1;;;;;781:16427:81;;6450:25:25;;6431:44;;781:16427:81;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;781:16427:81;;;;;2944:27;781:16427;;;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;781:16427;2925:52;;:::i;:::-;781:16427;;2915:63;;-1:-1:-1;;2915:89:81;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;;3084:20;781:16427;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;3860:13;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;3999:13;;781:16427;;-1:-1:-1;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3406:30;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;6983:15;;;;;:35;;781:16427;;;;7119:12;-1:-1:-1;;;;;;;;;;;781:16427:81;7119:12;781:16427;;;;;;;;;;;;;;;;;;;;;7292:43;781:16427;;;;;;;;;;;7247:29;781:16427;;;;;;;;;;;;;;;;;7292:43;781:16427;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;6983:35;7002:11;781:16427;7002:11;:16;;6983:35;;781:16427;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;6471:21:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6471:21;781:16427;;;;6350:149;;781:16427;;;;;;-1:-1:-1;;781:16427:81;;;;;;4211:26;-1:-1:-1;;;;;;;;;;;781:16427:81;4211:26;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;:::o;:::-;;;13204:80;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;13204:80;781:16427;;-1:-1:-1;;781:16427:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;6740:113;-1:-1:-1;;;;;;;;;;;781:16427:81;6110:17;;781:16427;-1:-1:-1;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;6740:113;:::o;781:16427::-;;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;:::o;:::-;-1:-1:-1;;781:16427:81;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;-1:-1:-1;;781:16427:81;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;4964:204::-;-1:-1:-1;;;;;;;;;;;781:16427:81;4918:33;5296:21;;;781:16427;4918:33;;781:16427;;;;;;;;;;;;;;;;5148:4;781:16427;;;;;;;5156:5;781:16427;;4964:204;:::o;3405:215:24:-;-1:-1:-1;;;;;781:16427:81;3489:22:24;;3485:91;;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;3975:40:24;-1:-1:-1;;3975:40:24;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;781:16427:81;;3509:1:24;3534:31;2658:162;-1:-1:-1;;;;;;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;966:10:29;2717:23:24;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:24;966:10:29;2763:40:24;781:16427:81;;-1:-1:-1;2763:40:24;16536:442:81;-1:-1:-1;;;;;;;;;;;781:16427:81;16670:21;;;;781:16427;;;;;16759:13;;16875:17;;;-1:-1:-1;16803:3:81;781:16427;;16774:27;;;;;781:16427;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;16759:13;;16774:27;-1:-1:-1;781:16427:81;;;16774:27;-1:-1:-1;;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;16754:167;781:16427;;;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;-1:-1:-1;781:16427:81;;;;;;16536:442;;;;:::o;781:16427::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;:::o;10123:844::-;;-1:-1:-1;;;;;;;;;;;781:16427:81;10291:21;;;:::i;:::-;781:16427;;;10391:26;;;;781:16427;;;10391:26;;;;781:16427;10391:26;;:::i;:::-;2858:45:56;781:16427:81;;;2858:45:56;;10391:26:81;2858:45:56;;781:16427:81;;;;;;10353:4;781:16427;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;2858:45:56;;13204:80:81;;2858:45:56;;;;;;:::i;:::-;781:16427:81;2848:56:56;;-1:-1:-1;;10652:17:81;;;-1:-1:-1;10509:3:81;10486:21;;;;;;3915:8:55;3859:27;781:16427:81;;;;;;;;;:::i;:::-;;;;:::i;:::-;3859:27:55;;:::i;:::-;3915:8;;;;;:::i;:::-;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;10704:17;;;:::i;:::-;:30;;;;10700:82;;781:16427;;10471:13;;;10700:82;10758:5;;;;;;;10466:416;10900:28;781:16427;;10123:844::o;781:16427::-;;;-1:-1:-1;;;781:16427:81;;10391:26;781:16427;;;;;;;;;;;;;;;;;10648:224;781:16427;;-1:-1:-1;;;781:16427:81;;10391:26;781:16427;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;10486:21;;;;;;;;;;781:16427;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;:::o;7084:141:25:-;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;7150:18:25;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:25;;-1:-1:-1;7191:17:25;12093:338:81;;781:16427;;12190:12;781:16427;12190:12;781:16427;;;;12173:230;12208:5;;;12173:230;-1:-1:-1;781:16427:81;;-1:-1:-1;12093:338:81:o;12215:3::-;12248:12;;12278:11;;;;;-1:-1:-1;12205:1:81;;-1:-1:-1;;12309:11:81:o;12274:119::-;12345:8;12341:52;;781:16427;;;;-1:-1:-1;;781:16427:81;;12178:28;;12341:52;12373:5;;781:16427;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;;;;;781:16427:81;;;;;;;:::o;2129:766:55:-;781:16427:81;;;2129:766:55;2276:2;2256:22;;2276:2;;2739:25;2539:180;;;;;;;;;;;;;;;-1:-1:-1;2539:180:55;2739:25;;:::i;:::-;2732:32;;;;;:::o;2252:637::-;2795:83;;2811:1;2795:83;2815:35;2795:83;;:::o;7196:532::-;781:16427:81;;;;;;7282:29:55;;;7327:7;;:::o;7278:444::-;781:16427:81;7378:38:55;;781:16427:81;;7439:23:55;;;7291:20;7439:23;781:16427:81;7291:20:55;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;781:16427:81;;;7291:20:55;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;781:16427:81;;;7291:20:55;7679:32;5140:1530;;;6199:66;6186:79;;6182:164;;781:16427:81;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;;6457:24:55;;;;;;;;;-1:-1:-1;6457:24:55;-1:-1:-1;;;;;781:16427:81;;6495:20:55;6491:113;;6614:49;-1:-1:-1;6614:49:55;-1:-1:-1;5140:1530:55;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:55;6457:24;6531:62;-1:-1:-1;6531:62:55;:::o;6182:164::-;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o","linkReferences":{}},"methodIdentifiers":{"baseFee()":"6ef25c3a","baseWeight()":"d3fd6364","codeState(bytes32)":"c13911e8","commitBlocks((bytes32,bytes32,bytes32,(address,bytes32,uint128,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4))[])[])[],bytes[])":"fa97ed6d","commitCodes((bytes32,bool)[],bytes[])":"e97d3eb3","createProgram(bytes32,bytes32,bytes,uint128)":"8074b455","genesisBlockHash()":"28e24b3d","getStorageSlot()":"96708226","initialize(address,address,address,address,address[])":"f8453e7c","lastBlockCommitmentHash()":"2dacfb69","mirror()":"444d9172","mirrorProxy()":"78ee5dec","owner()":"8da5cb5b","programCodeId(address)":"9067088e","programsCount()":"96a2ddfa","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestCodeValidation(bytes32,bytes32)":"1c149d8a","setBaseWeight(uint64)":"8028861a","setMirror(address)":"3d43b418","setStorageSlot(string)":"5686cad5","setValuePerWeight(uint128)":"a6bbbe1c","signingThresholdPercentage()":"efd81abc","transferOwnership(address)":"f2fde38b","updateValidators(address[])":"e71731e4","validatedCodesCount()":"007a32e7","validatorExists(address)":"8febbd59","validators()":"ca1e7819","validatorsCount()":"ed612f8c","validatorsThreshold()":"edc87225","valuePerWeight()":"0834fecc","wrappedVara()":"88f50cf0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"baseWeight\",\"type\":\"uint64\"}],\"name\":\"BaseWeightChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"BlockCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"CodeGotValidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"CodeValidationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"ProgramCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StorageSlotChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ValidatorsSetChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"valuePerWeight\",\"type\":\"uint128\"}],\"name\":\"ValuePerWeightChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"baseFee\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"codeState\",\"outputs\":[{\"internalType\":\"enum IRouter.CodeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"prevCommitmentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"predBlockHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct IRouter.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct IRouter.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"}],\"internalType\":\"struct IRouter.OutgoingMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRouter.StateTransition[]\",\"name\":\"transitions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRouter.BlockCommitment[]\",\"name\":\"blockCommitmentsArray\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"internalType\":\"struct IRouter.CodeCommitment[]\",\"name\":\"codeCommitmentsArray\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitCodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"createProgram\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageSlot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_validatorsKeys\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBlockCommitmentHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirror\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"program\",\"type\":\"address\"}],\"name\":\"programCodeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"requestCodeValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_baseWeight\",\"type\":\"uint64\"}],\"name\":\"setBaseWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"}],\"name\":\"setMirror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"namespace\",\"type\":\"string\"}],\"name\":\"setStorageSlot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valuePerWeight\",\"type\":\"uint128\"}],\"name\":\"setValuePerWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signingThresholdPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"validatorsAddressArray\",\"type\":\"address[]\"}],\"name\":\"updateValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatedCodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"validatorExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"valuePerWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedVara\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"BaseWeightChanged(uint64)\":{\"details\":\"Emitted when the tx's base weight is changed. NOTE: It's event for USERS: it informs about new value of commission for each message sending. NOTE: It's event for NODES: it requires to update commission in programs execution parameters.\"},\"BlockCommitted(bytes32)\":{\"details\":\"Emitted when a new state transitions are applied. NOTE: It's event for USERS: it informs about new block outcome committed.\"},\"CodeGotValidated(bytes32,bool)\":{\"details\":\"Emitted when a code, previously requested to be validated, gets validated. NOTE: It's event for USERS: it informs about validation results of previously requested code.\"},\"CodeValidationRequested(bytes32,bytes32)\":{\"details\":\"Emitted when a new code validation request submitted. NOTE: It's event for NODES: it requires to download and validate code from blob.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProgramCreated(address,bytes32)\":{\"details\":\"Emitted when a new program created. NOTE: It's event for USERS: it informs about new program creation and it's availability on Ethereum. NOTE: It's event for NODES: it requires to create associated gear program in local storage.\"},\"StorageSlotChanged()\":{\"details\":\"Emitted when the storage slot is changed. NOTE: It's event for USERS: it informs about router being wiped and all programs and codes deletion. NOTE: It's event for NODES: it requires to clean the local storage.\"},\"ValidatorsSetChanged()\":{\"details\":\"Emitted when the validators set is changed. NOTE: It's event for USERS: it informs about validators rotation. NOTE: It's event for NODES: it requires to update authorities that sign outcomes.\"},\"ValuePerWeightChanged(uint128)\":{\"details\":\"Emitted when the value per executable weight is changed. NOTE: It's event for USERS: it informs about new conversion rate between weight and it's WVara price. NOTE: It's event for NODES: it requires to update conversion rate in programs execution parameters.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"programCodeId(address)\":{\"details\":\"Returns bytes32(0) in case of inexistent program.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Router.sol\":\"Router\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64\",\"dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58\",\"dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf\",\"dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde\",\"dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Router.sol\":{\"keccak256\":\"0x5db40e2574ad57a5d159346d1e4adc1fc3df4c63097345805e89c60553a6ce4e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://951272070e69e13be0cad9d405cd47db9d239b0d9095c4c440560a679910e040\",\"dweb:/ipfs/QmWXwFjEDW7nouNJNXuLic4efxjokeCQ33irYoDyhE7k8p\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"uint64","name":"baseWeight","type":"uint64","indexed":false}],"type":"event","name":"BaseWeightChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":false}],"type":"event","name":"BlockCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"bool","name":"valid","type":"bool","indexed":true}],"type":"event","name":"CodeGotValidated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32","indexed":false}],"type":"event","name":"CodeValidationRequested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"actorId","type":"address","indexed":false},{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":true}],"type":"event","name":"ProgramCreated","anonymous":false},{"inputs":[],"type":"event","name":"StorageSlotChanged","anonymous":false},{"inputs":[],"type":"event","name":"ValidatorsSetChanged","anonymous":false},{"inputs":[{"internalType":"uint128","name":"valuePerWeight","type":"uint128","indexed":false}],"type":"event","name":"ValuePerWeightChanged","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"baseFee","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"baseWeight","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"codeState","outputs":[{"internalType":"enum IRouter.CodeState","name":"","type":"uint8"}]},{"inputs":[{"internalType":"struct IRouter.BlockCommitment[]","name":"blockCommitmentsArray","type":"tuple[]","components":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"prevCommitmentHash","type":"bytes32"},{"internalType":"bytes32","name":"predBlockHash","type":"bytes32"},{"internalType":"struct IRouter.StateTransition[]","name":"transitions","type":"tuple[]","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"struct IRouter.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct IRouter.OutgoingMessage[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct IRouter.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]}]}]}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitBlocks"},{"inputs":[{"internalType":"struct IRouter.CodeCommitment[]","name":"codeCommitmentsArray","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"valid","type":"bool"}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitCodes"},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"createProgram","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStorageSlot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_mirror","type":"address"},{"internalType":"address","name":"_mirrorProxy","type":"address"},{"internalType":"address","name":"_wrappedVara","type":"address"},{"internalType":"address[]","name":"_validatorsKeys","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastBlockCommitmentHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirror","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorProxy","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"program","type":"address"}],"stateMutability":"view","type":"function","name":"programCodeId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"programsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"requestCodeValidation"},{"inputs":[{"internalType":"uint64","name":"_baseWeight","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setBaseWeight"},{"inputs":[{"internalType":"address","name":"_mirror","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setMirror"},{"inputs":[{"internalType":"string","name":"namespace","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setStorageSlot"},{"inputs":[{"internalType":"uint128","name":"_valuePerWeight","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"setValuePerWeight"},{"inputs":[],"stateMutability":"view","type":"function","name":"signingThresholdPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address[]","name":"validatorsAddressArray","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"updateValidators"},{"inputs":[],"stateMutability":"view","type":"function","name":"validatedCodesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validator","type":"address"}],"stateMutability":"view","type":"function","name":"validatorExists","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"valuePerWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrappedVara","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"programCodeId(address)":{"details":"Returns bytes32(0) in case of inexistent program."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Router.sol":"Router"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6","urls":["bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64","dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol":{"keccak256":"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9","urls":["bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58","dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x1115363567bf631a5d6d9fc78f8da9e6a236000889ddf6dea44853531fd2c8f6","urls":["bzz-raw://a412c495586bfee3a89d34f14c0858bd914e6d5b97274bad2c867d2af81b94bf","dweb:/ipfs/QmZ2Jf3fnwW7jaWShK2PPZyAUKTbfeAT2mQCBgVVWEtKoL"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3","urls":["bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde","dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Router.sol":{"keccak256":"0x5db40e2574ad57a5d159346d1e4adc1fc3df4c63097345805e89c60553a6ce4e","urls":["bzz-raw://951272070e69e13be0cad9d405cd47db9d239b0d9095c4c440560a679910e040","dweb:/ipfs/QmWXwFjEDW7nouNJNXuLic4efxjokeCQ33irYoDyhE7k8p"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Router.sol","id":55997,"exportedSymbols":{"Clones":[41121],"ECDSA":[43387],"IERC20":[41906],"IMirror":[53636],"IRouter":[53951],"IWrappedVara":[53962],"MessageHashUtils":[43461],"OwnableUpgradeable":[39024],"ReentrancyGuardTransient":[42400],"Router":[55996],"StorageSlot":[42719]},"nodeType":"SourceUnit","src":"39:17170:81","nodes":[{"id":54379,"nodeType":"PragmaDirective","src":"39:24:81","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":54381,"nodeType":"ImportDirective","src":"65:74:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":42720,"symbolAliases":[{"foreign":{"id":54380,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"73:11:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54383,"nodeType":"ImportDirective","src":"140:101:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":39025,"symbolAliases":[{"foreign":{"id":54382,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39024,"src":"148:18:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54385,"nodeType":"ImportDirective","src":"242:64:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":41122,"symbolAliases":[{"foreign":{"id":54384,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41121,"src":"250:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54387,"nodeType":"ImportDirective","src":"307:75:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol","file":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":43388,"symbolAliases":[{"foreign":{"id":54386,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43387,"src":"315:5:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54389,"nodeType":"ImportDirective","src":"383:97:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol","file":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":43462,"symbolAliases":[{"foreign":{"id":54388,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43461,"src":"391:16:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54391,"nodeType":"ImportDirective","src":"481:100:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":42401,"symbolAliases":[{"foreign":{"id":54390,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42400,"src":"489:24:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54393,"nodeType":"ImportDirective","src":"582:38:81","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53952,"symbolAliases":[{"foreign":{"id":54392,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"590:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54395,"nodeType":"ImportDirective","src":"621:38:81","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53637,"symbolAliases":[{"foreign":{"id":54394,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"629:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54397,"nodeType":"ImportDirective","src":"660:48:81","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53963,"symbolAliases":[{"foreign":{"id":54396,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"668:12:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54399,"nodeType":"ImportDirective","src":"709:70:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":41907,"symbolAliases":[{"foreign":{"id":54398,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41906,"src":"717:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55996,"nodeType":"ContractDefinition","src":"781:16427:81","nodes":[{"id":54408,"nodeType":"UsingForDirective","src":"860:24:81","nodes":[],"global":false,"libraryName":{"id":54406,"name":"ECDSA","nameLocations":["866:5:81"],"nodeType":"IdentifierPath","referencedDeclaration":43387,"src":"866:5:81"},"typeName":{"id":54407,"name":"bytes32","nodeType":"ElementaryTypeName","src":"876:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"id":54411,"nodeType":"UsingForDirective","src":"889:35:81","nodes":[],"global":false,"libraryName":{"id":54409,"name":"MessageHashUtils","nameLocations":["895:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":43461,"src":"895:16:81"},"typeName":{"id":54410,"name":"address","nodeType":"ElementaryTypeName","src":"916:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":54414,"nodeType":"VariableDeclaration","src":"1032:106:81","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"1057:12:81","scope":55996,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54412,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1032:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307835633039636131623962383132376134666439663363333834616163353962363631343431653832306531373733333735336666356632653836653165303030","id":54413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1072:66:81","typeDescriptions":{"typeIdentifier":"t_rational_41630078590300661333111585883568696735413380457407274925697692750148467286016_by_1","typeString":"int_const 4163...(69 digits omitted)...6016"},"value":"0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000"},"visibility":"private"},{"id":54422,"nodeType":"FunctionDefinition","src":"1198:53:81","nodes":[],"body":{"id":54421,"nodeType":"Block","src":"1212:39:81","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54418,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39246,"src":"1222:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1222:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54420,"nodeType":"ExpressionStatement","src":"1222:22:81"}]},"documentation":{"id":54415,"nodeType":"StructuredDocumentation","src":"1145:48:81","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":54416,"nodeType":"ParameterList","parameters":[],"src":"1209:2:81"},"returnParameters":{"id":54417,"nodeType":"ParameterList","parameters":[],"src":"1212:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54504,"nodeType":"FunctionDefinition","src":"1257:728:81","nodes":[],"body":{"id":54503,"nodeType":"Block","src":"1459:526:81","nodes":[],"statements":[{"expression":{"arguments":[{"id":54439,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54424,"src":"1484:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54438,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38884,"src":"1469:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":54440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1469:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54441,"nodeType":"ExpressionStatement","src":"1469:28:81"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725631","id":54443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1523:25:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""},"value":"router.storage.RouterV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""}],"id":54442,"name":"setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54645,"src":"1508:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":54444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54445,"nodeType":"ExpressionStatement","src":"1508:41:81"},{"assignments":[54448],"declarations":[{"constant":false,"id":54448,"mutability":"mutable","name":"router","nameLocation":"1575:6:81","nodeType":"VariableDeclaration","scope":54503,"src":"1559:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54447,"nodeType":"UserDefinedTypeName","pathNode":{"id":54446,"name":"Storage","nameLocations":["1559:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"1559:7:81"},"referencedDeclaration":53684,"src":"1559:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54451,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54449,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"1584:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1584:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1559:38:81"},{"expression":{"id":54461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54452,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1608:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1615:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"1608:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54456,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1644:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":54457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1650:6:81","memberName":"number","nodeType":"MemberAccess","src":"1644:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1659:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1644:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54455,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"1634:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":54460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1634:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1608:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54462,"nodeType":"ExpressionStatement","src":"1608:53:81"},{"expression":{"id":54467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54463,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1671:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54465,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1678:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"1671:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54466,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54426,"src":"1687:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1671:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54468,"nodeType":"ExpressionStatement","src":"1671:23:81"},{"expression":{"id":54473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54469,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1704:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1711:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"1704:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54472,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54428,"src":"1725:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1704:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54474,"nodeType":"ExpressionStatement","src":"1704:33:81"},{"expression":{"id":54479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54475,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1747:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1754:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"1747:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54478,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54430,"src":"1768:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1747:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54480,"nodeType":"ExpressionStatement","src":"1747:33:81"},{"expression":{"id":54485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54481,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1790:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1797:26:81","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":53659,"src":"1790:33:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"36363636","id":54484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1826:4:81","typeDescriptions":{"typeIdentifier":"t_rational_6666_by_1","typeString":"int_const 6666"},"value":"6666"},"src":"1790:40:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54486,"nodeType":"ExpressionStatement","src":"1790:40:81"},{"expression":{"id":54491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54487,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1868:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54489,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1875:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"1868:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"325f3530305f3030305f303030","id":54490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1888:13:81","typeDescriptions":{"typeIdentifier":"t_rational_2500000000_by_1","typeString":"int_const 2500000000"},"value":"2_500_000_000"},"src":"1868:33:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":54492,"nodeType":"ExpressionStatement","src":"1868:33:81"},{"expression":{"id":54497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54493,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1911:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1918:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"1911:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"3130","id":54496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1935:2:81","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"1911:26:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":54498,"nodeType":"ExpressionStatement","src":"1911:26:81"},{"expression":{"arguments":[{"id":54500,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54433,"src":"1962:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":54499,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"1947:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1947:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54502,"nodeType":"ExpressionStatement","src":"1947:31:81"}]},"functionSelector":"f8453e7c","implemented":true,"kind":"function","modifiers":[{"id":54436,"kind":"modifierInvocation","modifierName":{"id":54435,"name":"initializer","nameLocations":["1447:11:81"],"nodeType":"IdentifierPath","referencedDeclaration":39132,"src":"1447:11:81"},"nodeType":"ModifierInvocation","src":"1447:11:81"}],"name":"initialize","nameLocation":"1266:10:81","parameters":{"id":54434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54424,"mutability":"mutable","name":"initialOwner","nameLocation":"1294:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1286:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54423,"name":"address","nodeType":"ElementaryTypeName","src":"1286:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54426,"mutability":"mutable","name":"_mirror","nameLocation":"1324:7:81","nodeType":"VariableDeclaration","scope":54504,"src":"1316:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54425,"name":"address","nodeType":"ElementaryTypeName","src":"1316:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54428,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"1349:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1341:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54427,"name":"address","nodeType":"ElementaryTypeName","src":"1341:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54430,"mutability":"mutable","name":"_wrappedVara","nameLocation":"1379:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1371:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54429,"name":"address","nodeType":"ElementaryTypeName","src":"1371:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54433,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"1418:15:81","nodeType":"VariableDeclaration","scope":54504,"src":"1401:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54431,"name":"address","nodeType":"ElementaryTypeName","src":"1401:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54432,"nodeType":"ArrayTypeName","src":"1401:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1276:163:81"},"returnParameters":{"id":54437,"nodeType":"ParameterList","parameters":[],"src":"1459:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54585,"nodeType":"FunctionDefinition","src":"1991:662:81","nodes":[],"body":{"id":54584,"nodeType":"Block","src":"2049:604:81","nodes":[],"statements":[{"assignments":[54514],"declarations":[{"constant":false,"id":54514,"mutability":"mutable","name":"oldRouter","nameLocation":"2075:9:81","nodeType":"VariableDeclaration","scope":54584,"src":"2059:25:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54513,"nodeType":"UserDefinedTypeName","pathNode":{"id":54512,"name":"Storage","nameLocations":["2059:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"2059:7:81"},"referencedDeclaration":53684,"src":"2059:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54517,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54515,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"2087:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2087:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2059:41:81"},{"assignments":[54519],"declarations":[{"constant":false,"id":54519,"mutability":"mutable","name":"_mirror","nameLocation":"2119:7:81","nodeType":"VariableDeclaration","scope":54584,"src":"2111:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54518,"name":"address","nodeType":"ElementaryTypeName","src":"2111:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54522,"initialValue":{"expression":{"id":54520,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2129:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2139:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"2129:16:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2111:34:81"},{"assignments":[54524],"declarations":[{"constant":false,"id":54524,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"2163:12:81","nodeType":"VariableDeclaration","scope":54584,"src":"2155:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54523,"name":"address","nodeType":"ElementaryTypeName","src":"2155:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54527,"initialValue":{"expression":{"id":54525,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2178:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2188:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"2178:21:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2155:44:81"},{"assignments":[54529],"declarations":[{"constant":false,"id":54529,"mutability":"mutable","name":"_wrappedVara","nameLocation":"2217:12:81","nodeType":"VariableDeclaration","scope":54584,"src":"2209:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54528,"name":"address","nodeType":"ElementaryTypeName","src":"2209:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54532,"initialValue":{"expression":{"id":54530,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2232:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2242:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"2232:21:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2209:44:81"},{"assignments":[54537],"declarations":[{"constant":false,"id":54537,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"2280:15:81","nodeType":"VariableDeclaration","scope":54584,"src":"2263:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54535,"name":"address","nodeType":"ElementaryTypeName","src":"2263:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54536,"nodeType":"ArrayTypeName","src":"2263:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":54540,"initialValue":{"expression":{"id":54538,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2298:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2308:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"2298:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2263:59:81"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725632","id":54542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2348:25:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""},"value":"router.storage.RouterV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""}],"id":54541,"name":"setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54645,"src":"2333:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":54543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2333:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54544,"nodeType":"ExpressionStatement","src":"2333:41:81"},{"assignments":[54547],"declarations":[{"constant":false,"id":54547,"mutability":"mutable","name":"router","nameLocation":"2400:6:81","nodeType":"VariableDeclaration","scope":54584,"src":"2384:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54546,"nodeType":"UserDefinedTypeName","pathNode":{"id":54545,"name":"Storage","nameLocations":["2384:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"2384:7:81"},"referencedDeclaration":53684,"src":"2384:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54550,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54548,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"2409:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2409:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2384:38:81"},{"expression":{"id":54560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54551,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2433:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2440:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"2433:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54555,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2469:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":54556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2475:6:81","memberName":"number","nodeType":"MemberAccess","src":"2469:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2484:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2469:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54554,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"2459:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":54559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2459:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2433:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54561,"nodeType":"ExpressionStatement","src":"2433:53:81"},{"expression":{"id":54566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54562,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2496:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2503:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"2496:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54565,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54519,"src":"2512:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2496:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54567,"nodeType":"ExpressionStatement","src":"2496:23:81"},{"expression":{"id":54572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54568,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2529:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2536:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"2529:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54571,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54524,"src":"2550:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2529:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54573,"nodeType":"ExpressionStatement","src":"2529:33:81"},{"expression":{"id":54578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54574,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2572:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2579:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"2572:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54577,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54529,"src":"2593:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2572:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54579,"nodeType":"ExpressionStatement","src":"2572:33:81"},{"expression":{"arguments":[{"id":54581,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54537,"src":"2630:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":54580,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"2615:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2615:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54583,"nodeType":"ExpressionStatement","src":"2615:31:81"}]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":54507,"kind":"modifierInvocation","modifierName":{"id":54506,"name":"onlyOwner","nameLocations":["2022:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"2022:9:81"},"nodeType":"ModifierInvocation","src":"2022:9:81"},{"arguments":[{"hexValue":"32","id":54509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2046:1:81","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":54510,"kind":"modifierInvocation","modifierName":{"id":54508,"name":"reinitializer","nameLocations":["2032:13:81"],"nodeType":"IdentifierPath","referencedDeclaration":39179,"src":"2032:13:81"},"nodeType":"ModifierInvocation","src":"2032:16:81"}],"name":"reinitialize","nameLocation":"2000:12:81","parameters":{"id":54505,"nodeType":"ParameterList","parameters":[],"src":"2012:2:81"},"returnParameters":{"id":54511,"nodeType":"ParameterList","parameters":[],"src":"2049:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54597,"nodeType":"FunctionDefinition","src":"2692:126:81","nodes":[],"body":{"id":54596,"nodeType":"Block","src":"2748:70:81","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":54592,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54414,"src":"2792:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":54590,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"2765:11:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$42719_$","typeString":"type(library StorageSlot)"}},"id":54591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2777:14:81","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":42457,"src":"2765:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$42412_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":54593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2765:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$42412_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":54594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2806:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":42411,"src":"2765:46:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54589,"id":54595,"nodeType":"Return","src":"2758:53:81"}]},"baseFunctions":[53790],"functionSelector":"96708226","implemented":true,"kind":"function","modifiers":[],"name":"getStorageSlot","nameLocation":"2701:14:81","parameters":{"id":54586,"nodeType":"ParameterList","parameters":[],"src":"2715:2:81"},"returnParameters":{"id":54589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54588,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54597,"src":"2739:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54587,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2739:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2738:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54645,"nodeType":"FunctionDefinition","src":"2824:287:81","nodes":[],"body":{"id":54644,"nodeType":"Block","src":"2890:221:81","nodes":[],"statements":[{"assignments":[54605],"declarations":[{"constant":false,"id":54605,"mutability":"mutable","name":"slot","nameLocation":"2908:4:81","nodeType":"VariableDeclaration","scope":54644,"src":"2900:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54604,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2900:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54631,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":54630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":54614,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54599,"src":"2960:9:81","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":54613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2954:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":54612,"name":"bytes","nodeType":"ElementaryTypeName","src":"2954:5:81","typeDescriptions":{}}},"id":54615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2954:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54611,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2944:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2944:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":54610,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2936:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":54609,"name":"uint256","nodeType":"ElementaryTypeName","src":"2936:7:81","typeDescriptions":{}}},"id":54617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2936:36:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2975:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2936:40:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54607,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2925:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54608,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2929:6:81","memberName":"encode","nodeType":"MemberAccess","src":"2925:10:81","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2925:52:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54606,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2915:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2915:63:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":54629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"2981:23:81","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":54626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2998:4:81","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":54625,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2990:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":54624,"name":"uint256","nodeType":"ElementaryTypeName","src":"2990:7:81","typeDescriptions":{}}},"id":54627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2990:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2982:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":54622,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2982:7:81","typeDescriptions":{}}},"id":54628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2982:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2915:89:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2900:104:81"},{"expression":{"id":54639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":54635,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54414,"src":"3042:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":54632,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"3015:11:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$42719_$","typeString":"type(library StorageSlot)"}},"id":54634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3027:14:81","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":42457,"src":"3015:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$42412_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":54636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3015:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$42412_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":54637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3056:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":42411,"src":"3015:46:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54638,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54605,"src":"3064:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3015:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54640,"nodeType":"ExpressionStatement","src":"3015:53:81"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":54641,"name":"StorageSlotChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53775,"src":"3084:18:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3084:20:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54643,"nodeType":"EmitStatement","src":"3079:25:81"}]},"baseFunctions":[53795],"functionSelector":"5686cad5","implemented":true,"kind":"function","modifiers":[{"id":54602,"kind":"modifierInvocation","modifierName":{"id":54601,"name":"onlyOwner","nameLocations":["2880:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"2880:9:81"},"nodeType":"ModifierInvocation","src":"2880:9:81"}],"name":"setStorageSlot","nameLocation":"2833:14:81","parameters":{"id":54600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54599,"mutability":"mutable","name":"namespace","nameLocation":"2862:9:81","nodeType":"VariableDeclaration","scope":54645,"src":"2848:23:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":54598,"name":"string","nodeType":"ElementaryTypeName","src":"2848:6:81","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2847:25:81"},"returnParameters":{"id":54603,"nodeType":"ParameterList","parameters":[],"src":"2890:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54660,"nodeType":"FunctionDefinition","src":"3117:153:81","nodes":[],"body":{"id":54659,"nodeType":"Block","src":"3175:95:81","nodes":[],"statements":[{"assignments":[54652],"declarations":[{"constant":false,"id":54652,"mutability":"mutable","name":"router","nameLocation":"3201:6:81","nodeType":"VariableDeclaration","scope":54659,"src":"3185:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54651,"nodeType":"UserDefinedTypeName","pathNode":{"id":54650,"name":"Storage","nameLocations":["3185:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3185:7:81"},"referencedDeclaration":53684,"src":"3185:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54655,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54653,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3210:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3210:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3185:38:81"},{"expression":{"expression":{"id":54656,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54652,"src":"3240:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3247:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"3240:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54649,"id":54658,"nodeType":"Return","src":"3233:30:81"}]},"baseFunctions":[53800],"functionSelector":"28e24b3d","implemented":true,"kind":"function","modifiers":[],"name":"genesisBlockHash","nameLocation":"3126:16:81","parameters":{"id":54646,"nodeType":"ParameterList","parameters":[],"src":"3142:2:81"},"returnParameters":{"id":54649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54660,"src":"3166:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54647,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3166:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3165:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54675,"nodeType":"FunctionDefinition","src":"3276:167:81","nodes":[],"body":{"id":54674,"nodeType":"Block","src":"3341:102:81","nodes":[],"statements":[{"assignments":[54667],"declarations":[{"constant":false,"id":54667,"mutability":"mutable","name":"router","nameLocation":"3367:6:81","nodeType":"VariableDeclaration","scope":54674,"src":"3351:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54666,"nodeType":"UserDefinedTypeName","pathNode":{"id":54665,"name":"Storage","nameLocations":["3351:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3351:7:81"},"referencedDeclaration":53684,"src":"3351:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54670,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54668,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3376:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3376:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3351:38:81"},{"expression":{"expression":{"id":54671,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54667,"src":"3406:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3413:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"3406:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54664,"id":54673,"nodeType":"Return","src":"3399:37:81"}]},"baseFunctions":[53805],"functionSelector":"2dacfb69","implemented":true,"kind":"function","modifiers":[],"name":"lastBlockCommitmentHash","nameLocation":"3285:23:81","parameters":{"id":54661,"nodeType":"ParameterList","parameters":[],"src":"3308:2:81"},"returnParameters":{"id":54664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54663,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54675,"src":"3332:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54662,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3332:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3331:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54690,"nodeType":"FunctionDefinition","src":"3449:143:81","nodes":[],"body":{"id":54689,"nodeType":"Block","src":"3502:90:81","nodes":[],"statements":[{"assignments":[54682],"declarations":[{"constant":false,"id":54682,"mutability":"mutable","name":"router","nameLocation":"3528:6:81","nodeType":"VariableDeclaration","scope":54689,"src":"3512:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54681,"nodeType":"UserDefinedTypeName","pathNode":{"id":54680,"name":"Storage","nameLocations":["3512:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3512:7:81"},"referencedDeclaration":53684,"src":"3512:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54685,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54683,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3537:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3537:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3512:38:81"},{"expression":{"expression":{"id":54686,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54682,"src":"3567:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3574:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"3567:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54679,"id":54688,"nodeType":"Return","src":"3560:25:81"}]},"baseFunctions":[53810],"functionSelector":"88f50cf0","implemented":true,"kind":"function","modifiers":[],"name":"wrappedVara","nameLocation":"3458:11:81","parameters":{"id":54676,"nodeType":"ParameterList","parameters":[],"src":"3469:2:81"},"returnParameters":{"id":54679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54690,"src":"3493:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54677,"name":"address","nodeType":"ElementaryTypeName","src":"3493:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3492:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54705,"nodeType":"FunctionDefinition","src":"3598:143:81","nodes":[],"body":{"id":54704,"nodeType":"Block","src":"3651:90:81","nodes":[],"statements":[{"assignments":[54697],"declarations":[{"constant":false,"id":54697,"mutability":"mutable","name":"router","nameLocation":"3677:6:81","nodeType":"VariableDeclaration","scope":54704,"src":"3661:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54696,"nodeType":"UserDefinedTypeName","pathNode":{"id":54695,"name":"Storage","nameLocations":["3661:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3661:7:81"},"referencedDeclaration":53684,"src":"3661:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54700,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54698,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3686:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3686:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3661:38:81"},{"expression":{"expression":{"id":54701,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54697,"src":"3716:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54702,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3723:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"3716:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54694,"id":54703,"nodeType":"Return","src":"3709:25:81"}]},"baseFunctions":[53815],"functionSelector":"78ee5dec","implemented":true,"kind":"function","modifiers":[],"name":"mirrorProxy","nameLocation":"3607:11:81","parameters":{"id":54691,"nodeType":"ParameterList","parameters":[],"src":"3618:2:81"},"returnParameters":{"id":54694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54705,"src":"3642:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54692,"name":"address","nodeType":"ElementaryTypeName","src":"3642:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3641:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54720,"nodeType":"FunctionDefinition","src":"3747:133:81","nodes":[],"body":{"id":54719,"nodeType":"Block","src":"3795:85:81","nodes":[],"statements":[{"assignments":[54712],"declarations":[{"constant":false,"id":54712,"mutability":"mutable","name":"router","nameLocation":"3821:6:81","nodeType":"VariableDeclaration","scope":54719,"src":"3805:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54711,"nodeType":"UserDefinedTypeName","pathNode":{"id":54710,"name":"Storage","nameLocations":["3805:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3805:7:81"},"referencedDeclaration":53684,"src":"3805:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54715,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54713,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3830:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3830:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3805:38:81"},{"expression":{"expression":{"id":54716,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54712,"src":"3860:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3867:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"3860:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54709,"id":54718,"nodeType":"Return","src":"3853:20:81"}]},"baseFunctions":[53820],"functionSelector":"444d9172","implemented":true,"kind":"function","modifiers":[],"name":"mirror","nameLocation":"3756:6:81","parameters":{"id":54706,"nodeType":"ParameterList","parameters":[],"src":"3762:2:81"},"returnParameters":{"id":54709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54720,"src":"3786:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54707,"name":"address","nodeType":"ElementaryTypeName","src":"3786:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3785:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54740,"nodeType":"FunctionDefinition","src":"3886:143:81","nodes":[],"body":{"id":54739,"nodeType":"Block","src":"3941:88:81","nodes":[],"statements":[{"assignments":[54729],"declarations":[{"constant":false,"id":54729,"mutability":"mutable","name":"router","nameLocation":"3967:6:81","nodeType":"VariableDeclaration","scope":54739,"src":"3951:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54728,"nodeType":"UserDefinedTypeName","pathNode":{"id":54727,"name":"Storage","nameLocations":["3951:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3951:7:81"},"referencedDeclaration":53684,"src":"3951:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54732,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54730,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3976:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3976:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3951:38:81"},{"expression":{"id":54737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54733,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54729,"src":"3999:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54735,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4006:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"3999:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54736,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54722,"src":"4015:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3999:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54738,"nodeType":"ExpressionStatement","src":"3999:23:81"}]},"baseFunctions":[53825],"functionSelector":"3d43b418","implemented":true,"kind":"function","modifiers":[{"id":54725,"kind":"modifierInvocation","modifierName":{"id":54724,"name":"onlyOwner","nameLocations":["3931:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"3931:9:81"},"nodeType":"ModifierInvocation","src":"3931:9:81"}],"name":"setMirror","nameLocation":"3895:9:81","parameters":{"id":54723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54722,"mutability":"mutable","name":"_mirror","nameLocation":"3913:7:81","nodeType":"VariableDeclaration","scope":54740,"src":"3905:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54721,"name":"address","nodeType":"ElementaryTypeName","src":"3905:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3904:17:81"},"returnParameters":{"id":54726,"nodeType":"ParameterList","parameters":[],"src":"3941:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54755,"nodeType":"FunctionDefinition","src":"4085:159:81","nodes":[],"body":{"id":54754,"nodeType":"Block","src":"4146:98:81","nodes":[],"statements":[{"assignments":[54747],"declarations":[{"constant":false,"id":54747,"mutability":"mutable","name":"router","nameLocation":"4172:6:81","nodeType":"VariableDeclaration","scope":54754,"src":"4156:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54746,"nodeType":"UserDefinedTypeName","pathNode":{"id":54745,"name":"Storage","nameLocations":["4156:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4156:7:81"},"referencedDeclaration":53684,"src":"4156:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54750,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54748,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4181:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4181:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4156:38:81"},{"expression":{"expression":{"id":54751,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54747,"src":"4211:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54752,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4218:19:81","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":53677,"src":"4211:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54744,"id":54753,"nodeType":"Return","src":"4204:33:81"}]},"baseFunctions":[53830],"functionSelector":"007a32e7","implemented":true,"kind":"function","modifiers":[],"name":"validatedCodesCount","nameLocation":"4094:19:81","parameters":{"id":54741,"nodeType":"ParameterList","parameters":[],"src":"4113:2:81"},"returnParameters":{"id":54744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54743,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54755,"src":"4137:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54742,"name":"uint256","nodeType":"ElementaryTypeName","src":"4137:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4136:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54775,"nodeType":"FunctionDefinition","src":"4250:159:81","nodes":[],"body":{"id":54774,"nodeType":"Block","src":"4317:92:81","nodes":[],"statements":[{"assignments":[54765],"declarations":[{"constant":false,"id":54765,"mutability":"mutable","name":"router","nameLocation":"4343:6:81","nodeType":"VariableDeclaration","scope":54774,"src":"4327:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54764,"nodeType":"UserDefinedTypeName","pathNode":{"id":54763,"name":"Storage","nameLocations":["4327:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4327:7:81"},"referencedDeclaration":53684,"src":"4327:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54768,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54766,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4352:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4352:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4327:38:81"},{"expression":{"baseExpression":{"expression":{"id":54769,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54765,"src":"4382:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4389:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"4382:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":54772,"indexExpression":{"id":54771,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54757,"src":"4395:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4382:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"functionReturnParameters":54762,"id":54773,"nodeType":"Return","src":"4375:27:81"}]},"baseFunctions":[53838],"functionSelector":"c13911e8","implemented":true,"kind":"function","modifiers":[],"name":"codeState","nameLocation":"4259:9:81","parameters":{"id":54758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54757,"mutability":"mutable","name":"codeId","nameLocation":"4277:6:81","nodeType":"VariableDeclaration","scope":54775,"src":"4269:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54756,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4269:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4268:16:81"},"returnParameters":{"id":54762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54775,"src":"4306:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"typeName":{"id":54760,"nodeType":"UserDefinedTypeName","pathNode":{"id":54759,"name":"CodeState","nameLocations":["4306:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":53688,"src":"4306:9:81"},"referencedDeclaration":53688,"src":"4306:9:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"visibility":"internal"}],"src":"4305:11:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54790,"nodeType":"FunctionDefinition","src":"4415:147:81","nodes":[],"body":{"id":54789,"nodeType":"Block","src":"4470:92:81","nodes":[],"statements":[{"assignments":[54782],"declarations":[{"constant":false,"id":54782,"mutability":"mutable","name":"router","nameLocation":"4496:6:81","nodeType":"VariableDeclaration","scope":54789,"src":"4480:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54781,"nodeType":"UserDefinedTypeName","pathNode":{"id":54780,"name":"Storage","nameLocations":["4480:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4480:7:81"},"referencedDeclaration":53684,"src":"4480:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54785,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54783,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4505:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4505:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4480:38:81"},{"expression":{"expression":{"id":54786,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54782,"src":"4535:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4542:13:81","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":53683,"src":"4535:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54779,"id":54788,"nodeType":"Return","src":"4528:27:81"}]},"baseFunctions":[53843],"functionSelector":"96a2ddfa","implemented":true,"kind":"function","modifiers":[],"name":"programsCount","nameLocation":"4424:13:81","parameters":{"id":54776,"nodeType":"ParameterList","parameters":[],"src":"4437:2:81"},"returnParameters":{"id":54779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54790,"src":"4461:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54777,"name":"uint256","nodeType":"ElementaryTypeName","src":"4461:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4460:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54809,"nodeType":"FunctionDefinition","src":"4568:166:81","nodes":[],"body":{"id":54808,"nodeType":"Block","src":"4638:96:81","nodes":[],"statements":[{"assignments":[54799],"declarations":[{"constant":false,"id":54799,"mutability":"mutable","name":"router","nameLocation":"4664:6:81","nodeType":"VariableDeclaration","scope":54808,"src":"4648:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54798,"nodeType":"UserDefinedTypeName","pathNode":{"id":54797,"name":"Storage","nameLocations":["4648:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4648:7:81"},"referencedDeclaration":53684,"src":"4648:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54802,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54800,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4673:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4673:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4648:38:81"},{"expression":{"baseExpression":{"expression":{"id":54803,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54799,"src":"4703:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54804,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4710:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"4703:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":54806,"indexExpression":{"id":54805,"name":"program","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54792,"src":"4719:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4703:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54796,"id":54807,"nodeType":"Return","src":"4696:31:81"}]},"baseFunctions":[53851],"functionSelector":"9067088e","implemented":true,"kind":"function","modifiers":[],"name":"programCodeId","nameLocation":"4577:13:81","parameters":{"id":54793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54792,"mutability":"mutable","name":"program","nameLocation":"4599:7:81","nodeType":"VariableDeclaration","scope":54809,"src":"4591:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54791,"name":"address","nodeType":"ElementaryTypeName","src":"4591:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4590:17:81"},"returnParameters":{"id":54796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54795,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54809,"src":"4629:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54794,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4629:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4628:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54824,"nodeType":"FunctionDefinition","src":"4785:173:81","nodes":[],"body":{"id":54823,"nodeType":"Block","src":"4853:105:81","nodes":[],"statements":[{"assignments":[54816],"declarations":[{"constant":false,"id":54816,"mutability":"mutable","name":"router","nameLocation":"4879:6:81","nodeType":"VariableDeclaration","scope":54823,"src":"4863:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54815,"nodeType":"UserDefinedTypeName","pathNode":{"id":54814,"name":"Storage","nameLocations":["4863:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4863:7:81"},"referencedDeclaration":53684,"src":"4863:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54819,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54817,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4888:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4888:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4863:38:81"},{"expression":{"expression":{"id":54820,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54816,"src":"4918:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4925:26:81","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":53659,"src":"4918:33:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54813,"id":54822,"nodeType":"Return","src":"4911:40:81"}]},"baseFunctions":[53856],"functionSelector":"efd81abc","implemented":true,"kind":"function","modifiers":[],"name":"signingThresholdPercentage","nameLocation":"4794:26:81","parameters":{"id":54810,"nodeType":"ParameterList","parameters":[],"src":"4820:2:81"},"returnParameters":{"id":54813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54812,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54824,"src":"4844:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54811,"name":"uint256","nodeType":"ElementaryTypeName","src":"4844:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4843:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54841,"nodeType":"FunctionDefinition","src":"4964:204:81","nodes":[],"body":{"id":54840,"nodeType":"Block","src":"5025:143:81","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54829,"name":"validatorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54857,"src":"5097:15:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5097:17:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54831,"name":"signingThresholdPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54824,"src":"5117:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5117:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5097:48:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"39393939","id":54834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5148:4:81","typeDescriptions":{"typeIdentifier":"t_rational_9999_by_1","typeString":"int_const 9999"},"value":"9999"},"src":"5097:55:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":54836,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5096:57:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130303030","id":54837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5156:5:81","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"src":"5096:65:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54828,"id":54839,"nodeType":"Return","src":"5089:72:81"}]},"baseFunctions":[53861],"functionSelector":"edc87225","implemented":true,"kind":"function","modifiers":[],"name":"validatorsThreshold","nameLocation":"4973:19:81","parameters":{"id":54825,"nodeType":"ParameterList","parameters":[],"src":"4992:2:81"},"returnParameters":{"id":54828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54827,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54841,"src":"5016:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54826,"name":"uint256","nodeType":"ElementaryTypeName","src":"5016:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5015:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54857,"nodeType":"FunctionDefinition","src":"5174:157:81","nodes":[],"body":{"id":54856,"nodeType":"Block","src":"5231:100:81","nodes":[],"statements":[{"assignments":[54848],"declarations":[{"constant":false,"id":54848,"mutability":"mutable","name":"router","nameLocation":"5257:6:81","nodeType":"VariableDeclaration","scope":54856,"src":"5241:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54847,"nodeType":"UserDefinedTypeName","pathNode":{"id":54846,"name":"Storage","nameLocations":["5241:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5241:7:81"},"referencedDeclaration":53684,"src":"5241:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54851,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54849,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5266:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5266:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5241:38:81"},{"expression":{"expression":{"expression":{"id":54852,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54848,"src":"5296:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5303:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"5296:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":54854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5318:6:81","memberName":"length","nodeType":"MemberAccess","src":"5296:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54845,"id":54855,"nodeType":"Return","src":"5289:35:81"}]},"baseFunctions":[53866],"functionSelector":"ed612f8c","implemented":true,"kind":"function","modifiers":[],"name":"validatorsCount","nameLocation":"5183:15:81","parameters":{"id":54842,"nodeType":"ParameterList","parameters":[],"src":"5198:2:81"},"returnParameters":{"id":54845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54844,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54857,"src":"5222:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54843,"name":"uint256","nodeType":"ElementaryTypeName","src":"5222:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5221:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54876,"nodeType":"FunctionDefinition","src":"5337:171:81","nodes":[],"body":{"id":54875,"nodeType":"Block","src":"5408:100:81","nodes":[],"statements":[{"assignments":[54866],"declarations":[{"constant":false,"id":54866,"mutability":"mutable","name":"router","nameLocation":"5434:6:81","nodeType":"VariableDeclaration","scope":54875,"src":"5418:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54865,"nodeType":"UserDefinedTypeName","pathNode":{"id":54864,"name":"Storage","nameLocations":["5418:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5418:7:81"},"referencedDeclaration":53684,"src":"5418:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54869,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54867,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5443:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5443:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5418:38:81"},{"expression":{"baseExpression":{"expression":{"id":54870,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54866,"src":"5473:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5480:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"5473:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":54873,"indexExpression":{"id":54872,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54859,"src":"5491:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5473:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":54863,"id":54874,"nodeType":"Return","src":"5466:35:81"}]},"baseFunctions":[53873],"functionSelector":"8febbd59","implemented":true,"kind":"function","modifiers":[],"name":"validatorExists","nameLocation":"5346:15:81","parameters":{"id":54860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54859,"mutability":"mutable","name":"validator","nameLocation":"5370:9:81","nodeType":"VariableDeclaration","scope":54876,"src":"5362:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54858,"name":"address","nodeType":"ElementaryTypeName","src":"5362:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5361:19:81"},"returnParameters":{"id":54863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54862,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54876,"src":"5402:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54861,"name":"bool","nodeType":"ElementaryTypeName","src":"5402:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5401:6:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54892,"nodeType":"FunctionDefinition","src":"5514:154:81","nodes":[],"body":{"id":54891,"nodeType":"Block","src":"5575:93:81","nodes":[],"statements":[{"assignments":[54884],"declarations":[{"constant":false,"id":54884,"mutability":"mutable","name":"router","nameLocation":"5601:6:81","nodeType":"VariableDeclaration","scope":54891,"src":"5585:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54883,"nodeType":"UserDefinedTypeName","pathNode":{"id":54882,"name":"Storage","nameLocations":["5585:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5585:7:81"},"referencedDeclaration":53684,"src":"5585:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54887,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54885,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5610:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5610:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5585:38:81"},{"expression":{"expression":{"id":54888,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54884,"src":"5640:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5647:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"5640:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":54881,"id":54890,"nodeType":"Return","src":"5633:28:81"}]},"baseFunctions":[53879],"functionSelector":"ca1e7819","implemented":true,"kind":"function","modifiers":[],"name":"validators","nameLocation":"5523:10:81","parameters":{"id":54877,"nodeType":"ParameterList","parameters":[],"src":"5533:2:81"},"returnParameters":{"id":54881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54892,"src":"5557:16:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54878,"name":"address","nodeType":"ElementaryTypeName","src":"5557:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54879,"nodeType":"ArrayTypeName","src":"5557:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5556:18:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54911,"nodeType":"FunctionDefinition","src":"5731:209:81","nodes":[],"body":{"id":54910,"nodeType":"Block","src":"5819:121:81","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54900,"name":"_cleanValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55927,"src":"5829:16:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5829:18:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54902,"nodeType":"ExpressionStatement","src":"5829:18:81"},{"expression":{"arguments":[{"id":54904,"name":"validatorsAddressArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54895,"src":"5872:22:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"id":54903,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"5857:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5857:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54906,"nodeType":"ExpressionStatement","src":"5857:38:81"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":54907,"name":"ValidatorsSetChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53772,"src":"5911:20:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5911:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54909,"nodeType":"EmitStatement","src":"5906:27:81"}]},"baseFunctions":[53885],"functionSelector":"e71731e4","implemented":true,"kind":"function","modifiers":[{"id":54898,"kind":"modifierInvocation","modifierName":{"id":54897,"name":"onlyOwner","nameLocations":["5809:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"5809:9:81"},"nodeType":"ModifierInvocation","src":"5809:9:81"}],"name":"updateValidators","nameLocation":"5740:16:81","parameters":{"id":54896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54895,"mutability":"mutable","name":"validatorsAddressArray","nameLocation":"5776:22:81","nodeType":"VariableDeclaration","scope":54911,"src":"5757:41:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54893,"name":"address","nodeType":"ElementaryTypeName","src":"5757:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54894,"nodeType":"ArrayTypeName","src":"5757:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5756:43:81"},"returnParameters":{"id":54899,"nodeType":"ParameterList","parameters":[],"src":"5819:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54926,"nodeType":"FunctionDefinition","src":"5994:140:81","nodes":[],"body":{"id":54925,"nodeType":"Block","src":"6045:89:81","nodes":[],"statements":[{"assignments":[54918],"declarations":[{"constant":false,"id":54918,"mutability":"mutable","name":"router","nameLocation":"6071:6:81","nodeType":"VariableDeclaration","scope":54925,"src":"6055:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54917,"nodeType":"UserDefinedTypeName","pathNode":{"id":54916,"name":"Storage","nameLocations":["6055:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6055:7:81"},"referencedDeclaration":53684,"src":"6055:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54921,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54919,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6080:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6080:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6055:38:81"},{"expression":{"expression":{"id":54922,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54918,"src":"6110:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6117:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"6110:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":54915,"id":54924,"nodeType":"Return","src":"6103:24:81"}]},"baseFunctions":[53890],"functionSelector":"d3fd6364","implemented":true,"kind":"function","modifiers":[],"name":"baseWeight","nameLocation":"6003:10:81","parameters":{"id":54912,"nodeType":"ParameterList","parameters":[],"src":"6013:2:81"},"returnParameters":{"id":54915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54926,"src":"6037:6:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":54913,"name":"uint64","nodeType":"ElementaryTypeName","src":"6037:6:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6036:8:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54950,"nodeType":"FunctionDefinition","src":"6140:204:81","nodes":[],"body":{"id":54949,"nodeType":"Block","src":"6202:142:81","nodes":[],"statements":[{"assignments":[54935],"declarations":[{"constant":false,"id":54935,"mutability":"mutable","name":"router","nameLocation":"6228:6:81","nodeType":"VariableDeclaration","scope":54949,"src":"6212:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54934,"nodeType":"UserDefinedTypeName","pathNode":{"id":54933,"name":"Storage","nameLocations":["6212:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6212:7:81"},"referencedDeclaration":53684,"src":"6212:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54938,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54936,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6237:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6237:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6212:38:81"},{"expression":{"id":54943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54939,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54935,"src":"6260:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6267:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"6260:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54942,"name":"_baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54928,"src":"6280:11:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"6260:31:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":54944,"nodeType":"ExpressionStatement","src":"6260:31:81"},{"eventCall":{"arguments":[{"id":54946,"name":"_baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54928,"src":"6325:11:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":54945,"name":"BaseWeightChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53780,"src":"6307:17:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$returns$__$","typeString":"function (uint64)"}},"id":54947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6307:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54948,"nodeType":"EmitStatement","src":"6302:35:81"}]},"baseFunctions":[53895],"functionSelector":"8028861a","implemented":true,"kind":"function","modifiers":[{"id":54931,"kind":"modifierInvocation","modifierName":{"id":54930,"name":"onlyOwner","nameLocations":["6192:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"6192:9:81"},"nodeType":"ModifierInvocation","src":"6192:9:81"}],"name":"setBaseWeight","nameLocation":"6149:13:81","parameters":{"id":54929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54928,"mutability":"mutable","name":"_baseWeight","nameLocation":"6170:11:81","nodeType":"VariableDeclaration","scope":54950,"src":"6163:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":54927,"name":"uint64","nodeType":"ElementaryTypeName","src":"6163:6:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6162:20:81"},"returnParameters":{"id":54932,"nodeType":"ParameterList","parameters":[],"src":"6202:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54965,"nodeType":"FunctionDefinition","src":"6350:149:81","nodes":[],"body":{"id":54964,"nodeType":"Block","src":"6406:93:81","nodes":[],"statements":[{"assignments":[54957],"declarations":[{"constant":false,"id":54957,"mutability":"mutable","name":"router","nameLocation":"6432:6:81","nodeType":"VariableDeclaration","scope":54964,"src":"6416:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54956,"nodeType":"UserDefinedTypeName","pathNode":{"id":54955,"name":"Storage","nameLocations":["6416:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6416:7:81"},"referencedDeclaration":53684,"src":"6416:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54960,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54958,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6441:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6441:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6416:38:81"},{"expression":{"expression":{"id":54961,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"6471:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6478:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"6471:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":54954,"id":54963,"nodeType":"Return","src":"6464:28:81"}]},"baseFunctions":[53900],"functionSelector":"0834fecc","implemented":true,"kind":"function","modifiers":[],"name":"valuePerWeight","nameLocation":"6359:14:81","parameters":{"id":54951,"nodeType":"ParameterList","parameters":[],"src":"6373:2:81"},"returnParameters":{"id":54954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54965,"src":"6397:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54952,"name":"uint128","nodeType":"ElementaryTypeName","src":"6397:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6396:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54989,"nodeType":"FunctionDefinition","src":"6505:229:81","nodes":[],"body":{"id":54988,"nodeType":"Block","src":"6576:158:81","nodes":[],"statements":[{"assignments":[54974],"declarations":[{"constant":false,"id":54974,"mutability":"mutable","name":"router","nameLocation":"6602:6:81","nodeType":"VariableDeclaration","scope":54988,"src":"6586:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54973,"nodeType":"UserDefinedTypeName","pathNode":{"id":54972,"name":"Storage","nameLocations":["6586:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6586:7:81"},"referencedDeclaration":53684,"src":"6586:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54977,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54975,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6611:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6611:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6586:38:81"},{"expression":{"id":54982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54978,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54974,"src":"6634:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6641:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"6634:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54981,"name":"_valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"6658:15:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6634:39:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":54983,"nodeType":"ExpressionStatement","src":"6634:39:81"},{"eventCall":{"arguments":[{"id":54985,"name":"_valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"6711:15:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54984,"name":"ValuePerWeightChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53785,"src":"6689:21:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6689:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54987,"nodeType":"EmitStatement","src":"6684:43:81"}]},"baseFunctions":[53905],"functionSelector":"a6bbbe1c","implemented":true,"kind":"function","modifiers":[{"id":54970,"kind":"modifierInvocation","modifierName":{"id":54969,"name":"onlyOwner","nameLocations":["6566:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"6566:9:81"},"nodeType":"ModifierInvocation","src":"6566:9:81"}],"name":"setValuePerWeight","nameLocation":"6514:17:81","parameters":{"id":54968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54967,"mutability":"mutable","name":"_valuePerWeight","nameLocation":"6540:15:81","nodeType":"VariableDeclaration","scope":54989,"src":"6532:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54966,"name":"uint128","nodeType":"ElementaryTypeName","src":"6532:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6531:25:81"},"returnParameters":{"id":54971,"nodeType":"ParameterList","parameters":[],"src":"6576:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55004,"nodeType":"FunctionDefinition","src":"6740:113:81","nodes":[],"body":{"id":55003,"nodeType":"Block","src":"6789:64:81","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54996,"name":"baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54926,"src":"6814:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint64_$","typeString":"function () view returns (uint64)"}},"id":54997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6814:12:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":54995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6806:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":54994,"name":"uint128","nodeType":"ElementaryTypeName","src":"6806:7:81","typeDescriptions":{}}},"id":54998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6806:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54999,"name":"valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54965,"src":"6830:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint128_$","typeString":"function () view returns (uint128)"}},"id":55000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6830:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6806:40:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":54993,"id":55002,"nodeType":"Return","src":"6799:47:81"}]},"baseFunctions":[53910],"functionSelector":"6ef25c3a","implemented":true,"kind":"function","modifiers":[],"name":"baseFee","nameLocation":"6749:7:81","parameters":{"id":54990,"nodeType":"ParameterList","parameters":[],"src":"6756:2:81"},"returnParameters":{"id":54993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55004,"src":"6780:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54991,"name":"uint128","nodeType":"ElementaryTypeName","src":"6780:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6779:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55056,"nodeType":"FunctionDefinition","src":"6889:453:81","nodes":[],"body":{"id":55055,"nodeType":"Block","src":"6965:377:81","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":55020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55012,"name":"blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55008,"src":"6983:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6997:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6983:15:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"30","id":55016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7011:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":55015,"name":"blobhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-29,"src":"7002:8:81","typeDescriptions":{"typeIdentifier":"t_function_blobhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":55017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7002:11:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7017:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7002:16:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6983:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626c6f6254784861736820636f756c646e277420626520666f756e64","id":55021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7020:30:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_944fe86403884466c74284042289853a231d438ed298af2a81bff9b6914f84e1","typeString":"literal_string \"blobTxHash couldn't be found\""},"value":"blobTxHash couldn't be found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_944fe86403884466c74284042289853a231d438ed298af2a81bff9b6914f84e1","typeString":"literal_string \"blobTxHash couldn't be found\""}],"id":55011,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6975:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6975:76:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55023,"nodeType":"ExpressionStatement","src":"6975:76:81"},{"assignments":[55026],"declarations":[{"constant":false,"id":55026,"mutability":"mutable","name":"router","nameLocation":"7078:6:81","nodeType":"VariableDeclaration","scope":55055,"src":"7062:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55025,"nodeType":"UserDefinedTypeName","pathNode":{"id":55024,"name":"Storage","nameLocations":["7062:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"7062:7:81"},"referencedDeclaration":53684,"src":"7062:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55029,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55027,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"7087:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7087:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7062:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55031,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55026,"src":"7119:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7126:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7119:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55034,"indexExpression":{"id":55033,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7132:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7119:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55035,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7143:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7153:7:81","memberName":"Unknown","nodeType":"MemberAccess","referencedDeclaration":53685,"src":"7143:17:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7119:41:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f64652077697468207375636820696420616c726561647920726571756573746564206f722076616c696461746564","id":55038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7162:50:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_86d0efc10a98e1b7506967b99e345a37d8ca52b6f212bb7eaafd6d43a903647b","typeString":"literal_string \"code with such id already requested or validated\""},"value":"code with such id already requested or validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_86d0efc10a98e1b7506967b99e345a37d8ca52b6f212bb7eaafd6d43a903647b","typeString":"literal_string \"code with such id already requested or validated\""}],"id":55030,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7111:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7111:102:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55040,"nodeType":"ExpressionStatement","src":"7111:102:81"},{"expression":{"id":55048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55041,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55026,"src":"7224:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7231:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7224:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55045,"indexExpression":{"id":55043,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7237:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7224:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55046,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7247:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7257:19:81","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":53686,"src":"7247:29:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7224:52:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"id":55049,"nodeType":"ExpressionStatement","src":"7224:52:81"},{"eventCall":{"arguments":[{"id":55051,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7316:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55052,"name":"blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55008,"src":"7324:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55050,"name":"CodeValidationRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53755,"src":"7292:23:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":55053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7292:43:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55054,"nodeType":"EmitStatement","src":"7287:48:81"}]},"baseFunctions":[53917],"functionSelector":"1c149d8a","implemented":true,"kind":"function","modifiers":[],"name":"requestCodeValidation","nameLocation":"6898:21:81","parameters":{"id":55009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55006,"mutability":"mutable","name":"codeId","nameLocation":"6928:6:81","nodeType":"VariableDeclaration","scope":55056,"src":"6920:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55005,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6920:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55008,"mutability":"mutable","name":"blobTxHash","nameLocation":"6944:10:81","nodeType":"VariableDeclaration","scope":55056,"src":"6936:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55007,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6936:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6919:36:81"},"returnParameters":{"id":55010,"nodeType":"ParameterList","parameters":[],"src":"6965:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55156,"nodeType":"FunctionDefinition","src":"7348:1033:81","nodes":[],"body":{"id":55155,"nodeType":"Block","src":"7504:877:81","nodes":[],"statements":[{"assignments":[55071],"declarations":[{"constant":false,"id":55071,"mutability":"mutable","name":"router","nameLocation":"7530:6:81","nodeType":"VariableDeclaration","scope":55155,"src":"7514:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55070,"nodeType":"UserDefinedTypeName","pathNode":{"id":55069,"name":"Storage","nameLocations":["7514:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"7514:7:81"},"referencedDeclaration":53684,"src":"7514:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55074,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55072,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"7539:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7539:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7514:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55076,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"7571:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7578:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7571:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55079,"indexExpression":{"id":55078,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"7584:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7571:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55080,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7595:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7605:9:81","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":53687,"src":"7595:19:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7571:43:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652076616c696461746564206265666f72652070726f6772616d206372656174696f6e","id":55083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7616:48:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""},"value":"code must be validated before program creation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""}],"id":55075,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7563:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7563:102:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55085,"nodeType":"ExpressionStatement","src":"7563:102:81"},{"assignments":[55087],"declarations":[{"constant":false,"id":55087,"mutability":"mutable","name":"baseFeeValue","nameLocation":"7684:12:81","nodeType":"VariableDeclaration","scope":55155,"src":"7676:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55086,"name":"uint128","nodeType":"ElementaryTypeName","src":"7676:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55090,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55088,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55004,"src":"7699:7:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint128_$","typeString":"function () view returns (uint128)"}},"id":55089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7699:9:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7676:32:81"},{"assignments":[55092],"declarations":[{"constant":false,"id":55092,"mutability":"mutable","name":"executableBalance","nameLocation":"7726:17:81","nodeType":"VariableDeclaration","scope":55155,"src":"7718:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55091,"name":"uint128","nodeType":"ElementaryTypeName","src":"7718:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55096,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55093,"name":"baseFeeValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55087,"src":"7746:12:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3130","id":55094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7761:2:81","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"7746:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7718:45:81"},{"assignments":[55098],"declarations":[{"constant":false,"id":55098,"mutability":"mutable","name":"totalValue","nameLocation":"7782:10:81","nodeType":"VariableDeclaration","scope":55155,"src":"7774:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55097,"name":"uint128","nodeType":"ElementaryTypeName","src":"7774:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55104,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55099,"name":"baseFeeValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55087,"src":"7795:12:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55100,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55092,"src":"7810:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7795:32:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55102,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55064,"src":"7830:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7795:41:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7774:62:81"},{"expression":{"arguments":[{"id":55106,"name":"totalValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55098,"src":"7862:10:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":55105,"name":"_retrieveValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55886,"src":"7847:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":55107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7847:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55108,"nodeType":"ExpressionStatement","src":"7847:26:81"},{"assignments":[55110],"declarations":[{"constant":false,"id":55110,"mutability":"mutable","name":"actorId","nameLocation":"8042:7:81","nodeType":"VariableDeclaration","scope":55155,"src":"8034:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55109,"name":"address","nodeType":"ElementaryTypeName","src":"8034:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55123,"initialValue":{"arguments":[{"expression":{"id":55113,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8078:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8085:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"8078:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":55118,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8125:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55119,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55060,"src":"8133:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55116,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8108:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8112:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"8108:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8108:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55115,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8098:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8098:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55111,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41121,"src":"8052:6:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$41121_$","typeString":"type(library Clones)"}},"id":55112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8059:18:81","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":41039,"src":"8052:25:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":55122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8052:88:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8034:106:81"},{"expression":{"id":55130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55124,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8151:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8158:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"8151:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":55128,"indexExpression":{"id":55126,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8167:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8151:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55129,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8178:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8151:33:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55131,"nodeType":"ExpressionStatement","src":"8151:33:81"},{"expression":{"id":55135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8194:22:81","subExpression":{"expression":{"id":55132,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8194:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8201:13:81","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":53683,"src":"8194:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55136,"nodeType":"ExpressionStatement","src":"8194:22:81"},{"eventCall":{"arguments":[{"id":55138,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8247:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55139,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8256:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55137,"name":"ProgramCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53769,"src":"8232:14:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32)"}},"id":55140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8232:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55141,"nodeType":"EmitStatement","src":"8227:36:81"},{"expression":{"arguments":[{"expression":{"id":55146,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"8303:2:81","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":55147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8306:6:81","memberName":"origin","nodeType":"MemberAccess","src":"8303:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55148,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55062,"src":"8314:7:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":55149,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55064,"src":"8323:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":55150,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55092,"src":"8331:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"id":55143,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8282:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55142,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"8274:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$53636_$","typeString":"type(contract IMirror)"}},"id":55144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8274:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8291:11:81","memberName":"initMessage","nodeType":"MemberAccess","referencedDeclaration":53635,"src":"8274:28:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,bytes memory,uint128,uint128) external"}},"id":55151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8274:75:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55152,"nodeType":"ExpressionStatement","src":"8274:75:81"},{"expression":{"id":55153,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8367:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":55068,"id":55154,"nodeType":"Return","src":"8360:14:81"}]},"baseFunctions":[53930],"functionSelector":"8074b455","implemented":true,"kind":"function","modifiers":[],"name":"createProgram","nameLocation":"7357:13:81","parameters":{"id":55065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55058,"mutability":"mutable","name":"codeId","nameLocation":"7379:6:81","nodeType":"VariableDeclaration","scope":55156,"src":"7371:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55057,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7371:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55060,"mutability":"mutable","name":"salt","nameLocation":"7395:4:81","nodeType":"VariableDeclaration","scope":55156,"src":"7387:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55059,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7387:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55062,"mutability":"mutable","name":"payload","nameLocation":"7416:7:81","nodeType":"VariableDeclaration","scope":55156,"src":"7401:22:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":55061,"name":"bytes","nodeType":"ElementaryTypeName","src":"7401:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":55064,"mutability":"mutable","name":"_value","nameLocation":"7433:6:81","nodeType":"VariableDeclaration","scope":55156,"src":"7425:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55063,"name":"uint128","nodeType":"ElementaryTypeName","src":"7425:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7370:70:81"},"returnParameters":{"id":55068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55156,"src":"7491:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55066,"name":"address","nodeType":"ElementaryTypeName","src":"7491:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7490:9:81"},"scope":55996,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":55269,"nodeType":"FunctionDefinition","src":"8387:1117:81","nodes":[],"body":{"id":55268,"nodeType":"Block","src":"8494:1010:81","nodes":[],"statements":[{"assignments":[55168],"declarations":[{"constant":false,"id":55168,"mutability":"mutable","name":"router","nameLocation":"8520:6:81","nodeType":"VariableDeclaration","scope":55268,"src":"8504:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55167,"nodeType":"UserDefinedTypeName","pathNode":{"id":55166,"name":"Storage","nameLocations":["8504:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"8504:7:81"},"referencedDeclaration":53684,"src":"8504:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55171,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55169,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"8529:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8529:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8504:38:81"},{"assignments":[55173],"declarations":[{"constant":false,"id":55173,"mutability":"mutable","name":"codeCommetmentsHashes","nameLocation":"8566:21:81","nodeType":"VariableDeclaration","scope":55268,"src":"8553:34:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55172,"name":"bytes","nodeType":"ElementaryTypeName","src":"8553:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55174,"nodeType":"VariableDeclarationStatement","src":"8553:34:81"},{"body":{"id":55259,"nodeType":"Block","src":"8656:766:81","statements":[{"assignments":[55188],"declarations":[{"constant":false,"id":55188,"mutability":"mutable","name":"codeCommitment","nameLocation":"8694:14:81","nodeType":"VariableDeclaration","scope":55259,"src":"8670:38:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment"},"typeName":{"id":55187,"nodeType":"UserDefinedTypeName","pathNode":{"id":55186,"name":"CodeCommitment","nameLocations":["8670:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"8670:14:81"},"referencedDeclaration":53693,"src":"8670:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"visibility":"internal"}],"id":55192,"initialValue":{"baseExpression":{"id":55189,"name":"codeCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55160,"src":"8711:20:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata[] calldata"}},"id":55191,"indexExpression":{"id":55190,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8732:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8711:23:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"8670:64:81"},{"assignments":[55194],"declarations":[{"constant":false,"id":55194,"mutability":"mutable","name":"codeCommitmentHash","nameLocation":"8757:18:81","nodeType":"VariableDeclaration","scope":55259,"src":"8749:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55193,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8749:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55198,"initialValue":{"arguments":[{"id":55196,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"8798:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}],"id":55195,"name":"_codeCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55853,"src":"8778:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_CodeCommitment_$53693_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.CodeCommitment calldata) pure returns (bytes32)"}},"id":55197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8778:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8749:64:81"},{"expression":{"id":55206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55199,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"8828:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55203,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"8865:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55204,"name":"codeCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55194,"src":"8888:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8852:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55200,"name":"bytes","nodeType":"ElementaryTypeName","src":"8852:5:81","typeDescriptions":{}}},"id":55202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8858:6:81","memberName":"concat","nodeType":"MemberAccess","src":"8852:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8852:55:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"8828:79:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55207,"nodeType":"ExpressionStatement","src":"8828:79:81"},{"assignments":[55209],"declarations":[{"constant":false,"id":55209,"mutability":"mutable","name":"codeId","nameLocation":"8930:6:81","nodeType":"VariableDeclaration","scope":55259,"src":"8922:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55208,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8922:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55212,"initialValue":{"expression":{"id":55210,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"8939:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8954:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53690,"src":"8939:17:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8922:34:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55214,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"8978:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8985:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"8978:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55217,"indexExpression":{"id":55216,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"8991:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8978:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55218,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"9002:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55219,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9012:19:81","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":53686,"src":"9002:29:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"8978:53:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f64652073686f756c642062652072657175657374656420666f722076616c69646174696f6e","id":55221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9033:41:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f0f0146c5c6578abd878317fc7dbe7872a552fba3ce3a30a1e42dfd172e27f7","typeString":"literal_string \"code should be requested for validation\""},"value":"code should be requested for validation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9f0f0146c5c6578abd878317fc7dbe7872a552fba3ce3a30a1e42dfd172e27f7","typeString":"literal_string \"code should be requested for validation\""}],"id":55213,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8970:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8970:105:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55223,"nodeType":"ExpressionStatement","src":"8970:105:81"},{"condition":{"expression":{"id":55224,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"9094:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9109:5:81","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":53692,"src":"9094:20:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55257,"nodeType":"Block","src":"9297:115:81","statements":[{"expression":{"id":55250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9315:27:81","subExpression":{"baseExpression":{"expression":{"id":55246,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9322:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9329:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"9322:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55249,"indexExpression":{"id":55248,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9335:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9322:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55251,"nodeType":"ExpressionStatement","src":"9315:27:81"},{"eventCall":{"arguments":[{"id":55253,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9383:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"66616c7365","id":55254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9391:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":55252,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53762,"src":"9366:16:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":55255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9366:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55256,"nodeType":"EmitStatement","src":"9361:36:81"}]},"id":55258,"nodeType":"IfStatement","src":"9090:322:81","trueBody":{"id":55245,"nodeType":"Block","src":"9116:175:81","statements":[{"expression":{"id":55233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55226,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9134:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9141:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"9134:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55230,"indexExpression":{"id":55228,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9147:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9134:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55231,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"9157:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9167:9:81","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":53687,"src":"9157:19:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"9134:42:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"id":55234,"nodeType":"ExpressionStatement","src":"9134:42:81"},{"expression":{"id":55238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9194:28:81","subExpression":{"expression":{"id":55235,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9194:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9201:19:81","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":53677,"src":"9194:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55239,"nodeType":"ExpressionStatement","src":"9194:28:81"},{"eventCall":{"arguments":[{"id":55241,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9263:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":55242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9271:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":55240,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53762,"src":"9246:16:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":55243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9246:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55244,"nodeType":"EmitStatement","src":"9241:35:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55179,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8618:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55180,"name":"codeCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55160,"src":"8622:20:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata[] calldata"}},"id":55181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8643:6:81","memberName":"length","nodeType":"MemberAccess","src":"8622:27:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8618:31:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55260,"initializationExpression":{"assignments":[55176],"declarations":[{"constant":false,"id":55176,"mutability":"mutable","name":"i","nameLocation":"8611:1:81","nodeType":"VariableDeclaration","scope":55260,"src":"8603:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55175,"name":"uint256","nodeType":"ElementaryTypeName","src":"8603:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55178,"initialValue":{"hexValue":"30","id":55177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8615:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8603:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8651:3:81","subExpression":{"id":55183,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8651:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55185,"nodeType":"ExpressionStatement","src":"8651:3:81"},"nodeType":"ForStatement","src":"8598:824:81"},{"expression":{"arguments":[{"arguments":[{"id":55263,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"9462:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55262,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9452:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9452:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55265,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55163,"src":"9486:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":55261,"name":"_validateSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"9432:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes calldata[] calldata) view"}},"id":55266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9432:65:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55267,"nodeType":"ExpressionStatement","src":"9432:65:81"}]},"baseFunctions":[53940],"functionSelector":"e97d3eb3","implemented":true,"kind":"function","modifiers":[],"name":"commitCodes","nameLocation":"8396:11:81","parameters":{"id":55164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55160,"mutability":"mutable","name":"codeCommitmentsArray","nameLocation":"8434:20:81","nodeType":"VariableDeclaration","scope":55269,"src":"8408:46:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment[]"},"typeName":{"baseType":{"id":55158,"nodeType":"UserDefinedTypeName","pathNode":{"id":55157,"name":"CodeCommitment","nameLocations":["8408:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"8408:14:81"},"referencedDeclaration":53693,"src":"8408:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"id":55159,"nodeType":"ArrayTypeName","src":"8408:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_storage_$dyn_storage_ptr","typeString":"struct IRouter.CodeCommitment[]"}},"visibility":"internal"},{"constant":false,"id":55163,"mutability":"mutable","name":"signatures","nameLocation":"8473:10:81","nodeType":"VariableDeclaration","scope":55269,"src":"8456:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55161,"name":"bytes","nodeType":"ElementaryTypeName","src":"8456:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55162,"nodeType":"ArrayTypeName","src":"8456:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"8407:77:81"},"returnParameters":{"id":55165,"nodeType":"ParameterList","parameters":[],"src":"8494:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55325,"nodeType":"FunctionDefinition","src":"9510:571:81","nodes":[],"body":{"id":55324,"nodeType":"Block","src":"9620:461:81","nodes":[],"statements":[{"assignments":[55280],"declarations":[{"constant":false,"id":55280,"mutability":"mutable","name":"blockCommitmentsHashes","nameLocation":"9643:22:81","nodeType":"VariableDeclaration","scope":55324,"src":"9630:35:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55279,"name":"bytes","nodeType":"ElementaryTypeName","src":"9630:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55281,"nodeType":"VariableDeclarationStatement","src":"9630:35:81"},{"body":{"id":55315,"nodeType":"Block","src":"9735:263:81","statements":[{"assignments":[55295],"declarations":[{"constant":false,"id":55295,"mutability":"mutable","name":"blockCommitment","nameLocation":"9774:15:81","nodeType":"VariableDeclaration","scope":55315,"src":"9749:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment"},"typeName":{"id":55294,"nodeType":"UserDefinedTypeName","pathNode":{"id":55293,"name":"BlockCommitment","nameLocations":["9749:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"9749:15:81"},"referencedDeclaration":53704,"src":"9749:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"visibility":"internal"}],"id":55299,"initialValue":{"baseExpression":{"id":55296,"name":"blockCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55273,"src":"9792:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata[] calldata"}},"id":55298,"indexExpression":{"id":55297,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9814:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9792:24:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"9749:67:81"},{"assignments":[55301],"declarations":[{"constant":false,"id":55301,"mutability":"mutable","name":"blockCommitmentHash","nameLocation":"9839:19:81","nodeType":"VariableDeclaration","scope":55315,"src":"9831:27:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55300,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9831:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55305,"initialValue":{"arguments":[{"id":55303,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55295,"src":"9874:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}],"id":55302,"name":"_commitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55510,"src":"9861:12:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_BlockCommitment_$53704_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.BlockCommitment calldata) returns (bytes32)"}},"id":55304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9861:29:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9831:59:81"},{"expression":{"id":55313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55306,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"9905:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55310,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"9943:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55311,"name":"blockCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55301,"src":"9967:19:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55308,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9930:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55307,"name":"bytes","nodeType":"ElementaryTypeName","src":"9930:5:81","typeDescriptions":{}}},"id":55309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9936:6:81","memberName":"concat","nodeType":"MemberAccess","src":"9930:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9930:57:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"9905:82:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55314,"nodeType":"ExpressionStatement","src":"9905:82:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55286,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9696:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55287,"name":"blockCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55273,"src":"9700:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata[] calldata"}},"id":55288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9722:6:81","memberName":"length","nodeType":"MemberAccess","src":"9700:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9696:32:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55316,"initializationExpression":{"assignments":[55283],"declarations":[{"constant":false,"id":55283,"mutability":"mutable","name":"i","nameLocation":"9689:1:81","nodeType":"VariableDeclaration","scope":55316,"src":"9681:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55282,"name":"uint256","nodeType":"ElementaryTypeName","src":"9681:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55285,"initialValue":{"hexValue":"30","id":55284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9693:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9681:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9730:3:81","subExpression":{"id":55290,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9730:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55292,"nodeType":"ExpressionStatement","src":"9730:3:81"},"nodeType":"ForStatement","src":"9676:322:81"},{"expression":{"arguments":[{"arguments":[{"id":55319,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"10038:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55318,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10028:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10028:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55321,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55276,"src":"10063:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":55317,"name":"_validateSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"10008:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes calldata[] calldata) view"}},"id":55322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10008:66:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55323,"nodeType":"ExpressionStatement","src":"10008:66:81"}]},"baseFunctions":[53950],"functionSelector":"fa97ed6d","implemented":true,"kind":"function","modifiers":[],"name":"commitBlocks","nameLocation":"9519:12:81","parameters":{"id":55277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55273,"mutability":"mutable","name":"blockCommitmentsArray","nameLocation":"9559:21:81","nodeType":"VariableDeclaration","scope":55325,"src":"9532:48:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment[]"},"typeName":{"baseType":{"id":55271,"nodeType":"UserDefinedTypeName","pathNode":{"id":55270,"name":"BlockCommitment","nameLocations":["9532:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"9532:15:81"},"referencedDeclaration":53704,"src":"9532:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"id":55272,"nodeType":"ArrayTypeName","src":"9532:17:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_storage_$dyn_storage_ptr","typeString":"struct IRouter.BlockCommitment[]"}},"visibility":"internal"},{"constant":false,"id":55276,"mutability":"mutable","name":"signatures","nameLocation":"9599:10:81","nodeType":"VariableDeclaration","scope":55325,"src":"9582:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55274,"name":"bytes","nodeType":"ElementaryTypeName","src":"9582:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55275,"nodeType":"ArrayTypeName","src":"9582:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"9531:79:81"},"returnParameters":{"id":55278,"nodeType":"ParameterList","parameters":[],"src":"9620:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55414,"nodeType":"FunctionDefinition","src":"10123:844:81","nodes":[],"body":{"id":55413,"nodeType":"Block","src":"10212:755:81","nodes":[],"statements":[{"assignments":[55335],"declarations":[{"constant":false,"id":55335,"mutability":"mutable","name":"router","nameLocation":"10238:6:81","nodeType":"VariableDeclaration","scope":55413,"src":"10222:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55334,"nodeType":"UserDefinedTypeName","pathNode":{"id":55333,"name":"Storage","nameLocations":["10222:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"10222:7:81"},"referencedDeclaration":53684,"src":"10222:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55338,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55336,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"10247:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10247:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10222:38:81"},{"assignments":[55340],"declarations":[{"constant":false,"id":55340,"mutability":"mutable","name":"threshold","nameLocation":"10279:9:81","nodeType":"VariableDeclaration","scope":55413,"src":"10271:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55339,"name":"uint256","nodeType":"ElementaryTypeName","src":"10271:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55343,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55341,"name":"validatorsThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54841,"src":"10291:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":55342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10291:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10271:41:81"},{"assignments":[55345],"declarations":[{"constant":false,"id":55345,"mutability":"mutable","name":"messageHash","nameLocation":"10331:11:81","nodeType":"VariableDeclaration","scope":55413,"src":"10323:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55344,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10323:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55356,"initialValue":{"arguments":[{"arguments":[{"id":55353,"name":"dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55327,"src":"10408:8:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55351,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10391:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10395:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"10391:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10391:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":55348,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10353:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}],"id":55347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10345:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55346,"name":"address","nodeType":"ElementaryTypeName","src":"10345:7:81","typeDescriptions":{}}},"id":55349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10345:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10359:31:81","memberName":"toDataWithIntendedValidatorHash","nodeType":"MemberAccess","referencedDeclaration":43448,"src":"10345:45:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes32_$attached_to$_t_address_$","typeString":"function (address,bytes memory) pure returns (bytes32)"}},"id":55355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10345:73:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"10323:95:81"},{"assignments":[55358],"declarations":[{"constant":false,"id":55358,"mutability":"mutable","name":"validSignatures","nameLocation":"10436:15:81","nodeType":"VariableDeclaration","scope":55413,"src":"10428:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55357,"name":"uint256","nodeType":"ElementaryTypeName","src":"10428:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55360,"initialValue":{"hexValue":"30","id":55359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10454:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10428:27:81"},{"body":{"id":55404,"nodeType":"Block","src":"10514:368:81","statements":[{"assignments":[55373],"declarations":[{"constant":false,"id":55373,"mutability":"mutable","name":"signature","nameLocation":"10543:9:81","nodeType":"VariableDeclaration","scope":55404,"src":"10528:24:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":55372,"name":"bytes","nodeType":"ElementaryTypeName","src":"10528:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55377,"initialValue":{"baseExpression":{"id":55374,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"10555:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":55376,"indexExpression":{"id":55375,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10566:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10555:13:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"nodeType":"VariableDeclarationStatement","src":"10528:40:81"},{"assignments":[55379],"declarations":[{"constant":false,"id":55379,"mutability":"mutable","name":"validator","nameLocation":"10591:9:81","nodeType":"VariableDeclaration","scope":55404,"src":"10583:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55378,"name":"address","nodeType":"ElementaryTypeName","src":"10583:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55384,"initialValue":{"arguments":[{"id":55382,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55373,"src":"10623:9:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":55380,"name":"messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55345,"src":"10603:11:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10615:7:81","memberName":"recover","nodeType":"MemberAccess","referencedDeclaration":43143,"src":"10603:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bytes memory) pure returns (address)"}},"id":55383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10603:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10583:50:81"},{"condition":{"baseExpression":{"expression":{"id":55385,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55335,"src":"10652:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55386,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10659:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"10652:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55388,"indexExpression":{"id":55387,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55379,"src":"10670:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10652:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55402,"nodeType":"Block","src":"10802:70:81","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":55398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10828:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"696e636f7272656374207369676e6174757265","id":55399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10835:21:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_641ab7289dc6df3dff0edafbede614b21294e2bb9f09800443d88f57818afe8f","typeString":"literal_string \"incorrect signature\""},"value":"incorrect signature"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_641ab7289dc6df3dff0edafbede614b21294e2bb9f09800443d88f57818afe8f","typeString":"literal_string \"incorrect signature\""}],"id":55397,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10820:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10820:37:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55401,"nodeType":"ExpressionStatement","src":"10820:37:81"}]},"id":55403,"nodeType":"IfStatement","src":"10648:224:81","trueBody":{"id":55396,"nodeType":"Block","src":"10682:114:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10704:17:81","subExpression":{"id":55389,"name":"validSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"10706:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55391,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55340,"src":"10725:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10704:30:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55395,"nodeType":"IfStatement","src":"10700:82:81","trueBody":{"id":55394,"nodeType":"Block","src":"10736:46:81","statements":[{"id":55393,"nodeType":"Break","src":"10758:5:81"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55365,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10486:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55366,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"10490:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":55367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10501:6:81","memberName":"length","nodeType":"MemberAccess","src":"10490:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10486:21:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55405,"initializationExpression":{"assignments":[55362],"declarations":[{"constant":false,"id":55362,"mutability":"mutable","name":"i","nameLocation":"10479:1:81","nodeType":"VariableDeclaration","scope":55405,"src":"10471:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55361,"name":"uint256","nodeType":"ElementaryTypeName","src":"10471:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55364,"initialValue":{"hexValue":"30","id":55363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10483:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10471:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10509:3:81","subExpression":{"id":55369,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10509:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55371,"nodeType":"ExpressionStatement","src":"10509:3:81"},"nodeType":"ForStatement","src":"10466:416:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55407,"name":"validSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"10900:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":55408,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55340,"src":"10919:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10900:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e6f7420656e6f7567682076616c6964207369676e617475726573","id":55410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10930:29:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_8852ba723d98bcf316aab69f38fb5da08e0bfb912ef589b19218c396aac3c0bc","typeString":"literal_string \"not enough valid signatures\""},"value":"not enough valid signatures"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8852ba723d98bcf316aab69f38fb5da08e0bfb912ef589b19218c396aac3c0bc","typeString":"literal_string \"not enough valid signatures\""}],"id":55406,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10892:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10892:68:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55412,"nodeType":"ExpressionStatement","src":"10892:68:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateSignatures","nameLocation":"10132:19:81","parameters":{"id":55331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55327,"mutability":"mutable","name":"dataHash","nameLocation":"10160:8:81","nodeType":"VariableDeclaration","scope":55414,"src":"10152:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55326,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10152:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55330,"mutability":"mutable","name":"signatures","nameLocation":"10187:10:81","nodeType":"VariableDeclaration","scope":55414,"src":"10170:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55328,"name":"bytes","nodeType":"ElementaryTypeName","src":"10170:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55329,"nodeType":"ArrayTypeName","src":"10170:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"10151:47:81"},"returnParameters":{"id":55332,"nodeType":"ParameterList","parameters":[],"src":"10212:0:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":55510,"nodeType":"FunctionDefinition","src":"10973:1114:81","nodes":[],"body":{"id":55509,"nodeType":"Block","src":"11063:1024:81","nodes":[],"statements":[{"assignments":[55424],"declarations":[{"constant":false,"id":55424,"mutability":"mutable","name":"router","nameLocation":"11089:6:81","nodeType":"VariableDeclaration","scope":55509,"src":"11073:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55423,"nodeType":"UserDefinedTypeName","pathNode":{"id":55422,"name":"Storage","nameLocations":["11073:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"11073:7:81"},"referencedDeclaration":53684,"src":"11073:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55427,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55425,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"11098:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11098:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"11073:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55429,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"11143:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11150:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"11143:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55431,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11177:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11193:18:81","memberName":"prevCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53697,"src":"11177:34:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11143:68:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c69642070726576696f757320636f6d6d69746d656e742068617368","id":55434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11213:34:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_fef95c9e1944529fb91083689c978504d88f59fdb02e6fd241a073fa572e7d3e","typeString":"literal_string \"invalid previous commitment hash\""},"value":"invalid previous commitment hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fef95c9e1944529fb91083689c978504d88f59fdb02e6fd241a073fa572e7d3e","typeString":"literal_string \"invalid previous commitment hash\""}],"id":55428,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11122:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11122:135:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55436,"nodeType":"ExpressionStatement","src":"11122:135:81"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":55439,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11294:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11310:13:81","memberName":"predBlockHash","nodeType":"MemberAccess","referencedDeclaration":53699,"src":"11294:29:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55438,"name":"_isPredecessorHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55554,"src":"11275:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32) view returns (bool)"}},"id":55441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11275:49:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f756e64","id":55442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11326:37:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_7d09fbc5a1c193a0826cadcc2903c8170aac2d31f22b53e69a64923153c8207e","typeString":"literal_string \"allowed predecessor block not found\""},"value":"allowed predecessor block not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7d09fbc5a1c193a0826cadcc2903c8170aac2d31f22b53e69a64923153c8207e","typeString":"literal_string \"allowed predecessor block not found\""}],"id":55437,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11267:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11267:97:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55444,"nodeType":"ExpressionStatement","src":"11267:97:81"},{"assignments":[55446],"declarations":[{"constant":false,"id":55446,"mutability":"mutable","name":"transitionsHashes","nameLocation":"11388:17:81","nodeType":"VariableDeclaration","scope":55509,"src":"11375:30:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55445,"name":"bytes","nodeType":"ElementaryTypeName","src":"11375:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55447,"nodeType":"VariableDeclarationStatement","src":"11375:30:81"},{"body":{"id":55483,"nodeType":"Block","src":"11481:255:81","statements":[{"assignments":[55462],"declarations":[{"constant":false,"id":55462,"mutability":"mutable","name":"stateTransition","nameLocation":"11520:15:81","nodeType":"VariableDeclaration","scope":55483,"src":"11495:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition"},"typeName":{"id":55461,"nodeType":"UserDefinedTypeName","pathNode":{"id":55460,"name":"StateTransition","nameLocations":["11495:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53719,"src":"11495:15:81"},"referencedDeclaration":53719,"src":"11495:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_storage_ptr","typeString":"struct IRouter.StateTransition"}},"visibility":"internal"}],"id":55467,"initialValue":{"baseExpression":{"expression":{"id":55463,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11538:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11554:11:81","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":53703,"src":"11538:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$53719_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.StateTransition calldata[] calldata"}},"id":55466,"indexExpression":{"id":55465,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11566:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11538:30:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"nodeType":"VariableDeclarationStatement","src":"11495:73:81"},{"assignments":[55469],"declarations":[{"constant":false,"id":55469,"mutability":"mutable","name":"transitionHash","nameLocation":"11591:14:81","nodeType":"VariableDeclaration","scope":55483,"src":"11583:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55468,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11583:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55473,"initialValue":{"arguments":[{"id":55471,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55462,"src":"11627:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}],"id":55470,"name":"_doStateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55754,"src":"11608:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_StateTransition_$53719_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.StateTransition calldata) returns (bytes32)"}},"id":55472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11608:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"11583:60:81"},{"expression":{"id":55481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55474,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"11658:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55478,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"11691:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55479,"name":"transitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55469,"src":"11710:14:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11678:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55475,"name":"bytes","nodeType":"ElementaryTypeName","src":"11678:5:81","typeDescriptions":{}}},"id":55477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11684:6:81","memberName":"concat","nodeType":"MemberAccess","src":"11678:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11678:47:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"11658:67:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55482,"nodeType":"ExpressionStatement","src":"11658:67:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55452,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11436:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55453,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11440:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11456:11:81","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":53703,"src":"11440:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$53719_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.StateTransition calldata[] calldata"}},"id":55455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11468:6:81","memberName":"length","nodeType":"MemberAccess","src":"11440:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11436:38:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55484,"initializationExpression":{"assignments":[55449],"declarations":[{"constant":false,"id":55449,"mutability":"mutable","name":"i","nameLocation":"11429:1:81","nodeType":"VariableDeclaration","scope":55484,"src":"11421:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55448,"name":"uint256","nodeType":"ElementaryTypeName","src":"11421:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55451,"initialValue":{"hexValue":"30","id":55450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11433:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11421:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11476:3:81","subExpression":{"id":55457,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11476:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55459,"nodeType":"ExpressionStatement","src":"11476:3:81"},"nodeType":"ForStatement","src":"11416:320:81"},{"expression":{"id":55490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":55485,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"11746:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11753:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"11746:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55488,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11779:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11795:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11779:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11746:58:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55491,"nodeType":"ExpressionStatement","src":"11746:58:81"},{"eventCall":{"arguments":[{"expression":{"id":55493,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11834:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11850:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11834:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55492,"name":"BlockCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53748,"src":"11819:14:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":55495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11819:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55496,"nodeType":"EmitStatement","src":"11814:46:81"},{"expression":{"arguments":[{"expression":{"id":55498,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11912:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11928:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11912:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55500,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11951:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11967:18:81","memberName":"prevCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53697,"src":"11951:34:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55502,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11999:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12015:13:81","memberName":"predBlockHash","nodeType":"MemberAccess","referencedDeclaration":53699,"src":"11999:29:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":55505,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"12052:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55504,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"12042:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12042:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55497,"name":"_blockCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55778,"src":"11878:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32,bytes32) pure returns (bytes32)"}},"id":55507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11878:202:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55421,"id":55508,"nodeType":"Return","src":"11871:209:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitBlock","nameLocation":"10982:12:81","parameters":{"id":55418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55417,"mutability":"mutable","name":"blockCommitment","nameLocation":"11020:15:81","nodeType":"VariableDeclaration","scope":55510,"src":"10995:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment"},"typeName":{"id":55416,"nodeType":"UserDefinedTypeName","pathNode":{"id":55415,"name":"BlockCommitment","nameLocations":["10995:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"10995:15:81"},"referencedDeclaration":53704,"src":"10995:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"visibility":"internal"}],"src":"10994:42:81"},"returnParameters":{"id":55421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55510,"src":"11054:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55419,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11054:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11053:9:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55554,"nodeType":"FunctionDefinition","src":"12093:338:81","nodes":[],"body":{"id":55553,"nodeType":"Block","src":"12163:268:81","nodes":[],"statements":[{"body":{"id":55549,"nodeType":"Block","src":"12220:183:81","statements":[{"assignments":[55531],"declarations":[{"constant":false,"id":55531,"mutability":"mutable","name":"ret","nameLocation":"12242:3:81","nodeType":"VariableDeclaration","scope":55549,"src":"12234:11:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55530,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12234:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55535,"initialValue":{"arguments":[{"id":55533,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12258:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55532,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"12248:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":55534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12248:12:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12234:26:81"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55536,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"12278:3:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55537,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55512,"src":"12285:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12278:11:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55542,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"12345:3:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12352:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12345:8:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55547,"nodeType":"IfStatement","src":"12341:52:81","trueBody":{"id":55546,"nodeType":"Block","src":"12355:38:81","statements":[{"id":55545,"nodeType":"Break","src":"12373:5:81"}]}},"id":55548,"nodeType":"IfStatement","src":"12274:119:81","trueBody":{"id":55541,"nodeType":"Block","src":"12291:44:81","statements":[{"expression":{"hexValue":"74727565","id":55539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12316:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":55516,"id":55540,"nodeType":"Return","src":"12309:11:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55524,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12208:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":55525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12212:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12208:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55550,"initializationExpression":{"assignments":[55518],"declarations":[{"constant":false,"id":55518,"mutability":"mutable","name":"i","nameLocation":"12186:1:81","nodeType":"VariableDeclaration","scope":55550,"src":"12178:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55517,"name":"uint256","nodeType":"ElementaryTypeName","src":"12178:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55523,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55519,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12190:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":55520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12196:6:81","memberName":"number","nodeType":"MemberAccess","src":"12190:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":55521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12205:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12190:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12178:28:81"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":55528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"12215:3:81","subExpression":{"id":55527,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12215:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55529,"nodeType":"ExpressionStatement","src":"12215:3:81"},"nodeType":"ForStatement","src":"12173:230:81"},{"expression":{"hexValue":"66616c7365","id":55551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12419:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":55516,"id":55552,"nodeType":"Return","src":"12412:12:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_isPredecessorHash","nameLocation":"12102:18:81","parameters":{"id":55513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55512,"mutability":"mutable","name":"hash","nameLocation":"12129:4:81","nodeType":"VariableDeclaration","scope":55554,"src":"12121:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12121:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12120:14:81"},"returnParameters":{"id":55516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55515,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55554,"src":"12157:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":55514,"name":"bool","nodeType":"ElementaryTypeName","src":"12157:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12156:6:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":55754,"nodeType":"FunctionDefinition","src":"12437:2170:81","nodes":[],"body":{"id":55753,"nodeType":"Block","src":"12533:2074:81","nodes":[],"statements":[{"assignments":[55564],"declarations":[{"constant":false,"id":55564,"mutability":"mutable","name":"router","nameLocation":"12559:6:81","nodeType":"VariableDeclaration","scope":55753,"src":"12543:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55563,"nodeType":"UserDefinedTypeName","pathNode":{"id":55562,"name":"Storage","nameLocations":["12543:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"12543:7:81"},"referencedDeclaration":53684,"src":"12543:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55567,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55565,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"12568:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12568:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"12543:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55569,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55564,"src":"12600:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12607:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"12600:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":55573,"indexExpression":{"expression":{"id":55571,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12616:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12632:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12616:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12600:40:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12644:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12600:45:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420706572666f726d207472616e736974696f6e20666f7220756e6b6e6f776e2070726f6772616d","id":55576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12647:49:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""},"value":"couldn't perform transition for unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""}],"id":55568,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12592:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12592:105:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55578,"nodeType":"ExpressionStatement","src":"12592:105:81"},{"assignments":[55581],"declarations":[{"constant":false,"id":55581,"mutability":"mutable","name":"wrappedVaraActor","nameLocation":"12721:16:81","nodeType":"VariableDeclaration","scope":55753,"src":"12708:29:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":55580,"nodeType":"UserDefinedTypeName","pathNode":{"id":55579,"name":"IWrappedVara","nameLocations":["12708:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"12708:12:81"},"referencedDeclaration":53962,"src":"12708:12:81","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":55586,"initialValue":{"arguments":[{"expression":{"id":55583,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55564,"src":"12753:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12760:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"12753:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55582,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"12740:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":55585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12740:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"12708:64:81"},{"expression":{"arguments":[{"expression":{"id":55590,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12808:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12824:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12808:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55592,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12833:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12849:14:81","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":53710,"src":"12833:30:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55587,"name":"wrappedVaraActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55581,"src":"12782:16:81","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":55589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12799:8:81","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":41873,"src":"12782:25:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":55594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12782:82:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55595,"nodeType":"ExpressionStatement","src":"12782:82:81"},{"assignments":[55598],"declarations":[{"constant":false,"id":55598,"mutability":"mutable","name":"mirrorActor","nameLocation":"12883:11:81","nodeType":"VariableDeclaration","scope":55753,"src":"12875:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"},"typeName":{"id":55597,"nodeType":"UserDefinedTypeName","pathNode":{"id":55596,"name":"IMirror","nameLocations":["12875:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53636,"src":"12875:7:81"},"referencedDeclaration":53636,"src":"12875:7:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"visibility":"internal"}],"id":55603,"initialValue":{"arguments":[{"expression":{"id":55600,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12905:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12921:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12905:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55599,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"12897:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$53636_$","typeString":"type(contract IMirror)"}},"id":55602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12897:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"nodeType":"VariableDeclarationStatement","src":"12875:54:81"},{"assignments":[55605],"declarations":[{"constant":false,"id":55605,"mutability":"mutable","name":"valueClaimsBytes","nameLocation":"12953:16:81","nodeType":"VariableDeclaration","scope":55753,"src":"12940:29:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55604,"name":"bytes","nodeType":"ElementaryTypeName","src":"12940:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55606,"nodeType":"VariableDeclarationStatement","src":"12940:29:81"},{"body":{"id":55655,"nodeType":"Block","src":"13045:367:81","statements":[{"assignments":[55621],"declarations":[{"constant":false,"id":55621,"mutability":"mutable","name":"valueClaim","nameLocation":"13079:10:81","nodeType":"VariableDeclaration","scope":55655,"src":"13059:30:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim"},"typeName":{"id":55620,"nodeType":"UserDefinedTypeName","pathNode":{"id":55619,"name":"ValueClaim","nameLocations":["13059:10:81"],"nodeType":"IdentifierPath","referencedDeclaration":53726,"src":"13059:10:81"},"referencedDeclaration":53726,"src":"13059:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_storage_ptr","typeString":"struct IRouter.ValueClaim"}},"visibility":"internal"}],"id":55626,"initialValue":{"baseExpression":{"expression":{"id":55622,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13092:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13108:11:81","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":53714,"src":"13092:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$53726_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata[] calldata"}},"id":55625,"indexExpression":{"id":55624,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13120:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13092:30:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"nodeType":"VariableDeclarationStatement","src":"13059:63:81"},{"expression":{"id":55642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55627,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"13137:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55631,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"13186:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"expression":{"id":55634,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13221:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13232:9:81","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":53721,"src":"13221:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55636,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13243:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13254:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53723,"src":"13243:22:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55638,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13267:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13278:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53725,"src":"13267:16:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55632,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13204:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13208:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"13204:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13204:80:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":55629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13156:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55628,"name":"bytes","nodeType":"ElementaryTypeName","src":"13156:5:81","typeDescriptions":{}}},"id":55630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13162:6:81","memberName":"concat","nodeType":"MemberAccess","src":"13156:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13156:142:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13137:161:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55643,"nodeType":"ExpressionStatement","src":"13137:161:81"},{"expression":{"arguments":[{"expression":{"id":55647,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13338:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13349:9:81","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":53721,"src":"13338:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55649,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13360:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13371:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53723,"src":"13360:22:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55651,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13384:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13395:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53725,"src":"13384:16:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55644,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13313:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13325:12:81","memberName":"valueClaimed","nodeType":"MemberAccess","referencedDeclaration":53619,"src":"13313:24:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint128) external"}},"id":55653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13313:88:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55654,"nodeType":"ExpressionStatement","src":"13313:88:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55611,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13000:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55612,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13004:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13020:11:81","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":53714,"src":"13004:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$53726_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata[] calldata"}},"id":55614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13032:6:81","memberName":"length","nodeType":"MemberAccess","src":"13004:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13000:38:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55656,"initializationExpression":{"assignments":[55608],"declarations":[{"constant":false,"id":55608,"mutability":"mutable","name":"i","nameLocation":"12993:1:81","nodeType":"VariableDeclaration","scope":55656,"src":"12985:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55607,"name":"uint256","nodeType":"ElementaryTypeName","src":"12985:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55610,"initialValue":{"hexValue":"30","id":55609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12997:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12985:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13040:3:81","subExpression":{"id":55616,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13040:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55618,"nodeType":"ExpressionStatement","src":"13040:3:81"},"nodeType":"ForStatement","src":"12980:432:81"},{"assignments":[55658],"declarations":[{"constant":false,"id":55658,"mutability":"mutable","name":"messagesHashes","nameLocation":"13435:14:81","nodeType":"VariableDeclaration","scope":55753,"src":"13422:27:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55657,"name":"bytes","nodeType":"ElementaryTypeName","src":"13422:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55659,"nodeType":"VariableDeclarationStatement","src":"13422:27:81"},{"body":{"id":55729,"nodeType":"Block","src":"13522:764:81","statements":[{"assignments":[55674],"declarations":[{"constant":false,"id":55674,"mutability":"mutable","name":"outgoingMessage","nameLocation":"13561:15:81","nodeType":"VariableDeclaration","scope":55729,"src":"13536:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage"},"typeName":{"id":55673,"nodeType":"UserDefinedTypeName","pathNode":{"id":55672,"name":"OutgoingMessage","nameLocations":["13536:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53738,"src":"13536:15:81"},"referencedDeclaration":53738,"src":"13536:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_storage_ptr","typeString":"struct IRouter.OutgoingMessage"}},"visibility":"internal"}],"id":55679,"initialValue":{"baseExpression":{"expression":{"id":55675,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13579:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13595:8:81","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":53718,"src":"13579:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata[] calldata"}},"id":55678,"indexExpression":{"id":55677,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13604:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13579:27:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"nodeType":"VariableDeclarationStatement","src":"13536:70:81"},{"expression":{"id":55689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55680,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"13621:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55684,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"13651:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":55686,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13688:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}],"id":55685,"name":"_outgoingMessageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55834,"src":"13667:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.OutgoingMessage calldata) pure returns (bytes32)"}},"id":55687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13667:37:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13638:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55681,"name":"bytes","nodeType":"ElementaryTypeName","src":"13638:5:81","typeDescriptions":{}}},"id":55683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13644:6:81","memberName":"concat","nodeType":"MemberAccess","src":"13638:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13638:67:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13621:84:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55690,"nodeType":"ExpressionStatement","src":"13621:84:81"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":55691,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13724:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13740:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"13724:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13753:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"13724:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13759:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13724:36:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55727,"nodeType":"Block","src":"13959:317:81","statements":[{"expression":{"arguments":[{"expression":{"id":55713,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14020:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14036:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"14020:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55715,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14069:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14085:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"14069:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55717,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14114:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14130:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"14114:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":55719,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14157:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14173:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"14157:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14186:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"14157:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":55722,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14210:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14226:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"14210:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14239:4:81","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":53742,"src":"14210:33:81","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":55710,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13977:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13989:9:81","memberName":"replySent","nodeType":"MemberAccess","referencedDeclaration":53610,"src":"13977:21:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (address,bytes memory,uint128,bytes32,bytes4) external"}},"id":55725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13977:284:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55726,"nodeType":"ExpressionStatement","src":"13977:284:81"}]},"id":55728,"nodeType":"IfStatement","src":"13720:556:81","trueBody":{"id":55709,"nodeType":"Block","src":"13762:191:81","statements":[{"expression":{"arguments":[{"expression":{"id":55699,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13825:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13841:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53728,"src":"13825:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55701,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13845:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13861:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"13845:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55703,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13874:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13890:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"13874:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55705,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13899:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13915:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"13899:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55696,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13780:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13792:11:81","memberName":"messageSent","nodeType":"MemberAccess","referencedDeclaration":53597,"src":"13780:23:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128) external"}},"id":55707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13780:158:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55708,"nodeType":"ExpressionStatement","src":"13780:158:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55664,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13480:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55665,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13484:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13500:8:81","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":53718,"src":"13484:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata[] calldata"}},"id":55667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13509:6:81","memberName":"length","nodeType":"MemberAccess","src":"13484:31:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13480:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55730,"initializationExpression":{"assignments":[55661],"declarations":[{"constant":false,"id":55661,"mutability":"mutable","name":"i","nameLocation":"13473:1:81","nodeType":"VariableDeclaration","scope":55730,"src":"13465:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55660,"name":"uint256","nodeType":"ElementaryTypeName","src":"13465:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55663,"initialValue":{"hexValue":"30","id":55662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13477:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13465:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13517:3:81","subExpression":{"id":55669,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13517:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55671,"nodeType":"ExpressionStatement","src":"13517:3:81"},"nodeType":"ForStatement","src":"13460:826:81"},{"expression":{"arguments":[{"expression":{"id":55734,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14320:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14336:12:81","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":53708,"src":"14320:28:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55731,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"14296:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14308:11:81","memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":53586,"src":"14296:23:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32) external"}},"id":55736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14296:53:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55737,"nodeType":"ExpressionStatement","src":"14296:53:81"},{"expression":{"arguments":[{"expression":{"id":55739,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14401:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14417:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"14401:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55741,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14438:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14454:12:81","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":53708,"src":"14438:28:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55743,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14480:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14496:14:81","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":53710,"src":"14480:30:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[{"id":55746,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"14534:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55745,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14524:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14524:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":55749,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"14575:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55748,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14565:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14565:25:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55738,"name":"_stateTransitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55805,"src":"14367:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_uint128_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,bytes32,uint128,bytes32,bytes32) pure returns (bytes32)"}},"id":55751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14367:233:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55561,"id":55752,"nodeType":"Return","src":"14360:240:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_doStateTransition","nameLocation":"12446:18:81","parameters":{"id":55558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55557,"mutability":"mutable","name":"stateTransition","nameLocation":"12490:15:81","nodeType":"VariableDeclaration","scope":55754,"src":"12465:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition"},"typeName":{"id":55556,"nodeType":"UserDefinedTypeName","pathNode":{"id":55555,"name":"StateTransition","nameLocations":["12465:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53719,"src":"12465:15:81"},"referencedDeclaration":53719,"src":"12465:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_storage_ptr","typeString":"struct IRouter.StateTransition"}},"visibility":"internal"}],"src":"12464:42:81"},"returnParameters":{"id":55561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55754,"src":"12524:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55559,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12524:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12523:9:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55778,"nodeType":"FunctionDefinition","src":"14613:320:81","nodes":[],"body":{"id":55777,"nodeType":"Block","src":"14813:120:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":55770,"name":"blockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55756,"src":"14857:9:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55771,"name":"prevCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55758,"src":"14868:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55772,"name":"predBlockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55760,"src":"14888:13:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55773,"name":"transitionsHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55762,"src":"14903:21:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55768,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14840:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14844:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"14840:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14840:85:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55767,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14830:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14830:96:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55766,"id":55776,"nodeType":"Return","src":"14823:103:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_blockCommitmentHash","nameLocation":"14622:20:81","parameters":{"id":55763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55756,"mutability":"mutable","name":"blockHash","nameLocation":"14660:9:81","nodeType":"VariableDeclaration","scope":55778,"src":"14652:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55755,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14652:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55758,"mutability":"mutable","name":"prevCommitmentHash","nameLocation":"14687:18:81","nodeType":"VariableDeclaration","scope":55778,"src":"14679:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55757,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14679:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55760,"mutability":"mutable","name":"predBlockHash","nameLocation":"14723:13:81","nodeType":"VariableDeclaration","scope":55778,"src":"14715:21:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55759,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14715:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55762,"mutability":"mutable","name":"transitionsHashesHash","nameLocation":"14754:21:81","nodeType":"VariableDeclaration","scope":55778,"src":"14746:29:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55761,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14746:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14642:139:81"},"returnParameters":{"id":55766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55778,"src":"14804:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55764,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14804:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14803:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55805,"nodeType":"FunctionDefinition","src":"14939:350:81","nodes":[],"body":{"id":55804,"nodeType":"Block","src":"15162:127:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":55796,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55780,"src":"15206:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55797,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55782,"src":"15215:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55798,"name":"valueToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55784,"src":"15229:14:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":55799,"name":"valueClaimsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55786,"src":"15245:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55800,"name":"messagesHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55788,"src":"15262:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55794,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15189:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15193:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15189:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15189:92:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55793,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15179:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15179:103:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55792,"id":55803,"nodeType":"Return","src":"15172:110:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_stateTransitionHash","nameLocation":"14948:20:81","parameters":{"id":55789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55780,"mutability":"mutable","name":"actorId","nameLocation":"14986:7:81","nodeType":"VariableDeclaration","scope":55805,"src":"14978:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55779,"name":"address","nodeType":"ElementaryTypeName","src":"14978:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55782,"mutability":"mutable","name":"newStateHash","nameLocation":"15011:12:81","nodeType":"VariableDeclaration","scope":55805,"src":"15003:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55781,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15003:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55784,"mutability":"mutable","name":"valueToReceive","nameLocation":"15041:14:81","nodeType":"VariableDeclaration","scope":55805,"src":"15033:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55783,"name":"uint128","nodeType":"ElementaryTypeName","src":"15033:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":55786,"mutability":"mutable","name":"valueClaimsHash","nameLocation":"15073:15:81","nodeType":"VariableDeclaration","scope":55805,"src":"15065:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55785,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15065:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55788,"mutability":"mutable","name":"messagesHashesHash","nameLocation":"15106:18:81","nodeType":"VariableDeclaration","scope":55805,"src":"15098:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55787,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15098:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14968:162:81"},"returnParameters":{"id":55792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55791,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55805,"src":"15153:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55790,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15153:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15152:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55834,"nodeType":"FunctionDefinition","src":"15295:451:81","nodes":[],"body":{"id":55833,"nodeType":"Block","src":"15398:348:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":55816,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15472:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15488:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53728,"src":"15472:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55818,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15508:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15524:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"15508:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55820,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15553:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15569:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"15553:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55822,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15594:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15610:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"15594:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":55824,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15633:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15649:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"15633:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15662:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"15633:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":55827,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15682:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15698:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"15682:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15711:4:81","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":53742,"src":"15682:33:81","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":55814,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15438:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15442:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15438:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15438:291:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55813,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15415:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15415:324:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55812,"id":55832,"nodeType":"Return","src":"15408:331:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_outgoingMessageHash","nameLocation":"15304:20:81","parameters":{"id":55809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55808,"mutability":"mutable","name":"outgoingMessage","nameLocation":"15350:15:81","nodeType":"VariableDeclaration","scope":55834,"src":"15325:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage"},"typeName":{"id":55807,"nodeType":"UserDefinedTypeName","pathNode":{"id":55806,"name":"OutgoingMessage","nameLocations":["15325:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53738,"src":"15325:15:81"},"referencedDeclaration":53738,"src":"15325:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_storage_ptr","typeString":"struct IRouter.OutgoingMessage"}},"visibility":"internal"}],"src":"15324:42:81"},"returnParameters":{"id":55812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55834,"src":"15389:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55810,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15389:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15388:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55853,"nodeType":"FunctionDefinition","src":"15752:192:81","nodes":[],"body":{"id":55852,"nodeType":"Block","src":"15852:92:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":55845,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55837,"src":"15896:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15911:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53690,"src":"15896:17:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55847,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55837,"src":"15915:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15930:5:81","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":53692,"src":"15915:20:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":55843,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15879:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55844,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15883:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15879:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15879:57:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55842,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15869:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15869:68:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55841,"id":55851,"nodeType":"Return","src":"15862:75:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_codeCommitmentHash","nameLocation":"15761:19:81","parameters":{"id":55838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55837,"mutability":"mutable","name":"codeCommitment","nameLocation":"15805:14:81","nodeType":"VariableDeclaration","scope":55853,"src":"15781:38:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment"},"typeName":{"id":55836,"nodeType":"UserDefinedTypeName","pathNode":{"id":55835,"name":"CodeCommitment","nameLocations":["15781:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"15781:14:81"},"referencedDeclaration":53693,"src":"15781:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"visibility":"internal"}],"src":"15780:40:81"},"returnParameters":{"id":55841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55840,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55853,"src":"15843:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15843:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15842:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55886,"nodeType":"FunctionDefinition","src":"15950:257:81","nodes":[],"body":{"id":55885,"nodeType":"Block","src":"15998:209:81","nodes":[],"statements":[{"assignments":[55860],"declarations":[{"constant":false,"id":55860,"mutability":"mutable","name":"router","nameLocation":"16024:6:81","nodeType":"VariableDeclaration","scope":55885,"src":"16008:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55859,"nodeType":"UserDefinedTypeName","pathNode":{"id":55858,"name":"Storage","nameLocations":["16008:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16008:7:81"},"referencedDeclaration":53684,"src":"16008:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55863,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55861,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16033:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16033:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16008:38:81"},{"assignments":[55865],"declarations":[{"constant":false,"id":55865,"mutability":"mutable","name":"success","nameLocation":"16062:7:81","nodeType":"VariableDeclaration","scope":55885,"src":"16057:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":55864,"name":"bool","nodeType":"ElementaryTypeName","src":"16057:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":55879,"initialValue":{"arguments":[{"expression":{"id":55871,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"16112:2:81","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":55872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16115:6:81","memberName":"origin","nodeType":"MemberAccess","src":"16112:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55875,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16131:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}],"id":55874,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16123:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55873,"name":"address","nodeType":"ElementaryTypeName","src":"16123:7:81","typeDescriptions":{}}},"id":55876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16123:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55877,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55855,"src":"16138:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":55867,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55860,"src":"16079:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16086:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"16079:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55866,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41906,"src":"16072:6:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$41906_$","typeString":"type(contract IERC20)"}},"id":55869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16072:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$41906","typeString":"contract IERC20"}},"id":55870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16099:12:81","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":41905,"src":"16072:39:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":55878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16072:73:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"16057:88:81"},{"expression":{"arguments":[{"id":55881,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55865,"src":"16164:7:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":55882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16173:26:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":55880,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"16156:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16156:44:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55884,"nodeType":"ExpressionStatement","src":"16156:44:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValue","nameLocation":"15959:14:81","parameters":{"id":55856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55855,"mutability":"mutable","name":"_value","nameLocation":"15982:6:81","nodeType":"VariableDeclaration","scope":55886,"src":"15974:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55854,"name":"uint128","nodeType":"ElementaryTypeName","src":"15974:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"15973:16:81"},"returnParameters":{"id":55857,"nodeType":"ParameterList","parameters":[],"src":"15998:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55927,"nodeType":"FunctionDefinition","src":"16213:317:81","nodes":[],"body":{"id":55926,"nodeType":"Block","src":"16249:281:81","nodes":[],"statements":[{"assignments":[55891],"declarations":[{"constant":false,"id":55891,"mutability":"mutable","name":"router","nameLocation":"16275:6:81","nodeType":"VariableDeclaration","scope":55926,"src":"16259:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55890,"nodeType":"UserDefinedTypeName","pathNode":{"id":55889,"name":"Storage","nameLocations":["16259:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16259:7:81"},"referencedDeclaration":53684,"src":"16259:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55894,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55892,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16284:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16284:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16259:38:81"},{"body":{"id":55920,"nodeType":"Block","src":"16367:118:81","statements":[{"assignments":[55908],"declarations":[{"constant":false,"id":55908,"mutability":"mutable","name":"validator","nameLocation":"16389:9:81","nodeType":"VariableDeclaration","scope":55920,"src":"16381:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55907,"name":"address","nodeType":"ElementaryTypeName","src":"16381:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55913,"initialValue":{"baseExpression":{"expression":{"id":55909,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16401:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55910,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16408:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16401:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55912,"indexExpression":{"id":55911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16423:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16401:24:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16381:44:81"},{"expression":{"id":55918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"16439:35:81","subExpression":{"baseExpression":{"expression":{"id":55914,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16446:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16453:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"16446:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55917,"indexExpression":{"id":55916,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55908,"src":"16464:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16446:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55919,"nodeType":"ExpressionStatement","src":"16439:35:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16328:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55900,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16332:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16339:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16332:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16354:6:81","memberName":"length","nodeType":"MemberAccess","src":"16332:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16328:32:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55921,"initializationExpression":{"assignments":[55896],"declarations":[{"constant":false,"id":55896,"mutability":"mutable","name":"i","nameLocation":"16321:1:81","nodeType":"VariableDeclaration","scope":55921,"src":"16313:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55895,"name":"uint256","nodeType":"ElementaryTypeName","src":"16313:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55898,"initialValue":{"hexValue":"30","id":55897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16325:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16313:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16362:3:81","subExpression":{"id":55904,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16362:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55906,"nodeType":"ExpressionStatement","src":"16362:3:81"},"nodeType":"ForStatement","src":"16308:177:81"},{"expression":{"id":55924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"16495:28:81","subExpression":{"expression":{"id":55922,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16502:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16509:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16502:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55925,"nodeType":"ExpressionStatement","src":"16495:28:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_cleanValidators","nameLocation":"16222:16:81","parameters":{"id":55887,"nodeType":"ParameterList","parameters":[],"src":"16238:2:81"},"returnParameters":{"id":55888,"nodeType":"ParameterList","parameters":[],"src":"16249:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55982,"nodeType":"FunctionDefinition","src":"16536:442:81","nodes":[],"body":{"id":55981,"nodeType":"Block","src":"16603:375:81","nodes":[],"statements":[{"assignments":[55935],"declarations":[{"constant":false,"id":55935,"mutability":"mutable","name":"router","nameLocation":"16629:6:81","nodeType":"VariableDeclaration","scope":55981,"src":"16613:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55934,"nodeType":"UserDefinedTypeName","pathNode":{"id":55933,"name":"Storage","nameLocations":["16613:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16613:7:81"},"referencedDeclaration":53684,"src":"16613:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55938,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55936,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16638:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16638:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16613:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":55940,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16670:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16677:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16670:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16692:6:81","memberName":"length","nodeType":"MemberAccess","src":"16670:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16702:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16670:33:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726576696f75732076616c696461746f727320776572656e27742072656d6f766564","id":55945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16705:37:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_cbe432dd5148cbcd3965634d2fa4c608dba4822bc479da840b7f667e6442b9d2","typeString":"literal_string \"previous validators weren't removed\""},"value":"previous validators weren't removed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cbe432dd5148cbcd3965634d2fa4c608dba4822bc479da840b7f667e6442b9d2","typeString":"literal_string \"previous validators weren't removed\""}],"id":55939,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"16662:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16662:81:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55947,"nodeType":"ExpressionStatement","src":"16662:81:81"},{"body":{"id":55973,"nodeType":"Block","src":"16808:113:81","statements":[{"assignments":[55960],"declarations":[{"constant":false,"id":55960,"mutability":"mutable","name":"validator","nameLocation":"16830:9:81","nodeType":"VariableDeclaration","scope":55973,"src":"16822:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55959,"name":"address","nodeType":"ElementaryTypeName","src":"16822:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55964,"initialValue":{"baseExpression":{"id":55961,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16842:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55963,"indexExpression":{"id":55962,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16859:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16842:19:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16822:39:81"},{"expression":{"id":55971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55965,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16875:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16882:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"16875:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55969,"indexExpression":{"id":55967,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55960,"src":"16893:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16875:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":55970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16906:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"16875:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55972,"nodeType":"ExpressionStatement","src":"16875:35:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55952,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16774:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55953,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16778:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16795:6:81","memberName":"length","nodeType":"MemberAccess","src":"16778:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16774:27:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55974,"initializationExpression":{"assignments":[55949],"declarations":[{"constant":false,"id":55949,"mutability":"mutable","name":"i","nameLocation":"16767:1:81","nodeType":"VariableDeclaration","scope":55974,"src":"16759:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55948,"name":"uint256","nodeType":"ElementaryTypeName","src":"16759:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55951,"initialValue":{"hexValue":"30","id":55950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16771:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16759:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16803:3:81","subExpression":{"id":55956,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16803:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55958,"nodeType":"ExpressionStatement","src":"16803:3:81"},"nodeType":"ForStatement","src":"16754:167:81"},{"expression":{"id":55979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":55975,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16931:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55977,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16938:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16931:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55978,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16955:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"16931:40:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55980,"nodeType":"ExpressionStatement","src":"16931:40:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setValidators","nameLocation":"16545:14:81","parameters":{"id":55931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55930,"mutability":"mutable","name":"_validatorsArray","nameLocation":"16577:16:81","nodeType":"VariableDeclaration","scope":55982,"src":"16560:33:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55928,"name":"address","nodeType":"ElementaryTypeName","src":"16560:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55929,"nodeType":"ArrayTypeName","src":"16560:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"16559:35:81"},"returnParameters":{"id":55932,"nodeType":"ParameterList","parameters":[],"src":"16603:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55995,"nodeType":"FunctionDefinition","src":"16984:222:81","nodes":[],"body":{"id":55994,"nodeType":"Block","src":"17053:153:81","nodes":[],"statements":[{"assignments":[55989],"declarations":[{"constant":false,"id":55989,"mutability":"mutable","name":"slot","nameLocation":"17071:4:81","nodeType":"VariableDeclaration","scope":55994,"src":"17063:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55988,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17063:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55992,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55990,"name":"getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54597,"src":"17078:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":55991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17078:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"17063:31:81"},{"AST":{"nativeSrc":"17157:43:81","nodeType":"YulBlock","src":"17157:43:81","statements":[{"nativeSrc":"17171:19:81","nodeType":"YulAssignment","src":"17171:19:81","value":{"name":"slot","nativeSrc":"17186:4:81","nodeType":"YulIdentifier","src":"17186:4:81"},"variableNames":[{"name":"router.slot","nativeSrc":"17171:11:81","nodeType":"YulIdentifier","src":"17171:11:81"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":55986,"isOffset":false,"isSlot":true,"src":"17171:11:81","suffix":"slot","valueSize":1},{"declaration":55989,"isOffset":false,"isSlot":false,"src":"17186:4:81","valueSize":1}],"id":55993,"nodeType":"InlineAssembly","src":"17148:52:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorage","nameLocation":"16993:11:81","parameters":{"id":55983,"nodeType":"ParameterList","parameters":[],"src":"17004:2:81"},"returnParameters":{"id":55987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55986,"mutability":"mutable","name":"router","nameLocation":"17045:6:81","nodeType":"VariableDeclaration","scope":55995,"src":"17029:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55985,"nodeType":"UserDefinedTypeName","pathNode":{"id":55984,"name":"Storage","nameLocations":["17029:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"17029:7:81"},"referencedDeclaration":53684,"src":"17029:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"17028:24:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":54400,"name":"IRouter","nameLocations":["800:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53951,"src":"800:7:81"},"id":54401,"nodeType":"InheritanceSpecifier","src":"800:7:81"},{"baseName":{"id":54402,"name":"OwnableUpgradeable","nameLocations":["809:18:81"],"nodeType":"IdentifierPath","referencedDeclaration":39024,"src":"809:18:81"},"id":54403,"nodeType":"InheritanceSpecifier","src":"809:18:81"},{"baseName":{"id":54404,"name":"ReentrancyGuardTransient","nameLocations":["829:24:81"],"nodeType":"IdentifierPath","referencedDeclaration":42400,"src":"829:24:81"},"id":54405,"nodeType":"InheritanceSpecifier","src":"829:24:81"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[55996,42400,39024,40172,39278,53951],"name":"Router","nameLocation":"790:6:81","scope":55997,"usedErrors":[38860,38865,39041,39044,42267,42273,42344,43050,43055,43060],"usedEvents":[38871,39049,53748,53755,53762,53769,53772,53775,53780,53785]}],"license":"UNLICENSED"},"id":81} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"baseFee","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"baseWeight","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"codeState","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint8","internalType":"enum IRouter.CodeState"}],"stateMutability":"view"},{"type":"function","name":"commitBlocks","inputs":[{"name":"blockCommitmentsArray","type":"tuple[]","internalType":"struct IRouter.BlockCommitment[]","components":[{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"prevCommitmentHash","type":"bytes32","internalType":"bytes32"},{"name":"predBlockHash","type":"bytes32","internalType":"bytes32"},{"name":"transitions","type":"tuple[]","internalType":"struct IRouter.StateTransition[]","components":[{"name":"actorId","type":"address","internalType":"address"},{"name":"newStateHash","type":"bytes32","internalType":"bytes32"},{"name":"valueToReceive","type":"uint128","internalType":"uint128"},{"name":"valueClaims","type":"tuple[]","internalType":"struct IRouter.ValueClaim[]","components":[{"name":"messageId","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"value","type":"uint128","internalType":"uint128"}]},{"name":"messages","type":"tuple[]","internalType":"struct IRouter.OutgoingMessage[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"destination","type":"address","internalType":"address"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint128","internalType":"uint128"},{"name":"replyDetails","type":"tuple","internalType":"struct IRouter.ReplyDetails","components":[{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"code","type":"bytes4","internalType":"bytes4"}]}]}]}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitCodes","inputs":[{"name":"codeCommitmentsArray","type":"tuple[]","internalType":"struct IRouter.CodeCommitment[]","components":[{"name":"id","type":"bytes32","internalType":"bytes32"},{"name":"valid","type":"bool","internalType":"bool"}]},{"name":"signatures","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createProgram","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint128","internalType":"uint128"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"payable"},{"type":"function","name":"genesisBlockHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStorageSlot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_mirror","type":"address","internalType":"address"},{"name":"_mirrorProxy","type":"address","internalType":"address"},{"name":"_wrappedVara","type":"address","internalType":"address"},{"name":"_validatorsKeys","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastBlockCommitmentHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"mirror","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"mirrorProxy","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"programCodeId","inputs":[{"name":"program","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"programsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reinitialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"requestCodeValidation","inputs":[{"name":"codeId","type":"bytes32","internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setBaseWeight","inputs":[{"name":"_baseWeight","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMirror","inputs":[{"name":"_mirror","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStorageSlot","inputs":[{"name":"namespace","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setValuePerWeight","inputs":[{"name":"_valuePerWeight","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signingThresholdPercentage","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateValidators","inputs":[{"name":"validatorsAddressArray","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatedCodesCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorExists","inputs":[{"name":"validator","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"validators","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"validatorsCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatorsThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"valuePerWeight","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"wrappedVara","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"BaseWeightChanged","inputs":[{"name":"baseWeight","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"BlockCommitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CodeGotValidated","inputs":[{"name":"id","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"valid","type":"bool","indexed":true,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"CodeValidationRequested","inputs":[{"name":"codeId","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"blobTxHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProgramCreated","inputs":[{"name":"actorId","type":"address","indexed":false,"internalType":"address"},{"name":"codeId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StorageSlotChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValidatorsSetChanged","inputs":[],"anonymous":false},{"type":"event","name":"ValuePerWeightChanged","inputs":[{"name":"valuePerWeight","type":"uint128","indexed":false,"internalType":"uint128"}],"anonymous":false},{"type":"error","name":"ECDSAInvalidSignature","inputs":[]},{"type":"error","name":"ECDSAInvalidSignatureLength","inputs":[{"name":"length","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ECDSAInvalidSignatureS","inputs":[{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]}],"bytecode":{"object":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b60405161289590816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe610200806040526004361015610013575f80fd5b5f6101e0525f3560e01c9081627a32e714611f71575080630834fecc14611f3a5780631c149d8a14611df257806328e24b3d14611dc85780632dacfb6914611d9b5780633d43b41814611d49578063444d917214611d115780635686cad514611c5f5780636c2eb35014611a485780636ef25c3a14611a1d578063715018a6146119b657806378ee5dec1461197e5780638028861a146119015780638074b4551461158557806388f50cf01461154a5780638da5cb5b146115135780638febbd59146114c65780639067088e1461147e578063967082261461145257806396a2ddfa14611422578063a6bbbe1c14611372578063c13911e814611326578063ca1e7819146112a9578063d3fd636414611270578063e71731e41461115e578063e97d3eb314610f0f578063ed612f8c14610edf578063edc8722514610eba578063efd81abc14610e8a578063f2fde38b14610e66578063f8453e7c14610b585763fa97ed6d14610181575f80fd5b34610521576040366003190112610521576004356001600160401b038111610521576101b190369060040161202b565b906024356001600160401b038111610521576101d190369060040161202b565b6101e051606060a052909391925b82821015610b3c57600582901b8101359236829003607e19018412156105215760045f805160206128208339815191525401608052608051546020858401013503610af8576102336040858401013561262e565b15610aa7576101e0516101c0526060958285018701955b610256878786016125ce565b90506101c0511015610a125761026e878786016125ce565b9060e0526101c0511015610536576101c05160051b60e051013560c052609e1960e05136030160c0511215610521575f80516020612820833981519152546102bb60c05160e05101612671565b6001600160a01b03165f908152600b82016020526040902054156109b55760206001600160801b0391600360018060a01b0391015416604461030260c05160e05101612671565b610314604060c05160e0510101612685565b60405163a9059cbb60e01b81526001600160a01b0390921660048301529490941660248501526101e05184928391905af1801561052857610989575b5060c05160e0516001600160a01b039161036a9101612671565b166101a0526101e051606061016081905260c05160e0510101610140525b61039b6101405160c05160e05101612699565b9050811015610550576103b76101405160c05160e05101612699565b9061018052811015610536576103d7602060608302610180510101612671565b6040606083026101805101019061047a6103f083612685565b6040519060208201936060870261018051013585526001600160601b03199060601b1660408301526001600160801b03199060801b1660548201526044815261043a606482611fb1565b60206040519384926101605151808461016051018587015e840190838201906101e0518252519283915e01016101e051815203601f198101835282611fb1565b6101605261049b610495602060608502610180510101612671565b91612685565b6101a0513b15610521576040516314503e5160e01b81526101805160608502013560048201526001600160a01b0390921660248301526001600160801b031660448201526101e0516101a0518290606490829084905af1801561052857610506575b50600101610388565b6101e05161051391611fb1565b6101e051610521575f6104fd565b6101e05180fd5b6040513d6101e051823e3d90fd5b634e487b7160e01b6101e05152603260045260246101e051fd5b50909195929394956101e051610100526060610100526101e0515b60c05160e051610580910160808101906125ce565b90508110156108715760c05160e05161059e910160808101906125ce565b821015610536578160051b8101356101205260be1981360301610120511215610521576106906105d5602061012051840101612671565b605461068460346105f3604061012051880101610120518801612417565b93906106066060610120518a0101612685565b61061760a0610120518b01016126ce565b86604051978894602086019a8d6101205101358c526001600160601b03199060601b166040870152868601378301916001600160801b03199060801b16848301526080610120518b010135606483015263ffffffff60e01b16608482015203016014810184520182611fb1565b519020610100516121a2565b6101005261012051810160800135610779576106b3602061012051830101612671565b610120516106c79083016040810190612417565b90916106da606061012051860101612685565b926101a0513b156105215760405163c2df600960e01b8152610120519095013560048601526001600160a01b039091166024850152608060448501526001600160801b039161072e91608486019190612182565b9116606483015281806101e0519203816101e0516101a0515af180156105285761075e575b506001905b0161056b565b6101e05161076b91611fb1565b6101e051610521575f610753565b61078a602061012051830101612671565b906107a2604061012051830101610120518301612417565b6107b3606061012051850101612685565b926107c560a0610120518301016126ce565b926101a0513b156105215760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701526080926001600160801b039161080e9160a4890191612182565b9416604486015261012051010135606484015263ffffffff60e01b16608483015281806101e0519203816101e0516101a0515af1801561052857610856575b50600190610758565b6101e05161086391611fb1565b6101e051610521575f61084d565b5091909695949392956101a0513b1561052157604051638ea59e1d60e01b8152602060c05160e05101013560048201526101e051816024816101e0516101a0515af180156105285761096e575b5061095d906108d260c05160e05101612671565b6108e4604060c05160e0510101612685565b6101605151602061016051012061010051516020610100510120906040519260208401946001600160601b03199060601b168552602060c05160e05101013560348501526001600160801b03199060801b166054840152606483015260848201526084815261095460a482611fb1565b519020906121a2565b9660016101c051016101c05261024a565b6101e05161097b91611fb1565b6101e051610521575f6108be565b6109a99060203d81116109ae575b6109a18183611fb1565b8101906123ff565b610350565b503d610997565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9391966001939650610a999195808801359182608051557fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a1602081519101206040805192602084019485526020818c010135828501528a0101356060830152608082015260808152610a8e60a082611fb1565b51902060a0516121a2565b60a0520190929391936101df565b60405162461bcd60e51b815260206004820152602360248201527f616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f696e76616c69642070726576696f757320636f6d6d69746d656e7420686173686044820152fd5b610b51858560a05151602060a0510120612449565b6101e05180f35b346105215760a036600319011261052157610b71611f9b565b602435906001600160a01b038216820361052157604435916001600160a01b038316830361052157606435926001600160a01b0384168403610521576084356001600160401b038111610521573660238201121561052157610bdd90369060248160040135910161205b565b905f805160206128408339815191525460ff8160401c1615946001600160401b03821680159081610e5e575b6001149081610e54575b159081610e4b575b50610e365767ffffffffffffffff1982166001175f8051602061284083398151915255610c5e9186610e0a575b50610c51612603565b610c59612603565b61221a565b6040948551610c6d8782611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256310000000000000000008252610ca161228b565b5190205f198101908111610df0578651906020820190815260208252610cc78883611fb1565b60ff19915190201690815f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc6101e0516101e051a15f19430192438411610df057924082556001820180546001600160a01b03199081166001600160a01b03978816179091556002830180548216948716949094179093556003820180549093169416939093179055611a0a60058301556006919091018054680a000000009502f9006001600160c01b0319909116179055610d90906122be565b610d9b576101e05180f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160018152a180610b51565b634e487b7160e01b6101e05152601160045260246101e051fd5b68ffffffffffffffffff191668010000000000000001175f805160206128408339815191525587610c48565b63f92ee8a960e01b6101e0515260046101e051fd5b90501588610c1b565b303b159150610c13565b879150610c09565b3461052157602036600319011261052157610b51610e82611f9b565b610c5961228b565b34610521576101e05136600319011261052157602060055f80516020612820833981519152540154604051908152f35b34610521576101e051366003190112610521576020610ed76121dc565b604051908152f35b34610521576101e05136600319011261052157602060085f80516020612820833981519152540154604051908152f35b34610521576040366003190112610521576004356001600160401b0381116105215736602382011215610521578060040135906001600160401b038211610521573660248360061b83010111610521576024356001600160401b03811161052157610f7f8391369060040161202b565b5f80516020612820833981519152546101e0519460098201939192909160605b8688101561114d576101e051508760061b840197610fed604460248b01359a0192610fc9846121cf565b60405160208101918d8352151560f81b604082015260218152610954604182611fb1565b98806101e051528760205260ff60406101e0512054166003811015611133576001036110de5761101e6001936121cf565b1561108c577f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208285936101e051528a825260406101e051206101e051506101e05150600260ff19825416179055600a8a0161107b8154612174565b9055604051908152a25b0196610f9f565b806101e051528760205260406101e0512080546101e0515060ff191690556040519081527f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960206101e05192a2611085565b60405162461bcd60e51b815260206004820152602760248201527f636f64652073686f756c642062652072657175657374656420666f722076616c60448201526634b230ba34b7b760c91b6064820152608490fd5b634e487b7160e01b6101e05152602160045260246101e051fd5b610b51935060208151910120612449565b34610521576020366003190112610521576004356001600160401b0381116105215761118e90369060040161202b565b61119661228b565b5f80516020612820833981519152546101e0516007820191600801905b81548110156111f3576101e08051839052516020908190208201546001600160a01b03165f9081529084905260409020805460ff191690556001016111b3565b506101e0518154908255915081611249575b61121861121336858761205b565b6122be565b7f144bbc027dc176e94c43b7c1bcff2a8aa58ab434029eec294743cd4ab2e54f516101e0516101e051a16101e05180f35b6101e0515260206101e05120908101905b81811015611205576101e051815560010161125a565b34610521576101e0513660031901126105215760206001600160401b0360065f8051602061282083398151915254015416604051908152f35b34610521576101e051366003190112610521576112d660085f8051602061282083398151915254016120bf565b6040518091602082016020835281518091526020604084019201906101e0515b818110611304575050500390f35b82516001600160a01b03168452859450602093840193909201916001016112f6565b346105215760203660031901126105215760095f8051602061282083398151915254016004356101e0515260205260ff60406101e0512054166040516003821015611133576020918152f35b34610521576020366003190112610521576004356001600160801b03811690818103610521577f9f5e1796f1a0adf311f86170503308a06a16560a7679b7b6da35f4999200d740916020916113c561228b565b5f8051602061282083398151915254600601805477ffffffffffffffffffffffffffffffff00000000000000001916604092831b77ffffffffffffffffffffffffffffffff00000000000000001617905551908152a16101e05180f35b34610521576101e051366003190112610521576020600c5f80516020612820833981519152540154604051908152f35b34610521576101e0513660031901126105215760205f8051602061282083398151915254604051908152f35b3461052157602036600319011261052157611497611f9b565b600b5f8051602061282083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b34610521576020366003190112610521576114df611f9b565b60075f8051602061282083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610521576101e051366003190112610521575f80516020612800833981519152546040516001600160a01b039091168152602090f35b34610521576101e051366003190112610521575f8051602061282083398151915254600301546040516001600160a01b039091168152602090f35b6080366003190112611806576044356004356001600160401b0382116118065736602383011215611806578160040135916001600160401b03831161180657366024848301011161180657606435906001600160801b03821693848303611806575f805160206128208339815191525493805f526009850160205260ff60405f20541660038110156118ed5760020361189157611620612112565b600a6001600160801b03821602946001600160801b03861695860361187d5761164c8661165193612154565b612154565b60038601546040516323b872dd60e01b81523260048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af19081156117fb575f9161185e575b50156118195760028501546e5af43d82803e903d91602b57fd5bf360405160208101908482526024356040820152604081526116e2606082611fb1565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b161760205260018060a01b0390603760095ff51694851561180a57600c90865f52600b81016020528260405f2055016117588154612174565b90557f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf16020604051878152a2833b15611806576117bd945f9360405196879485946306f0ee9760e51b8652326004870152608060248701526024608487019201612182565b9160448401526064830152038183855af19182156117fb576020926117e6575b50604051908152f35b5f6117f091611fb1565b5f6101e052826117dd565b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611877915060203d6020116109ae576109a18183611fb1565b876116a5565b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b34611806576020366003190112611806576004356001600160401b0381168091036118065760207f01326573cfc0bc40a2550923254394ebd7529e3e3301840dfa33cf786aead0c79161195261228b565b5f8051602061282083398151915254600601805467ffffffffffffffff191682179055604051908152a1005b34611806575f366003190112611806575f8051602061282083398151915254600201546040516001600160a01b039091168152602090f35b34611806575f366003190112611806576119ce61228b565b5f8051602061280083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34611806575f366003190112611806576020611a37612112565b6001600160801b0360405191168152f35b34611806575f36600319011261180657611a6061228b565b5f805160206128408339815191525460ff8160401c168015611c4b575b611c3c5768ffffffffffffffffff191668010000000000000002175f80516020612840833981519152555f80516020612820833981519152546001810154600282015460038301546001600160a01b0390811693918116921690611ae3906008016120bf565b906040918251611af38482611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252611b2761228b565b5190205f19810190811161187d578351906020820190815260208252611b4d8583611fb1565b60ff19915190201694855f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f19430143811161187d574086556001860180546001600160a01b03199081166001600160a01b03958616179091556002870180548216968516969096179095556003909501805490941694909116939093179091557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160209190611c0f906122be565b60ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160028152a1005b63f92ee8a960e01b5f5260045ffd5b5060026001600160401b0382161015611a7d565b34611806576020366003190112611806576004356001600160401b038111611806573660238201121561180657611ca0903690602481600401359101611fe6565b611ca861228b565b602081519101205f19810190811161187d57604051906020820190815260208252611cd4604083611fb1565b9051902060ff19165f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a1005b34611806575f366003190112611806575f8051602061282083398151915254600101546040516001600160a01b039091168152602090f35b3461180657602036600319011261180657611d62611f9b565b611d6a61228b565b5f805160206128208339815191525460010180546001600160a01b0319166001600160a01b03909216919091179055005b34611806575f36600319011261180657602060045f80516020612820833981519152540154604051908152f35b34611806575f3660031901126118065760205f805160206128208339815191525454604051908152f35b34611806576040366003190112611806576024356004358115801590611f30575b15611eeb5760095f80516020612820833981519152540190805f528160205260ff60405f20541660038110156118ed57611e8d577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603060248201527f636f64652077697468207375636820696420616c72656164792072657175657360448201526f1d1959081bdc881d985b1a59185d195960821b6064820152608490fd5b60405162461bcd60e51b815260206004820152601c60248201527f626c6f6254784861736820636f756c646e277420626520666f756e64000000006044820152606490fd5b505f491515611e13565b34611806575f366003190112611806576020611a376001600160801b0360065f8051602061282083398151915254015460401c1690565b34611806575f36600319011261180657602090600a5f805160206128208339815191525401548152f35b600435906001600160a01b038216820361180657565b90601f801991011681019081106001600160401b03821117611fd257604052565b634e487b7160e01b5f52604160045260245ffd5b9291926001600160401b038211611fd2576040519161200f601f8201601f191660200184611fb1565b829481845281830111611806578281602093845f960137010152565b9181601f84011215611806578235916001600160401b038311611806576020808501948460051b01011161180657565b9092916001600160401b038411611fd2578360051b91602060405161208282860182611fb1565b809681520192810191821161180657915b81831061209f57505050565b82356001600160a01b038116810361180657815260209283019201612093565b90604051918281549182825260208201905f5260205f20925f5b8181106120f05750506120ee92500383611fb1565b565b84546001600160a01b03168352600194850194879450602090930192016120d9565b5f8051602061282083398151915254600601546001600160401b038116906001600160801b039060401c811616026001600160801b03811690810361187d5790565b906001600160801b03809116911601906001600160801b03821161187d57565b5f19811461187d5760010190565b908060209392818452848401375f828201840152601f01601f1916010190565b6020806120ee928195946040519682889351918291018585015e8201908382015203018085520183611fb1565b3580151581036118065790565b5f8051602061282083398151915254600560088201549101549081810291818304149015171561187d5761270f810180911161187d57612710900490565b6001600160a01b03168015612278575f8051602061280083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f80516020612800833981519152546001600160a01b031633036122ab57565b63118cdaa760e01b5f523360045260245ffd5b5f805160206128208339815191525490600882019081546123ae579091600701905f5b815181101561232057600581901b82016020908101516001600160a01b03165f9081529084905260409020805460ff19166001908117909155016122e1565b5080519291506001600160401b038311611fd257680100000000000000008311611fd2578154838355808410612388575b50602001905f5260205f205f5b83811061236b5750505050565b82516001600160a01b03168183015560209092019160010161235e565b825f528360205f2091820191015b8181106123a35750612351565b5f8155600101612396565b60405162461bcd60e51b815260206004820152602360248201527f70726576696f75732076616c696461746f727320776572656e27742072656d6f6044820152621d995960ea1b6064820152608490fd5b90816020910312611806575180151581036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191813603831361180657565b905f8051602061282083398151915254906124626121dc565b9260405190602082019081526020825261247d604083611fb1565b6124b9603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282611fb1565b5190205f9260070191835b868510156125c2576124fa6124f16124eb6124e48860051b860186612417565b3691611fe6565b856126e3565b9092919261271d565b6001600160a01b03165f9081526020859052604090205460ff16156125875761252290612174565b9385851461253357600101936124c4565b505050509091505b1061254257565b60405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f7567682076616c6964207369676e61747572657300000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606490fd5b9495505050505061253b565b903590601e198136030182121561180657018035906001600160401b03821161180657602001918160051b3603831361180657565b60ff5f805160206128408339815191525460401c161561261f57565b631afcd79f60e31b5f5260045ffd5b905f19430143811161187d57805b612647575b505f9150565b804083810361265857506001925050565b1561266c57801561187d575f19018061263c565b612641565b356001600160a01b03811681036118065790565b356001600160801b03811681036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191606082023603831361180657565b356001600160e01b0319811681036118065790565b81519190604183036127135761270c9250602082015190606060408401519301515f1a9061277d565b9192909190565b50505f9160029190565b60048110156118ed578061272f575050565b600181036127465763f645eedf60e01b5f5260045ffd5b60028103612761575063fce698f760e01b5f5260045260245ffd5b60031461276b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116127f4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156117fb575f516001600160a01b038116156127ea57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212202cea2b458f29799a50b104403a01fafe093b579eb3c99aba1f0e4d9e9661aff164736f6c634300081a0033","sourceMap":"781:16427:81:-:0;;;;;;;8837:64:25;781:16427:81;;;;;;7896:76:25;;-1:-1:-1;;;;;;;;;;;781:16427:81;;7985:34:25;7981:146;;-1:-1:-1;781:16427:81;;;;;;;;;7981:146:25;-1:-1:-1;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;;;8837:64:25;781:16427:81;;;8087:29:25;;781:16427:81;;8087:29:25;7981:146;;;;7896:76;7938:23;;;-1:-1:-1;7938:23:25;;-1:-1:-1;7938:23:25;781:16427:81;;;","linkReferences":{}},"deployedBytecode":{"object":"0x610200806040526004361015610013575f80fd5b5f6101e0525f3560e01c9081627a32e714611f71575080630834fecc14611f3a5780631c149d8a14611df257806328e24b3d14611dc85780632dacfb6914611d9b5780633d43b41814611d49578063444d917214611d115780635686cad514611c5f5780636c2eb35014611a485780636ef25c3a14611a1d578063715018a6146119b657806378ee5dec1461197e5780638028861a146119015780638074b4551461158557806388f50cf01461154a5780638da5cb5b146115135780638febbd59146114c65780639067088e1461147e578063967082261461145257806396a2ddfa14611422578063a6bbbe1c14611372578063c13911e814611326578063ca1e7819146112a9578063d3fd636414611270578063e71731e41461115e578063e97d3eb314610f0f578063ed612f8c14610edf578063edc8722514610eba578063efd81abc14610e8a578063f2fde38b14610e66578063f8453e7c14610b585763fa97ed6d14610181575f80fd5b34610521576040366003190112610521576004356001600160401b038111610521576101b190369060040161202b565b906024356001600160401b038111610521576101d190369060040161202b565b6101e051606060a052909391925b82821015610b3c57600582901b8101359236829003607e19018412156105215760045f805160206128208339815191525401608052608051546020858401013503610af8576102336040858401013561262e565b15610aa7576101e0516101c0526060958285018701955b610256878786016125ce565b90506101c0511015610a125761026e878786016125ce565b9060e0526101c0511015610536576101c05160051b60e051013560c052609e1960e05136030160c0511215610521575f80516020612820833981519152546102bb60c05160e05101612671565b6001600160a01b03165f908152600b82016020526040902054156109b55760206001600160801b0391600360018060a01b0391015416604461030260c05160e05101612671565b610314604060c05160e0510101612685565b60405163a9059cbb60e01b81526001600160a01b0390921660048301529490941660248501526101e05184928391905af1801561052857610989575b5060c05160e0516001600160a01b039161036a9101612671565b166101a0526101e051606061016081905260c05160e0510101610140525b61039b6101405160c05160e05101612699565b9050811015610550576103b76101405160c05160e05101612699565b9061018052811015610536576103d7602060608302610180510101612671565b6040606083026101805101019061047a6103f083612685565b6040519060208201936060870261018051013585526001600160601b03199060601b1660408301526001600160801b03199060801b1660548201526044815261043a606482611fb1565b60206040519384926101605151808461016051018587015e840190838201906101e0518252519283915e01016101e051815203601f198101835282611fb1565b6101605261049b610495602060608502610180510101612671565b91612685565b6101a0513b15610521576040516314503e5160e01b81526101805160608502013560048201526001600160a01b0390921660248301526001600160801b031660448201526101e0516101a0518290606490829084905af1801561052857610506575b50600101610388565b6101e05161051391611fb1565b6101e051610521575f6104fd565b6101e05180fd5b6040513d6101e051823e3d90fd5b634e487b7160e01b6101e05152603260045260246101e051fd5b50909195929394956101e051610100526060610100526101e0515b60c05160e051610580910160808101906125ce565b90508110156108715760c05160e05161059e910160808101906125ce565b821015610536578160051b8101356101205260be1981360301610120511215610521576106906105d5602061012051840101612671565b605461068460346105f3604061012051880101610120518801612417565b93906106066060610120518a0101612685565b61061760a0610120518b01016126ce565b86604051978894602086019a8d6101205101358c526001600160601b03199060601b166040870152868601378301916001600160801b03199060801b16848301526080610120518b010135606483015263ffffffff60e01b16608482015203016014810184520182611fb1565b519020610100516121a2565b6101005261012051810160800135610779576106b3602061012051830101612671565b610120516106c79083016040810190612417565b90916106da606061012051860101612685565b926101a0513b156105215760405163c2df600960e01b8152610120519095013560048601526001600160a01b039091166024850152608060448501526001600160801b039161072e91608486019190612182565b9116606483015281806101e0519203816101e0516101a0515af180156105285761075e575b506001905b0161056b565b6101e05161076b91611fb1565b6101e051610521575f610753565b61078a602061012051830101612671565b906107a2604061012051830101610120518301612417565b6107b3606061012051850101612685565b926107c560a0610120518301016126ce565b926101a0513b156105215760405163c78bde7760e01b81526001600160a01b03909616600487015260a060248701526080926001600160801b039161080e9160a4890191612182565b9416604486015261012051010135606484015263ffffffff60e01b16608483015281806101e0519203816101e0516101a0515af1801561052857610856575b50600190610758565b6101e05161086391611fb1565b6101e051610521575f61084d565b5091909695949392956101a0513b1561052157604051638ea59e1d60e01b8152602060c05160e05101013560048201526101e051816024816101e0516101a0515af180156105285761096e575b5061095d906108d260c05160e05101612671565b6108e4604060c05160e0510101612685565b6101605151602061016051012061010051516020610100510120906040519260208401946001600160601b03199060601b168552602060c05160e05101013560348501526001600160801b03199060801b166054840152606483015260848201526084815261095460a482611fb1565b519020906121a2565b9660016101c051016101c05261024a565b6101e05161097b91611fb1565b6101e051610521575f6108be565b6109a99060203d81116109ae575b6109a18183611fb1565b8101906123ff565b610350565b503d610997565b60405162461bcd60e51b815260206004820152602f60248201527f636f756c646e277420706572666f726d207472616e736974696f6e20666f722060448201526e756e6b6e6f776e2070726f6772616d60881b6064820152608490fd5b9391966001939650610a999195808801359182608051557fd756eca21e02cb0dbde1e44a4d9c6921b5c8aa4668cfa0752784b3dc855bce1e6020604051858152a1602081519101206040805192602084019485526020818c010135828501528a0101356060830152608082015260808152610a8e60a082611fb1565b51902060a0516121a2565b60a0520190929391936101df565b60405162461bcd60e51b815260206004820152602360248201527f616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f696e76616c69642070726576696f757320636f6d6d69746d656e7420686173686044820152fd5b610b51858560a05151602060a0510120612449565b6101e05180f35b346105215760a036600319011261052157610b71611f9b565b602435906001600160a01b038216820361052157604435916001600160a01b038316830361052157606435926001600160a01b0384168403610521576084356001600160401b038111610521573660238201121561052157610bdd90369060248160040135910161205b565b905f805160206128408339815191525460ff8160401c1615946001600160401b03821680159081610e5e575b6001149081610e54575b159081610e4b575b50610e365767ffffffffffffffff1982166001175f8051602061284083398151915255610c5e9186610e0a575b50610c51612603565b610c59612603565b61221a565b6040948551610c6d8782611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256310000000000000000008252610ca161228b565b5190205f198101908111610df0578651906020820190815260208252610cc78883611fb1565b60ff19915190201690815f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc6101e0516101e051a15f19430192438411610df057924082556001820180546001600160a01b03199081166001600160a01b03978816179091556002830180548216948716949094179093556003820180549093169416939093179055611a0a60058301556006919091018054680a000000009502f9006001600160c01b0319909116179055610d90906122be565b610d9b576101e05180f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160018152a180610b51565b634e487b7160e01b6101e05152601160045260246101e051fd5b68ffffffffffffffffff191668010000000000000001175f805160206128408339815191525587610c48565b63f92ee8a960e01b6101e0515260046101e051fd5b90501588610c1b565b303b159150610c13565b879150610c09565b3461052157602036600319011261052157610b51610e82611f9b565b610c5961228b565b34610521576101e05136600319011261052157602060055f80516020612820833981519152540154604051908152f35b34610521576101e051366003190112610521576020610ed76121dc565b604051908152f35b34610521576101e05136600319011261052157602060085f80516020612820833981519152540154604051908152f35b34610521576040366003190112610521576004356001600160401b0381116105215736602382011215610521578060040135906001600160401b038211610521573660248360061b83010111610521576024356001600160401b03811161052157610f7f8391369060040161202b565b5f80516020612820833981519152546101e0519460098201939192909160605b8688101561114d576101e051508760061b840197610fed604460248b01359a0192610fc9846121cf565b60405160208101918d8352151560f81b604082015260218152610954604182611fb1565b98806101e051528760205260ff60406101e0512054166003811015611133576001036110de5761101e6001936121cf565b1561108c577f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960208285936101e051528a825260406101e051206101e051506101e05150600260ff19825416179055600a8a0161107b8154612174565b9055604051908152a25b0196610f9f565b806101e051528760205260406101e0512080546101e0515060ff191690556040519081527f460119a8f69a33ed127de517d5ea464e958ce23ef19e4420a8b92bf780bbc2c960206101e05192a2611085565b60405162461bcd60e51b815260206004820152602760248201527f636f64652073686f756c642062652072657175657374656420666f722076616c60448201526634b230ba34b7b760c91b6064820152608490fd5b634e487b7160e01b6101e05152602160045260246101e051fd5b610b51935060208151910120612449565b34610521576020366003190112610521576004356001600160401b0381116105215761118e90369060040161202b565b61119661228b565b5f80516020612820833981519152546101e0516007820191600801905b81548110156111f3576101e08051839052516020908190208201546001600160a01b03165f9081529084905260409020805460ff191690556001016111b3565b506101e0518154908255915081611249575b61121861121336858761205b565b6122be565b7f144bbc027dc176e94c43b7c1bcff2a8aa58ab434029eec294743cd4ab2e54f516101e0516101e051a16101e05180f35b6101e0515260206101e05120908101905b81811015611205576101e051815560010161125a565b34610521576101e0513660031901126105215760206001600160401b0360065f8051602061282083398151915254015416604051908152f35b34610521576101e051366003190112610521576112d660085f8051602061282083398151915254016120bf565b6040518091602082016020835281518091526020604084019201906101e0515b818110611304575050500390f35b82516001600160a01b03168452859450602093840193909201916001016112f6565b346105215760203660031901126105215760095f8051602061282083398151915254016004356101e0515260205260ff60406101e0512054166040516003821015611133576020918152f35b34610521576020366003190112610521576004356001600160801b03811690818103610521577f9f5e1796f1a0adf311f86170503308a06a16560a7679b7b6da35f4999200d740916020916113c561228b565b5f8051602061282083398151915254600601805477ffffffffffffffffffffffffffffffff00000000000000001916604092831b77ffffffffffffffffffffffffffffffff00000000000000001617905551908152a16101e05180f35b34610521576101e051366003190112610521576020600c5f80516020612820833981519152540154604051908152f35b34610521576101e0513660031901126105215760205f8051602061282083398151915254604051908152f35b3461052157602036600319011261052157611497611f9b565b600b5f8051602061282083398151915254019060018060a01b03165f52602052602060405f2054604051908152f35b34610521576020366003190112610521576114df611f9b565b60075f8051602061282083398151915254019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b34610521576101e051366003190112610521575f80516020612800833981519152546040516001600160a01b039091168152602090f35b34610521576101e051366003190112610521575f8051602061282083398151915254600301546040516001600160a01b039091168152602090f35b6080366003190112611806576044356004356001600160401b0382116118065736602383011215611806578160040135916001600160401b03831161180657366024848301011161180657606435906001600160801b03821693848303611806575f805160206128208339815191525493805f526009850160205260ff60405f20541660038110156118ed5760020361189157611620612112565b600a6001600160801b03821602946001600160801b03861695860361187d5761164c8661165193612154565b612154565b60038601546040516323b872dd60e01b81523260048201523060248201526001600160801b03929092166044830152602090829060649082905f906001600160a01b03165af19081156117fb575f9161185e575b50156118195760028501546e5af43d82803e903d91602b57fd5bf360405160208101908482526024356040820152604081526116e2606082611fb1565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f526effffffffffffffffffffffffffffff199060781b161760205260018060a01b0390603760095ff51694851561180a57600c90865f52600b81016020528260405f2055016117588154612174565b90557f8008ec1d8798725ebfa0f2d128d52e8e717dcba6e0f786557eeee70614b02bf16020604051878152a2833b15611806576117bd945f9360405196879485946306f0ee9760e51b8652326004870152608060248701526024608487019201612182565b9160448401526064830152038183855af19182156117fb576020926117e6575b50604051908152f35b5f6117f091611fb1565b5f6101e052826117dd565b6040513d5f823e3d90fd5b5f80fd5b63b06ebf3d60e01b5f5260045ffd5b60405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f20726574726965766520575661726100000000000000006044820152606490fd5b611877915060203d6020116109ae576109a18183611fb1565b876116a5565b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152602e60248201527f636f6465206d7573742062652076616c696461746564206265666f726520707260448201526d37b3b930b69031b932b0ba34b7b760911b6064820152608490fd5b634e487b7160e01b5f52602160045260245ffd5b34611806576020366003190112611806576004356001600160401b0381168091036118065760207f01326573cfc0bc40a2550923254394ebd7529e3e3301840dfa33cf786aead0c79161195261228b565b5f8051602061282083398151915254600601805467ffffffffffffffff191682179055604051908152a1005b34611806575f366003190112611806575f8051602061282083398151915254600201546040516001600160a01b039091168152602090f35b34611806575f366003190112611806576119ce61228b565b5f8051602061280083398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34611806575f366003190112611806576020611a37612112565b6001600160801b0360405191168152f35b34611806575f36600319011261180657611a6061228b565b5f805160206128408339815191525460ff8160401c168015611c4b575b611c3c5768ffffffffffffffffff191668010000000000000002175f80516020612840833981519152555f80516020612820833981519152546001810154600282015460038301546001600160a01b0390811693918116921690611ae3906008016120bf565b906040918251611af38482611fb1565b6017815260208101907f726f757465722e73746f726167652e526f7574657256320000000000000000008252611b2761228b565b5190205f19810190811161187d578351906020820190815260208252611b4d8583611fb1565b60ff19915190201694855f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a15f19430143811161187d574086556001860180546001600160a01b03199081166001600160a01b03958616179091556002870180548216968516969096179095556003909501805490941694909116939093179091557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160209190611c0f906122be565b60ff60401b195f8051602061284083398151915254165f80516020612840833981519152555160028152a1005b63f92ee8a960e01b5f5260045ffd5b5060026001600160401b0382161015611a7d565b34611806576020366003190112611806576004356001600160401b038111611806573660238201121561180657611ca0903690602481600401359101611fe6565b611ca861228b565b602081519101205f19810190811161187d57604051906020820190815260208252611cd4604083611fb1565b9051902060ff19165f80516020612820833981519152557f5aa0c6c9fb33211212ffe5bef7a4b5d511b82a611e6677052d984e2bcedeaccc5f80a1005b34611806575f366003190112611806575f8051602061282083398151915254600101546040516001600160a01b039091168152602090f35b3461180657602036600319011261180657611d62611f9b565b611d6a61228b565b5f805160206128208339815191525460010180546001600160a01b0319166001600160a01b03909216919091179055005b34611806575f36600319011261180657602060045f80516020612820833981519152540154604051908152f35b34611806575f3660031901126118065760205f805160206128208339815191525454604051908152f35b34611806576040366003190112611806576024356004358115801590611f30575b15611eeb5760095f80516020612820833981519152540190805f528160205260ff60405f20541660038110156118ed57611e8d577f65672eaf4ff8b823ea29ae013fef437d1fa9ed431125263a7a1f0ac49eada39692604092825f52602052825f20600160ff1982541617905582519182526020820152a1005b60405162461bcd60e51b815260206004820152603060248201527f636f64652077697468207375636820696420616c72656164792072657175657360448201526f1d1959081bdc881d985b1a59185d195960821b6064820152608490fd5b60405162461bcd60e51b815260206004820152601c60248201527f626c6f6254784861736820636f756c646e277420626520666f756e64000000006044820152606490fd5b505f491515611e13565b34611806575f366003190112611806576020611a376001600160801b0360065f8051602061282083398151915254015460401c1690565b34611806575f36600319011261180657602090600a5f805160206128208339815191525401548152f35b600435906001600160a01b038216820361180657565b90601f801991011681019081106001600160401b03821117611fd257604052565b634e487b7160e01b5f52604160045260245ffd5b9291926001600160401b038211611fd2576040519161200f601f8201601f191660200184611fb1565b829481845281830111611806578281602093845f960137010152565b9181601f84011215611806578235916001600160401b038311611806576020808501948460051b01011161180657565b9092916001600160401b038411611fd2578360051b91602060405161208282860182611fb1565b809681520192810191821161180657915b81831061209f57505050565b82356001600160a01b038116810361180657815260209283019201612093565b90604051918281549182825260208201905f5260205f20925f5b8181106120f05750506120ee92500383611fb1565b565b84546001600160a01b03168352600194850194879450602090930192016120d9565b5f8051602061282083398151915254600601546001600160401b038116906001600160801b039060401c811616026001600160801b03811690810361187d5790565b906001600160801b03809116911601906001600160801b03821161187d57565b5f19811461187d5760010190565b908060209392818452848401375f828201840152601f01601f1916010190565b6020806120ee928195946040519682889351918291018585015e8201908382015203018085520183611fb1565b3580151581036118065790565b5f8051602061282083398151915254600560088201549101549081810291818304149015171561187d5761270f810180911161187d57612710900490565b6001600160a01b03168015612278575f8051602061280083398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b5f80516020612800833981519152546001600160a01b031633036122ab57565b63118cdaa760e01b5f523360045260245ffd5b5f805160206128208339815191525490600882019081546123ae579091600701905f5b815181101561232057600581901b82016020908101516001600160a01b03165f9081529084905260409020805460ff19166001908117909155016122e1565b5080519291506001600160401b038311611fd257680100000000000000008311611fd2578154838355808410612388575b50602001905f5260205f205f5b83811061236b5750505050565b82516001600160a01b03168183015560209092019160010161235e565b825f528360205f2091820191015b8181106123a35750612351565b5f8155600101612396565b60405162461bcd60e51b815260206004820152602360248201527f70726576696f75732076616c696461746f727320776572656e27742072656d6f6044820152621d995960ea1b6064820152608490fd5b90816020910312611806575180151581036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191813603831361180657565b905f8051602061282083398151915254906124626121dc565b9260405190602082019081526020825261247d604083611fb1565b6124b9603660405180936020820195601960f81b87523060601b60228401525180918484015e81015f838201520301601f198101835282611fb1565b5190205f9260070191835b868510156125c2576124fa6124f16124eb6124e48860051b860186612417565b3691611fe6565b856126e3565b9092919261271d565b6001600160a01b03165f9081526020859052604090205460ff16156125875761252290612174565b9385851461253357600101936124c4565b505050509091505b1061254257565b60405162461bcd60e51b815260206004820152601b60248201527f6e6f7420656e6f7567682076616c6964207369676e61747572657300000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272696e636f7272656374207369676e617475726560681b6044820152606490fd5b9495505050505061253b565b903590601e198136030182121561180657018035906001600160401b03821161180657602001918160051b3603831361180657565b60ff5f805160206128408339815191525460401c161561261f57565b631afcd79f60e31b5f5260045ffd5b905f19430143811161187d57805b612647575b505f9150565b804083810361265857506001925050565b1561266c57801561187d575f19018061263c565b612641565b356001600160a01b03811681036118065790565b356001600160801b03811681036118065790565b903590601e198136030182121561180657018035906001600160401b0382116118065760200191606082023603831361180657565b356001600160e01b0319811681036118065790565b81519190604183036127135761270c9250602082015190606060408401519301515f1a9061277d565b9192909190565b50505f9160029190565b60048110156118ed578061272f575050565b600181036127465763f645eedf60e01b5f5260045ffd5b60028103612761575063fce698f760e01b5f5260045260245ffd5b60031461276b5750565b6335e2f38360e21b5f5260045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116127f4579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156117fb575f516001600160a01b038116156127ea57905f905f90565b505f906001905f90565b5050505f916003919056fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212202cea2b458f29799a50b104403a01fafe093b579eb3c99aba1f0e4d9e9661aff164736f6c634300081a0033","sourceMap":"781:16427:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;;;;9630:35;;781:16427;;;;9730:3;9696:32;;;;;;781:16427;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;11143:30;;;;;781:16427;;;;;11177:34;781:16427;11143:68;781:16427;;11275:49;781:16427;;;;11294:29;781:16427;11275:49;:::i;:::-;781:16427;;;;;11421:13;;781:16427;;;;;11440:27;;;11476:3;11440:27;781:16427;;;;11440:27;:::i;:::-;11436:38;;;;;;;;11538:27;781:16427;;;;11538:27;:::i;:::-;;;;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;12616:23;781:16427;;;;;12616:23;:::i;:::-;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;12600:15;;;781:16427;;;;;;12600:45;781:16427;;;-1:-1:-1;;;;;781:16427:81;12753:18;781:16427;;;;;12753:18;;781:16427;;;12808:23;781:16427;;;;;12808:23;:::i;:::-;12833:30;781:16427;;;;;;12833:30;;:::i;:::-;781:16427;;-1:-1:-1;;;12782:82:81;;-1:-1:-1;;;;;781:16427:81;;;;12782:82;;781:16427;;;;;;;;;;;;;;;;12782:82;;;;;;;;11476:3;-1:-1:-1;781:16427:81;;;;-1:-1:-1;;;;;781:16427:81;12905:23;;781:16427;12905:23;:::i;:::-;781:16427;;;;;;12940:29;;;;781:16427;;;;;13004:27;;;13040:3;13004:27;;;781:16427;;;;;13004:27;:::i;:::-;13000:38;;;;;;;13092:27;;;781:16427;;;;;13092:27;:::i;:::-;;;;781:16427;;;;;13243:22;781:16427;;;;;;;13243:22;;:::i;:::-;781:16427;;;;;;;13267:16;;781:16427;13267:16;;;:::i;:::-;781:16427;;13204:80;781:16427;13204:80;;781:16427;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;13204:80;;;781:16427;13204:80;;:::i;:::-;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13204:80;;781:16427;;;;;;:::i;:::-;13137:161;;13384:16;13360:22;781:16427;;;;;;;13243:22;13360;:::i;:::-;13384:16;;:::i;:::-;13313:88;;;;;;781:16427;;-1:-1:-1;;;13313:88:81;;781:16427;;;;;;;;13313:88;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;13313:88;;781:16427;;;;;;;;13313:88;;;;;;;;13040:3;;781:16427;;12985:13;;13313:88;781:16427;;13313:88;;;:::i;:::-;781:16427;;;;13313:88;;;781:16427;;;;;13313:88;781:16427;;;;;;;;;;;;;;;;;;;;;;;;13000:38;;;;;;;;;781:16427;;13422:27;;781:16427;13422:27;;781:16427;;13517:3;781:16427;;;;13484:24;;781:16427;;13484:24;;;;:::i;:::-;13480:35;;;;;;;781:16427;;;;13579:24;;781:16427;;13484:24;;;13579;:::i;:::-;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;13638:67;15508:27;781:16427;;;;;15508:27;;:::i;:::-;781:16427;15438:291;781:16427;15553:23;781:16427;;;;;15553:23;781:16427;;;;15553:23;:::i;:::-;781:16427;;15594:21;781:16427;;;;;15594:21;;:::i;:::-;15682:33;14840:85;781:16427;;;;15682:33;;:::i;:::-;781:16427;;;15438:291;;;781:16427;15438:291;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;15633:28;781:16427;;;;;;;;;;;;;15438:291;;;;;;;;;;:::i;:::-;781:16427;15415:324;;13638:67;;;:::i;:::-;13621:84;;781:16427;;;;;15633:28;781:16427;;;13845:27;781:16427;;;;;15508:27;13845;:::i;:::-;781:16427;;13874:23;;781:16427;;;15553:23;;;13874;:::i;:::-;781:16427;;13899:21;781:16427;;;;;15594:21;13899;:::i;:::-;13780:158;;;;;;;781:16427;;-1:-1:-1;;;13780:158:81;;781:16427;;;;;;;13780:158;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;:::i;:::-;;;;;;;;;;;13780:158;;781:16427;;;13780:158;;;;;;;;;;13720:556;;781:16427;13720:556;;781:16427;13465:13;;13780:158;781:16427;;13780:158;;;:::i;:::-;781:16427;;;;13780:158;;;13720:556;14020:27;781:16427;;;;;15508:27;14020;:::i;:::-;781:16427;14069:23;781:16427;;;;;15553:23;781:16427;;;;14069:23;:::i;:::-;14114:21;781:16427;;;;;15594:21;14114;:::i;:::-;781:16427;14210:33;14840:85;781:16427;;;;15682:33;14210;:::i;:::-;13977:284;;;;;;;781:16427;;-1:-1:-1;;;13977:284:81;;-1:-1:-1;;;;;781:16427:81;;;;13977:284;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;15189:92;781:16427;;;;:::i;:::-;;;;;;;;;;15633:28;781:16427;;;;;;;;;;;;;;;;;13977:284;;781:16427;;;13977:284;;;;;;;;;;13720:556;;781:16427;13720:556;;;13977:284;781:16427;;13977:284;;;:::i;:::-;781:16427;;;;13977:284;;;13480:35;;;;;;;;;;14296:53;;;;;;781:16427;;;;;14296:53;;781:16427;;;;;;14320:28;781:16427;;14296:53;;781:16427;;;;;;;;14296:53;;;;;;;;;;13460:826;781:16427;11678:47;781:16427;14401:23;781:16427;;;;;14401:23;:::i;:::-;14480:30;781:16427;;;;;;12833:30;14480;:::i;:::-;14524:27;;781:16427;;14524:27;;781:16427;14524:27;14565:25;;781:16427;;14565:25;;781:16427;14565:25;781:16427;;;15189:92;781:16427;15189:92;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;14320:28;781:16427;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;15189:92;;;;;;:::i;:::-;781:16427;15179:103;;11678:47;;:::i;:::-;11476:3;781:16427;11476:3;;781:16427;11476:3;;11421:13;;14296:53;781:16427;;14296:53;;;:::i;:::-;781:16427;;;;14296:53;;;12782:82;;;781:16427;12782:82;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;11436:38;;;;781:16427;11436:38;;;9930:57;11436:38;;781:16427;;;;1072:66;;;;;11819:41;781:16427;;;;;;11819:41;781:16427;;;;;12042:28;781:16427;;;14840:85;781:16427;14840:85;;781:16427;;;;;;;11177:34;781:16427;;;;;;;11294:29;781:16427;;;;;;;;;;14840:85;;;;;;:::i;:::-;781:16427;14830:96;;9930:57;;;:::i;:::-;9905:82;;781:16427;9681:13;;;;;;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9696:32;10063:10;9696:32;;10028:33;;781:16427;;10028:33;;781:16427;10028:33;10063:10;:::i;:::-;781:16427;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;4301:16:25;781:16427:81;-1:-1:-1;;;;;781:16427:81;;4726:16:25;;:34;;;;781:16427:81;4805:1:25;4790:16;:50;;;;781:16427:81;4855:13:25;:30;;;;781:16427:81;4851:91:25;;;-1:-1:-1;;781:16427:81;;4805:1:25;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6961:1:25;;781:16427:81;4979:67:25;;781:16427:81;6893:76:25;;;:::i;:::-;;;:::i;:::-;6961:1;:::i;:::-;781:16427:81;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:24;;:::i;:::-;781:16427:81;2944:27;;-1:-1:-1;;781:16427:81;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;;;;:::i;:::-;781:16427;;;;2915:63;;:89;1072:66;;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;;;;3084:20;781:16427;;1644:12;781:16427;1644:12;;781:16427;;;;1634:27;;1072:66;;4805:1:25;1671:13:81;;781:16427;;-1:-1:-1;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;1704:18;;;781:16427;;;;;;;;;;;;;;1747:18;;;781:16427;;;;;;;;;;;;;1826:4;1790:33;;;1072:66;1868:17;;;;;781:16427;;;-1:-1:-1;;;;;;781:16427:81;;;;;;1962:15;;;:::i;:::-;5066:101:25;;781:16427:81;;;;5066:101:25;781:16427:81;5142:14:25;781:16427:81;-1:-1:-1;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;;;;;;781:16427:81;;4805:1:25;781:16427:81;;5142:14:25;5066:101;;;781:16427:81;;;;;;;;;;;;;;4979:67:25;-1:-1:-1;;781:16427:81;;;-1:-1:-1;;;;;;;;;;;781:16427:81;4979:67:25;;;4851:91;6498:23;;;781:16427:81;;4908:23:25;781:16427:81;;;4908:23:25;4855:30;4872:13;;;4855:30;;;4790:50;4818:4;4810:25;:30;;-1:-1:-1;4790:50:25;;4726:34;;;-1:-1:-1;4726:34:25;;781:16427:81;;;;;;-1:-1:-1;;781:16427:81;;;;2357:1:24;781:16427:81;;:::i;:::-;2303:62:24;;:::i;781:16427:81:-;;;;;;;-1:-1:-1;;781:16427:81;;;;;4918:33;-1:-1:-1;;;;;;;;;;;781:16427:81;4918:33;781:16427;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;5296:21;-1:-1:-1;;;;;;;;;;;781:16427:81;5296:21;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;8978:12;;;;781:16427;;;;;8651:3;8618:31;;;;;;-1:-1:-1;;781:16427:81;;;;;;;8852:55;15915:20;781:16427;;;;15915:20;;;;;;:::i;:::-;781:16427;;;15879:57;;781:16427;;;;;;;;;;;;;15879:57;;;;;;:::i;8852:55::-;781:16427;;;;;;;;;;;;;;;;;;;;;;8978:53;781:16427;;9094:20;781:16427;9094:20;;:::i;:::-;;;;9246:30;781:16427;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;9157:19;781:16427;;;;;;;;9194:26;;;:28;781:16427;;9194:28;:::i;:::-;1072:66;;781:16427;;;;;9246:30;9090:322;781:16427;8603:13;;;9090:322;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;;;9366:31;781:16427;;;9366:31;;9090:322;;781:16427;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;8618:31;9486:10;8618:31;;781:16427;;;;;9452:32;9486:10;:::i;781:16427::-;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;16446:17;;;;16332:21;;;16362:3;781:16427;;16328:32;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;16313:13;;16328:32;-1:-1:-1;781:16427:81;;;;;;;;-1:-1:-1;781:16427:81;;;16308:177;5857:38;781:16427;;;;;:::i;:::-;5857:38;:::i;:::-;5911:22;781:16427;;;;5911:22;781:16427;;;;;-1:-1:-1;;781:16427:81;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;6110:17:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6110:17;781:16427;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;5640:21;-1:-1:-1;;;;;;;;;;;781:16427:81;5640:21;781:16427;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;4382:12;-1:-1:-1;;;;;;;;;;;781:16427:81;4382:12;781:16427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;6689:38;2303:62:24;781:16427:81;2303:62:24;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;6634:21;;781:16427;;-1:-1:-1;;781:16427:81;;;;;;;;;;;;;;6689:38;781:16427;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;4535:20;-1:-1:-1;;;;;;;;;;;781:16427:81;4535:20;781:16427;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;4703:15;-1:-1:-1;;;;;;;;;;;781:16427:81;4703:15;:24;781:16427;;;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;5473:17;-1:-1:-1;;;;;;;;;;;781:16427:81;5473:17;:28;781:16427;;;;;;-1:-1:-1;781:16427:81;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3567:18;;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;7571:12;;;781:16427;;;;;;;;;;;;;;7595:19;7571:43;781:16427;;7699:9;;:::i;:::-;781:16427;-1:-1:-1;;;;;781:16427:81;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;7795:32;;:41;:32;;:::i;:::-;:41;:::i;:::-;781:16427;16079:18;;781:16427;;;-1:-1:-1;;;16072:73:81;;16112:9;781:16427;16072:73;;781:16427;16131:4;781:16427;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;16072:73;;;;;;;781:16427;16072:73;;;781:16427;;;;;7595:19;8078:18;;781:16427;3743:569:36;781:16427:81;;;8108:30;;781:16427;;;;;;;;;;;8108:30;;;781:16427;8108:30;;:::i;:::-;781:16427;8098:41;;3743:569:36;;;;;;;;781:16427:81;3743:569:36;;;;;;;;781:16427:81;3743:569:36;781:16427:81;;;;;3743:569:36;;7571:12:81;781:16427;3743:569:36;781:16427:81;4325:22:36;;;4321:85;;8194:20:81;8151:24;781:16427;;;8151:15;;;781:16427;;;;;;1072:66;8194:20;:22;781:16427;;8194:22;:::i;:::-;1072:66;;8232:31;781:16427;;;;;;8232:31;8274:75;;;;;781:16427;;;;;;;;;;;;;;8274:75;;16112:9;781:16427;8274:75;;781:16427;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8274:75;;;;;;;;;;;781:16427;8274:75;;;781:16427;;;;;;;;8274:75;781:16427;8274:75;;;:::i;:::-;781:16427;;;8274:75;;;;781:16427;;;;;;;;;8274:75;781:16427;;;4321:85:36;4370:25;;;781:16427:81;4370:25:36;781:16427:81;;4370:25:36;781:16427:81;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;16072:73;;;;781:16427;16072:73;781:16427;16072:73;;;;;;;:::i;:::-;;;;781:16427;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;6307:30;2303:62:24;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;6260:17;;781:16427;;-1:-1:-1;;781:16427:81;;;;;;;;;;6307:30;781:16427;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3716:18;;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;3975:40:24;781:16427:81;;3975:40:24;781:16427:81;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;:::i;:::-;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;6431:44:25;;;;781:16427:81;6427:105:25;;-1:-1:-1;;781:16427:81;;;-1:-1:-1;;;;;;;;;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;2129:16;;781:16427;2046:1;2178:21;;781:16427;2232:21;;;781:16427;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;2298:24;;781:16427;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;2303:62:24;;:::i;:::-;781:16427:81;2944:27;;-1:-1:-1;;781:16427:81;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;;;;:::i;:::-;781:16427;;;;2915:63;;:89;1072:66;;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;3084:20;;781:16427;;2469:12;781:16427;2469:12;781:16427;;;;2459:27;1072:66;;6593:4:25;2496:13:81;;781:16427;;-1:-1:-1;;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;2046:1;2529:18;;781:16427;;;;;;;;;;;;;;2232:21;2572:18;;;781:16427;;;;;;;;;;;;;;;;6656:20:25;;781:16427:81;;-1:-1:-1;2630:15:81;;;:::i;:::-;-1:-1:-1;;;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;;;;;;781:16427:81;;2046:1;781:16427;;6656:20:25;781:16427:81;6427:105:25;6498:23;;;781:16427:81;6498:23:25;781:16427:81;;6498:23:25;6431:44;781:16427:81;2046:1;-1:-1:-1;;;;;781:16427:81;;6450:25:25;;6431:44;;781:16427:81;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;781:16427:81;;;;;2944:27;781:16427;;;;;;;;;;;2925:52;781:16427;2925:52;;781:16427;;;;2925:52;;;781:16427;2925:52;;:::i;:::-;781:16427;;2915:63;;-1:-1:-1;;2915:89:81;-1:-1:-1;;;;;;;;;;;1072:66:81;3084:20;781:16427;;3084:20;781:16427;;;;;;;-1:-1:-1;;781:16427:81;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;3860:13;781:16427;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;:::i;:::-;2303:62:24;;:::i;:::-;-1:-1:-1;;;;;;;;;;;781:16427:81;3999:13;;781:16427;;-1:-1:-1;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;3406:30;781:16427;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;6983:15;;;;;:35;;781:16427;;;;7119:12;-1:-1:-1;;;;;;;;;;;781:16427:81;7119:12;781:16427;;;;;;;;;;;;;;;;;;;;;7292:43;781:16427;;;;;;;;;;;7247:29;781:16427;;;;;;;;;;;;;;;;;7292:43;781:16427;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;6983:35;7002:11;781:16427;7002:11;:16;;6983:35;;781:16427;;;;;;-1:-1:-1;;781:16427:81;;;;;;-1:-1:-1;;;;;6471:21:81;-1:-1:-1;;;;;;;;;;;781:16427:81;6471:21;781:16427;;;;6350:149;;781:16427;;;;;;-1:-1:-1;;781:16427:81;;;;;;4211:26;-1:-1:-1;;;;;;;;;;;781:16427:81;4211:26;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;:::o;:::-;;;13204:80;;781:16427;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;781:16427:81;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;13204:80;781:16427;;-1:-1:-1;;781:16427:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;6740:113;-1:-1:-1;;;;;;;;;;;781:16427:81;6110:17;;781:16427;-1:-1:-1;;;;;781:16427:81;;;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;6740:113;:::o;781:16427::-;;-1:-1:-1;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;:::o;:::-;-1:-1:-1;;781:16427:81;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;-1:-1:-1;;781:16427:81;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;4964:204::-;-1:-1:-1;;;;;;;;;;;781:16427:81;4918:33;5296:21;;;781:16427;4918:33;;781:16427;;;;;;;;;;;;;;;;5148:4;781:16427;;;;;;;5156:5;781:16427;;4964:204;:::o;3405:215:24:-;-1:-1:-1;;;;;781:16427:81;3489:22:24;;3485:91;;-1:-1:-1;;;;;;;;;;;781:16427:81;;-1:-1:-1;;;;;;781:16427:81;;;;;;;-1:-1:-1;;;;;781:16427:81;3975:40:24;-1:-1:-1;;3975:40:24;3405:215::o;3485:91::-;3534:31;;;3509:1;3534:31;3509:1;3534:31;781:16427:81;;3509:1:24;3534:31;2658:162;-1:-1:-1;;;;;;;;;;;781:16427:81;-1:-1:-1;;;;;781:16427:81;966:10:29;2717:23:24;2713:101;;2658:162::o;2713:101::-;2763:40;;;-1:-1:-1;2763:40:24;966:10:29;2763:40:24;781:16427:81;;-1:-1:-1;2763:40:24;16536:442:81;-1:-1:-1;;;;;;;;;;;781:16427:81;16670:21;;;;781:16427;;;;;16759:13;;16875:17;;;-1:-1:-1;16803:3:81;781:16427;;16774:27;;;;;781:16427;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;-1:-1:-1;;781:16427:81;;;;;;;;;16759:13;;16774:27;-1:-1:-1;781:16427:81;;;16774:27;-1:-1:-1;;;;;;781:16427:81;;;;;;;;;;;;;;;;;;;16754:167;781:16427;;;;-1:-1:-1;781:16427:81;;-1:-1:-1;781:16427:81;-1:-1:-1;781:16427:81;;;;;;16536:442;;;;:::o;781:16427::-;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;:::o;10123:844::-;;-1:-1:-1;;;;;;;;;;;781:16427:81;10291:21;;;:::i;:::-;781:16427;;;10391:26;;;;781:16427;;;10391:26;;;;781:16427;10391:26;;:::i;:::-;2858:45:56;781:16427:81;;;2858:45:56;;10391:26:81;2858:45:56;;781:16427:81;;;;;;10353:4;781:16427;;;;;;;;;;;;;;;-1:-1:-1;781:16427:81;;;;2858:45:56;;13204:80:81;;2858:45:56;;;;;;:::i;:::-;781:16427:81;2848:56:56;;-1:-1:-1;;10652:17:81;;;-1:-1:-1;10509:3:81;10486:21;;;;;;3915:8:55;3859:27;781:16427:81;;;;;;;;;:::i;:::-;;;;:::i;:::-;3859:27:55;;:::i;:::-;3915:8;;;;;:::i;:::-;-1:-1:-1;;;;;781:16427:81;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;10704:17;;;:::i;:::-;:30;;;;10700:82;;781:16427;;10471:13;;;10700:82;10758:5;;;;;;;10466:416;10900:28;781:16427;;10123:844::o;781:16427::-;;;-1:-1:-1;;;781:16427:81;;10391:26;781:16427;;;;;;;;;;;;;;;;;10648:224;781:16427;;-1:-1:-1;;;781:16427:81;;10391:26;781:16427;;;;;;;;;-1:-1:-1;;;781:16427:81;;;;;;;10486:21;;;;;;;;;;781:16427;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;:::o;7084:141:25:-;781:16427:81;-1:-1:-1;;;;;;;;;;;781:16427:81;;;;7150:18:25;7146:73;;7084:141::o;7146:73::-;7191:17;;;-1:-1:-1;7191:17:25;;-1:-1:-1;7191:17:25;12093:338:81;;781:16427;;12190:12;781:16427;12190:12;781:16427;;;;12173:230;12208:5;;;12173:230;-1:-1:-1;781:16427:81;;-1:-1:-1;12093:338:81:o;12215:3::-;12248:12;;12278:11;;;;;-1:-1:-1;12205:1:81;;-1:-1:-1;;12309:11:81:o;12274:119::-;12345:8;12341:52;;781:16427;;;;-1:-1:-1;;781:16427:81;;12178:28;;12341:52;12373:5;;781:16427;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;-1:-1:-1;;;;;781:16427:81;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;781:16427:81;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;;;;;781:16427:81;;;;;;;:::o;2129:766:55:-;781:16427:81;;;2129:766:55;2276:2;2256:22;;2276:2;;2739:25;2539:180;;;;;;;;;;;;;;;-1:-1:-1;2539:180:55;2739:25;;:::i;:::-;2732:32;;;;;:::o;2252:637::-;2795:83;;2811:1;2795:83;2815:35;2795:83;;:::o;7196:532::-;781:16427:81;;;;;;7282:29:55;;;7327:7;;:::o;7278:444::-;781:16427:81;7378:38:55;;781:16427:81;;7439:23:55;;;7291:20;7439:23;781:16427:81;7291:20:55;7439:23;7374:348;7492:35;7483:44;;7492:35;;7550:46;;;;7291:20;7550:46;781:16427:81;;;7291:20:55;7550:46;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;;;7291:20;7679:32;781:16427:81;;;7291:20:55;7679:32;5140:1530;;;6199:66;6186:79;;6182:164;;781:16427:81;;;;;;-1:-1:-1;781:16427:81;;;;;;;;;;;;;;;;;;;6457:24:55;;;;;;;;;-1:-1:-1;6457:24:55;-1:-1:-1;;;;;781:16427:81;;6495:20:55;6491:113;;6614:49;-1:-1:-1;6614:49:55;-1:-1:-1;5140:1530:55;:::o;6491:113::-;6531:62;-1:-1:-1;6531:62:55;6457:24;6531:62;-1:-1:-1;6531:62:55;:::o;6182:164::-;6281:54;;;6297:1;6281:54;6301:30;6281:54;;:::o","linkReferences":{}},"methodIdentifiers":{"baseFee()":"6ef25c3a","baseWeight()":"d3fd6364","codeState(bytes32)":"c13911e8","commitBlocks((bytes32,bytes32,bytes32,(address,bytes32,uint128,(bytes32,address,uint128)[],(bytes32,address,bytes,uint128,(bytes32,bytes4))[])[])[],bytes[])":"fa97ed6d","commitCodes((bytes32,bool)[],bytes[])":"e97d3eb3","createProgram(bytes32,bytes32,bytes,uint128)":"8074b455","genesisBlockHash()":"28e24b3d","getStorageSlot()":"96708226","initialize(address,address,address,address,address[])":"f8453e7c","lastBlockCommitmentHash()":"2dacfb69","mirror()":"444d9172","mirrorProxy()":"78ee5dec","owner()":"8da5cb5b","programCodeId(address)":"9067088e","programsCount()":"96a2ddfa","reinitialize()":"6c2eb350","renounceOwnership()":"715018a6","requestCodeValidation(bytes32,bytes32)":"1c149d8a","setBaseWeight(uint64)":"8028861a","setMirror(address)":"3d43b418","setStorageSlot(string)":"5686cad5","setValuePerWeight(uint128)":"a6bbbe1c","signingThresholdPercentage()":"efd81abc","transferOwnership(address)":"f2fde38b","updateValidators(address[])":"e71731e4","validatedCodesCount()":"007a32e7","validatorExists(address)":"8febbd59","validators()":"ca1e7819","validatorsCount()":"ed612f8c","validatorsThreshold()":"edc87225","valuePerWeight()":"0834fecc","wrappedVara()":"88f50cf0"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"baseWeight\",\"type\":\"uint64\"}],\"name\":\"BaseWeightChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"BlockCommitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"name\":\"CodeGotValidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"CodeValidationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"ProgramCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StorageSlotChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ValidatorsSetChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"valuePerWeight\",\"type\":\"uint128\"}],\"name\":\"ValuePerWeightChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"baseFee\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"}],\"name\":\"codeState\",\"outputs\":[{\"internalType\":\"enum IRouter.CodeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"prevCommitmentHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"predBlockHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"actorId\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"newStateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"valueToReceive\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct IRouter.ValueClaim[]\",\"name\":\"valueClaims\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"code\",\"type\":\"bytes4\"}],\"internalType\":\"struct IRouter.ReplyDetails\",\"name\":\"replyDetails\",\"type\":\"tuple\"}],\"internalType\":\"struct IRouter.OutgoingMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRouter.StateTransition[]\",\"name\":\"transitions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IRouter.BlockCommitment[]\",\"name\":\"blockCommitmentsArray\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"internalType\":\"struct IRouter.CodeCommitment[]\",\"name\":\"codeCommitmentsArray\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"name\":\"commitCodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint128\",\"name\":\"_value\",\"type\":\"uint128\"}],\"name\":\"createProgram\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"genesisBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageSlot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mirrorProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wrappedVara\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_validatorsKeys\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBlockCommitmentHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirror\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"program\",\"type\":\"address\"}],\"name\":\"programCodeId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"programsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reinitialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"codeId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blobTxHash\",\"type\":\"bytes32\"}],\"name\":\"requestCodeValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_baseWeight\",\"type\":\"uint64\"}],\"name\":\"setBaseWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirror\",\"type\":\"address\"}],\"name\":\"setMirror\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"namespace\",\"type\":\"string\"}],\"name\":\"setStorageSlot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valuePerWeight\",\"type\":\"uint128\"}],\"name\":\"setValuePerWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signingThresholdPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"validatorsAddressArray\",\"type\":\"address[]\"}],\"name\":\"updateValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatedCodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"validatorExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorsThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"valuePerWeight\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrappedVara\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"events\":{\"BaseWeightChanged(uint64)\":{\"details\":\"Emitted when the tx's base weight is changed. NOTE: It's event for USERS: it informs about new value of commission for each message sending. NOTE: It's event for NODES: it requires to update commission in programs execution parameters.\"},\"BlockCommitted(bytes32)\":{\"details\":\"Emitted when a new state transitions are applied. NOTE: It's event for USERS: it informs about new block outcome committed.\"},\"CodeGotValidated(bytes32,bool)\":{\"details\":\"Emitted when a code, previously requested to be validated, gets validated. NOTE: It's event for USERS: it informs about validation results of previously requested code.\"},\"CodeValidationRequested(bytes32,bytes32)\":{\"details\":\"Emitted when a new code validation request submitted. NOTE: It's event for NODES: it requires to download and validate code from blob.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ProgramCreated(address,bytes32)\":{\"details\":\"Emitted when a new program created. NOTE: It's event for USERS: it informs about new program creation and it's availability on Ethereum. NOTE: It's event for NODES: it requires to create associated gear program in local storage.\"},\"StorageSlotChanged()\":{\"details\":\"Emitted when the storage slot is changed. NOTE: It's event for USERS: it informs about router being wiped and all programs and codes deletion. NOTE: It's event for NODES: it requires to clean the local storage.\"},\"ValidatorsSetChanged()\":{\"details\":\"Emitted when the validators set is changed. NOTE: It's event for USERS: it informs about validators rotation. NOTE: It's event for NODES: it requires to update authorities that sign outcomes.\"},\"ValuePerWeightChanged(uint128)\":{\"details\":\"Emitted when the value per executable weight is changed. NOTE: It's event for USERS: it informs about new conversion rate between weight and it's WVara price. NOTE: It's event for NODES: it requires to update conversion rate in programs execution parameters.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"programCodeId(address)\":{\"details\":\"Returns bytes32(0) in case of inexistent program.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Router.sol\":\"Router\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64\",\"dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009\",\"dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323\",\"dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR\"]},\"lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a\",\"dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd\"]},\"lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3\",\"dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58\",\"dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097\",\"dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6\",\"dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087\",\"dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8\",\"dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da\",\"dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047\",\"dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615\",\"dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5\"]},\"src/IMirror.sol\":{\"keccak256\":\"0x36e8acfa5a520ec889894f5b7de13b67277bb406a407f4bf79890df52ac73de5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://85ba277000fe1c7438ad1d79fd2c827a3cc25b5a5a5b1a8087d92017de5fa4d6\",\"dweb:/ipfs/Qmd53H2dYuYw8rBHsReR7K7EahV5e64WpH79BVaKAvzfNw\"]},\"src/IRouter.sol\":{\"keccak256\":\"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde\",\"dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D\"]},\"src/IWrappedVara.sol\":{\"keccak256\":\"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f\",\"dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf\"]},\"src/Router.sol\":{\"keccak256\":\"0x5db40e2574ad57a5d159346d1e4adc1fc3df4c63097345805e89c60553a6ce4e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://951272070e69e13be0cad9d405cd47db9d239b0d9095c4c440560a679910e040\",\"dweb:/ipfs/QmWXwFjEDW7nouNJNXuLic4efxjokeCQ33irYoDyhE7k8p\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ECDSAInvalidSignature"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"type":"error","name":"ECDSAInvalidSignatureLength"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"type":"error","name":"ECDSAInvalidSignatureS"},{"inputs":[],"type":"error","name":"FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"InsufficientBalance"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[{"internalType":"uint64","name":"baseWeight","type":"uint64","indexed":false}],"type":"event","name":"BaseWeightChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":false}],"type":"event","name":"BlockCommitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32","indexed":false},{"internalType":"bool","name":"valid","type":"bool","indexed":true}],"type":"event","name":"CodeGotValidated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":false},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32","indexed":false}],"type":"event","name":"CodeValidationRequested","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"actorId","type":"address","indexed":false},{"internalType":"bytes32","name":"codeId","type":"bytes32","indexed":true}],"type":"event","name":"ProgramCreated","anonymous":false},{"inputs":[],"type":"event","name":"StorageSlotChanged","anonymous":false},{"inputs":[],"type":"event","name":"ValidatorsSetChanged","anonymous":false},{"inputs":[{"internalType":"uint128","name":"valuePerWeight","type":"uint128","indexed":false}],"type":"event","name":"ValuePerWeightChanged","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"baseFee","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"baseWeight","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"}],"stateMutability":"view","type":"function","name":"codeState","outputs":[{"internalType":"enum IRouter.CodeState","name":"","type":"uint8"}]},{"inputs":[{"internalType":"struct IRouter.BlockCommitment[]","name":"blockCommitmentsArray","type":"tuple[]","components":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"prevCommitmentHash","type":"bytes32"},{"internalType":"bytes32","name":"predBlockHash","type":"bytes32"},{"internalType":"struct IRouter.StateTransition[]","name":"transitions","type":"tuple[]","components":[{"internalType":"address","name":"actorId","type":"address"},{"internalType":"bytes32","name":"newStateHash","type":"bytes32"},{"internalType":"uint128","name":"valueToReceive","type":"uint128"},{"internalType":"struct IRouter.ValueClaim[]","name":"valueClaims","type":"tuple[]","components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint128","name":"value","type":"uint128"}]},{"internalType":"struct IRouter.OutgoingMessage[]","name":"messages","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"value","type":"uint128"},{"internalType":"struct IRouter.ReplyDetails","name":"replyDetails","type":"tuple","components":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"bytes4","name":"code","type":"bytes4"}]}]}]}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitBlocks"},{"inputs":[{"internalType":"struct IRouter.CodeCommitment[]","name":"codeCommitmentsArray","type":"tuple[]","components":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"valid","type":"bool"}]},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"commitCodes"},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint128","name":"_value","type":"uint128"}],"stateMutability":"payable","type":"function","name":"createProgram","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"genesisBlockHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStorageSlot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_mirror","type":"address"},{"internalType":"address","name":"_mirrorProxy","type":"address"},{"internalType":"address","name":"_wrappedVara","type":"address"},{"internalType":"address[]","name":"_validatorsKeys","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastBlockCommitmentHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirror","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"mirrorProxy","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"program","type":"address"}],"stateMutability":"view","type":"function","name":"programCodeId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"programsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"reinitialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bytes32","name":"codeId","type":"bytes32"},{"internalType":"bytes32","name":"blobTxHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"requestCodeValidation"},{"inputs":[{"internalType":"uint64","name":"_baseWeight","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setBaseWeight"},{"inputs":[{"internalType":"address","name":"_mirror","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setMirror"},{"inputs":[{"internalType":"string","name":"namespace","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setStorageSlot"},{"inputs":[{"internalType":"uint128","name":"_valuePerWeight","type":"uint128"}],"stateMutability":"nonpayable","type":"function","name":"setValuePerWeight"},{"inputs":[],"stateMutability":"view","type":"function","name":"signingThresholdPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address[]","name":"validatorsAddressArray","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"updateValidators"},{"inputs":[],"stateMutability":"view","type":"function","name":"validatedCodesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"validator","type":"address"}],"stateMutability":"view","type":"function","name":"validatorExists","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"validatorsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"valuePerWeight","outputs":[{"internalType":"uint128","name":"","type":"uint128"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrappedVara","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"constructor":{"custom:oz-upgrades-unsafe-allow":"constructor"},"owner()":{"details":"Returns the address of the current owner."},"programCodeId(address)":{"details":"Returns bytes32(0) in case of inexistent program."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Router.sol":"Router"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/Clones.sol":{"keccak256":"0x4cc853b89072428e406c60c6e8d5280b31f9d99d6caf7b041650e649746513a6","urls":["bzz-raw://38a1bbdb89a8f5d1820a2dcc34b5086a6e199c7a8965007345975b5db8997a64","dweb:/ipfs/QmcN6yJBkoserTqAMpue55HmMCMf7dGJYUbGi8p366HqZq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xee2337af2dc162a973b4be6d3f7c16f06298259e0af48c5470d2839bfa8a22f4","urls":["bzz-raw://30c476b4b2f405c1bb3f0bae15b006d129c80f1bfd9d0f2038160a3bb9745009","dweb:/ipfs/Qmb3VcuDufv6xbHeVgksC4tHpc5gKYVqBEwjEXW72XzSvN"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x88f7b6f070ad1de2bf899da6978ed74b5038eac78c01b7359b92b60c3d965c28","urls":["bzz-raw://c436edb6733a036607c6f17cc590e8ee351363a8cb4c564a98d9a66392c89323","dweb:/ipfs/QmcJvJR2K3EtYcKEXVpQ1WqT6TvAbVem5HR1FirAsqEXFR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0xc452b8c0ab5a57e6ca49c4fbe6aead2460c2f8d60d58bc60af68e559b7ca1179","urls":["bzz-raw://0980b3b9e8cd9d9a0f2ae848f0f36a85158887e6fd961142a13b11299ae7f30a","dweb:/ipfs/QmUrmDji3NR2V3YezV8xHSS3wjeBKq16FL7cHdBCnwLjKd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Panic.sol":{"keccak256":"0x29074fe5a74bb024c57b3570abf6c74d8bceed3438694d470fd0166a3ecd196a","urls":["bzz-raw://f4f8435ccbc56e384f4cc9ac9ff491cf30a82f2beac00e33ccc2cf8af3f77cc3","dweb:/ipfs/QmUKJXxTe6nn1qfgnX8xbnboNNAPUuEmJyGqMZCKNiFBgn"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol":{"keccak256":"0x629828db7f6354641b2bc42f6f6742b07bed39959361f92b781224fd33cfb0c9","urls":["bzz-raw://a2654b69b5d9b42ad4c981875add283a06db8bd02e01c614d4f0d498860d0c58","dweb:/ipfs/QmWE3oD4Ti4UKrZTiA4cxAwprkFTpBYsLRrc62w5Lg16Q8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0xfd29ed7a01e9ef109cc31542ca0f51ba3e793740570b69172ec3d8bfbb1643b4","urls":["bzz-raw://99379e0649be8106d2708a2bde73b5cdaba4505f1001f1586b53788bf971d097","dweb:/ipfs/QmV9cCnvFoVzV2cVDW4Zbs3JQ3ehxBcooQS52taVxR637S"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x686a21b9be2594ccfda3a855270dd8ebc4288b8a9ed84ecd4ef1bca2ea3fc46b","urls":["bzz-raw://7c0bbc37f4d1aaae086d73f13f41b8043a9ad5b07f30a2fd7b8a74ead99b1ef6","dweb:/ipfs/QmZpFyfCCFpbrkNtfHTn18qV7VvptPdoLN82Qu5XtMCci6"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xa548dd62e9e17616ae80a1e7ac7b1447ae377efc27fb9f7b4f4fbf5c0b0a1dfb","urls":["bzz-raw://d27e9ae3e67eb229444cd43d49db5be57c586155fd1d363b3b1f9bb1b7bb0087","dweb:/ipfs/QmT2GFnpXsTWBs8bkeVJtQ4VNX7f3igxwB77JBCr4mDXb3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0x3f1998a2904792ff2a576827876638b4917573186537f878d30b23277a3b8d38","urls":["bzz-raw://a8dfb08ed617c9d874de901e44ac8af7af7b13e7c84000a1da3cdaf6004593e8","dweb:/ipfs/QmPX2hZAvCZJCQNSXcWqhxh3xp6UitwESrw3K2u3aYNqiu"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x2be34e47fc07baed68c4878618a6e13c13243753c3f656ca1b6e05287c5df4ee","urls":["bzz-raw://e0bc7f3ae934c76aae959cf061b9764a6dbb2313c4281944dde278cd418599da","dweb:/ipfs/QmYtYLrwC1nPJd86kVrQFQAGeS3XGmhXjCj25LQGfGkugi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x8cd59334ed58b8884cd1f775afc9400db702e674e5d6a7a438c655b9de788d7e","urls":["bzz-raw://99e62c7de7318f413b6352e3f2704ca23e7725ff144e43c8bd574d12dbf29047","dweb:/ipfs/QmSEXG2rBx1VxU2uFTWdiChjDvA4osEY2mesjmoVeVhHko"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5c8d4114f077f6803bb89b8b07bfa26dfbf8f2001708e4e7fdf1e8d9ddd42f44","urls":["bzz-raw://b66c74efa1f994e3ea467b4165da1575857b29d81bec36e94678fe494ce5c615","dweb:/ipfs/QmeXQFdzSJFmN8UdhxMqQwwUh1U2WEha5NoVLbSg3pCJc5"],"license":"MIT"},"src/IMirror.sol":{"keccak256":"0x36e8acfa5a520ec889894f5b7de13b67277bb406a407f4bf79890df52ac73de5","urls":["bzz-raw://85ba277000fe1c7438ad1d79fd2c827a3cc25b5a5a5b1a8087d92017de5fa4d6","dweb:/ipfs/Qmd53H2dYuYw8rBHsReR7K7EahV5e64WpH79BVaKAvzfNw"],"license":"UNLICENSED"},"src/IRouter.sol":{"keccak256":"0x08b46b2bbacb2eb9e5e0fa28b4d84b458849f496d6a69d0d8b10bc871b8d36b3","urls":["bzz-raw://6baaa7b36e621e835c50eae4a41093320af7d1e6638914f08c75a1eae2517dde","dweb:/ipfs/QmdyiCEzBHnio6yqQYNY7rsu8o8myAJZMDytFqS6rkzC4D"],"license":"UNLICENSED"},"src/IWrappedVara.sol":{"keccak256":"0xfc2f9955b1d8f74a98a087b490a03b86933c423eb58b840f1e3eb4cd58eac175","urls":["bzz-raw://5942f66657786636ddb832587404810bf65fc757e12ddaa07393a0b3f885840f","dweb:/ipfs/QmTEP15EF9zrA7bCj8cesNd8QyUPHM3XgtKJecCUjsA5Jf"],"license":"UNLICENSED"},"src/Router.sol":{"keccak256":"0x5db40e2574ad57a5d159346d1e4adc1fc3df4c63097345805e89c60553a6ce4e","urls":["bzz-raw://951272070e69e13be0cad9d405cd47db9d239b0d9095c4c440560a679910e040","dweb:/ipfs/QmWXwFjEDW7nouNJNXuLic4efxjokeCQ33irYoDyhE7k8p"],"license":"UNLICENSED"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/Router.sol","id":55997,"exportedSymbols":{"Clones":[41121],"ECDSA":[43387],"IERC20":[41906],"IMirror":[53636],"IRouter":[53951],"IWrappedVara":[53962],"MessageHashUtils":[43461],"OwnableUpgradeable":[39024],"ReentrancyGuardTransient":[42400],"Router":[55996],"StorageSlot":[42719]},"nodeType":"SourceUnit","src":"39:17170:81","nodes":[{"id":54379,"nodeType":"PragmaDirective","src":"39:24:81","nodes":[],"literals":["solidity","^","0.8",".26"]},{"id":54381,"nodeType":"ImportDirective","src":"65:74:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol","file":"@openzeppelin/contracts/utils/StorageSlot.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":42720,"symbolAliases":[{"foreign":{"id":54380,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"73:11:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54383,"nodeType":"ImportDirective","src":"140:101:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":39025,"symbolAliases":[{"foreign":{"id":54382,"name":"OwnableUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39024,"src":"148:18:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54385,"nodeType":"ImportDirective","src":"242:64:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/proxy/Clones.sol","file":"@openzeppelin/contracts/proxy/Clones.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":41122,"symbolAliases":[{"foreign":{"id":54384,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41121,"src":"250:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54387,"nodeType":"ImportDirective","src":"307:75:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol","file":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":43388,"symbolAliases":[{"foreign":{"id":54386,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43387,"src":"315:5:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54389,"nodeType":"ImportDirective","src":"383:97:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol","file":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":43462,"symbolAliases":[{"foreign":{"id":54388,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43461,"src":"391:16:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54391,"nodeType":"ImportDirective","src":"481:100:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuardTransient.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuardTransient.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":42401,"symbolAliases":[{"foreign":{"id":54390,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42400,"src":"489:24:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54393,"nodeType":"ImportDirective","src":"582:38:81","nodes":[],"absolutePath":"src/IRouter.sol","file":"./IRouter.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53952,"symbolAliases":[{"foreign":{"id":54392,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53951,"src":"590:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54395,"nodeType":"ImportDirective","src":"621:38:81","nodes":[],"absolutePath":"src/IMirror.sol","file":"./IMirror.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53637,"symbolAliases":[{"foreign":{"id":54394,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"629:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54397,"nodeType":"ImportDirective","src":"660:48:81","nodes":[],"absolutePath":"src/IWrappedVara.sol","file":"./IWrappedVara.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":53963,"symbolAliases":[{"foreign":{"id":54396,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"668:12:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54399,"nodeType":"ImportDirective","src":"709:70:81","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","nameLocation":"-1:-1:-1","scope":55997,"sourceUnit":41907,"symbolAliases":[{"foreign":{"id":54398,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41906,"src":"717:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55996,"nodeType":"ContractDefinition","src":"781:16427:81","nodes":[{"id":54408,"nodeType":"UsingForDirective","src":"860:24:81","nodes":[],"global":false,"libraryName":{"id":54406,"name":"ECDSA","nameLocations":["866:5:81"],"nodeType":"IdentifierPath","referencedDeclaration":43387,"src":"866:5:81"},"typeName":{"id":54407,"name":"bytes32","nodeType":"ElementaryTypeName","src":"876:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"id":54411,"nodeType":"UsingForDirective","src":"889:35:81","nodes":[],"global":false,"libraryName":{"id":54409,"name":"MessageHashUtils","nameLocations":["895:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":43461,"src":"895:16:81"},"typeName":{"id":54410,"name":"address","nodeType":"ElementaryTypeName","src":"916:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":54414,"nodeType":"VariableDeclaration","src":"1032:106:81","nodes":[],"constant":true,"mutability":"constant","name":"SLOT_STORAGE","nameLocation":"1057:12:81","scope":55996,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54412,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1032:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307835633039636131623962383132376134666439663363333834616163353962363631343431653832306531373733333735336666356632653836653165303030","id":54413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1072:66:81","typeDescriptions":{"typeIdentifier":"t_rational_41630078590300661333111585883568696735413380457407274925697692750148467286016_by_1","typeString":"int_const 4163...(69 digits omitted)...6016"},"value":"0x5c09ca1b9b8127a4fd9f3c384aac59b661441e820e17733753ff5f2e86e1e000"},"visibility":"private"},{"id":54422,"nodeType":"FunctionDefinition","src":"1198:53:81","nodes":[],"body":{"id":54421,"nodeType":"Block","src":"1212:39:81","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54418,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39246,"src":"1222:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1222:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54420,"nodeType":"ExpressionStatement","src":"1222:22:81"}]},"documentation":{"id":54415,"nodeType":"StructuredDocumentation","src":"1145:48:81","text":"@custom:oz-upgrades-unsafe-allow constructor"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":54416,"nodeType":"ParameterList","parameters":[],"src":"1209:2:81"},"returnParameters":{"id":54417,"nodeType":"ParameterList","parameters":[],"src":"1212:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54504,"nodeType":"FunctionDefinition","src":"1257:728:81","nodes":[],"body":{"id":54503,"nodeType":"Block","src":"1459:526:81","nodes":[],"statements":[{"expression":{"arguments":[{"id":54439,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54424,"src":"1484:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54438,"name":"__Ownable_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38884,"src":"1469:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":54440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1469:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54441,"nodeType":"ExpressionStatement","src":"1469:28:81"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725631","id":54443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1523:25:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""},"value":"router.storage.RouterV1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ebe34d7458caf9bba83b85ded6e7716871c7d6d7b9aa651344a78a4d0d1eb88b","typeString":"literal_string \"router.storage.RouterV1\""}],"id":54442,"name":"setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54645,"src":"1508:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":54444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54445,"nodeType":"ExpressionStatement","src":"1508:41:81"},{"assignments":[54448],"declarations":[{"constant":false,"id":54448,"mutability":"mutable","name":"router","nameLocation":"1575:6:81","nodeType":"VariableDeclaration","scope":54503,"src":"1559:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54447,"nodeType":"UserDefinedTypeName","pathNode":{"id":54446,"name":"Storage","nameLocations":["1559:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"1559:7:81"},"referencedDeclaration":53684,"src":"1559:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54451,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54449,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"1584:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1584:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1559:38:81"},{"expression":{"id":54461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54452,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1608:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1615:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"1608:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54456,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1644:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":54457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1650:6:81","memberName":"number","nodeType":"MemberAccess","src":"1644:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1659:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1644:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54455,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"1634:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":54460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1634:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1608:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54462,"nodeType":"ExpressionStatement","src":"1608:53:81"},{"expression":{"id":54467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54463,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1671:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54465,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1678:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"1671:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54466,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54426,"src":"1687:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1671:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54468,"nodeType":"ExpressionStatement","src":"1671:23:81"},{"expression":{"id":54473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54469,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1704:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1711:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"1704:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54472,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54428,"src":"1725:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1704:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54474,"nodeType":"ExpressionStatement","src":"1704:33:81"},{"expression":{"id":54479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54475,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1747:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1754:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"1747:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54478,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54430,"src":"1768:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1747:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54480,"nodeType":"ExpressionStatement","src":"1747:33:81"},{"expression":{"id":54485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54481,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1790:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1797:26:81","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":53659,"src":"1790:33:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"36363636","id":54484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1826:4:81","typeDescriptions":{"typeIdentifier":"t_rational_6666_by_1","typeString":"int_const 6666"},"value":"6666"},"src":"1790:40:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54486,"nodeType":"ExpressionStatement","src":"1790:40:81"},{"expression":{"id":54491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54487,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1868:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54489,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1875:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"1868:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"325f3530305f3030305f303030","id":54490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1888:13:81","typeDescriptions":{"typeIdentifier":"t_rational_2500000000_by_1","typeString":"int_const 2500000000"},"value":"2_500_000_000"},"src":"1868:33:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":54492,"nodeType":"ExpressionStatement","src":"1868:33:81"},{"expression":{"id":54497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54493,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54448,"src":"1911:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54495,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1918:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"1911:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"3130","id":54496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1935:2:81","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"1911:26:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":54498,"nodeType":"ExpressionStatement","src":"1911:26:81"},{"expression":{"arguments":[{"id":54500,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54433,"src":"1962:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":54499,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"1947:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1947:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54502,"nodeType":"ExpressionStatement","src":"1947:31:81"}]},"functionSelector":"f8453e7c","implemented":true,"kind":"function","modifiers":[{"id":54436,"kind":"modifierInvocation","modifierName":{"id":54435,"name":"initializer","nameLocations":["1447:11:81"],"nodeType":"IdentifierPath","referencedDeclaration":39132,"src":"1447:11:81"},"nodeType":"ModifierInvocation","src":"1447:11:81"}],"name":"initialize","nameLocation":"1266:10:81","parameters":{"id":54434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54424,"mutability":"mutable","name":"initialOwner","nameLocation":"1294:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1286:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54423,"name":"address","nodeType":"ElementaryTypeName","src":"1286:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54426,"mutability":"mutable","name":"_mirror","nameLocation":"1324:7:81","nodeType":"VariableDeclaration","scope":54504,"src":"1316:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54425,"name":"address","nodeType":"ElementaryTypeName","src":"1316:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54428,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"1349:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1341:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54427,"name":"address","nodeType":"ElementaryTypeName","src":"1341:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54430,"mutability":"mutable","name":"_wrappedVara","nameLocation":"1379:12:81","nodeType":"VariableDeclaration","scope":54504,"src":"1371:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54429,"name":"address","nodeType":"ElementaryTypeName","src":"1371:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54433,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"1418:15:81","nodeType":"VariableDeclaration","scope":54504,"src":"1401:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54431,"name":"address","nodeType":"ElementaryTypeName","src":"1401:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54432,"nodeType":"ArrayTypeName","src":"1401:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1276:163:81"},"returnParameters":{"id":54437,"nodeType":"ParameterList","parameters":[],"src":"1459:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54585,"nodeType":"FunctionDefinition","src":"1991:662:81","nodes":[],"body":{"id":54584,"nodeType":"Block","src":"2049:604:81","nodes":[],"statements":[{"assignments":[54514],"declarations":[{"constant":false,"id":54514,"mutability":"mutable","name":"oldRouter","nameLocation":"2075:9:81","nodeType":"VariableDeclaration","scope":54584,"src":"2059:25:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54513,"nodeType":"UserDefinedTypeName","pathNode":{"id":54512,"name":"Storage","nameLocations":["2059:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"2059:7:81"},"referencedDeclaration":53684,"src":"2059:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54517,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54515,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"2087:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2087:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2059:41:81"},{"assignments":[54519],"declarations":[{"constant":false,"id":54519,"mutability":"mutable","name":"_mirror","nameLocation":"2119:7:81","nodeType":"VariableDeclaration","scope":54584,"src":"2111:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54518,"name":"address","nodeType":"ElementaryTypeName","src":"2111:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54522,"initialValue":{"expression":{"id":54520,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2129:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54521,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2139:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"2129:16:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2111:34:81"},{"assignments":[54524],"declarations":[{"constant":false,"id":54524,"mutability":"mutable","name":"_mirrorProxy","nameLocation":"2163:12:81","nodeType":"VariableDeclaration","scope":54584,"src":"2155:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54523,"name":"address","nodeType":"ElementaryTypeName","src":"2155:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54527,"initialValue":{"expression":{"id":54525,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2178:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2188:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"2178:21:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2155:44:81"},{"assignments":[54529],"declarations":[{"constant":false,"id":54529,"mutability":"mutable","name":"_wrappedVara","nameLocation":"2217:12:81","nodeType":"VariableDeclaration","scope":54584,"src":"2209:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54528,"name":"address","nodeType":"ElementaryTypeName","src":"2209:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54532,"initialValue":{"expression":{"id":54530,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2232:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2242:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"2232:21:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2209:44:81"},{"assignments":[54537],"declarations":[{"constant":false,"id":54537,"mutability":"mutable","name":"_validatorsKeys","nameLocation":"2280:15:81","nodeType":"VariableDeclaration","scope":54584,"src":"2263:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54535,"name":"address","nodeType":"ElementaryTypeName","src":"2263:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54536,"nodeType":"ArrayTypeName","src":"2263:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":54540,"initialValue":{"expression":{"id":54538,"name":"oldRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54514,"src":"2298:9:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2308:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"2298:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2263:59:81"},{"expression":{"arguments":[{"hexValue":"726f757465722e73746f726167652e526f757465725632","id":54542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2348:25:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""},"value":"router.storage.RouterV2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_07554b5a957f065078e703cffe06326f3995e4f57feb37a649312406c8f4f44a","typeString":"literal_string \"router.storage.RouterV2\""}],"id":54541,"name":"setStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54645,"src":"2333:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":54543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2333:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54544,"nodeType":"ExpressionStatement","src":"2333:41:81"},{"assignments":[54547],"declarations":[{"constant":false,"id":54547,"mutability":"mutable","name":"router","nameLocation":"2400:6:81","nodeType":"VariableDeclaration","scope":54584,"src":"2384:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54546,"nodeType":"UserDefinedTypeName","pathNode":{"id":54545,"name":"Storage","nameLocations":["2384:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"2384:7:81"},"referencedDeclaration":53684,"src":"2384:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54550,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54548,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"2409:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2409:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"2384:38:81"},{"expression":{"id":54560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54551,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2433:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2440:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"2433:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":54555,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2469:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":54556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2475:6:81","memberName":"number","nodeType":"MemberAccess","src":"2469:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2484:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2469:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54554,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"2459:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":54559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2459:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2433:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54561,"nodeType":"ExpressionStatement","src":"2433:53:81"},{"expression":{"id":54566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54562,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2496:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2503:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"2496:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54565,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54519,"src":"2512:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2496:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54567,"nodeType":"ExpressionStatement","src":"2496:23:81"},{"expression":{"id":54572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54568,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2529:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2536:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"2529:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54571,"name":"_mirrorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54524,"src":"2550:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2529:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54573,"nodeType":"ExpressionStatement","src":"2529:33:81"},{"expression":{"id":54578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54574,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54547,"src":"2572:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2579:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"2572:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54577,"name":"_wrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54529,"src":"2593:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2572:33:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54579,"nodeType":"ExpressionStatement","src":"2572:33:81"},{"expression":{"arguments":[{"id":54581,"name":"_validatorsKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54537,"src":"2630:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":54580,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"2615:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2615:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54583,"nodeType":"ExpressionStatement","src":"2615:31:81"}]},"functionSelector":"6c2eb350","implemented":true,"kind":"function","modifiers":[{"id":54507,"kind":"modifierInvocation","modifierName":{"id":54506,"name":"onlyOwner","nameLocations":["2022:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"2022:9:81"},"nodeType":"ModifierInvocation","src":"2022:9:81"},{"arguments":[{"hexValue":"32","id":54509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2046:1:81","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":54510,"kind":"modifierInvocation","modifierName":{"id":54508,"name":"reinitializer","nameLocations":["2032:13:81"],"nodeType":"IdentifierPath","referencedDeclaration":39179,"src":"2032:13:81"},"nodeType":"ModifierInvocation","src":"2032:16:81"}],"name":"reinitialize","nameLocation":"2000:12:81","parameters":{"id":54505,"nodeType":"ParameterList","parameters":[],"src":"2012:2:81"},"returnParameters":{"id":54511,"nodeType":"ParameterList","parameters":[],"src":"2049:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54597,"nodeType":"FunctionDefinition","src":"2692:126:81","nodes":[],"body":{"id":54596,"nodeType":"Block","src":"2748:70:81","nodes":[],"statements":[{"expression":{"expression":{"arguments":[{"id":54592,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54414,"src":"2792:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":54590,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"2765:11:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$42719_$","typeString":"type(library StorageSlot)"}},"id":54591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2777:14:81","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":42457,"src":"2765:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$42412_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":54593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2765:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$42412_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":54594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2806:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":42411,"src":"2765:46:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54589,"id":54595,"nodeType":"Return","src":"2758:53:81"}]},"baseFunctions":[53790],"functionSelector":"96708226","implemented":true,"kind":"function","modifiers":[],"name":"getStorageSlot","nameLocation":"2701:14:81","parameters":{"id":54586,"nodeType":"ParameterList","parameters":[],"src":"2715:2:81"},"returnParameters":{"id":54589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54588,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54597,"src":"2739:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54587,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2739:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2738:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54645,"nodeType":"FunctionDefinition","src":"2824:287:81","nodes":[],"body":{"id":54644,"nodeType":"Block","src":"2890:221:81","nodes":[],"statements":[{"assignments":[54605],"declarations":[{"constant":false,"id":54605,"mutability":"mutable","name":"slot","nameLocation":"2908:4:81","nodeType":"VariableDeclaration","scope":54644,"src":"2900:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54604,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2900:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":54631,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":54630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":54614,"name":"namespace","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54599,"src":"2960:9:81","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":54613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2954:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":54612,"name":"bytes","nodeType":"ElementaryTypeName","src":"2954:5:81","typeDescriptions":{}}},"id":54615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2954:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54611,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2944:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2944:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":54610,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2936:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":54609,"name":"uint256","nodeType":"ElementaryTypeName","src":"2936:7:81","typeDescriptions":{}}},"id":54617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2936:36:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":54618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2975:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2936:40:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54607,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2925:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":54608,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2929:6:81","memberName":"encode","nodeType":"MemberAccess","src":"2925:10:81","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":54620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2925:52:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":54606,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2915:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2915:63:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":54629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"2981:23:81","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":54626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2998:4:81","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":54625,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2990:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":54624,"name":"uint256","nodeType":"ElementaryTypeName","src":"2990:7:81","typeDescriptions":{}}},"id":54627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2990:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2982:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":54622,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2982:7:81","typeDescriptions":{}}},"id":54628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2982:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2915:89:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2900:104:81"},{"expression":{"id":54639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":54635,"name":"SLOT_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54414,"src":"3042:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":54632,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42719,"src":"3015:11:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$42719_$","typeString":"type(library StorageSlot)"}},"id":54634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3027:14:81","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":42457,"src":"3015:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$42412_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":54636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3015:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$42412_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":54637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3056:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":42411,"src":"3015:46:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54638,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54605,"src":"3064:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3015:53:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":54640,"nodeType":"ExpressionStatement","src":"3015:53:81"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":54641,"name":"StorageSlotChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53775,"src":"3084:18:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3084:20:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54643,"nodeType":"EmitStatement","src":"3079:25:81"}]},"baseFunctions":[53795],"functionSelector":"5686cad5","implemented":true,"kind":"function","modifiers":[{"id":54602,"kind":"modifierInvocation","modifierName":{"id":54601,"name":"onlyOwner","nameLocations":["2880:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"2880:9:81"},"nodeType":"ModifierInvocation","src":"2880:9:81"}],"name":"setStorageSlot","nameLocation":"2833:14:81","parameters":{"id":54600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54599,"mutability":"mutable","name":"namespace","nameLocation":"2862:9:81","nodeType":"VariableDeclaration","scope":54645,"src":"2848:23:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":54598,"name":"string","nodeType":"ElementaryTypeName","src":"2848:6:81","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2847:25:81"},"returnParameters":{"id":54603,"nodeType":"ParameterList","parameters":[],"src":"2890:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54660,"nodeType":"FunctionDefinition","src":"3117:153:81","nodes":[],"body":{"id":54659,"nodeType":"Block","src":"3175:95:81","nodes":[],"statements":[{"assignments":[54652],"declarations":[{"constant":false,"id":54652,"mutability":"mutable","name":"router","nameLocation":"3201:6:81","nodeType":"VariableDeclaration","scope":54659,"src":"3185:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54651,"nodeType":"UserDefinedTypeName","pathNode":{"id":54650,"name":"Storage","nameLocations":["3185:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3185:7:81"},"referencedDeclaration":53684,"src":"3185:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54655,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54653,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3210:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3210:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3185:38:81"},{"expression":{"expression":{"id":54656,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54652,"src":"3240:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3247:16:81","memberName":"genesisBlockHash","nodeType":"MemberAccess","referencedDeclaration":53649,"src":"3240:23:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54649,"id":54658,"nodeType":"Return","src":"3233:30:81"}]},"baseFunctions":[53800],"functionSelector":"28e24b3d","implemented":true,"kind":"function","modifiers":[],"name":"genesisBlockHash","nameLocation":"3126:16:81","parameters":{"id":54646,"nodeType":"ParameterList","parameters":[],"src":"3142:2:81"},"returnParameters":{"id":54649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54660,"src":"3166:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54647,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3166:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3165:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54675,"nodeType":"FunctionDefinition","src":"3276:167:81","nodes":[],"body":{"id":54674,"nodeType":"Block","src":"3341:102:81","nodes":[],"statements":[{"assignments":[54667],"declarations":[{"constant":false,"id":54667,"mutability":"mutable","name":"router","nameLocation":"3367:6:81","nodeType":"VariableDeclaration","scope":54674,"src":"3351:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54666,"nodeType":"UserDefinedTypeName","pathNode":{"id":54665,"name":"Storage","nameLocations":["3351:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3351:7:81"},"referencedDeclaration":53684,"src":"3351:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54670,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54668,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3376:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3376:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3351:38:81"},{"expression":{"expression":{"id":54671,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54667,"src":"3406:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3413:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"3406:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54664,"id":54673,"nodeType":"Return","src":"3399:37:81"}]},"baseFunctions":[53805],"functionSelector":"2dacfb69","implemented":true,"kind":"function","modifiers":[],"name":"lastBlockCommitmentHash","nameLocation":"3285:23:81","parameters":{"id":54661,"nodeType":"ParameterList","parameters":[],"src":"3308:2:81"},"returnParameters":{"id":54664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54663,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54675,"src":"3332:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54662,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3332:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3331:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54690,"nodeType":"FunctionDefinition","src":"3449:143:81","nodes":[],"body":{"id":54689,"nodeType":"Block","src":"3502:90:81","nodes":[],"statements":[{"assignments":[54682],"declarations":[{"constant":false,"id":54682,"mutability":"mutable","name":"router","nameLocation":"3528:6:81","nodeType":"VariableDeclaration","scope":54689,"src":"3512:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54681,"nodeType":"UserDefinedTypeName","pathNode":{"id":54680,"name":"Storage","nameLocations":["3512:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3512:7:81"},"referencedDeclaration":53684,"src":"3512:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54685,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54683,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3537:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3537:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3512:38:81"},{"expression":{"expression":{"id":54686,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54682,"src":"3567:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3574:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"3567:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54679,"id":54688,"nodeType":"Return","src":"3560:25:81"}]},"baseFunctions":[53810],"functionSelector":"88f50cf0","implemented":true,"kind":"function","modifiers":[],"name":"wrappedVara","nameLocation":"3458:11:81","parameters":{"id":54676,"nodeType":"ParameterList","parameters":[],"src":"3469:2:81"},"returnParameters":{"id":54679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54690,"src":"3493:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54677,"name":"address","nodeType":"ElementaryTypeName","src":"3493:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3492:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54705,"nodeType":"FunctionDefinition","src":"3598:143:81","nodes":[],"body":{"id":54704,"nodeType":"Block","src":"3651:90:81","nodes":[],"statements":[{"assignments":[54697],"declarations":[{"constant":false,"id":54697,"mutability":"mutable","name":"router","nameLocation":"3677:6:81","nodeType":"VariableDeclaration","scope":54704,"src":"3661:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54696,"nodeType":"UserDefinedTypeName","pathNode":{"id":54695,"name":"Storage","nameLocations":["3661:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3661:7:81"},"referencedDeclaration":53684,"src":"3661:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54700,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54698,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3686:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3686:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3661:38:81"},{"expression":{"expression":{"id":54701,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54697,"src":"3716:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54702,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3723:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"3716:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54694,"id":54703,"nodeType":"Return","src":"3709:25:81"}]},"baseFunctions":[53815],"functionSelector":"78ee5dec","implemented":true,"kind":"function","modifiers":[],"name":"mirrorProxy","nameLocation":"3607:11:81","parameters":{"id":54691,"nodeType":"ParameterList","parameters":[],"src":"3618:2:81"},"returnParameters":{"id":54694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54705,"src":"3642:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54692,"name":"address","nodeType":"ElementaryTypeName","src":"3642:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3641:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54720,"nodeType":"FunctionDefinition","src":"3747:133:81","nodes":[],"body":{"id":54719,"nodeType":"Block","src":"3795:85:81","nodes":[],"statements":[{"assignments":[54712],"declarations":[{"constant":false,"id":54712,"mutability":"mutable","name":"router","nameLocation":"3821:6:81","nodeType":"VariableDeclaration","scope":54719,"src":"3805:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54711,"nodeType":"UserDefinedTypeName","pathNode":{"id":54710,"name":"Storage","nameLocations":["3805:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3805:7:81"},"referencedDeclaration":53684,"src":"3805:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54715,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54713,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3830:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3830:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3805:38:81"},{"expression":{"expression":{"id":54716,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54712,"src":"3860:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3867:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"3860:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":54709,"id":54718,"nodeType":"Return","src":"3853:20:81"}]},"baseFunctions":[53820],"functionSelector":"444d9172","implemented":true,"kind":"function","modifiers":[],"name":"mirror","nameLocation":"3756:6:81","parameters":{"id":54706,"nodeType":"ParameterList","parameters":[],"src":"3762:2:81"},"returnParameters":{"id":54709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54720,"src":"3786:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54707,"name":"address","nodeType":"ElementaryTypeName","src":"3786:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3785:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54740,"nodeType":"FunctionDefinition","src":"3886:143:81","nodes":[],"body":{"id":54739,"nodeType":"Block","src":"3941:88:81","nodes":[],"statements":[{"assignments":[54729],"declarations":[{"constant":false,"id":54729,"mutability":"mutable","name":"router","nameLocation":"3967:6:81","nodeType":"VariableDeclaration","scope":54739,"src":"3951:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54728,"nodeType":"UserDefinedTypeName","pathNode":{"id":54727,"name":"Storage","nameLocations":["3951:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"3951:7:81"},"referencedDeclaration":53684,"src":"3951:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54732,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54730,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"3976:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3976:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"3951:38:81"},{"expression":{"id":54737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54733,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54729,"src":"3999:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54735,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4006:6:81","memberName":"mirror","nodeType":"MemberAccess","referencedDeclaration":53651,"src":"3999:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54736,"name":"_mirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54722,"src":"4015:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3999:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54738,"nodeType":"ExpressionStatement","src":"3999:23:81"}]},"baseFunctions":[53825],"functionSelector":"3d43b418","implemented":true,"kind":"function","modifiers":[{"id":54725,"kind":"modifierInvocation","modifierName":{"id":54724,"name":"onlyOwner","nameLocations":["3931:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"3931:9:81"},"nodeType":"ModifierInvocation","src":"3931:9:81"}],"name":"setMirror","nameLocation":"3895:9:81","parameters":{"id":54723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54722,"mutability":"mutable","name":"_mirror","nameLocation":"3913:7:81","nodeType":"VariableDeclaration","scope":54740,"src":"3905:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54721,"name":"address","nodeType":"ElementaryTypeName","src":"3905:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3904:17:81"},"returnParameters":{"id":54726,"nodeType":"ParameterList","parameters":[],"src":"3941:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54755,"nodeType":"FunctionDefinition","src":"4085:159:81","nodes":[],"body":{"id":54754,"nodeType":"Block","src":"4146:98:81","nodes":[],"statements":[{"assignments":[54747],"declarations":[{"constant":false,"id":54747,"mutability":"mutable","name":"router","nameLocation":"4172:6:81","nodeType":"VariableDeclaration","scope":54754,"src":"4156:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54746,"nodeType":"UserDefinedTypeName","pathNode":{"id":54745,"name":"Storage","nameLocations":["4156:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4156:7:81"},"referencedDeclaration":53684,"src":"4156:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54750,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54748,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4181:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4181:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4156:38:81"},{"expression":{"expression":{"id":54751,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54747,"src":"4211:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54752,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4218:19:81","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":53677,"src":"4211:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54744,"id":54753,"nodeType":"Return","src":"4204:33:81"}]},"baseFunctions":[53830],"functionSelector":"007a32e7","implemented":true,"kind":"function","modifiers":[],"name":"validatedCodesCount","nameLocation":"4094:19:81","parameters":{"id":54741,"nodeType":"ParameterList","parameters":[],"src":"4113:2:81"},"returnParameters":{"id":54744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54743,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54755,"src":"4137:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54742,"name":"uint256","nodeType":"ElementaryTypeName","src":"4137:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4136:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54775,"nodeType":"FunctionDefinition","src":"4250:159:81","nodes":[],"body":{"id":54774,"nodeType":"Block","src":"4317:92:81","nodes":[],"statements":[{"assignments":[54765],"declarations":[{"constant":false,"id":54765,"mutability":"mutable","name":"router","nameLocation":"4343:6:81","nodeType":"VariableDeclaration","scope":54774,"src":"4327:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54764,"nodeType":"UserDefinedTypeName","pathNode":{"id":54763,"name":"Storage","nameLocations":["4327:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4327:7:81"},"referencedDeclaration":53684,"src":"4327:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54768,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54766,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4352:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4352:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4327:38:81"},{"expression":{"baseExpression":{"expression":{"id":54769,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54765,"src":"4382:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4389:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"4382:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":54772,"indexExpression":{"id":54771,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54757,"src":"4395:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4382:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"functionReturnParameters":54762,"id":54773,"nodeType":"Return","src":"4375:27:81"}]},"baseFunctions":[53838],"functionSelector":"c13911e8","implemented":true,"kind":"function","modifiers":[],"name":"codeState","nameLocation":"4259:9:81","parameters":{"id":54758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54757,"mutability":"mutable","name":"codeId","nameLocation":"4277:6:81","nodeType":"VariableDeclaration","scope":54775,"src":"4269:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54756,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4269:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4268:16:81"},"returnParameters":{"id":54762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54775,"src":"4306:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"typeName":{"id":54760,"nodeType":"UserDefinedTypeName","pathNode":{"id":54759,"name":"CodeState","nameLocations":["4306:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":53688,"src":"4306:9:81"},"referencedDeclaration":53688,"src":"4306:9:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"visibility":"internal"}],"src":"4305:11:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54790,"nodeType":"FunctionDefinition","src":"4415:147:81","nodes":[],"body":{"id":54789,"nodeType":"Block","src":"4470:92:81","nodes":[],"statements":[{"assignments":[54782],"declarations":[{"constant":false,"id":54782,"mutability":"mutable","name":"router","nameLocation":"4496:6:81","nodeType":"VariableDeclaration","scope":54789,"src":"4480:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54781,"nodeType":"UserDefinedTypeName","pathNode":{"id":54780,"name":"Storage","nameLocations":["4480:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4480:7:81"},"referencedDeclaration":53684,"src":"4480:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54785,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54783,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4505:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4505:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4480:38:81"},{"expression":{"expression":{"id":54786,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54782,"src":"4535:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4542:13:81","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":53683,"src":"4535:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54779,"id":54788,"nodeType":"Return","src":"4528:27:81"}]},"baseFunctions":[53843],"functionSelector":"96a2ddfa","implemented":true,"kind":"function","modifiers":[],"name":"programsCount","nameLocation":"4424:13:81","parameters":{"id":54776,"nodeType":"ParameterList","parameters":[],"src":"4437:2:81"},"returnParameters":{"id":54779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54790,"src":"4461:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54777,"name":"uint256","nodeType":"ElementaryTypeName","src":"4461:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4460:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54809,"nodeType":"FunctionDefinition","src":"4568:166:81","nodes":[],"body":{"id":54808,"nodeType":"Block","src":"4638:96:81","nodes":[],"statements":[{"assignments":[54799],"declarations":[{"constant":false,"id":54799,"mutability":"mutable","name":"router","nameLocation":"4664:6:81","nodeType":"VariableDeclaration","scope":54808,"src":"4648:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54798,"nodeType":"UserDefinedTypeName","pathNode":{"id":54797,"name":"Storage","nameLocations":["4648:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4648:7:81"},"referencedDeclaration":53684,"src":"4648:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54802,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54800,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4673:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4673:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4648:38:81"},{"expression":{"baseExpression":{"expression":{"id":54803,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54799,"src":"4703:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54804,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4710:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"4703:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":54806,"indexExpression":{"id":54805,"name":"program","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54792,"src":"4719:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4703:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":54796,"id":54807,"nodeType":"Return","src":"4696:31:81"}]},"baseFunctions":[53851],"functionSelector":"9067088e","implemented":true,"kind":"function","modifiers":[],"name":"programCodeId","nameLocation":"4577:13:81","parameters":{"id":54793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54792,"mutability":"mutable","name":"program","nameLocation":"4599:7:81","nodeType":"VariableDeclaration","scope":54809,"src":"4591:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54791,"name":"address","nodeType":"ElementaryTypeName","src":"4591:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4590:17:81"},"returnParameters":{"id":54796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54795,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54809,"src":"4629:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54794,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4629:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4628:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54824,"nodeType":"FunctionDefinition","src":"4785:173:81","nodes":[],"body":{"id":54823,"nodeType":"Block","src":"4853:105:81","nodes":[],"statements":[{"assignments":[54816],"declarations":[{"constant":false,"id":54816,"mutability":"mutable","name":"router","nameLocation":"4879:6:81","nodeType":"VariableDeclaration","scope":54823,"src":"4863:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54815,"nodeType":"UserDefinedTypeName","pathNode":{"id":54814,"name":"Storage","nameLocations":["4863:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"4863:7:81"},"referencedDeclaration":53684,"src":"4863:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54819,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54817,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"4888:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4888:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"4863:38:81"},{"expression":{"expression":{"id":54820,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54816,"src":"4918:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4925:26:81","memberName":"signingThresholdPercentage","nodeType":"MemberAccess","referencedDeclaration":53659,"src":"4918:33:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54813,"id":54822,"nodeType":"Return","src":"4911:40:81"}]},"baseFunctions":[53856],"functionSelector":"efd81abc","implemented":true,"kind":"function","modifiers":[],"name":"signingThresholdPercentage","nameLocation":"4794:26:81","parameters":{"id":54810,"nodeType":"ParameterList","parameters":[],"src":"4820:2:81"},"returnParameters":{"id":54813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54812,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54824,"src":"4844:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54811,"name":"uint256","nodeType":"ElementaryTypeName","src":"4844:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4843:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54841,"nodeType":"FunctionDefinition","src":"4964:204:81","nodes":[],"body":{"id":54840,"nodeType":"Block","src":"5025:143:81","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54829,"name":"validatorsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54857,"src":"5097:15:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5097:17:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54831,"name":"signingThresholdPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54824,"src":"5117:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5117:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5097:48:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"39393939","id":54834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5148:4:81","typeDescriptions":{"typeIdentifier":"t_rational_9999_by_1","typeString":"int_const 9999"},"value":"9999"},"src":"5097:55:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":54836,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5096:57:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130303030","id":54837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5156:5:81","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"src":"5096:65:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54828,"id":54839,"nodeType":"Return","src":"5089:72:81"}]},"baseFunctions":[53861],"functionSelector":"edc87225","implemented":true,"kind":"function","modifiers":[],"name":"validatorsThreshold","nameLocation":"4973:19:81","parameters":{"id":54825,"nodeType":"ParameterList","parameters":[],"src":"4992:2:81"},"returnParameters":{"id":54828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54827,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54841,"src":"5016:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54826,"name":"uint256","nodeType":"ElementaryTypeName","src":"5016:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5015:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54857,"nodeType":"FunctionDefinition","src":"5174:157:81","nodes":[],"body":{"id":54856,"nodeType":"Block","src":"5231:100:81","nodes":[],"statements":[{"assignments":[54848],"declarations":[{"constant":false,"id":54848,"mutability":"mutable","name":"router","nameLocation":"5257:6:81","nodeType":"VariableDeclaration","scope":54856,"src":"5241:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54847,"nodeType":"UserDefinedTypeName","pathNode":{"id":54846,"name":"Storage","nameLocations":["5241:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5241:7:81"},"referencedDeclaration":53684,"src":"5241:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54851,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54849,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5266:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5266:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5241:38:81"},{"expression":{"expression":{"expression":{"id":54852,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54848,"src":"5296:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5303:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"5296:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":54854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5318:6:81","memberName":"length","nodeType":"MemberAccess","src":"5296:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54845,"id":54855,"nodeType":"Return","src":"5289:35:81"}]},"baseFunctions":[53866],"functionSelector":"ed612f8c","implemented":true,"kind":"function","modifiers":[],"name":"validatorsCount","nameLocation":"5183:15:81","parameters":{"id":54842,"nodeType":"ParameterList","parameters":[],"src":"5198:2:81"},"returnParameters":{"id":54845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54844,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54857,"src":"5222:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54843,"name":"uint256","nodeType":"ElementaryTypeName","src":"5222:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5221:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54876,"nodeType":"FunctionDefinition","src":"5337:171:81","nodes":[],"body":{"id":54875,"nodeType":"Block","src":"5408:100:81","nodes":[],"statements":[{"assignments":[54866],"declarations":[{"constant":false,"id":54866,"mutability":"mutable","name":"router","nameLocation":"5434:6:81","nodeType":"VariableDeclaration","scope":54875,"src":"5418:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54865,"nodeType":"UserDefinedTypeName","pathNode":{"id":54864,"name":"Storage","nameLocations":["5418:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5418:7:81"},"referencedDeclaration":53684,"src":"5418:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54869,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54867,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5443:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5443:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5418:38:81"},{"expression":{"baseExpression":{"expression":{"id":54870,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54866,"src":"5473:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5480:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"5473:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":54873,"indexExpression":{"id":54872,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54859,"src":"5491:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5473:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":54863,"id":54874,"nodeType":"Return","src":"5466:35:81"}]},"baseFunctions":[53873],"functionSelector":"8febbd59","implemented":true,"kind":"function","modifiers":[],"name":"validatorExists","nameLocation":"5346:15:81","parameters":{"id":54860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54859,"mutability":"mutable","name":"validator","nameLocation":"5370:9:81","nodeType":"VariableDeclaration","scope":54876,"src":"5362:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54858,"name":"address","nodeType":"ElementaryTypeName","src":"5362:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5361:19:81"},"returnParameters":{"id":54863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54862,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54876,"src":"5402:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54861,"name":"bool","nodeType":"ElementaryTypeName","src":"5402:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5401:6:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54892,"nodeType":"FunctionDefinition","src":"5514:154:81","nodes":[],"body":{"id":54891,"nodeType":"Block","src":"5575:93:81","nodes":[],"statements":[{"assignments":[54884],"declarations":[{"constant":false,"id":54884,"mutability":"mutable","name":"router","nameLocation":"5601:6:81","nodeType":"VariableDeclaration","scope":54891,"src":"5585:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54883,"nodeType":"UserDefinedTypeName","pathNode":{"id":54882,"name":"Storage","nameLocations":["5585:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"5585:7:81"},"referencedDeclaration":53684,"src":"5585:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54887,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54885,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"5610:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5610:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"5585:38:81"},{"expression":{"expression":{"id":54888,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54884,"src":"5640:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5647:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"5640:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":54881,"id":54890,"nodeType":"Return","src":"5633:28:81"}]},"baseFunctions":[53879],"functionSelector":"ca1e7819","implemented":true,"kind":"function","modifiers":[],"name":"validators","nameLocation":"5523:10:81","parameters":{"id":54877,"nodeType":"ParameterList","parameters":[],"src":"5533:2:81"},"returnParameters":{"id":54881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54892,"src":"5557:16:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54878,"name":"address","nodeType":"ElementaryTypeName","src":"5557:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54879,"nodeType":"ArrayTypeName","src":"5557:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5556:18:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54911,"nodeType":"FunctionDefinition","src":"5731:209:81","nodes":[],"body":{"id":54910,"nodeType":"Block","src":"5819:121:81","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54900,"name":"_cleanValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55927,"src":"5829:16:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5829:18:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54902,"nodeType":"ExpressionStatement","src":"5829:18:81"},{"expression":{"arguments":[{"id":54904,"name":"validatorsAddressArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54895,"src":"5872:22:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"id":54903,"name":"_setValidators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"5857:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory)"}},"id":54905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5857:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54906,"nodeType":"ExpressionStatement","src":"5857:38:81"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":54907,"name":"ValidatorsSetChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53772,"src":"5911:20:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5911:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54909,"nodeType":"EmitStatement","src":"5906:27:81"}]},"baseFunctions":[53885],"functionSelector":"e71731e4","implemented":true,"kind":"function","modifiers":[{"id":54898,"kind":"modifierInvocation","modifierName":{"id":54897,"name":"onlyOwner","nameLocations":["5809:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"5809:9:81"},"nodeType":"ModifierInvocation","src":"5809:9:81"}],"name":"updateValidators","nameLocation":"5740:16:81","parameters":{"id":54896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54895,"mutability":"mutable","name":"validatorsAddressArray","nameLocation":"5776:22:81","nodeType":"VariableDeclaration","scope":54911,"src":"5757:41:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54893,"name":"address","nodeType":"ElementaryTypeName","src":"5757:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54894,"nodeType":"ArrayTypeName","src":"5757:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5756:43:81"},"returnParameters":{"id":54899,"nodeType":"ParameterList","parameters":[],"src":"5819:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54926,"nodeType":"FunctionDefinition","src":"5994:140:81","nodes":[],"body":{"id":54925,"nodeType":"Block","src":"6045:89:81","nodes":[],"statements":[{"assignments":[54918],"declarations":[{"constant":false,"id":54918,"mutability":"mutable","name":"router","nameLocation":"6071:6:81","nodeType":"VariableDeclaration","scope":54925,"src":"6055:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54917,"nodeType":"UserDefinedTypeName","pathNode":{"id":54916,"name":"Storage","nameLocations":["6055:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6055:7:81"},"referencedDeclaration":53684,"src":"6055:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54921,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54919,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6080:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6080:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6055:38:81"},{"expression":{"expression":{"id":54922,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54918,"src":"6110:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6117:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"6110:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":54915,"id":54924,"nodeType":"Return","src":"6103:24:81"}]},"baseFunctions":[53890],"functionSelector":"d3fd6364","implemented":true,"kind":"function","modifiers":[],"name":"baseWeight","nameLocation":"6003:10:81","parameters":{"id":54912,"nodeType":"ParameterList","parameters":[],"src":"6013:2:81"},"returnParameters":{"id":54915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54926,"src":"6037:6:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":54913,"name":"uint64","nodeType":"ElementaryTypeName","src":"6037:6:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6036:8:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54950,"nodeType":"FunctionDefinition","src":"6140:204:81","nodes":[],"body":{"id":54949,"nodeType":"Block","src":"6202:142:81","nodes":[],"statements":[{"assignments":[54935],"declarations":[{"constant":false,"id":54935,"mutability":"mutable","name":"router","nameLocation":"6228:6:81","nodeType":"VariableDeclaration","scope":54949,"src":"6212:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54934,"nodeType":"UserDefinedTypeName","pathNode":{"id":54933,"name":"Storage","nameLocations":["6212:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6212:7:81"},"referencedDeclaration":53684,"src":"6212:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54938,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54936,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6237:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6237:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6212:38:81"},{"expression":{"id":54943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54939,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54935,"src":"6260:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6267:10:81","memberName":"baseWeight","nodeType":"MemberAccess","referencedDeclaration":53661,"src":"6260:17:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54942,"name":"_baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54928,"src":"6280:11:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"6260:31:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":54944,"nodeType":"ExpressionStatement","src":"6260:31:81"},{"eventCall":{"arguments":[{"id":54946,"name":"_baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54928,"src":"6325:11:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":54945,"name":"BaseWeightChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53780,"src":"6307:17:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint64_$returns$__$","typeString":"function (uint64)"}},"id":54947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6307:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54948,"nodeType":"EmitStatement","src":"6302:35:81"}]},"baseFunctions":[53895],"functionSelector":"8028861a","implemented":true,"kind":"function","modifiers":[{"id":54931,"kind":"modifierInvocation","modifierName":{"id":54930,"name":"onlyOwner","nameLocations":["6192:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"6192:9:81"},"nodeType":"ModifierInvocation","src":"6192:9:81"}],"name":"setBaseWeight","nameLocation":"6149:13:81","parameters":{"id":54929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54928,"mutability":"mutable","name":"_baseWeight","nameLocation":"6170:11:81","nodeType":"VariableDeclaration","scope":54950,"src":"6163:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":54927,"name":"uint64","nodeType":"ElementaryTypeName","src":"6163:6:81","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"6162:20:81"},"returnParameters":{"id":54932,"nodeType":"ParameterList","parameters":[],"src":"6202:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":54965,"nodeType":"FunctionDefinition","src":"6350:149:81","nodes":[],"body":{"id":54964,"nodeType":"Block","src":"6406:93:81","nodes":[],"statements":[{"assignments":[54957],"declarations":[{"constant":false,"id":54957,"mutability":"mutable","name":"router","nameLocation":"6432:6:81","nodeType":"VariableDeclaration","scope":54964,"src":"6416:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54956,"nodeType":"UserDefinedTypeName","pathNode":{"id":54955,"name":"Storage","nameLocations":["6416:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6416:7:81"},"referencedDeclaration":53684,"src":"6416:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54960,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54958,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6441:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6441:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6416:38:81"},{"expression":{"expression":{"id":54961,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"6471:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6478:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"6471:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":54954,"id":54963,"nodeType":"Return","src":"6464:28:81"}]},"baseFunctions":[53900],"functionSelector":"0834fecc","implemented":true,"kind":"function","modifiers":[],"name":"valuePerWeight","nameLocation":"6359:14:81","parameters":{"id":54951,"nodeType":"ParameterList","parameters":[],"src":"6373:2:81"},"returnParameters":{"id":54954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54965,"src":"6397:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54952,"name":"uint128","nodeType":"ElementaryTypeName","src":"6397:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6396:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54989,"nodeType":"FunctionDefinition","src":"6505:229:81","nodes":[],"body":{"id":54988,"nodeType":"Block","src":"6576:158:81","nodes":[],"statements":[{"assignments":[54974],"declarations":[{"constant":false,"id":54974,"mutability":"mutable","name":"router","nameLocation":"6602:6:81","nodeType":"VariableDeclaration","scope":54988,"src":"6586:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":54973,"nodeType":"UserDefinedTypeName","pathNode":{"id":54972,"name":"Storage","nameLocations":["6586:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"6586:7:81"},"referencedDeclaration":53684,"src":"6586:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":54977,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54975,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"6611:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":54976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6611:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"6586:38:81"},{"expression":{"id":54982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":54978,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54974,"src":"6634:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":54980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"6641:14:81","memberName":"valuePerWeight","nodeType":"MemberAccess","referencedDeclaration":53663,"src":"6634:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54981,"name":"_valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"6658:15:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6634:39:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":54983,"nodeType":"ExpressionStatement","src":"6634:39:81"},{"eventCall":{"arguments":[{"id":54985,"name":"_valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"6711:15:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":54984,"name":"ValuePerWeightChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53785,"src":"6689:21:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":54986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6689:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54987,"nodeType":"EmitStatement","src":"6684:43:81"}]},"baseFunctions":[53905],"functionSelector":"a6bbbe1c","implemented":true,"kind":"function","modifiers":[{"id":54970,"kind":"modifierInvocation","modifierName":{"id":54969,"name":"onlyOwner","nameLocations":["6566:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":38919,"src":"6566:9:81"},"nodeType":"ModifierInvocation","src":"6566:9:81"}],"name":"setValuePerWeight","nameLocation":"6514:17:81","parameters":{"id":54968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54967,"mutability":"mutable","name":"_valuePerWeight","nameLocation":"6540:15:81","nodeType":"VariableDeclaration","scope":54989,"src":"6532:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54966,"name":"uint128","nodeType":"ElementaryTypeName","src":"6532:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6531:25:81"},"returnParameters":{"id":54971,"nodeType":"ParameterList","parameters":[],"src":"6576:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55004,"nodeType":"FunctionDefinition","src":"6740:113:81","nodes":[],"body":{"id":55003,"nodeType":"Block","src":"6789:64:81","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54996,"name":"baseWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54926,"src":"6814:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint64_$","typeString":"function () view returns (uint64)"}},"id":54997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6814:12:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":54995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6806:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":54994,"name":"uint128","nodeType":"ElementaryTypeName","src":"6806:7:81","typeDescriptions":{}}},"id":54998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6806:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54999,"name":"valuePerWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54965,"src":"6830:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint128_$","typeString":"function () view returns (uint128)"}},"id":55000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6830:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6806:40:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":54993,"id":55002,"nodeType":"Return","src":"6799:47:81"}]},"baseFunctions":[53910],"functionSelector":"6ef25c3a","implemented":true,"kind":"function","modifiers":[],"name":"baseFee","nameLocation":"6749:7:81","parameters":{"id":54990,"nodeType":"ParameterList","parameters":[],"src":"6756:2:81"},"returnParameters":{"id":54993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55004,"src":"6780:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54991,"name":"uint128","nodeType":"ElementaryTypeName","src":"6780:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6779:9:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55056,"nodeType":"FunctionDefinition","src":"6889:453:81","nodes":[],"body":{"id":55055,"nodeType":"Block","src":"6965:377:81","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":55020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55012,"name":"blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55008,"src":"6983:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6997:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6983:15:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"hexValue":"30","id":55016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7011:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":55015,"name":"blobhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-29,"src":"7002:8:81","typeDescriptions":{"typeIdentifier":"t_function_blobhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":55017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7002:11:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7017:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7002:16:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6983:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"626c6f6254784861736820636f756c646e277420626520666f756e64","id":55021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7020:30:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_944fe86403884466c74284042289853a231d438ed298af2a81bff9b6914f84e1","typeString":"literal_string \"blobTxHash couldn't be found\""},"value":"blobTxHash couldn't be found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_944fe86403884466c74284042289853a231d438ed298af2a81bff9b6914f84e1","typeString":"literal_string \"blobTxHash couldn't be found\""}],"id":55011,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6975:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6975:76:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55023,"nodeType":"ExpressionStatement","src":"6975:76:81"},{"assignments":[55026],"declarations":[{"constant":false,"id":55026,"mutability":"mutable","name":"router","nameLocation":"7078:6:81","nodeType":"VariableDeclaration","scope":55055,"src":"7062:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55025,"nodeType":"UserDefinedTypeName","pathNode":{"id":55024,"name":"Storage","nameLocations":["7062:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"7062:7:81"},"referencedDeclaration":53684,"src":"7062:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55029,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55027,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"7087:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7087:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7062:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55031,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55026,"src":"7119:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7126:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7119:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55034,"indexExpression":{"id":55033,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7132:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7119:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55035,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7143:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7153:7:81","memberName":"Unknown","nodeType":"MemberAccess","referencedDeclaration":53685,"src":"7143:17:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7119:41:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f64652077697468207375636820696420616c726561647920726571756573746564206f722076616c696461746564","id":55038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7162:50:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_86d0efc10a98e1b7506967b99e345a37d8ca52b6f212bb7eaafd6d43a903647b","typeString":"literal_string \"code with such id already requested or validated\""},"value":"code with such id already requested or validated"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_86d0efc10a98e1b7506967b99e345a37d8ca52b6f212bb7eaafd6d43a903647b","typeString":"literal_string \"code with such id already requested or validated\""}],"id":55030,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7111:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7111:102:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55040,"nodeType":"ExpressionStatement","src":"7111:102:81"},{"expression":{"id":55048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55041,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55026,"src":"7224:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7231:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7224:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55045,"indexExpression":{"id":55043,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7237:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7224:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55046,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7247:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7257:19:81","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":53686,"src":"7247:29:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7224:52:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"id":55049,"nodeType":"ExpressionStatement","src":"7224:52:81"},{"eventCall":{"arguments":[{"id":55051,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55006,"src":"7316:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55052,"name":"blobTxHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55008,"src":"7324:10:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55050,"name":"CodeValidationRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53755,"src":"7292:23:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":55053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7292:43:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55054,"nodeType":"EmitStatement","src":"7287:48:81"}]},"baseFunctions":[53917],"functionSelector":"1c149d8a","implemented":true,"kind":"function","modifiers":[],"name":"requestCodeValidation","nameLocation":"6898:21:81","parameters":{"id":55009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55006,"mutability":"mutable","name":"codeId","nameLocation":"6928:6:81","nodeType":"VariableDeclaration","scope":55056,"src":"6920:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55005,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6920:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55008,"mutability":"mutable","name":"blobTxHash","nameLocation":"6944:10:81","nodeType":"VariableDeclaration","scope":55056,"src":"6936:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55007,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6936:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6919:36:81"},"returnParameters":{"id":55010,"nodeType":"ParameterList","parameters":[],"src":"6965:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55156,"nodeType":"FunctionDefinition","src":"7348:1033:81","nodes":[],"body":{"id":55155,"nodeType":"Block","src":"7504:877:81","nodes":[],"statements":[{"assignments":[55071],"declarations":[{"constant":false,"id":55071,"mutability":"mutable","name":"router","nameLocation":"7530:6:81","nodeType":"VariableDeclaration","scope":55155,"src":"7514:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55070,"nodeType":"UserDefinedTypeName","pathNode":{"id":55069,"name":"Storage","nameLocations":["7514:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"7514:7:81"},"referencedDeclaration":53684,"src":"7514:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55074,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55072,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"7539:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7539:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"7514:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55076,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"7571:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7578:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"7571:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55079,"indexExpression":{"id":55078,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"7584:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7571:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55080,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"7595:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7605:9:81","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":53687,"src":"7595:19:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"7571:43:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f6465206d7573742062652076616c696461746564206265666f72652070726f6772616d206372656174696f6e","id":55083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7616:48:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""},"value":"code must be validated before program creation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5148f5f8f63c81848fb75aafb9815f0b7600419fddac60bd483eec7cf08a631","typeString":"literal_string \"code must be validated before program creation\""}],"id":55075,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7563:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7563:102:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55085,"nodeType":"ExpressionStatement","src":"7563:102:81"},{"assignments":[55087],"declarations":[{"constant":false,"id":55087,"mutability":"mutable","name":"baseFeeValue","nameLocation":"7684:12:81","nodeType":"VariableDeclaration","scope":55155,"src":"7676:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55086,"name":"uint128","nodeType":"ElementaryTypeName","src":"7676:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55090,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55088,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55004,"src":"7699:7:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint128_$","typeString":"function () view returns (uint128)"}},"id":55089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7699:9:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7676:32:81"},{"assignments":[55092],"declarations":[{"constant":false,"id":55092,"mutability":"mutable","name":"executableBalance","nameLocation":"7726:17:81","nodeType":"VariableDeclaration","scope":55155,"src":"7718:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55091,"name":"uint128","nodeType":"ElementaryTypeName","src":"7718:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55096,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55093,"name":"baseFeeValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55087,"src":"7746:12:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3130","id":55094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7761:2:81","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"7746:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7718:45:81"},{"assignments":[55098],"declarations":[{"constant":false,"id":55098,"mutability":"mutable","name":"totalValue","nameLocation":"7782:10:81","nodeType":"VariableDeclaration","scope":55155,"src":"7774:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55097,"name":"uint128","nodeType":"ElementaryTypeName","src":"7774:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":55104,"initialValue":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":55101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55099,"name":"baseFeeValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55087,"src":"7795:12:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55100,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55092,"src":"7810:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7795:32:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55102,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55064,"src":"7830:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7795:41:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"7774:62:81"},{"expression":{"arguments":[{"id":55106,"name":"totalValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55098,"src":"7862:10:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":55105,"name":"_retrieveValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55886,"src":"7847:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint128_$returns$__$","typeString":"function (uint128)"}},"id":55107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7847:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55108,"nodeType":"ExpressionStatement","src":"7847:26:81"},{"assignments":[55110],"declarations":[{"constant":false,"id":55110,"mutability":"mutable","name":"actorId","nameLocation":"8042:7:81","nodeType":"VariableDeclaration","scope":55155,"src":"8034:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55109,"name":"address","nodeType":"ElementaryTypeName","src":"8034:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55123,"initialValue":{"arguments":[{"expression":{"id":55113,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8078:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8085:11:81","memberName":"mirrorProxy","nodeType":"MemberAccess","referencedDeclaration":53653,"src":"8078:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":55118,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8125:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55119,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55060,"src":"8133:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55116,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8108:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8112:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"8108:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8108:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55115,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8098:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8098:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55111,"name":"Clones","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41121,"src":"8052:6:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Clones_$41121_$","typeString":"type(library Clones)"}},"id":55112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8059:18:81","memberName":"cloneDeterministic","nodeType":"MemberAccess","referencedDeclaration":41039,"src":"8052:25:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$","typeString":"function (address,bytes32) returns (address)"}},"id":55122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8052:88:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8034:106:81"},{"expression":{"id":55130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55124,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8151:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8158:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"8151:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":55128,"indexExpression":{"id":55126,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8167:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8151:24:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55129,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8178:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8151:33:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55131,"nodeType":"ExpressionStatement","src":"8151:33:81"},{"expression":{"id":55135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8194:22:81","subExpression":{"expression":{"id":55132,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55071,"src":"8194:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8201:13:81","memberName":"programsCount","nodeType":"MemberAccess","referencedDeclaration":53683,"src":"8194:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55136,"nodeType":"ExpressionStatement","src":"8194:22:81"},{"eventCall":{"arguments":[{"id":55138,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8247:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55139,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55058,"src":"8256:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55137,"name":"ProgramCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53769,"src":"8232:14:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$","typeString":"function (address,bytes32)"}},"id":55140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8232:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55141,"nodeType":"EmitStatement","src":"8227:36:81"},{"expression":{"arguments":[{"expression":{"id":55146,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"8303:2:81","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":55147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8306:6:81","memberName":"origin","nodeType":"MemberAccess","src":"8303:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55148,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55062,"src":"8314:7:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":55149,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55064,"src":"8323:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":55150,"name":"executableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55092,"src":"8331:17:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"id":55143,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8282:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55142,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"8274:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$53636_$","typeString":"type(contract IMirror)"}},"id":55144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8274:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8291:11:81","memberName":"initMessage","nodeType":"MemberAccess","referencedDeclaration":53635,"src":"8274:28:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (address,bytes memory,uint128,uint128) external"}},"id":55151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8274:75:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55152,"nodeType":"ExpressionStatement","src":"8274:75:81"},{"expression":{"id":55153,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55110,"src":"8367:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":55068,"id":55154,"nodeType":"Return","src":"8360:14:81"}]},"baseFunctions":[53930],"functionSelector":"8074b455","implemented":true,"kind":"function","modifiers":[],"name":"createProgram","nameLocation":"7357:13:81","parameters":{"id":55065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55058,"mutability":"mutable","name":"codeId","nameLocation":"7379:6:81","nodeType":"VariableDeclaration","scope":55156,"src":"7371:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55057,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7371:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55060,"mutability":"mutable","name":"salt","nameLocation":"7395:4:81","nodeType":"VariableDeclaration","scope":55156,"src":"7387:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55059,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7387:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55062,"mutability":"mutable","name":"payload","nameLocation":"7416:7:81","nodeType":"VariableDeclaration","scope":55156,"src":"7401:22:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":55061,"name":"bytes","nodeType":"ElementaryTypeName","src":"7401:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":55064,"mutability":"mutable","name":"_value","nameLocation":"7433:6:81","nodeType":"VariableDeclaration","scope":55156,"src":"7425:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55063,"name":"uint128","nodeType":"ElementaryTypeName","src":"7425:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7370:70:81"},"returnParameters":{"id":55068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55156,"src":"7491:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55066,"name":"address","nodeType":"ElementaryTypeName","src":"7491:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7490:9:81"},"scope":55996,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":55269,"nodeType":"FunctionDefinition","src":"8387:1117:81","nodes":[],"body":{"id":55268,"nodeType":"Block","src":"8494:1010:81","nodes":[],"statements":[{"assignments":[55168],"declarations":[{"constant":false,"id":55168,"mutability":"mutable","name":"router","nameLocation":"8520:6:81","nodeType":"VariableDeclaration","scope":55268,"src":"8504:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55167,"nodeType":"UserDefinedTypeName","pathNode":{"id":55166,"name":"Storage","nameLocations":["8504:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"8504:7:81"},"referencedDeclaration":53684,"src":"8504:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55171,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55169,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"8529:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8529:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"8504:38:81"},{"assignments":[55173],"declarations":[{"constant":false,"id":55173,"mutability":"mutable","name":"codeCommetmentsHashes","nameLocation":"8566:21:81","nodeType":"VariableDeclaration","scope":55268,"src":"8553:34:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55172,"name":"bytes","nodeType":"ElementaryTypeName","src":"8553:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55174,"nodeType":"VariableDeclarationStatement","src":"8553:34:81"},{"body":{"id":55259,"nodeType":"Block","src":"8656:766:81","statements":[{"assignments":[55188],"declarations":[{"constant":false,"id":55188,"mutability":"mutable","name":"codeCommitment","nameLocation":"8694:14:81","nodeType":"VariableDeclaration","scope":55259,"src":"8670:38:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment"},"typeName":{"id":55187,"nodeType":"UserDefinedTypeName","pathNode":{"id":55186,"name":"CodeCommitment","nameLocations":["8670:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"8670:14:81"},"referencedDeclaration":53693,"src":"8670:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"visibility":"internal"}],"id":55192,"initialValue":{"baseExpression":{"id":55189,"name":"codeCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55160,"src":"8711:20:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata[] calldata"}},"id":55191,"indexExpression":{"id":55190,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8732:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8711:23:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"8670:64:81"},{"assignments":[55194],"declarations":[{"constant":false,"id":55194,"mutability":"mutable","name":"codeCommitmentHash","nameLocation":"8757:18:81","nodeType":"VariableDeclaration","scope":55259,"src":"8749:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55193,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8749:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55198,"initialValue":{"arguments":[{"id":55196,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"8798:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}],"id":55195,"name":"_codeCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55853,"src":"8778:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_CodeCommitment_$53693_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.CodeCommitment calldata) pure returns (bytes32)"}},"id":55197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8778:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8749:64:81"},{"expression":{"id":55206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55199,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"8828:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55203,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"8865:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55204,"name":"codeCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55194,"src":"8888:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8852:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55200,"name":"bytes","nodeType":"ElementaryTypeName","src":"8852:5:81","typeDescriptions":{}}},"id":55202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8858:6:81","memberName":"concat","nodeType":"MemberAccess","src":"8852:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8852:55:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"8828:79:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55207,"nodeType":"ExpressionStatement","src":"8828:79:81"},{"assignments":[55209],"declarations":[{"constant":false,"id":55209,"mutability":"mutable","name":"codeId","nameLocation":"8930:6:81","nodeType":"VariableDeclaration","scope":55259,"src":"8922:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55208,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8922:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55212,"initialValue":{"expression":{"id":55210,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"8939:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8954:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53690,"src":"8939:17:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8922:34:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"},"id":55220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55214,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"8978:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8985:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"8978:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55217,"indexExpression":{"id":55216,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"8991:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8978:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55218,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"9002:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55219,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9012:19:81","memberName":"ValidationRequested","nodeType":"MemberAccess","referencedDeclaration":53686,"src":"9002:29:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"8978:53:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f64652073686f756c642062652072657175657374656420666f722076616c69646174696f6e","id":55221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9033:41:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f0f0146c5c6578abd878317fc7dbe7872a552fba3ce3a30a1e42dfd172e27f7","typeString":"literal_string \"code should be requested for validation\""},"value":"code should be requested for validation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9f0f0146c5c6578abd878317fc7dbe7872a552fba3ce3a30a1e42dfd172e27f7","typeString":"literal_string \"code should be requested for validation\""}],"id":55213,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8970:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8970:105:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55223,"nodeType":"ExpressionStatement","src":"8970:105:81"},{"condition":{"expression":{"id":55224,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"9094:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9109:5:81","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":53692,"src":"9094:20:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55257,"nodeType":"Block","src":"9297:115:81","statements":[{"expression":{"id":55250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9315:27:81","subExpression":{"baseExpression":{"expression":{"id":55246,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9322:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9329:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"9322:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55249,"indexExpression":{"id":55248,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9335:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9322:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55251,"nodeType":"ExpressionStatement","src":"9315:27:81"},{"eventCall":{"arguments":[{"id":55253,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9383:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"66616c7365","id":55254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9391:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":55252,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53762,"src":"9366:16:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":55255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9366:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55256,"nodeType":"EmitStatement","src":"9361:36:81"}]},"id":55258,"nodeType":"IfStatement","src":"9090:322:81","trueBody":{"id":55245,"nodeType":"Block","src":"9116:175:81","statements":[{"expression":{"id":55233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55226,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9134:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9141:5:81","memberName":"codes","nodeType":"MemberAccess","referencedDeclaration":53675,"src":"9134:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_CodeState_$53688_$","typeString":"mapping(bytes32 => enum IRouter.CodeState)"}},"id":55230,"indexExpression":{"id":55228,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9147:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9134:20:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55231,"name":"CodeState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53688,"src":"9157:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_CodeState_$53688_$","typeString":"type(enum IRouter.CodeState)"}},"id":55232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9167:9:81","memberName":"Validated","nodeType":"MemberAccess","referencedDeclaration":53687,"src":"9157:19:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"src":"9134:42:81","typeDescriptions":{"typeIdentifier":"t_enum$_CodeState_$53688","typeString":"enum IRouter.CodeState"}},"id":55234,"nodeType":"ExpressionStatement","src":"9134:42:81"},{"expression":{"id":55238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9194:28:81","subExpression":{"expression":{"id":55235,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55168,"src":"9194:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"9201:19:81","memberName":"validatedCodesCount","nodeType":"MemberAccess","referencedDeclaration":53677,"src":"9194:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55239,"nodeType":"ExpressionStatement","src":"9194:28:81"},{"eventCall":{"arguments":[{"id":55241,"name":"codeId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55209,"src":"9263:6:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":55242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9271:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":55240,"name":"CodeGotValidated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53762,"src":"9246:16:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bool_$returns$__$","typeString":"function (bytes32,bool)"}},"id":55243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9246:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55244,"nodeType":"EmitStatement","src":"9241:35:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55179,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8618:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55180,"name":"codeCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55160,"src":"8622:20:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata[] calldata"}},"id":55181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8643:6:81","memberName":"length","nodeType":"MemberAccess","src":"8622:27:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8618:31:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55260,"initializationExpression":{"assignments":[55176],"declarations":[{"constant":false,"id":55176,"mutability":"mutable","name":"i","nameLocation":"8611:1:81","nodeType":"VariableDeclaration","scope":55260,"src":"8603:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55175,"name":"uint256","nodeType":"ElementaryTypeName","src":"8603:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55178,"initialValue":{"hexValue":"30","id":55177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8615:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8603:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8651:3:81","subExpression":{"id":55183,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55176,"src":"8651:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55185,"nodeType":"ExpressionStatement","src":"8651:3:81"},"nodeType":"ForStatement","src":"8598:824:81"},{"expression":{"arguments":[{"arguments":[{"id":55263,"name":"codeCommetmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"9462:21:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55262,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"9452:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9452:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55265,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55163,"src":"9486:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":55261,"name":"_validateSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"9432:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes calldata[] calldata) view"}},"id":55266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9432:65:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55267,"nodeType":"ExpressionStatement","src":"9432:65:81"}]},"baseFunctions":[53940],"functionSelector":"e97d3eb3","implemented":true,"kind":"function","modifiers":[],"name":"commitCodes","nameLocation":"8396:11:81","parameters":{"id":55164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55160,"mutability":"mutable","name":"codeCommitmentsArray","nameLocation":"8434:20:81","nodeType":"VariableDeclaration","scope":55269,"src":"8408:46:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.CodeCommitment[]"},"typeName":{"baseType":{"id":55158,"nodeType":"UserDefinedTypeName","pathNode":{"id":55157,"name":"CodeCommitment","nameLocations":["8408:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"8408:14:81"},"referencedDeclaration":53693,"src":"8408:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"id":55159,"nodeType":"ArrayTypeName","src":"8408:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_CodeCommitment_$53693_storage_$dyn_storage_ptr","typeString":"struct IRouter.CodeCommitment[]"}},"visibility":"internal"},{"constant":false,"id":55163,"mutability":"mutable","name":"signatures","nameLocation":"8473:10:81","nodeType":"VariableDeclaration","scope":55269,"src":"8456:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55161,"name":"bytes","nodeType":"ElementaryTypeName","src":"8456:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55162,"nodeType":"ArrayTypeName","src":"8456:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"8407:77:81"},"returnParameters":{"id":55165,"nodeType":"ParameterList","parameters":[],"src":"8494:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55325,"nodeType":"FunctionDefinition","src":"9510:571:81","nodes":[],"body":{"id":55324,"nodeType":"Block","src":"9620:461:81","nodes":[],"statements":[{"assignments":[55280],"declarations":[{"constant":false,"id":55280,"mutability":"mutable","name":"blockCommitmentsHashes","nameLocation":"9643:22:81","nodeType":"VariableDeclaration","scope":55324,"src":"9630:35:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55279,"name":"bytes","nodeType":"ElementaryTypeName","src":"9630:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55281,"nodeType":"VariableDeclarationStatement","src":"9630:35:81"},{"body":{"id":55315,"nodeType":"Block","src":"9735:263:81","statements":[{"assignments":[55295],"declarations":[{"constant":false,"id":55295,"mutability":"mutable","name":"blockCommitment","nameLocation":"9774:15:81","nodeType":"VariableDeclaration","scope":55315,"src":"9749:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment"},"typeName":{"id":55294,"nodeType":"UserDefinedTypeName","pathNode":{"id":55293,"name":"BlockCommitment","nameLocations":["9749:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"9749:15:81"},"referencedDeclaration":53704,"src":"9749:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"visibility":"internal"}],"id":55299,"initialValue":{"baseExpression":{"id":55296,"name":"blockCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55273,"src":"9792:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata[] calldata"}},"id":55298,"indexExpression":{"id":55297,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9814:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9792:24:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"nodeType":"VariableDeclarationStatement","src":"9749:67:81"},{"assignments":[55301],"declarations":[{"constant":false,"id":55301,"mutability":"mutable","name":"blockCommitmentHash","nameLocation":"9839:19:81","nodeType":"VariableDeclaration","scope":55315,"src":"9831:27:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55300,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9831:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55305,"initialValue":{"arguments":[{"id":55303,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55295,"src":"9874:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}],"id":55302,"name":"_commitBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55510,"src":"9861:12:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_BlockCommitment_$53704_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.BlockCommitment calldata) returns (bytes32)"}},"id":55304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9861:29:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9831:59:81"},{"expression":{"id":55313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55306,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"9905:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55310,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"9943:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55311,"name":"blockCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55301,"src":"9967:19:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55308,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9930:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55307,"name":"bytes","nodeType":"ElementaryTypeName","src":"9930:5:81","typeDescriptions":{}}},"id":55309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9936:6:81","memberName":"concat","nodeType":"MemberAccess","src":"9930:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9930:57:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"9905:82:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55314,"nodeType":"ExpressionStatement","src":"9905:82:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55286,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9696:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55287,"name":"blockCommitmentsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55273,"src":"9700:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata[] calldata"}},"id":55288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9722:6:81","memberName":"length","nodeType":"MemberAccess","src":"9700:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9696:32:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55316,"initializationExpression":{"assignments":[55283],"declarations":[{"constant":false,"id":55283,"mutability":"mutable","name":"i","nameLocation":"9689:1:81","nodeType":"VariableDeclaration","scope":55316,"src":"9681:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55282,"name":"uint256","nodeType":"ElementaryTypeName","src":"9681:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55285,"initialValue":{"hexValue":"30","id":55284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9693:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9681:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9730:3:81","subExpression":{"id":55290,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55283,"src":"9730:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55292,"nodeType":"ExpressionStatement","src":"9730:3:81"},"nodeType":"ForStatement","src":"9676:322:81"},{"expression":{"arguments":[{"arguments":[{"id":55319,"name":"blockCommitmentsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55280,"src":"10038:22:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55318,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10028:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10028:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55321,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55276,"src":"10063:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":55317,"name":"_validateSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"10008:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$","typeString":"function (bytes32,bytes calldata[] calldata) view"}},"id":55322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10008:66:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55323,"nodeType":"ExpressionStatement","src":"10008:66:81"}]},"baseFunctions":[53950],"functionSelector":"fa97ed6d","implemented":true,"kind":"function","modifiers":[],"name":"commitBlocks","nameLocation":"9519:12:81","parameters":{"id":55277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55273,"mutability":"mutable","name":"blockCommitmentsArray","nameLocation":"9559:21:81","nodeType":"VariableDeclaration","scope":55325,"src":"9532:48:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.BlockCommitment[]"},"typeName":{"baseType":{"id":55271,"nodeType":"UserDefinedTypeName","pathNode":{"id":55270,"name":"BlockCommitment","nameLocations":["9532:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"9532:15:81"},"referencedDeclaration":53704,"src":"9532:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"id":55272,"nodeType":"ArrayTypeName","src":"9532:17:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$53704_storage_$dyn_storage_ptr","typeString":"struct IRouter.BlockCommitment[]"}},"visibility":"internal"},{"constant":false,"id":55276,"mutability":"mutable","name":"signatures","nameLocation":"9599:10:81","nodeType":"VariableDeclaration","scope":55325,"src":"9582:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55274,"name":"bytes","nodeType":"ElementaryTypeName","src":"9582:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55275,"nodeType":"ArrayTypeName","src":"9582:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"9531:79:81"},"returnParameters":{"id":55278,"nodeType":"ParameterList","parameters":[],"src":"9620:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55414,"nodeType":"FunctionDefinition","src":"10123:844:81","nodes":[],"body":{"id":55413,"nodeType":"Block","src":"10212:755:81","nodes":[],"statements":[{"assignments":[55335],"declarations":[{"constant":false,"id":55335,"mutability":"mutable","name":"router","nameLocation":"10238:6:81","nodeType":"VariableDeclaration","scope":55413,"src":"10222:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55334,"nodeType":"UserDefinedTypeName","pathNode":{"id":55333,"name":"Storage","nameLocations":["10222:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"10222:7:81"},"referencedDeclaration":53684,"src":"10222:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55338,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55336,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"10247:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10247:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"10222:38:81"},{"assignments":[55340],"declarations":[{"constant":false,"id":55340,"mutability":"mutable","name":"threshold","nameLocation":"10279:9:81","nodeType":"VariableDeclaration","scope":55413,"src":"10271:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55339,"name":"uint256","nodeType":"ElementaryTypeName","src":"10271:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55343,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55341,"name":"validatorsThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54841,"src":"10291:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":55342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10291:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10271:41:81"},{"assignments":[55345],"declarations":[{"constant":false,"id":55345,"mutability":"mutable","name":"messageHash","nameLocation":"10331:11:81","nodeType":"VariableDeclaration","scope":55413,"src":"10323:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55344,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10323:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55356,"initialValue":{"arguments":[{"arguments":[{"id":55353,"name":"dataHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55327,"src":"10408:8:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55351,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10391:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10395:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"10391:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10391:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":55348,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10353:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}],"id":55347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10345:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55346,"name":"address","nodeType":"ElementaryTypeName","src":"10345:7:81","typeDescriptions":{}}},"id":55349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10345:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10359:31:81","memberName":"toDataWithIntendedValidatorHash","nodeType":"MemberAccess","referencedDeclaration":43448,"src":"10345:45:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes32_$attached_to$_t_address_$","typeString":"function (address,bytes memory) pure returns (bytes32)"}},"id":55355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10345:73:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"10323:95:81"},{"assignments":[55358],"declarations":[{"constant":false,"id":55358,"mutability":"mutable","name":"validSignatures","nameLocation":"10436:15:81","nodeType":"VariableDeclaration","scope":55413,"src":"10428:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55357,"name":"uint256","nodeType":"ElementaryTypeName","src":"10428:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55360,"initialValue":{"hexValue":"30","id":55359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10454:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10428:27:81"},{"body":{"id":55404,"nodeType":"Block","src":"10514:368:81","statements":[{"assignments":[55373],"declarations":[{"constant":false,"id":55373,"mutability":"mutable","name":"signature","nameLocation":"10543:9:81","nodeType":"VariableDeclaration","scope":55404,"src":"10528:24:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":55372,"name":"bytes","nodeType":"ElementaryTypeName","src":"10528:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55377,"initialValue":{"baseExpression":{"id":55374,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"10555:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":55376,"indexExpression":{"id":55375,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10566:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10555:13:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"nodeType":"VariableDeclarationStatement","src":"10528:40:81"},{"assignments":[55379],"declarations":[{"constant":false,"id":55379,"mutability":"mutable","name":"validator","nameLocation":"10591:9:81","nodeType":"VariableDeclaration","scope":55404,"src":"10583:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55378,"name":"address","nodeType":"ElementaryTypeName","src":"10583:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55384,"initialValue":{"arguments":[{"id":55382,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55373,"src":"10623:9:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":55380,"name":"messageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55345,"src":"10603:11:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10615:7:81","memberName":"recover","nodeType":"MemberAccess","referencedDeclaration":43143,"src":"10603:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bytes memory) pure returns (address)"}},"id":55383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10603:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10583:50:81"},{"condition":{"baseExpression":{"expression":{"id":55385,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55335,"src":"10652:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55386,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10659:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"10652:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55388,"indexExpression":{"id":55387,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55379,"src":"10670:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10652:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55402,"nodeType":"Block","src":"10802:70:81","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":55398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10828:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"696e636f7272656374207369676e6174757265","id":55399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10835:21:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_641ab7289dc6df3dff0edafbede614b21294e2bb9f09800443d88f57818afe8f","typeString":"literal_string \"incorrect signature\""},"value":"incorrect signature"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_641ab7289dc6df3dff0edafbede614b21294e2bb9f09800443d88f57818afe8f","typeString":"literal_string \"incorrect signature\""}],"id":55397,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10820:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10820:37:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55401,"nodeType":"ExpressionStatement","src":"10820:37:81"}]},"id":55403,"nodeType":"IfStatement","src":"10648:224:81","trueBody":{"id":55396,"nodeType":"Block","src":"10682:114:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10704:17:81","subExpression":{"id":55389,"name":"validSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"10706:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55391,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55340,"src":"10725:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10704:30:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55395,"nodeType":"IfStatement","src":"10700:82:81","trueBody":{"id":55394,"nodeType":"Block","src":"10736:46:81","statements":[{"id":55393,"nodeType":"Break","src":"10758:5:81"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55365,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10486:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55366,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"10490:10:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":55367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10501:6:81","memberName":"length","nodeType":"MemberAccess","src":"10490:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10486:21:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55405,"initializationExpression":{"assignments":[55362],"declarations":[{"constant":false,"id":55362,"mutability":"mutable","name":"i","nameLocation":"10479:1:81","nodeType":"VariableDeclaration","scope":55405,"src":"10471:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55361,"name":"uint256","nodeType":"ElementaryTypeName","src":"10471:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55364,"initialValue":{"hexValue":"30","id":55363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10483:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10471:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10509:3:81","subExpression":{"id":55369,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"10509:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55371,"nodeType":"ExpressionStatement","src":"10509:3:81"},"nodeType":"ForStatement","src":"10466:416:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55407,"name":"validSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"10900:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":55408,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55340,"src":"10919:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10900:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6e6f7420656e6f7567682076616c6964207369676e617475726573","id":55410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10930:29:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_8852ba723d98bcf316aab69f38fb5da08e0bfb912ef589b19218c396aac3c0bc","typeString":"literal_string \"not enough valid signatures\""},"value":"not enough valid signatures"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8852ba723d98bcf316aab69f38fb5da08e0bfb912ef589b19218c396aac3c0bc","typeString":"literal_string \"not enough valid signatures\""}],"id":55406,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"10892:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10892:68:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55412,"nodeType":"ExpressionStatement","src":"10892:68:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_validateSignatures","nameLocation":"10132:19:81","parameters":{"id":55331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55327,"mutability":"mutable","name":"dataHash","nameLocation":"10160:8:81","nodeType":"VariableDeclaration","scope":55414,"src":"10152:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55326,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10152:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55330,"mutability":"mutable","name":"signatures","nameLocation":"10187:10:81","nodeType":"VariableDeclaration","scope":55414,"src":"10170:27:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":55328,"name":"bytes","nodeType":"ElementaryTypeName","src":"10170:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":55329,"nodeType":"ArrayTypeName","src":"10170:7:81","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"10151:47:81"},"returnParameters":{"id":55332,"nodeType":"ParameterList","parameters":[],"src":"10212:0:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":55510,"nodeType":"FunctionDefinition","src":"10973:1114:81","nodes":[],"body":{"id":55509,"nodeType":"Block","src":"11063:1024:81","nodes":[],"statements":[{"assignments":[55424],"declarations":[{"constant":false,"id":55424,"mutability":"mutable","name":"router","nameLocation":"11089:6:81","nodeType":"VariableDeclaration","scope":55509,"src":"11073:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55423,"nodeType":"UserDefinedTypeName","pathNode":{"id":55422,"name":"Storage","nameLocations":["11073:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"11073:7:81"},"referencedDeclaration":53684,"src":"11073:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55427,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55425,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"11098:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11098:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"11073:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55429,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"11143:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11150:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"11143:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":55431,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11177:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11193:18:81","memberName":"prevCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53697,"src":"11177:34:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11143:68:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c69642070726576696f757320636f6d6d69746d656e742068617368","id":55434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11213:34:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_fef95c9e1944529fb91083689c978504d88f59fdb02e6fd241a073fa572e7d3e","typeString":"literal_string \"invalid previous commitment hash\""},"value":"invalid previous commitment hash"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fef95c9e1944529fb91083689c978504d88f59fdb02e6fd241a073fa572e7d3e","typeString":"literal_string \"invalid previous commitment hash\""}],"id":55428,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11122:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11122:135:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55436,"nodeType":"ExpressionStatement","src":"11122:135:81"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":55439,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11294:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11310:13:81","memberName":"predBlockHash","nodeType":"MemberAccess","referencedDeclaration":53699,"src":"11294:29:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55438,"name":"_isPredecessorHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55554,"src":"11275:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32) view returns (bool)"}},"id":55441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11275:49:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616c6c6f776564207072656465636573736f7220626c6f636b206e6f7420666f756e64","id":55442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11326:37:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_7d09fbc5a1c193a0826cadcc2903c8170aac2d31f22b53e69a64923153c8207e","typeString":"literal_string \"allowed predecessor block not found\""},"value":"allowed predecessor block not found"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7d09fbc5a1c193a0826cadcc2903c8170aac2d31f22b53e69a64923153c8207e","typeString":"literal_string \"allowed predecessor block not found\""}],"id":55437,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11267:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11267:97:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55444,"nodeType":"ExpressionStatement","src":"11267:97:81"},{"assignments":[55446],"declarations":[{"constant":false,"id":55446,"mutability":"mutable","name":"transitionsHashes","nameLocation":"11388:17:81","nodeType":"VariableDeclaration","scope":55509,"src":"11375:30:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55445,"name":"bytes","nodeType":"ElementaryTypeName","src":"11375:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55447,"nodeType":"VariableDeclarationStatement","src":"11375:30:81"},{"body":{"id":55483,"nodeType":"Block","src":"11481:255:81","statements":[{"assignments":[55462],"declarations":[{"constant":false,"id":55462,"mutability":"mutable","name":"stateTransition","nameLocation":"11520:15:81","nodeType":"VariableDeclaration","scope":55483,"src":"11495:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition"},"typeName":{"id":55461,"nodeType":"UserDefinedTypeName","pathNode":{"id":55460,"name":"StateTransition","nameLocations":["11495:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53719,"src":"11495:15:81"},"referencedDeclaration":53719,"src":"11495:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_storage_ptr","typeString":"struct IRouter.StateTransition"}},"visibility":"internal"}],"id":55467,"initialValue":{"baseExpression":{"expression":{"id":55463,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11538:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11554:11:81","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":53703,"src":"11538:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$53719_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.StateTransition calldata[] calldata"}},"id":55466,"indexExpression":{"id":55465,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11566:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11538:30:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"nodeType":"VariableDeclarationStatement","src":"11495:73:81"},{"assignments":[55469],"declarations":[{"constant":false,"id":55469,"mutability":"mutable","name":"transitionHash","nameLocation":"11591:14:81","nodeType":"VariableDeclaration","scope":55483,"src":"11583:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55468,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11583:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55473,"initialValue":{"arguments":[{"id":55471,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55462,"src":"11627:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}],"id":55470,"name":"_doStateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55754,"src":"11608:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_StateTransition_$53719_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.StateTransition calldata) returns (bytes32)"}},"id":55472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11608:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"11583:60:81"},{"expression":{"id":55481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55474,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"11658:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55478,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"11691:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":55479,"name":"transitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55469,"src":"11710:14:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11678:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55475,"name":"bytes","nodeType":"ElementaryTypeName","src":"11678:5:81","typeDescriptions":{}}},"id":55477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11684:6:81","memberName":"concat","nodeType":"MemberAccess","src":"11678:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11678:47:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"11658:67:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55482,"nodeType":"ExpressionStatement","src":"11658:67:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55452,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11436:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55453,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11440:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11456:11:81","memberName":"transitions","nodeType":"MemberAccess","referencedDeclaration":53703,"src":"11440:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_StateTransition_$53719_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.StateTransition calldata[] calldata"}},"id":55455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11468:6:81","memberName":"length","nodeType":"MemberAccess","src":"11440:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11436:38:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55484,"initializationExpression":{"assignments":[55449],"declarations":[{"constant":false,"id":55449,"mutability":"mutable","name":"i","nameLocation":"11429:1:81","nodeType":"VariableDeclaration","scope":55484,"src":"11421:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55448,"name":"uint256","nodeType":"ElementaryTypeName","src":"11421:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55451,"initialValue":{"hexValue":"30","id":55450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11433:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11421:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11476:3:81","subExpression":{"id":55457,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"11476:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55459,"nodeType":"ExpressionStatement","src":"11476:3:81"},"nodeType":"ForStatement","src":"11416:320:81"},{"expression":{"id":55490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":55485,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"11746:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11753:23:81","memberName":"lastBlockCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53657,"src":"11746:30:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55488,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11779:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11795:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11779:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11746:58:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":55491,"nodeType":"ExpressionStatement","src":"11746:58:81"},{"eventCall":{"arguments":[{"expression":{"id":55493,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11834:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11850:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11834:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55492,"name":"BlockCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53748,"src":"11819:14:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32)"}},"id":55495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11819:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55496,"nodeType":"EmitStatement","src":"11814:46:81"},{"expression":{"arguments":[{"expression":{"id":55498,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11912:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11928:9:81","memberName":"blockHash","nodeType":"MemberAccess","referencedDeclaration":53695,"src":"11912:25:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55500,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11951:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11967:18:81","memberName":"prevCommitmentHash","nodeType":"MemberAccess","referencedDeclaration":53697,"src":"11951:34:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55502,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55417,"src":"11999:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment calldata"}},"id":55503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12015:13:81","memberName":"predBlockHash","nodeType":"MemberAccess","referencedDeclaration":53699,"src":"11999:29:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":55505,"name":"transitionsHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55446,"src":"12052:17:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55504,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"12042:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12042:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55497,"name":"_blockCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55778,"src":"11878:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32,bytes32) pure returns (bytes32)"}},"id":55507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11878:202:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55421,"id":55508,"nodeType":"Return","src":"11871:209:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_commitBlock","nameLocation":"10982:12:81","parameters":{"id":55418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55417,"mutability":"mutable","name":"blockCommitment","nameLocation":"11020:15:81","nodeType":"VariableDeclaration","scope":55510,"src":"10995:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_calldata_ptr","typeString":"struct IRouter.BlockCommitment"},"typeName":{"id":55416,"nodeType":"UserDefinedTypeName","pathNode":{"id":55415,"name":"BlockCommitment","nameLocations":["10995:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53704,"src":"10995:15:81"},"referencedDeclaration":53704,"src":"10995:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$53704_storage_ptr","typeString":"struct IRouter.BlockCommitment"}},"visibility":"internal"}],"src":"10994:42:81"},"returnParameters":{"id":55421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55510,"src":"11054:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55419,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11054:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11053:9:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55554,"nodeType":"FunctionDefinition","src":"12093:338:81","nodes":[],"body":{"id":55553,"nodeType":"Block","src":"12163:268:81","nodes":[],"statements":[{"body":{"id":55549,"nodeType":"Block","src":"12220:183:81","statements":[{"assignments":[55531],"declarations":[{"constant":false,"id":55531,"mutability":"mutable","name":"ret","nameLocation":"12242:3:81","nodeType":"VariableDeclaration","scope":55549,"src":"12234:11:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55530,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12234:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55535,"initialValue":{"arguments":[{"id":55533,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12258:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55532,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"12248:9:81","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":55534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12248:12:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12234:26:81"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55536,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"12278:3:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":55537,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55512,"src":"12285:4:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12278:11:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55542,"name":"ret","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"12345:3:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12352:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12345:8:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55547,"nodeType":"IfStatement","src":"12341:52:81","trueBody":{"id":55546,"nodeType":"Block","src":"12355:38:81","statements":[{"id":55545,"nodeType":"Break","src":"12373:5:81"}]}},"id":55548,"nodeType":"IfStatement","src":"12274:119:81","trueBody":{"id":55541,"nodeType":"Block","src":"12291:44:81","statements":[{"expression":{"hexValue":"74727565","id":55539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12316:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":55516,"id":55540,"nodeType":"Return","src":"12309:11:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55524,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12208:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":55525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12212:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12208:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55550,"initializationExpression":{"assignments":[55518],"declarations":[{"constant":false,"id":55518,"mutability":"mutable","name":"i","nameLocation":"12186:1:81","nodeType":"VariableDeclaration","scope":55550,"src":"12178:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55517,"name":"uint256","nodeType":"ElementaryTypeName","src":"12178:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55523,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55519,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12190:5:81","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":55520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12196:6:81","memberName":"number","nodeType":"MemberAccess","src":"12190:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":55521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12205:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12190:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12178:28:81"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":55528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"12215:3:81","subExpression":{"id":55527,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55518,"src":"12215:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55529,"nodeType":"ExpressionStatement","src":"12215:3:81"},"nodeType":"ForStatement","src":"12173:230:81"},{"expression":{"hexValue":"66616c7365","id":55551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12419:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":55516,"id":55552,"nodeType":"Return","src":"12412:12:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_isPredecessorHash","nameLocation":"12102:18:81","parameters":{"id":55513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55512,"mutability":"mutable","name":"hash","nameLocation":"12129:4:81","nodeType":"VariableDeclaration","scope":55554,"src":"12121:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12121:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12120:14:81"},"returnParameters":{"id":55516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55515,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55554,"src":"12157:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":55514,"name":"bool","nodeType":"ElementaryTypeName","src":"12157:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12156:6:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":55754,"nodeType":"FunctionDefinition","src":"12437:2170:81","nodes":[],"body":{"id":55753,"nodeType":"Block","src":"12533:2074:81","nodes":[],"statements":[{"assignments":[55564],"declarations":[{"constant":false,"id":55564,"mutability":"mutable","name":"router","nameLocation":"12559:6:81","nodeType":"VariableDeclaration","scope":55753,"src":"12543:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55563,"nodeType":"UserDefinedTypeName","pathNode":{"id":55562,"name":"Storage","nameLocations":["12543:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"12543:7:81"},"referencedDeclaration":53684,"src":"12543:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55567,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55565,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"12568:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12568:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"12543:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":55569,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55564,"src":"12600:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12607:8:81","memberName":"programs","nodeType":"MemberAccess","referencedDeclaration":53681,"src":"12600:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bytes32_$","typeString":"mapping(address => bytes32)"}},"id":55573,"indexExpression":{"expression":{"id":55571,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12616:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12632:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12616:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12600:40:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":55574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12644:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12600:45:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"636f756c646e277420706572666f726d207472616e736974696f6e20666f7220756e6b6e6f776e2070726f6772616d","id":55576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12647:49:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""},"value":"couldn't perform transition for unknown program"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31c5a066db04c91ff8a121d71b24335cd54a57cfe01a7cdd47f234348f1a72d6","typeString":"literal_string \"couldn't perform transition for unknown program\""}],"id":55568,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12592:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12592:105:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55578,"nodeType":"ExpressionStatement","src":"12592:105:81"},{"assignments":[55581],"declarations":[{"constant":false,"id":55581,"mutability":"mutable","name":"wrappedVaraActor","nameLocation":"12721:16:81","nodeType":"VariableDeclaration","scope":55753,"src":"12708:29:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"},"typeName":{"id":55580,"nodeType":"UserDefinedTypeName","pathNode":{"id":55579,"name":"IWrappedVara","nameLocations":["12708:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":53962,"src":"12708:12:81"},"referencedDeclaration":53962,"src":"12708:12:81","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"visibility":"internal"}],"id":55586,"initialValue":{"arguments":[{"expression":{"id":55583,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55564,"src":"12753:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12760:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"12753:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55582,"name":"IWrappedVara","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53962,"src":"12740:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWrappedVara_$53962_$","typeString":"type(contract IWrappedVara)"}},"id":55585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12740:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"nodeType":"VariableDeclarationStatement","src":"12708:64:81"},{"expression":{"arguments":[{"expression":{"id":55590,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12808:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12824:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12808:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55592,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12833:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12849:14:81","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":53710,"src":"12833:30:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55587,"name":"wrappedVaraActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55581,"src":"12782:16:81","typeDescriptions":{"typeIdentifier":"t_contract$_IWrappedVara_$53962","typeString":"contract IWrappedVara"}},"id":55589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12799:8:81","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":41873,"src":"12782:25:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":55594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12782:82:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55595,"nodeType":"ExpressionStatement","src":"12782:82:81"},{"assignments":[55598],"declarations":[{"constant":false,"id":55598,"mutability":"mutable","name":"mirrorActor","nameLocation":"12883:11:81","nodeType":"VariableDeclaration","scope":55753,"src":"12875:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"},"typeName":{"id":55597,"nodeType":"UserDefinedTypeName","pathNode":{"id":55596,"name":"IMirror","nameLocations":["12875:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53636,"src":"12875:7:81"},"referencedDeclaration":53636,"src":"12875:7:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"visibility":"internal"}],"id":55603,"initialValue":{"arguments":[{"expression":{"id":55600,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"12905:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12921:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"12905:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55599,"name":"IMirror","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53636,"src":"12897:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMirror_$53636_$","typeString":"type(contract IMirror)"}},"id":55602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12897:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"nodeType":"VariableDeclarationStatement","src":"12875:54:81"},{"assignments":[55605],"declarations":[{"constant":false,"id":55605,"mutability":"mutable","name":"valueClaimsBytes","nameLocation":"12953:16:81","nodeType":"VariableDeclaration","scope":55753,"src":"12940:29:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55604,"name":"bytes","nodeType":"ElementaryTypeName","src":"12940:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55606,"nodeType":"VariableDeclarationStatement","src":"12940:29:81"},{"body":{"id":55655,"nodeType":"Block","src":"13045:367:81","statements":[{"assignments":[55621],"declarations":[{"constant":false,"id":55621,"mutability":"mutable","name":"valueClaim","nameLocation":"13079:10:81","nodeType":"VariableDeclaration","scope":55655,"src":"13059:30:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim"},"typeName":{"id":55620,"nodeType":"UserDefinedTypeName","pathNode":{"id":55619,"name":"ValueClaim","nameLocations":["13059:10:81"],"nodeType":"IdentifierPath","referencedDeclaration":53726,"src":"13059:10:81"},"referencedDeclaration":53726,"src":"13059:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_storage_ptr","typeString":"struct IRouter.ValueClaim"}},"visibility":"internal"}],"id":55626,"initialValue":{"baseExpression":{"expression":{"id":55622,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13092:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13108:11:81","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":53714,"src":"13092:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$53726_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata[] calldata"}},"id":55625,"indexExpression":{"id":55624,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13120:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13092:30:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"nodeType":"VariableDeclarationStatement","src":"13059:63:81"},{"expression":{"id":55642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55627,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"13137:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55631,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"13186:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"expression":{"id":55634,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13221:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13232:9:81","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":53721,"src":"13221:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55636,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13243:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13254:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53723,"src":"13243:22:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55638,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13267:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13278:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53725,"src":"13267:16:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55632,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13204:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13208:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"13204:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13204:80:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":55629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13156:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55628,"name":"bytes","nodeType":"ElementaryTypeName","src":"13156:5:81","typeDescriptions":{}}},"id":55630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13162:6:81","memberName":"concat","nodeType":"MemberAccess","src":"13156:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13156:142:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13137:161:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55643,"nodeType":"ExpressionStatement","src":"13137:161:81"},{"expression":{"arguments":[{"expression":{"id":55647,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13338:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13349:9:81","memberName":"messageId","nodeType":"MemberAccess","referencedDeclaration":53721,"src":"13338:20:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55649,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13360:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13371:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53723,"src":"13360:22:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55651,"name":"valueClaim","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55621,"src":"13384:10:81","typeDescriptions":{"typeIdentifier":"t_struct$_ValueClaim_$53726_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata"}},"id":55652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13395:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53725,"src":"13384:16:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55644,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13313:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13325:12:81","memberName":"valueClaimed","nodeType":"MemberAccess","referencedDeclaration":53619,"src":"13313:24:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,uint128) external"}},"id":55653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13313:88:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55654,"nodeType":"ExpressionStatement","src":"13313:88:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55611,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13000:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55612,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13004:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13020:11:81","memberName":"valueClaims","nodeType":"MemberAccess","referencedDeclaration":53714,"src":"13004:27:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ValueClaim_$53726_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.ValueClaim calldata[] calldata"}},"id":55614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13032:6:81","memberName":"length","nodeType":"MemberAccess","src":"13004:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13000:38:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55656,"initializationExpression":{"assignments":[55608],"declarations":[{"constant":false,"id":55608,"mutability":"mutable","name":"i","nameLocation":"12993:1:81","nodeType":"VariableDeclaration","scope":55656,"src":"12985:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55607,"name":"uint256","nodeType":"ElementaryTypeName","src":"12985:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55610,"initialValue":{"hexValue":"30","id":55609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12997:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12985:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13040:3:81","subExpression":{"id":55616,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55608,"src":"13040:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55618,"nodeType":"ExpressionStatement","src":"13040:3:81"},"nodeType":"ForStatement","src":"12980:432:81"},{"assignments":[55658],"declarations":[{"constant":false,"id":55658,"mutability":"mutable","name":"messagesHashes","nameLocation":"13435:14:81","nodeType":"VariableDeclaration","scope":55753,"src":"13422:27:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":55657,"name":"bytes","nodeType":"ElementaryTypeName","src":"13422:5:81","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":55659,"nodeType":"VariableDeclarationStatement","src":"13422:27:81"},{"body":{"id":55729,"nodeType":"Block","src":"13522:764:81","statements":[{"assignments":[55674],"declarations":[{"constant":false,"id":55674,"mutability":"mutable","name":"outgoingMessage","nameLocation":"13561:15:81","nodeType":"VariableDeclaration","scope":55729,"src":"13536:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage"},"typeName":{"id":55673,"nodeType":"UserDefinedTypeName","pathNode":{"id":55672,"name":"OutgoingMessage","nameLocations":["13536:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53738,"src":"13536:15:81"},"referencedDeclaration":53738,"src":"13536:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_storage_ptr","typeString":"struct IRouter.OutgoingMessage"}},"visibility":"internal"}],"id":55679,"initialValue":{"baseExpression":{"expression":{"id":55675,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13579:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13595:8:81","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":53718,"src":"13579:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata[] calldata"}},"id":55678,"indexExpression":{"id":55677,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13604:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13579:27:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"nodeType":"VariableDeclarationStatement","src":"13536:70:81"},{"expression":{"id":55689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55680,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"13621:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55684,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"13651:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":55686,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13688:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}],"id":55685,"name":"_outgoingMessageHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55834,"src":"13667:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$returns$_t_bytes32_$","typeString":"function (struct IRouter.OutgoingMessage calldata) pure returns (bytes32)"}},"id":55687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13667:37:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13638:5:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":55681,"name":"bytes","nodeType":"ElementaryTypeName","src":"13638:5:81","typeDescriptions":{}}},"id":55683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13644:6:81","memberName":"concat","nodeType":"MemberAccess","src":"13638:12:81","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13638:67:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"13621:84:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":55690,"nodeType":"ExpressionStatement","src":"13621:84:81"},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":55695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":55691,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13724:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13740:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"13724:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13753:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"13724:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13759:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13724:36:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55727,"nodeType":"Block","src":"13959:317:81","statements":[{"expression":{"arguments":[{"expression":{"id":55713,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14020:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14036:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"14020:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55715,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14069:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14085:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"14069:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55717,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14114:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14130:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"14114:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":55719,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14157:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14173:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"14157:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14186:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"14157:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":55722,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"14210:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14226:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"14210:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14239:4:81","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":53742,"src":"14210:33:81","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":55710,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13977:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13989:9:81","memberName":"replySent","nodeType":"MemberAccess","referencedDeclaration":53610,"src":"13977:21:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$_t_bytes32_$_t_bytes4_$returns$__$","typeString":"function (address,bytes memory,uint128,bytes32,bytes4) external"}},"id":55725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13977:284:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55726,"nodeType":"ExpressionStatement","src":"13977:284:81"}]},"id":55728,"nodeType":"IfStatement","src":"13720:556:81","trueBody":{"id":55709,"nodeType":"Block","src":"13762:191:81","statements":[{"expression":{"arguments":[{"expression":{"id":55699,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13825:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13841:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53728,"src":"13825:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55701,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13845:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13861:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"13845:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55703,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13874:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13890:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"13874:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55705,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55674,"src":"13899:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13915:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"13899:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":55696,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"13780:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13792:11:81","memberName":"messageSent","nodeType":"MemberAccess","referencedDeclaration":53597,"src":"13780:23:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_uint128_$returns$__$","typeString":"function (bytes32,address,bytes memory,uint128) external"}},"id":55707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13780:158:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55708,"nodeType":"ExpressionStatement","src":"13780:158:81"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55664,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13480:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55665,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"13484:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13500:8:81","memberName":"messages","nodeType":"MemberAccess","referencedDeclaration":53718,"src":"13484:24:81","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_OutgoingMessage_$53738_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata[] calldata"}},"id":55667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13509:6:81","memberName":"length","nodeType":"MemberAccess","src":"13484:31:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13480:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55730,"initializationExpression":{"assignments":[55661],"declarations":[{"constant":false,"id":55661,"mutability":"mutable","name":"i","nameLocation":"13473:1:81","nodeType":"VariableDeclaration","scope":55730,"src":"13465:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55660,"name":"uint256","nodeType":"ElementaryTypeName","src":"13465:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55663,"initialValue":{"hexValue":"30","id":55662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13477:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13465:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13517:3:81","subExpression":{"id":55669,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55661,"src":"13517:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55671,"nodeType":"ExpressionStatement","src":"13517:3:81"},"nodeType":"ForStatement","src":"13460:826:81"},{"expression":{"arguments":[{"expression":{"id":55734,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14320:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14336:12:81","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":53708,"src":"14320:28:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55731,"name":"mirrorActor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"14296:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IMirror_$53636","typeString":"contract IMirror"}},"id":55733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14308:11:81","memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":53586,"src":"14296:23:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$__$","typeString":"function (bytes32) external"}},"id":55736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14296:53:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55737,"nodeType":"ExpressionStatement","src":"14296:53:81"},{"expression":{"arguments":[{"expression":{"id":55739,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14401:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14417:7:81","memberName":"actorId","nodeType":"MemberAccess","referencedDeclaration":53706,"src":"14401:23:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55741,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14438:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14454:12:81","memberName":"newStateHash","nodeType":"MemberAccess","referencedDeclaration":53708,"src":"14438:28:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55743,"name":"stateTransition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55557,"src":"14480:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition calldata"}},"id":55744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14496:14:81","memberName":"valueToReceive","nodeType":"MemberAccess","referencedDeclaration":53710,"src":"14480:30:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[{"id":55746,"name":"valueClaimsBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55605,"src":"14534:16:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55745,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14524:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14524:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":55749,"name":"messagesHashes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"14575:14:81","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55748,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14565:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14565:25:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":55738,"name":"_stateTransitionHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55805,"src":"14367:20:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_bytes32_$_t_uint128_$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (address,bytes32,uint128,bytes32,bytes32) pure returns (bytes32)"}},"id":55751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14367:233:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55561,"id":55752,"nodeType":"Return","src":"14360:240:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_doStateTransition","nameLocation":"12446:18:81","parameters":{"id":55558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55557,"mutability":"mutable","name":"stateTransition","nameLocation":"12490:15:81","nodeType":"VariableDeclaration","scope":55754,"src":"12465:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_calldata_ptr","typeString":"struct IRouter.StateTransition"},"typeName":{"id":55556,"nodeType":"UserDefinedTypeName","pathNode":{"id":55555,"name":"StateTransition","nameLocations":["12465:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53719,"src":"12465:15:81"},"referencedDeclaration":53719,"src":"12465:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_StateTransition_$53719_storage_ptr","typeString":"struct IRouter.StateTransition"}},"visibility":"internal"}],"src":"12464:42:81"},"returnParameters":{"id":55561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55754,"src":"12524:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55559,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12524:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12523:9:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55778,"nodeType":"FunctionDefinition","src":"14613:320:81","nodes":[],"body":{"id":55777,"nodeType":"Block","src":"14813:120:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":55770,"name":"blockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55756,"src":"14857:9:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55771,"name":"prevCommitmentHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55758,"src":"14868:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55772,"name":"predBlockHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55760,"src":"14888:13:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55773,"name":"transitionsHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55762,"src":"14903:21:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55768,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14840:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14844:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"14840:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14840:85:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55767,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14830:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14830:96:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55766,"id":55776,"nodeType":"Return","src":"14823:103:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_blockCommitmentHash","nameLocation":"14622:20:81","parameters":{"id":55763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55756,"mutability":"mutable","name":"blockHash","nameLocation":"14660:9:81","nodeType":"VariableDeclaration","scope":55778,"src":"14652:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55755,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14652:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55758,"mutability":"mutable","name":"prevCommitmentHash","nameLocation":"14687:18:81","nodeType":"VariableDeclaration","scope":55778,"src":"14679:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55757,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14679:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55760,"mutability":"mutable","name":"predBlockHash","nameLocation":"14723:13:81","nodeType":"VariableDeclaration","scope":55778,"src":"14715:21:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55759,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14715:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55762,"mutability":"mutable","name":"transitionsHashesHash","nameLocation":"14754:21:81","nodeType":"VariableDeclaration","scope":55778,"src":"14746:29:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55761,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14746:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14642:139:81"},"returnParameters":{"id":55766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55778,"src":"14804:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55764,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14804:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14803:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55805,"nodeType":"FunctionDefinition","src":"14939:350:81","nodes":[],"body":{"id":55804,"nodeType":"Block","src":"15162:127:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":55796,"name":"actorId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55780,"src":"15206:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55797,"name":"newStateHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55782,"src":"15215:12:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55798,"name":"valueToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55784,"src":"15229:14:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":55799,"name":"valueClaimsHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55786,"src":"15245:15:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":55800,"name":"messagesHashesHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55788,"src":"15262:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":55794,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15189:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15193:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15189:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15189:92:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55793,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15179:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15179:103:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55792,"id":55803,"nodeType":"Return","src":"15172:110:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_stateTransitionHash","nameLocation":"14948:20:81","parameters":{"id":55789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55780,"mutability":"mutable","name":"actorId","nameLocation":"14986:7:81","nodeType":"VariableDeclaration","scope":55805,"src":"14978:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55779,"name":"address","nodeType":"ElementaryTypeName","src":"14978:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55782,"mutability":"mutable","name":"newStateHash","nameLocation":"15011:12:81","nodeType":"VariableDeclaration","scope":55805,"src":"15003:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55781,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15003:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55784,"mutability":"mutable","name":"valueToReceive","nameLocation":"15041:14:81","nodeType":"VariableDeclaration","scope":55805,"src":"15033:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55783,"name":"uint128","nodeType":"ElementaryTypeName","src":"15033:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":55786,"mutability":"mutable","name":"valueClaimsHash","nameLocation":"15073:15:81","nodeType":"VariableDeclaration","scope":55805,"src":"15065:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55785,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15065:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":55788,"mutability":"mutable","name":"messagesHashesHash","nameLocation":"15106:18:81","nodeType":"VariableDeclaration","scope":55805,"src":"15098:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55787,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15098:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14968:162:81"},"returnParameters":{"id":55792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55791,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55805,"src":"15153:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55790,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15153:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15152:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55834,"nodeType":"FunctionDefinition","src":"15295:451:81","nodes":[],"body":{"id":55833,"nodeType":"Block","src":"15398:348:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":55816,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15472:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15488:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53728,"src":"15472:18:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55818,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15508:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15524:11:81","memberName":"destination","nodeType":"MemberAccess","referencedDeclaration":53730,"src":"15508:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55820,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15553:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15569:7:81","memberName":"payload","nodeType":"MemberAccess","referencedDeclaration":53732,"src":"15553:23:81","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"expression":{"id":55822,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15594:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15610:5:81","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":53734,"src":"15594:21:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"expression":{"id":55824,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15633:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15649:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"15633:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15662:2:81","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":53740,"src":"15633:31:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"expression":{"id":55827,"name":"outgoingMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55808,"src":"15682:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage calldata"}},"id":55828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15698:12:81","memberName":"replyDetails","nodeType":"MemberAccess","referencedDeclaration":53737,"src":"15682:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReplyDetails_$53743_calldata_ptr","typeString":"struct IRouter.ReplyDetails calldata"}},"id":55829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15711:4:81","memberName":"code","nodeType":"MemberAccess","referencedDeclaration":53742,"src":"15682:33:81","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":55814,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15438:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15442:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15438:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15438:291:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55813,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15415:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15415:324:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55812,"id":55832,"nodeType":"Return","src":"15408:331:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_outgoingMessageHash","nameLocation":"15304:20:81","parameters":{"id":55809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55808,"mutability":"mutable","name":"outgoingMessage","nameLocation":"15350:15:81","nodeType":"VariableDeclaration","scope":55834,"src":"15325:40:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_calldata_ptr","typeString":"struct IRouter.OutgoingMessage"},"typeName":{"id":55807,"nodeType":"UserDefinedTypeName","pathNode":{"id":55806,"name":"OutgoingMessage","nameLocations":["15325:15:81"],"nodeType":"IdentifierPath","referencedDeclaration":53738,"src":"15325:15:81"},"referencedDeclaration":53738,"src":"15325:15:81","typeDescriptions":{"typeIdentifier":"t_struct$_OutgoingMessage_$53738_storage_ptr","typeString":"struct IRouter.OutgoingMessage"}},"visibility":"internal"}],"src":"15324:42:81"},"returnParameters":{"id":55812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55834,"src":"15389:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55810,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15389:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15388:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55853,"nodeType":"FunctionDefinition","src":"15752:192:81","nodes":[],"body":{"id":55852,"nodeType":"Block","src":"15852:92:81","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":55845,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55837,"src":"15896:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15911:2:81","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":53690,"src":"15896:17:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55847,"name":"codeCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55837,"src":"15915:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment calldata"}},"id":55848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15930:5:81","memberName":"valid","nodeType":"MemberAccess","referencedDeclaration":53692,"src":"15915:20:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":55843,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15879:3:81","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":55844,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15883:12:81","memberName":"encodePacked","nodeType":"MemberAccess","src":"15879:16:81","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":55849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15879:57:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":55842,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"15869:9:81","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":55850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15869:68:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":55841,"id":55851,"nodeType":"Return","src":"15862:75:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_codeCommitmentHash","nameLocation":"15761:19:81","parameters":{"id":55838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55837,"mutability":"mutable","name":"codeCommitment","nameLocation":"15805:14:81","nodeType":"VariableDeclaration","scope":55853,"src":"15781:38:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_calldata_ptr","typeString":"struct IRouter.CodeCommitment"},"typeName":{"id":55836,"nodeType":"UserDefinedTypeName","pathNode":{"id":55835,"name":"CodeCommitment","nameLocations":["15781:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":53693,"src":"15781:14:81"},"referencedDeclaration":53693,"src":"15781:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_CodeCommitment_$53693_storage_ptr","typeString":"struct IRouter.CodeCommitment"}},"visibility":"internal"}],"src":"15780:40:81"},"returnParameters":{"id":55841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55840,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55853,"src":"15843:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15843:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15842:9:81"},"scope":55996,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":55886,"nodeType":"FunctionDefinition","src":"15950:257:81","nodes":[],"body":{"id":55885,"nodeType":"Block","src":"15998:209:81","nodes":[],"statements":[{"assignments":[55860],"declarations":[{"constant":false,"id":55860,"mutability":"mutable","name":"router","nameLocation":"16024:6:81","nodeType":"VariableDeclaration","scope":55885,"src":"16008:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55859,"nodeType":"UserDefinedTypeName","pathNode":{"id":55858,"name":"Storage","nameLocations":["16008:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16008:7:81"},"referencedDeclaration":53684,"src":"16008:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55863,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55861,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16033:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16033:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16008:38:81"},{"assignments":[55865],"declarations":[{"constant":false,"id":55865,"mutability":"mutable","name":"success","nameLocation":"16062:7:81","nodeType":"VariableDeclaration","scope":55885,"src":"16057:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":55864,"name":"bool","nodeType":"ElementaryTypeName","src":"16057:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":55879,"initialValue":{"arguments":[{"expression":{"id":55871,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"16112:2:81","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":55872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16115:6:81","memberName":"origin","nodeType":"MemberAccess","src":"16112:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55875,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16131:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$55996","typeString":"contract Router"}],"id":55874,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16123:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55873,"name":"address","nodeType":"ElementaryTypeName","src":"16123:7:81","typeDescriptions":{}}},"id":55876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16123:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55877,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55855,"src":"16138:6:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":55867,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55860,"src":"16079:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16086:11:81","memberName":"wrappedVara","nodeType":"MemberAccess","referencedDeclaration":53655,"src":"16079:18:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55866,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41906,"src":"16072:6:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$41906_$","typeString":"type(contract IERC20)"}},"id":55869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16072:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$41906","typeString":"contract IERC20"}},"id":55870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16099:12:81","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":41905,"src":"16072:39:81","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":55878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16072:73:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"16057:88:81"},{"expression":{"arguments":[{"id":55881,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55865,"src":"16164:7:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6661696c656420746f207265747269657665205756617261","id":55882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16173:26:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""},"value":"failed to retrieve WVara"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3257f3c05b2e57b37b1b4545fc8e3f040a16378fd14b34b1b901c2ec9b919712","typeString":"literal_string \"failed to retrieve WVara\""}],"id":55880,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"16156:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16156:44:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55884,"nodeType":"ExpressionStatement","src":"16156:44:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_retrieveValue","nameLocation":"15959:14:81","parameters":{"id":55856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55855,"mutability":"mutable","name":"_value","nameLocation":"15982:6:81","nodeType":"VariableDeclaration","scope":55886,"src":"15974:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":55854,"name":"uint128","nodeType":"ElementaryTypeName","src":"15974:7:81","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"15973:16:81"},"returnParameters":{"id":55857,"nodeType":"ParameterList","parameters":[],"src":"15998:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55927,"nodeType":"FunctionDefinition","src":"16213:317:81","nodes":[],"body":{"id":55926,"nodeType":"Block","src":"16249:281:81","nodes":[],"statements":[{"assignments":[55891],"declarations":[{"constant":false,"id":55891,"mutability":"mutable","name":"router","nameLocation":"16275:6:81","nodeType":"VariableDeclaration","scope":55926,"src":"16259:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55890,"nodeType":"UserDefinedTypeName","pathNode":{"id":55889,"name":"Storage","nameLocations":["16259:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16259:7:81"},"referencedDeclaration":53684,"src":"16259:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55894,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55892,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16284:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16284:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16259:38:81"},{"body":{"id":55920,"nodeType":"Block","src":"16367:118:81","statements":[{"assignments":[55908],"declarations":[{"constant":false,"id":55908,"mutability":"mutable","name":"validator","nameLocation":"16389:9:81","nodeType":"VariableDeclaration","scope":55920,"src":"16381:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55907,"name":"address","nodeType":"ElementaryTypeName","src":"16381:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55913,"initialValue":{"baseExpression":{"expression":{"id":55909,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16401:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55910,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16408:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16401:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55912,"indexExpression":{"id":55911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16423:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16401:24:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16381:44:81"},{"expression":{"id":55918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"16439:35:81","subExpression":{"baseExpression":{"expression":{"id":55914,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16446:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16453:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"16446:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55917,"indexExpression":{"id":55916,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55908,"src":"16464:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16446:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55919,"nodeType":"ExpressionStatement","src":"16439:35:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16328:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":55900,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16332:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16339:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16332:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16354:6:81","memberName":"length","nodeType":"MemberAccess","src":"16332:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16328:32:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55921,"initializationExpression":{"assignments":[55896],"declarations":[{"constant":false,"id":55896,"mutability":"mutable","name":"i","nameLocation":"16321:1:81","nodeType":"VariableDeclaration","scope":55921,"src":"16313:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55895,"name":"uint256","nodeType":"ElementaryTypeName","src":"16313:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55898,"initialValue":{"hexValue":"30","id":55897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16325:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16313:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16362:3:81","subExpression":{"id":55904,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55896,"src":"16362:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55906,"nodeType":"ExpressionStatement","src":"16362:3:81"},"nodeType":"ForStatement","src":"16308:177:81"},{"expression":{"id":55924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"16495:28:81","subExpression":{"expression":{"id":55922,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55891,"src":"16502:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16509:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16502:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55925,"nodeType":"ExpressionStatement","src":"16495:28:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_cleanValidators","nameLocation":"16222:16:81","parameters":{"id":55887,"nodeType":"ParameterList","parameters":[],"src":"16238:2:81"},"returnParameters":{"id":55888,"nodeType":"ParameterList","parameters":[],"src":"16249:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55982,"nodeType":"FunctionDefinition","src":"16536:442:81","nodes":[],"body":{"id":55981,"nodeType":"Block","src":"16603:375:81","nodes":[],"statements":[{"assignments":[55935],"declarations":[{"constant":false,"id":55935,"mutability":"mutable","name":"router","nameLocation":"16629:6:81","nodeType":"VariableDeclaration","scope":55981,"src":"16613:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55934,"nodeType":"UserDefinedTypeName","pathNode":{"id":55933,"name":"Storage","nameLocations":["16613:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"16613:7:81"},"referencedDeclaration":53684,"src":"16613:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"id":55938,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55936,"name":"_getStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55995,"src":"16638:11:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Storage_$53684_storage_ptr_$","typeString":"function () view returns (struct IRouter.Storage storage pointer)"}},"id":55937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16638:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"16613:38:81"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":55940,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16670:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16677:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16670:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16692:6:81","memberName":"length","nodeType":"MemberAccess","src":"16670:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16702:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16670:33:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"70726576696f75732076616c696461746f727320776572656e27742072656d6f766564","id":55945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16705:37:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_cbe432dd5148cbcd3965634d2fa4c608dba4822bc479da840b7f667e6442b9d2","typeString":"literal_string \"previous validators weren't removed\""},"value":"previous validators weren't removed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cbe432dd5148cbcd3965634d2fa4c608dba4822bc479da840b7f667e6442b9d2","typeString":"literal_string \"previous validators weren't removed\""}],"id":55939,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"16662:7:81","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16662:81:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55947,"nodeType":"ExpressionStatement","src":"16662:81:81"},{"body":{"id":55973,"nodeType":"Block","src":"16808:113:81","statements":[{"assignments":[55960],"declarations":[{"constant":false,"id":55960,"mutability":"mutable","name":"validator","nameLocation":"16830:9:81","nodeType":"VariableDeclaration","scope":55973,"src":"16822:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55959,"name":"address","nodeType":"ElementaryTypeName","src":"16822:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55964,"initialValue":{"baseExpression":{"id":55961,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16842:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55963,"indexExpression":{"id":55962,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16859:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16842:19:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16822:39:81"},{"expression":{"id":55971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":55965,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16875:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16882:10:81","memberName":"validators","nodeType":"MemberAccess","referencedDeclaration":53667,"src":"16875:17:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55969,"indexExpression":{"id":55967,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55960,"src":"16893:9:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16875:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":55970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16906:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"16875:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55972,"nodeType":"ExpressionStatement","src":"16875:35:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55952,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16774:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55953,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16778:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16795:6:81","memberName":"length","nodeType":"MemberAccess","src":"16778:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16774:27:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55974,"initializationExpression":{"assignments":[55949],"declarations":[{"constant":false,"id":55949,"mutability":"mutable","name":"i","nameLocation":"16767:1:81","nodeType":"VariableDeclaration","scope":55974,"src":"16759:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55948,"name":"uint256","nodeType":"ElementaryTypeName","src":"16759:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55951,"initialValue":{"hexValue":"30","id":55950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16771:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16759:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16803:3:81","subExpression":{"id":55956,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55949,"src":"16803:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55958,"nodeType":"ExpressionStatement","src":"16803:3:81"},"nodeType":"ForStatement","src":"16754:167:81"},{"expression":{"id":55979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":55975,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55935,"src":"16931:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage storage pointer"}},"id":55977,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"16938:14:81","memberName":"validatorsKeys","nodeType":"MemberAccess","referencedDeclaration":53670,"src":"16931:21:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55978,"name":"_validatorsArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"16955:16:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"16931:40:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":55980,"nodeType":"ExpressionStatement","src":"16931:40:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setValidators","nameLocation":"16545:14:81","parameters":{"id":55931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55930,"mutability":"mutable","name":"_validatorsArray","nameLocation":"16577:16:81","nodeType":"VariableDeclaration","scope":55982,"src":"16560:33:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55928,"name":"address","nodeType":"ElementaryTypeName","src":"16560:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55929,"nodeType":"ArrayTypeName","src":"16560:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"16559:35:81"},"returnParameters":{"id":55932,"nodeType":"ParameterList","parameters":[],"src":"16603:0:81"},"scope":55996,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":55995,"nodeType":"FunctionDefinition","src":"16984:222:81","nodes":[],"body":{"id":55994,"nodeType":"Block","src":"17053:153:81","nodes":[],"statements":[{"assignments":[55989],"declarations":[{"constant":false,"id":55989,"mutability":"mutable","name":"slot","nameLocation":"17071:4:81","nodeType":"VariableDeclaration","scope":55994,"src":"17063:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":55988,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17063:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":55992,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55990,"name":"getStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54597,"src":"17078:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":55991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17078:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"17063:31:81"},{"AST":{"nativeSrc":"17157:43:81","nodeType":"YulBlock","src":"17157:43:81","statements":[{"nativeSrc":"17171:19:81","nodeType":"YulAssignment","src":"17171:19:81","value":{"name":"slot","nativeSrc":"17186:4:81","nodeType":"YulIdentifier","src":"17186:4:81"},"variableNames":[{"name":"router.slot","nativeSrc":"17171:11:81","nodeType":"YulIdentifier","src":"17171:11:81"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":55986,"isOffset":false,"isSlot":true,"src":"17171:11:81","suffix":"slot","valueSize":1},{"declaration":55989,"isOffset":false,"isSlot":false,"src":"17186:4:81","valueSize":1}],"id":55993,"nodeType":"InlineAssembly","src":"17148:52:81"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_getStorage","nameLocation":"16993:11:81","parameters":{"id":55983,"nodeType":"ParameterList","parameters":[],"src":"17004:2:81"},"returnParameters":{"id":55987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55986,"mutability":"mutable","name":"router","nameLocation":"17045:6:81","nodeType":"VariableDeclaration","scope":55995,"src":"17029:22:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"},"typeName":{"id":55985,"nodeType":"UserDefinedTypeName","pathNode":{"id":55984,"name":"Storage","nameLocations":["17029:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53684,"src":"17029:7:81"},"referencedDeclaration":53684,"src":"17029:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_Storage_$53684_storage_ptr","typeString":"struct IRouter.Storage"}},"visibility":"internal"}],"src":"17028:24:81"},"scope":55996,"stateMutability":"view","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[{"baseName":{"id":54400,"name":"IRouter","nameLocations":["800:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":53951,"src":"800:7:81"},"id":54401,"nodeType":"InheritanceSpecifier","src":"800:7:81"},{"baseName":{"id":54402,"name":"OwnableUpgradeable","nameLocations":["809:18:81"],"nodeType":"IdentifierPath","referencedDeclaration":39024,"src":"809:18:81"},"id":54403,"nodeType":"InheritanceSpecifier","src":"809:18:81"},{"baseName":{"id":54404,"name":"ReentrancyGuardTransient","nameLocations":["829:24:81"],"nodeType":"IdentifierPath","referencedDeclaration":42400,"src":"829:24:81"},"id":54405,"nodeType":"InheritanceSpecifier","src":"829:24:81"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[55996,42400,39024,40172,39278,53951],"name":"Router","nameLocation":"790:6:81","scope":55997,"usedErrors":[38860,38865,39041,39044,42267,42273,42344,43050,43055,43060],"usedEvents":[38871,39049,53748,53755,53762,53769,53772,53775,53780,53785]}],"license":"UNLICENSED"},"id":81} \ No newline at end of file From 7343b184731fda66797cf17c2d8427bac76ee569 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 22 Aug 2024 13:08:36 +0200 Subject: [PATCH 34/44] fix test --- ethexe/sequencer/src/lib.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 565a4ffa430..3fce5b5c66e 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -745,15 +745,13 @@ mod tests { let candidate = Sequencer::block_commitments_candidate(&commitments, commitment2.block_hash, threshold) .expect("Must have candidate"); - let mut expected_digests = [commitment1.as_digest(), commitment2.as_digest()]; - expected_digests.sort(); + let expected_digests = [commitment1.as_digest(), commitment2.as_digest()]; assert_eq!(candidate.digests(), expected_digests.as_slice()); let candidate = Sequencer::block_commitments_candidate(&commitments, commitment3.block_hash, threshold) .expect("Must have candidate"); - let mut expected_digests = [commitment1.as_digest(), commitment3.as_digest()]; - expected_digests.sort(); + let expected_digests = [commitment1.as_digest(), commitment3.as_digest()]; assert_eq!(candidate.digests(), expected_digests.as_slice()); } From aa05de38c1a7a3c597c975c0b8c61cac2a15f0af Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Thu, 22 Aug 2024 15:03:31 +0200 Subject: [PATCH 35/44] threshold_percentage -> threshold --- ethexe/cli/src/service.rs | 4 +--- ethexe/ethereum/src/router/mod.rs | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index ac4b7bb336d..027e75a3dbb 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -110,9 +110,7 @@ impl Service { let validators = router_query.validators().await?; log::info!("👥 Validators set: {validators:?}"); - let threshold_percentage = router_query.threshold_percentage().await?; - // See Router.sol validatorsThreshold impl - let threshold = (validators.len() as u64 * threshold_percentage + 9999) / 10000; + let threshold = router_query.threshold().await?; log::info!("🔒 Multisig threshold: {threshold} / {}", validators.len()); let query = ethexe_observer::Query::new( diff --git a/ethexe/ethereum/src/router/mod.rs b/ethexe/ethereum/src/router/mod.rs index e8b93e49635..7b14c93fa54 100644 --- a/ethexe/ethereum/src/router/mod.rs +++ b/ethexe/ethereum/src/router/mod.rs @@ -279,9 +279,9 @@ impl RouterQuery { .map_err(Into::into) } - pub async fn threshold_percentage(&self) -> Result { + pub async fn threshold(&self) -> Result { self.instance - .signingThresholdPercentage() + .validatorsThreshold() .call() .await .map(|res| res._0.to()) From b66b33cc52f578f3802f4963787c164df7f529b7 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Mon, 26 Aug 2024 12:55:13 +0200 Subject: [PATCH 36/44] review fixes --- ethexe/network/src/lib.rs | 6 ++-- ethexe/sequencer/src/agro.rs | 37 ++++++++++---------- ethexe/sequencer/src/lib.rs | 64 ++++++++++++++++----------------- ethexe/signer/src/digest.rs | 68 ++++++++++++++++++++---------------- ethexe/signer/src/lib.rs | 4 +-- ethexe/validator/Cargo.toml | 2 +- ethexe/validator/src/lib.rs | 33 +++++++++-------- 7 files changed, 110 insertions(+), 104 deletions(-) diff --git a/ethexe/network/src/lib.rs b/ethexe/network/src/lib.rs index 73f1e466302..62336f64fd5 100644 --- a/ethexe/network/src/lib.rs +++ b/ethexe/network/src/lib.rs @@ -112,7 +112,7 @@ impl NetworkService { #[derive(Debug)] enum NetworkSenderEvent { - Message { data: Vec }, + PublishMessage { data: Vec }, } /// Communication with [`NetworkEventLoop`] @@ -125,7 +125,7 @@ impl NetworkSender { pub fn publish_message(&self, data: impl Into>) { let _res = self .tx - .send(NetworkSenderEvent::Message { data: data.into() }); + .send(NetworkSenderEvent::PublishMessage { data: data.into() }); } } @@ -378,7 +378,7 @@ impl NetworkEventLoop { fn handle_network_rx_event(&mut self, event: NetworkSenderEvent) { match event { - NetworkSenderEvent::Message { data } => { + NetworkSenderEvent::PublishMessage { data } => { if let Err(e) = self .swarm .behaviour_mut() diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index fa4d5b1866f..6f051bad78e 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -19,17 +19,17 @@ //! Abstract commitment aggregator. use anyhow::Result; -use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; +use ethexe_signer::{Address, Digest, PublicKey, Signature, Signer, ToDigest}; use parity_scale_codec::{Decode, Encode}; use std::collections::BTreeMap; #[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] -pub struct AggregatedCommitments { +pub struct AggregatedCommitments { pub commitments: Vec, pub signature: Signature, } -impl AggregatedCommitments { +impl AggregatedCommitments { pub fn aggregate_commitments( commitments: Vec, signer: &Signer, @@ -37,7 +37,7 @@ impl AggregatedCommitments { router_address: Address, ) -> Result> { let signature = - sign_commitments_digest(commitments.as_digest(), signer, pub_key, router_address)?; + sign_commitments_digest(commitments.to_digest(), signer, pub_key, router_address)?; Ok(AggregatedCommitments { commitments, @@ -47,7 +47,7 @@ impl AggregatedCommitments { pub fn recover(&self, router_address: Address) -> Result
{ recover_from_commitments_digest( - self.commitments.as_digest(), + self.commitments.to_digest(), &self.signature, router_address, ) @@ -81,7 +81,7 @@ impl MultisignedCommitmentDigests { } Ok(Self { - digest: digests.as_digest(), + digest: digests.to_digest(), digests, signatures: BTreeMap::new(), }) @@ -115,12 +115,12 @@ impl MultisignedCommitmentDigests { } } -pub(crate) struct MultisignedCommitments { +pub(crate) struct MultisignedCommitments { commitments: Vec, signatures: BTreeMap, } -impl MultisignedCommitments { +impl MultisignedCommitments { pub fn from_multisigned_digests( multisigned: MultisignedCommitmentDigests, get_commitment: impl FnMut(Digest) -> C, @@ -167,13 +167,14 @@ fn recover_from_commitments_digest( } fn to_router_digest(commitments_digest: Digest, router_address: Address) -> Digest { + // See explanation: https://eips.ethereum.org/EIPS/eip-191 [ [0x19, 0x00].as_ref(), router_address.0.as_ref(), commitments_digest.as_ref(), ] .concat() - .as_digest() + .to_digest() } #[cfg(test)] @@ -185,9 +186,9 @@ mod tests { #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct MyComm([u8; 2]); - impl AsDigest for MyComm { - fn as_digest(&self) -> Digest { - self.0.as_digest() + impl ToDigest for MyComm { + fn to_digest(&self) -> Digest { + self.0.to_digest() } } @@ -204,7 +205,7 @@ mod tests { let router_address = Address([0x01; 20]); let commitments = vec![MyComm([1, 2]), MyComm([3, 4])]; - let commitments_digest = commitments.as_digest(); + let commitments_digest = commitments.to_digest(); let signature = sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); let recovered = @@ -248,14 +249,14 @@ mod tests { let router_address = Address([0x01; 20]); let commitments = [MyComm([1, 2]), MyComm([3, 4])]; - let digests = commitments.map(|c| c.as_digest()); + let digests = commitments.map(|c| c.to_digest()); let mut multisigned = MultisignedCommitmentDigests::new(digests.into_iter().collect()).unwrap(); assert_eq!(multisigned.digests(), digests.as_slice()); assert_eq!(multisigned.signatures().len(), 0); - let commitments_digest = commitments.as_digest(); + let commitments_digest = commitments.to_digest(); let signature = sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); @@ -275,15 +276,15 @@ mod tests { let router_address = Address([1; 20]); let commitments = [MyComm([1, 2]), MyComm([3, 4])]; - let digests = commitments.map(|c| c.as_digest()); + let digests = commitments.map(|c| c.to_digest()); let mut commitments_map: BTreeMap<_, _> = commitments .into_iter() - .map(|c| (c.as_digest(), c)) + .map(|c| (c.to_digest(), c)) .collect(); let mut multisigned = MultisignedCommitmentDigests::new(digests.into_iter().collect()).unwrap(); - let commitments_digest = commitments.as_digest(); + let commitments_digest = commitments.to_digest(); let signature = sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 3fce5b5c66e..def9c657a70 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -25,7 +25,7 @@ use anyhow::{anyhow, Result}; use ethexe_common::router::{BlockCommitment, CodeCommitment}; use ethexe_ethereum::Ethereum; use ethexe_observer::Event; -use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; +use ethexe_signer::{Address, Digest, PublicKey, Signature, Signer, ToDigest}; use gprimitives::H256; use std::{ collections::{BTreeMap, BTreeSet, HashSet, VecDeque}, @@ -328,7 +328,7 @@ impl Sequencer { ) } - fn process_multisigned_candidate( + fn process_multisigned_candidate( candidate: &mut Option, commitments: &mut CommitmentsMap, threshold: u64, @@ -397,7 +397,7 @@ impl Sequencer { Ok(()) } - fn receive_commitments( + fn receive_commitments( aggregated: AggregatedCommitments, validators: &HashSet
, router_address: Address, @@ -411,7 +411,7 @@ impl Sequencer { for commitment in aggregated.commitments { commitments_storage - .entry(commitment.as_digest()) + .entry(commitment.to_digest()) .or_insert_with(|| CommitmentAndOrigins { commitment, origins: Default::default(), @@ -466,9 +466,9 @@ mod tests { #[derive(Clone, Copy, Debug, PartialEq, Eq)] struct TestComm([u8; 2]); - impl AsDigest for TestComm { - fn as_digest(&self) -> Digest { - self.0.as_digest() + impl ToDigest for TestComm { + fn to_digest(&self) -> Digest { + self.0.to_digest() } } @@ -490,7 +490,7 @@ mod tests { let validator1 = validator1_pub_key.to_address(); let commitments = [TestComm([0, 1]), TestComm([2, 3])]; - let commitments_digest = commitments.as_digest(); + let commitments_digest = commitments.to_digest(); let signature = agro::sign_commitments_digest( commitments_digest, &signer, @@ -509,7 +509,7 @@ mod tests { .expect_err("No candidate is provided"); let mut signatures: BTreeMap<_, _> = Default::default(); - let digests: Vec<_> = commitments.iter().map(AsDigest::as_digest).collect(); + let digests: Vec<_> = commitments.iter().map(ToDigest::to_digest).collect(); let mut candidate = MultisignedCommitmentDigests::new(digests.clone()).unwrap(); Sequencer::receive_signature( @@ -624,14 +624,14 @@ mod tests { .unwrap(); expected_commitments_storage.insert( - commitments[0].as_digest(), + commitments[0].to_digest(), CommitmentAndOrigins { commitment: commitments[0], origins: [validator1].iter().cloned().collect(), }, ); expected_commitments_storage.insert( - commitments[1].as_digest(), + commitments[1].to_digest(), CommitmentAndOrigins { commitment: commitments[1], origins: [validator1].iter().cloned().collect(), @@ -660,12 +660,12 @@ mod tests { .unwrap(); expected_commitments_storage - .get_mut(&commitments[0].as_digest()) + .get_mut(&commitments[0].to_digest()) .unwrap() .origins .insert(validator2); expected_commitments_storage - .get_mut(&commitments[1].as_digest()) + .get_mut(&commitments[1].to_digest()) .unwrap() .origins .insert(validator2); @@ -702,7 +702,7 @@ mod tests { assert!(candidate.is_none()); commitments.insert( - commitment1.as_digest(), + commitment1.to_digest(), CommitmentAndOrigins { commitment: commitment1.clone(), origins: Default::default(), @@ -715,22 +715,22 @@ mod tests { let candidate = Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, 0) .expect("Must have candidate"); - assert_eq!(candidate.digests(), [commitment1.as_digest()].as_slice()); + assert_eq!(candidate.digests(), [commitment1.to_digest()].as_slice()); commitments - .get_mut(&commitment1.as_digest()) + .get_mut(&commitment1.to_digest()) .unwrap() .origins .extend([Address([1; 20]), Address([2; 20])]); commitments.insert( - commitment2.as_digest(), + commitment2.to_digest(), CommitmentAndOrigins { commitment: commitment2.clone(), origins: [[1; 20], [2; 20]].map(Address).iter().cloned().collect(), }, ); commitments.insert( - commitment3.as_digest(), + commitment3.to_digest(), CommitmentAndOrigins { commitment: commitment3.clone(), origins: [[1; 20], [2; 20]].map(Address).iter().cloned().collect(), @@ -740,18 +740,18 @@ mod tests { let candidate = Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, threshold) .expect("Must have candidate"); - assert_eq!(candidate.digests(), [commitment1.as_digest()].as_slice()); + assert_eq!(candidate.digests(), [commitment1.to_digest()].as_slice()); let candidate = Sequencer::block_commitments_candidate(&commitments, commitment2.block_hash, threshold) .expect("Must have candidate"); - let expected_digests = [commitment1.as_digest(), commitment2.as_digest()]; + let expected_digests = [commitment1.to_digest(), commitment2.to_digest()]; assert_eq!(candidate.digests(), expected_digests.as_slice()); let candidate = Sequencer::block_commitments_candidate(&commitments, commitment3.block_hash, threshold) .expect("Must have candidate"); - let expected_digests = [commitment1.as_digest(), commitment3.as_digest()]; + let expected_digests = [commitment1.to_digest(), commitment3.to_digest()]; assert_eq!(candidate.digests(), expected_digests.as_slice()); } @@ -778,7 +778,7 @@ mod tests { assert!(candidate.is_none()); commitments.insert( - commitment1.as_digest(), + commitment1.to_digest(), CommitmentAndOrigins { commitment: commitment1.clone(), origins: Default::default(), @@ -788,7 +788,7 @@ mod tests { assert!(candidate.is_none()); commitments - .get_mut(&commitment1.as_digest()) + .get_mut(&commitment1.to_digest()) .unwrap() .origins .insert(Address([1; 20])); @@ -796,17 +796,17 @@ mod tests { assert!(candidate.is_none()); commitments - .get_mut(&commitment1.as_digest()) + .get_mut(&commitment1.to_digest()) .unwrap() .origins .insert(Address([2; 20])); let candidate = Sequencer::code_commitments_candidate(&commitments, threshold) .expect("Must have candidate"); - assert_eq!(candidate.digests(), [commitment1.as_digest()].as_slice()); + assert_eq!(candidate.digests(), [commitment1.to_digest()].as_slice()); assert!(candidate.signatures().is_empty()); commitments.insert( - commitment2.as_digest(), + commitment2.to_digest(), CommitmentAndOrigins { commitment: commitment2.clone(), origins: [Address([3; 20]), Address([4; 20])] @@ -817,13 +817,13 @@ mod tests { ); let candidate = Sequencer::code_commitments_candidate(&commitments, threshold) .expect("Must have candidate"); - let mut expected_digests = [commitment1.as_digest(), commitment2.as_digest()]; + let mut expected_digests = [commitment1.to_digest(), commitment2.to_digest()]; expected_digests.sort(); assert_eq!(candidate.digests(), expected_digests.as_slice()); assert!(candidate.signatures().is_empty()); commitments.insert( - commitment3.as_digest(), + commitment3.to_digest(), CommitmentAndOrigins { commitment: commitment3, origins: [Address([5; 20])].iter().cloned().collect(), @@ -862,7 +862,7 @@ mod tests { // Test not enough signatures let mut candidate = - Some(MultisignedCommitmentDigests::new(vec![b"gear".as_digest()]).unwrap()); + Some(MultisignedCommitmentDigests::new(vec![b"gear".to_digest()]).unwrap()); assert!(Sequencer::process_multisigned_candidate( &mut candidate, &mut CommitmentsMap::::new(), @@ -882,7 +882,7 @@ mod tests { .iter() .map(|commitment| { ( - commitment.as_digest(), + commitment.to_digest(), CommitmentAndOrigins { commitment: *commitment, origins: origins.clone(), @@ -892,12 +892,12 @@ mod tests { .collect(); let mut candidate = - MultisignedCommitmentDigests::new(commitments.iter().map(|c| c.as_digest()).collect()) + MultisignedCommitmentDigests::new(commitments.iter().map(|c| c.to_digest()).collect()) .unwrap(); let router_address = Address([1; 20]); validators_pub_keys.iter().for_each(|pub_key| { - let commitments_digest = commitments.to_vec().as_digest(); + let commitments_digest = commitments.to_vec().to_digest(); candidate .append_signature_with_check( commitments_digest, diff --git a/ethexe/signer/src/digest.rs b/ethexe/signer/src/digest.rs index 9c14f754c12..956ae4e47f4 100644 --- a/ethexe/signer/src/digest.rs +++ b/ethexe/signer/src/digest.rs @@ -56,49 +56,55 @@ impl fmt::Display for Digest { } } +impl FromIterator for Digest { + fn from_iter>(iter: I) -> Self { + iter.into_iter().collect::>().to_digest() + } +} + /// Trait for hashing types into a Digest using Keccak256. -pub trait AsDigest { - fn as_digest(&self) -> Digest; +pub trait ToDigest { + fn to_digest(&self) -> Digest; } -impl AsDigest for Digest { - fn as_digest(&self) -> Digest { +impl ToDigest for Digest { + fn to_digest(&self) -> Digest { *self } } -impl AsDigest for [T] { - fn as_digest(&self) -> Digest { +impl ToDigest for [T] { + fn to_digest(&self) -> Digest { let mut message = Vec::with_capacity(self.len() * size_of::()); for item in self.iter() { - message.extend_from_slice(item.as_digest().as_ref()); + message.extend_from_slice(item.to_digest().as_ref()); } - message.as_digest() + message.to_digest() } } -impl AsDigest for Vec { - fn as_digest(&self) -> Digest { - self.as_slice().as_digest() +impl ToDigest for Vec { + fn to_digest(&self) -> Digest { + self.as_slice().to_digest() } } -impl AsDigest for [u8] { - fn as_digest(&self) -> Digest { +impl ToDigest for [u8] { + fn to_digest(&self) -> Digest { Digest(sha3::Keccak256::digest(self).into()) } } -impl AsDigest for CodeCommitment { - fn as_digest(&self) -> Digest { - self.encode().as_digest() +impl ToDigest for CodeCommitment { + fn to_digest(&self) -> Digest { + self.encode().to_digest() } } -impl AsDigest for StateTransition { - fn as_digest(&self) -> Digest { +impl ToDigest for StateTransition { + fn to_digest(&self) -> Digest { // State transition basic fields. let state_transition_size = // concat of fields: @@ -144,20 +150,20 @@ impl AsDigest for StateTransition { value_claims_bytes.extend_from_slice(value.to_be_bytes().as_slice()) } - let value_claims_digest = value_claims_bytes.as_digest(); + let value_claims_digest = value_claims_bytes.to_digest(); state_transition_bytes.extend_from_slice(value_claims_digest.as_ref()); // Messages field. - let messages_digest = self.messages.as_digest(); + let messages_digest = self.messages.to_digest(); state_transition_bytes.extend_from_slice(messages_digest.as_ref()); - state_transition_bytes.as_digest() + state_transition_bytes.to_digest() } } -impl AsDigest for OutgoingMessage { - fn as_digest(&self) -> Digest { +impl ToDigest for OutgoingMessage { + fn to_digest(&self) -> Digest { let message_size = // concat of fields: // id size_of::() @@ -186,12 +192,12 @@ impl AsDigest for OutgoingMessage { message.extend_from_slice(reply_details_to.as_ref()); message.extend_from_slice(reply_details_code.to_bytes().as_slice()); - message.as_digest() + message.to_digest() } } -impl AsDigest for BlockCommitment { - fn as_digest(&self) -> Digest { +impl ToDigest for BlockCommitment { + fn to_digest(&self) -> Digest { let block_commitment_size = // concat of fields: // blockHash size_of::() @@ -207,9 +213,9 @@ impl AsDigest for BlockCommitment { block_commitment_bytes.extend_from_slice(self.block_hash.as_bytes()); block_commitment_bytes.extend_from_slice(self.prev_commitment_hash.as_bytes()); block_commitment_bytes.extend_from_slice(self.pred_block_hash.as_bytes()); - block_commitment_bytes.extend_from_slice(self.transitions.as_digest().as_ref()); + block_commitment_bytes.extend_from_slice(self.transitions.to_digest().as_ref()); - block_commitment_bytes.as_digest() + block_commitment_bytes.to_digest() } } @@ -225,7 +231,7 @@ mod tests { id: CodeId::from(0), valid: true, } - .as_digest(); + .to_digest(); let state_transition = StateTransition { actor_id: ActorId::from(0), @@ -240,7 +246,7 @@ mod tests { reply_details: None, }], }; - let _digest = state_transition.as_digest(); + let _digest = state_transition.to_digest(); let transitions = vec![state_transition.clone(), state_transition]; @@ -250,6 +256,6 @@ mod tests { prev_commitment_hash: H256::from([2; 32]), transitions: transitions.clone(), }; - let _digest = block_commitment.as_digest(); + let _digest = block_commitment.to_digest(); } } diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index aeb7694d00f..906e24c98c2 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -21,7 +21,7 @@ mod digest; mod signature; -pub use digest::{AsDigest, Digest}; +pub use digest::{Digest, ToDigest}; pub use signature::Signature; use anyhow::{anyhow, Result}; @@ -182,7 +182,7 @@ impl Signer { } pub fn sign(&self, public_key: PublicKey, data: &[u8]) -> Result { - self.sign_digest(public_key, data.as_digest()) + self.sign_digest(public_key, data.to_digest()) } pub fn sign_with_addr(&self, address: Address, data: &[u8]) -> Result { diff --git a/ethexe/validator/Cargo.toml b/ethexe/validator/Cargo.toml index e513f5837cd..d6b62de06dc 100644 --- a/ethexe/validator/Cargo.toml +++ b/ethexe/validator/Cargo.toml @@ -22,5 +22,5 @@ parity-scale-codec = { workspace = true, features = ["std", "derive"] } static_init = "1.0.3" -#[dev-dependencies] +[dev-dependencies] ethexe-db.workspace = true diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 93b529b38c8..60db37a3f2f 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -22,7 +22,7 @@ use ethexe_common::{ router::{BlockCommitment, CodeCommitment}, }; use ethexe_sequencer::agro::{self, AggregatedCommitments}; -use ethexe_signer::{Address, AsDigest, Digest, PublicKey, Signature, Signer}; +use ethexe_signer::{Address, Digest, PublicKey, Signature, Signer, ToDigest}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; use std::ops::Not; @@ -52,13 +52,13 @@ impl From<&BlockCommitment> for BlockCommitmentValidationRequest { block_hash: commitment.block_hash, prev_commitment_hash: commitment.prev_commitment_hash, pred_block_hash: commitment.pred_block_hash, - transitions_digest: commitment.transitions.as_digest(), + transitions_digest: commitment.transitions.to_digest(), } } } -impl AsDigest for BlockCommitmentValidationRequest { - fn as_digest(&self) -> Digest { +impl ToDigest for BlockCommitmentValidationRequest { + fn to_digest(&self) -> Digest { let mut message = Vec::with_capacity(3 * size_of::() + size_of::()); message.extend_from_slice(self.block_hash.as_bytes()); @@ -66,7 +66,7 @@ impl AsDigest for BlockCommitmentValidationRequest { message.extend_from_slice(self.pred_block_hash.as_bytes()); message.extend_from_slice(self.transitions_digest.as_ref()); - message.as_digest() + message.to_digest() } } @@ -87,7 +87,7 @@ impl Validator { self.pub_key.to_address() } - pub fn aggregate(&self, commitments: Vec) -> Result> { + pub fn aggregate(&self, commitments: Vec) -> Result> { AggregatedCommitments::aggregate_commitments( commitments, &self.signer, @@ -102,12 +102,12 @@ impl Validator { requests: impl IntoIterator, ) -> Result<(Digest, Signature)> { let mut commitment_digests = Vec::new(); - for request in requests.into_iter() { - commitment_digests.push(request.as_digest()); + for request in requests { + commitment_digests.push(request.to_digest()); Self::validate_code_commitment(db, request)?; } - let commitments_digest = commitment_digests.as_digest(); + let commitments_digest = commitment_digests.to_digest(); agro::sign_commitments_digest( commitments_digest, &self.signer, @@ -124,11 +124,11 @@ impl Validator { ) -> Result<(Digest, Signature)> { let mut commitment_digests = Vec::new(); for request in requests.into_iter() { - commitment_digests.push(request.as_digest()); + commitment_digests.push(request.to_digest()); Self::validate_block_commitment(db, request)?; } - let commitments_digest = commitment_digests.as_digest(); + let commitments_digest = commitment_digests.to_digest(); agro::sign_commitments_digest( commitments_digest, &self.signer, @@ -177,9 +177,8 @@ impl Validator { .block_outcome(block_hash) .ok_or(anyhow!("Cannot get from db outcome for block {block_hash}"))? .iter() - .map(AsDigest::as_digest) - .collect::>() - .as_digest() + .map(ToDigest::to_digest) + .collect::() .ne(&transitions_digest) { return Err(anyhow!("Requested and local transitions digest mismatch")); @@ -275,8 +274,8 @@ mod tests { }; assert_eq!( - commitment.as_digest(), - BlockCommitmentValidationRequest::from(&commitment).as_digest() + commitment.to_digest(), + BlockCommitmentValidationRequest::from(&commitment).to_digest() ); } @@ -323,7 +322,7 @@ mod tests { let pred_block_hash = H256::random(); let prev_commitment_hash = H256::random(); let transitions = vec![]; - let transitions_digest = transitions.as_digest(); + let transitions_digest = transitions.to_digest(); db.set_block_end_state_is_valid(block_hash, true); db.set_block_outcome(block_hash, transitions); From 1464ac6b2f11971f89dd1a08014f486254ce2b2d Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Mon, 26 Aug 2024 13:09:34 +0200 Subject: [PATCH 37/44] RoundTimer -> StoppableTimer --- ethexe/cli/src/service.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 027e75a3dbb..02d84481c03 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -456,8 +456,8 @@ impl Service { } log::info!("⚙️ Node service starting, roles: [{}]", roles); - let mut collection_round_timer = RoundTimer::new(block_time / 4); - let mut validation_round_timer = RoundTimer::new(block_time / 4); + let mut collection_round_timer = StoppableTimer::new(block_time / 4); + let mut validation_round_timer = StoppableTimer::new(block_time / 4); loop { tokio::select! { @@ -785,12 +785,12 @@ impl Service { mod utils { use super::*; - pub(crate) struct RoundTimer { + pub(crate) struct StoppableTimer { round_duration: Duration, started: Option, } - impl RoundTimer { + impl StoppableTimer { pub fn new(round_duration: Duration) -> Self { Self { round_duration, From 276d2da41f815bd82b83cb7251861a2fe6474129 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Tue, 27 Aug 2024 21:26:54 +0200 Subject: [PATCH 38/44] refactor ToDigest using update_hasher --- ethexe/sequencer/src/agro.rs | 29 +++--- ethexe/sequencer/src/lib.rs | 10 +- ethexe/signer/src/digest.rs | 186 ++++++++++------------------------- ethexe/signer/src/lib.rs | 1 + ethexe/validator/src/lib.rs | 25 ++--- 5 files changed, 88 insertions(+), 163 deletions(-) diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 6f051bad78e..f2a48cc5196 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -36,8 +36,12 @@ impl AggregatedCommitments { pub_key: PublicKey, router_address: Address, ) -> Result> { - let signature = - sign_commitments_digest(commitments.to_digest(), signer, pub_key, router_address)?; + let signature = sign_commitments_digest( + commitments.iter().collect(), + signer, + pub_key, + router_address, + )?; Ok(AggregatedCommitments { commitments, @@ -47,7 +51,7 @@ impl AggregatedCommitments { pub fn recover(&self, router_address: Address) -> Result
{ recover_from_commitments_digest( - self.commitments.to_digest(), + self.commitments.iter().collect(), &self.signature, router_address, ) @@ -81,7 +85,7 @@ impl MultisignedCommitmentDigests { } Ok(Self { - digest: digests.to_digest(), + digest: digests.iter().collect(), digests, signatures: BTreeMap::new(), }) @@ -180,15 +184,18 @@ fn to_router_digest(commitments_digest: Digest, router_address: Address) -> Dige #[cfg(test)] mod tests { use super::*; - use ethexe_signer::PrivateKey; + use ethexe_signer::{ + sha3::{Digest as _, Keccak256}, + PrivateKey, + }; use std::str::FromStr; #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct MyComm([u8; 2]); impl ToDigest for MyComm { - fn to_digest(&self) -> Digest { - self.0.to_digest() + fn update_hasher(&self, hasher: &mut Keccak256) { + hasher.update(self.0); } } @@ -203,9 +210,9 @@ mod tests { let pub_key = signer.add_key(private_key).unwrap(); let router_address = Address([0x01; 20]); - let commitments = vec![MyComm([1, 2]), MyComm([3, 4])]; + let commitments = [MyComm([1, 2]), MyComm([3, 4])]; - let commitments_digest = commitments.to_digest(); + let commitments_digest = commitments.iter().collect(); let signature = sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); let recovered = @@ -256,7 +263,7 @@ mod tests { assert_eq!(multisigned.digests(), digests.as_slice()); assert_eq!(multisigned.signatures().len(), 0); - let commitments_digest = commitments.to_digest(); + let commitments_digest = commitments.iter().collect(); let signature = sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); @@ -284,7 +291,7 @@ mod tests { let mut multisigned = MultisignedCommitmentDigests::new(digests.into_iter().collect()).unwrap(); - let commitments_digest = commitments.to_digest(); + let commitments_digest = commitments.iter().collect(); let signature = sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index def9c657a70..832ba4744fc 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -461,14 +461,14 @@ impl Sequencer { mod tests { use super::*; use anyhow::Ok; - use ethexe_signer::PrivateKey; + use ethexe_signer::{sha3, PrivateKey}; #[derive(Clone, Copy, Debug, PartialEq, Eq)] struct TestComm([u8; 2]); impl ToDigest for TestComm { - fn to_digest(&self) -> Digest { - self.0.to_digest() + fn update_hasher(&self, hasher: &mut sha3::Keccak256) { + sha3::Digest::update(hasher, self.0); } } @@ -490,7 +490,7 @@ mod tests { let validator1 = validator1_pub_key.to_address(); let commitments = [TestComm([0, 1]), TestComm([2, 3])]; - let commitments_digest = commitments.to_digest(); + let commitments_digest = commitments.iter().collect(); let signature = agro::sign_commitments_digest( commitments_digest, &signer, @@ -897,7 +897,7 @@ mod tests { let router_address = Address([1; 20]); validators_pub_keys.iter().for_each(|pub_key| { - let commitments_digest = commitments.to_vec().to_digest(); + let commitments_digest = commitments.iter().collect(); candidate .append_signature_with_check( commitments_digest, diff --git a/ethexe/signer/src/digest.rs b/ethexe/signer/src/digest.rs index 956ae4e47f4..4315d6df70a 100644 --- a/ethexe/signer/src/digest.rs +++ b/ethexe/signer/src/digest.rs @@ -19,15 +19,10 @@ //! Keccak256 digest type. Implements AsDigest hashing for ethexe common types. use core::fmt; -use ethexe_common::router::{ - BlockCommitment, CodeCommitment, OutgoingMessage, StateTransition, ValueClaim, -}; -use gprimitives::{MessageId, H256}; +use ethexe_common::router::{BlockCommitment, CodeCommitment, OutgoingMessage, StateTransition}; use parity_scale_codec::{Decode, Encode}; use sha3::Digest as _; -use crate::Address; - #[derive( Clone, Copy, @@ -56,173 +51,100 @@ impl fmt::Display for Digest { } } -impl FromIterator for Digest { - fn from_iter>(iter: I) -> Self { - iter.into_iter().collect::>().to_digest() +impl<'a> FromIterator<&'a Digest> for Digest { + fn from_iter>(iter: I) -> Self { + let mut hasher = sha3::Keccak256::new(); + for digest in iter { + hasher.update(digest.as_ref()); + } + Digest(hasher.finalize().into()) } } -/// Trait for hashing types into a Digest using Keccak256. -pub trait ToDigest { - fn to_digest(&self) -> Digest; -} - -impl ToDigest for Digest { - fn to_digest(&self) -> Digest { - *self +impl FromIterator for Digest { + fn from_iter>(iter: I) -> Self { + let mut hasher = sha3::Keccak256::new(); + for digest in iter { + hasher.update(digest.as_ref()); + } + Digest(hasher.finalize().into()) } } -impl ToDigest for [T] { +/// Trait for hashing types into a Digest using Keccak256. +pub trait ToDigest { fn to_digest(&self) -> Digest { - let mut message = Vec::with_capacity(self.len() * size_of::()); - - for item in self.iter() { - message.extend_from_slice(item.to_digest().as_ref()); - } - - message.to_digest() + let mut hasher = sha3::Keccak256::new(); + self.update_hasher(&mut hasher); + Digest(hasher.finalize().into()) } + + fn update_hasher(&self, hasher: &mut sha3::Keccak256); } -impl ToDigest for Vec { - fn to_digest(&self) -> Digest { - self.as_slice().to_digest() +impl<'a, T: ToDigest> FromIterator<&'a T> for Digest { + fn from_iter>(iter: I) -> Self { + iter.into_iter().map(|item| item.to_digest()).collect() } } impl ToDigest for [u8] { - fn to_digest(&self) -> Digest { - Digest(sha3::Keccak256::digest(self).into()) + fn update_hasher(&self, hasher: &mut sha3::Keccak256) { + hasher.update(self); } } impl ToDigest for CodeCommitment { - fn to_digest(&self) -> Digest { - self.encode().to_digest() + fn update_hasher(&self, hasher: &mut sha3::Keccak256) { + hasher.update(self.encode().as_slice()); } } impl ToDigest for StateTransition { - fn to_digest(&self) -> Digest { - // State transition basic fields. - - let state_transition_size = // concat of fields: - // actorId - size_of::
() - // newStateHash - + size_of::() - // valueToReceive - + size_of::() - // digest(valueClaimsBytes) - + size_of::() - // digest(messagesHashesBytes) - + size_of::(); - - let mut state_transition_bytes = Vec::with_capacity(state_transition_size); - - state_transition_bytes.extend_from_slice(self.actor_id.to_address_lossy().as_bytes()); - state_transition_bytes.extend_from_slice(self.new_state_hash.as_bytes()); - state_transition_bytes.extend_from_slice(self.value_to_receive.to_be_bytes().as_slice()); - - // TODO (breathx): consider SeqHash for ValueClaim, so hashing of inner fields. - // Value claims field. - - let value_claim_size = // concat of fields: - // messageId - size_of::() - // destination - + size_of::
() - // value - + size_of::(); - - let mut value_claims_bytes = Vec::with_capacity(self.value_claims.len() * value_claim_size); - - for ValueClaim { - message_id, - destination, - value, - } in &self.value_claims - { - value_claims_bytes.extend_from_slice(message_id.as_ref()); - value_claims_bytes.extend_from_slice(destination.to_address_lossy().as_bytes()); - // TODO (breathx): double check if we should use BIG endian. - value_claims_bytes.extend_from_slice(value.to_be_bytes().as_slice()) + fn update_hasher(&self, hasher: &mut sha3::Keccak256) { + hasher.update(self.actor_id.to_address_lossy().as_bytes()); + hasher.update(self.new_state_hash.as_bytes()); + hasher.update(self.value_to_receive.to_be_bytes().as_slice()); + + let mut value_hasher = sha3::Keccak256::new(); + for value_claim in &self.value_claims { + value_hasher.update(value_claim.message_id.as_ref()); + value_hasher.update(value_claim.destination.to_address_lossy().as_bytes()); + value_hasher.update(value_claim.value.to_be_bytes().as_slice()); } + hasher.update(value_hasher.finalize().as_slice()); - let value_claims_digest = value_claims_bytes.to_digest(); - state_transition_bytes.extend_from_slice(value_claims_digest.as_ref()); - - // Messages field. - - let messages_digest = self.messages.to_digest(); - state_transition_bytes.extend_from_slice(messages_digest.as_ref()); - - state_transition_bytes.to_digest() + hasher.update(self.messages.iter().collect::().as_ref()); } } impl ToDigest for OutgoingMessage { - fn to_digest(&self) -> Digest { - let message_size = // concat of fields: - // id - size_of::() - // destination - + size_of::
() - // payload - + self.payload.len() - // value - + size_of::() - // replyDetails.to - + size_of::() - // replyDetails.code - + size_of::<[u8; 4]>(); - - let mut message = Vec::with_capacity(message_size); - - message.extend_from_slice(self.id.as_ref()); - message.extend_from_slice(self.destination.to_address_lossy().as_bytes()); - message.extend_from_slice(&self.payload); - // TODO (breathx): double check big endian. - message.extend_from_slice(self.value.to_be_bytes().as_slice()); - + fn update_hasher(&self, hasher: &mut sha3::Keccak256) { let (reply_details_to, reply_details_code) = self.reply_details.unwrap_or_default().into_parts(); - message.extend_from_slice(reply_details_to.as_ref()); - message.extend_from_slice(reply_details_code.to_bytes().as_slice()); - - message.to_digest() + hasher.update(self.id.as_ref()); + hasher.update(self.destination.to_address_lossy().as_bytes()); + hasher.update(self.payload.as_slice()); + hasher.update(self.value.to_be_bytes().as_slice()); + hasher.update(reply_details_to.as_ref()); + hasher.update(reply_details_code.to_bytes().as_slice()); } } impl ToDigest for BlockCommitment { - fn to_digest(&self) -> Digest { - let block_commitment_size = // concat of fields: - // blockHash - size_of::() - // prevCommitmentHash - + size_of::() - // predBlockHash - + size_of::() - // hash(transitionsHashesBytes) - + size_of::(); - - let mut block_commitment_bytes = Vec::with_capacity(block_commitment_size); - - block_commitment_bytes.extend_from_slice(self.block_hash.as_bytes()); - block_commitment_bytes.extend_from_slice(self.prev_commitment_hash.as_bytes()); - block_commitment_bytes.extend_from_slice(self.pred_block_hash.as_bytes()); - block_commitment_bytes.extend_from_slice(self.transitions.to_digest().as_ref()); - - block_commitment_bytes.to_digest() + fn update_hasher(&self, hasher: &mut sha3::Keccak256) { + hasher.update(self.block_hash.as_bytes()); + hasher.update(self.prev_commitment_hash.as_bytes()); + hasher.update(self.pred_block_hash.as_bytes()); + hasher.update(self.transitions.iter().collect::().as_ref()); } } #[cfg(test)] mod tests { use super::*; - use gprimitives::{ActorId, CodeId}; + use gprimitives::{ActorId, CodeId, MessageId, H256}; use std::vec; #[test] diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index 906e24c98c2..2a90c6f66a6 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -22,6 +22,7 @@ mod digest; mod signature; pub use digest::{Digest, ToDigest}; +pub use sha3; pub use signature::Signature; use anyhow::{anyhow, Result}; diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 60db37a3f2f..0fa3dfa18d9 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -22,7 +22,7 @@ use ethexe_common::{ router::{BlockCommitment, CodeCommitment}, }; use ethexe_sequencer::agro::{self, AggregatedCommitments}; -use ethexe_signer::{Address, Digest, PublicKey, Signature, Signer, ToDigest}; +use ethexe_signer::{sha3, Address, Digest, PublicKey, Signature, Signer, ToDigest}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; use std::ops::Not; @@ -52,21 +52,17 @@ impl From<&BlockCommitment> for BlockCommitmentValidationRequest { block_hash: commitment.block_hash, prev_commitment_hash: commitment.prev_commitment_hash, pred_block_hash: commitment.pred_block_hash, - transitions_digest: commitment.transitions.to_digest(), + transitions_digest: commitment.transitions.iter().collect(), } } } impl ToDigest for BlockCommitmentValidationRequest { - fn to_digest(&self) -> Digest { - let mut message = Vec::with_capacity(3 * size_of::() + size_of::()); - - message.extend_from_slice(self.block_hash.as_bytes()); - message.extend_from_slice(self.prev_commitment_hash.as_bytes()); - message.extend_from_slice(self.pred_block_hash.as_bytes()); - message.extend_from_slice(self.transitions_digest.as_ref()); - - message.to_digest() + fn update_hasher(&self, hasher: &mut sha3::Keccak256) { + sha3::Digest::update(hasher, self.block_hash.as_bytes()); + sha3::Digest::update(hasher, self.prev_commitment_hash.as_bytes()); + sha3::Digest::update(hasher, self.pred_block_hash.as_bytes()); + sha3::Digest::update(hasher, self.transitions_digest.as_ref()); } } @@ -107,7 +103,7 @@ impl Validator { Self::validate_code_commitment(db, request)?; } - let commitments_digest = commitment_digests.to_digest(); + let commitments_digest = commitment_digests.iter().collect(); agro::sign_commitments_digest( commitments_digest, &self.signer, @@ -128,7 +124,7 @@ impl Validator { Self::validate_block_commitment(db, request)?; } - let commitments_digest = commitment_digests.to_digest(); + let commitments_digest = commitment_digests.iter().collect(); agro::sign_commitments_digest( commitments_digest, &self.signer, @@ -177,7 +173,6 @@ impl Validator { .block_outcome(block_hash) .ok_or(anyhow!("Cannot get from db outcome for block {block_hash}"))? .iter() - .map(ToDigest::to_digest) .collect::() .ne(&transitions_digest) { @@ -322,7 +317,7 @@ mod tests { let pred_block_hash = H256::random(); let prev_commitment_hash = H256::random(); let transitions = vec![]; - let transitions_digest = transitions.to_digest(); + let transitions_digest = transitions.iter().collect(); db.set_block_end_state_is_valid(block_hash, true); db.set_block_outcome(block_hash, transitions); From 7225986f2d1b72f39e60676ef9ad5cee0358eeb5 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 28 Aug 2024 08:01:19 +0200 Subject: [PATCH 39/44] review fixes --- Cargo.lock | 1 + ethexe/cli/src/service.rs | 6 ++-- ethexe/cli/src/tests.rs | 5 ++- ethexe/ethereum/src/router/events.rs | 4 ++- ethexe/ethereum/src/router/mod.rs | 2 +- ethexe/observer/src/blobs.rs | 2 +- ethexe/observer/src/observer.rs | 2 +- ethexe/observer/src/query.rs | 20 +++++++----- ethexe/rpc/src/lib.rs | 8 ++--- ethexe/sequencer/Cargo.toml | 1 + ethexe/sequencer/src/agro.rs | 32 ++++++++---------- ethexe/sequencer/src/lib.rs | 49 ++++++++++++++++------------ ethexe/signer/src/lib.rs | 5 ++- ethexe/validator/src/lib.rs | 30 +++++++---------- 14 files changed, 83 insertions(+), 84 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8fcba994378..39f8ae34ce2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5242,6 +5242,7 @@ dependencies = [ "futures", "gear-core", "gprimitives", + "indexmap 2.2.6", "log", "parity-scale-codec", "tokio", diff --git a/ethexe/cli/src/service.rs b/ethexe/cli/src/service.rs index 02d84481c03..3625993eeb3 100644 --- a/ethexe/cli/src/service.rs +++ b/ethexe/cli/src/service.rs @@ -259,7 +259,7 @@ impl Service { let blob_tx_hash = db .code_blob_tx(code_id) - .ok_or(anyhow!("Blob tx hash not found"))?; + .ok_or_else(|| anyhow!("Blob tx hash not found"))?; let code = query.download_code(code_id, blob_tx_hash).await?; @@ -307,7 +307,7 @@ impl Service { // so append it to the `wait for commitment` queue. let mut queue = db .block_commitment_queue(block_hash) - .ok_or(anyhow!("Commitment queue is not found for block"))?; + .ok_or_else(|| anyhow!("Commitment queue is not found for block"))?; queue.push_back(block_hash); db.set_block_commitment_queue(block_hash, queue); } @@ -356,7 +356,7 @@ impl Service { pred_block_hash: block_data.block_hash, prev_commitment_hash: db .block_prev_commitment(block_hash) - .ok_or(anyhow!("Prev commitment not found"))?, + .ok_or_else(|| anyhow!("Prev commitment not found"))?, transitions, }); } diff --git a/ethexe/cli/src/tests.rs b/ethexe/cli/src/tests.rs index 6b13c0d9e5e..e850d2e7a00 100644 --- a/ethexe/cli/src/tests.rs +++ b/ethexe/cli/src/tests.rs @@ -73,7 +73,10 @@ impl Listener { } pub async fn next_event(&mut self) -> Result { - self.receiver.recv().await.ok_or(anyhow!("No more events")) + self.receiver + .recv() + .await + .ok_or_else(|| anyhow!("No more events")) } pub async fn apply_until( diff --git a/ethexe/ethereum/src/router/events.rs b/ethexe/ethereum/src/router/events.rs index 441b7d4c08b..83b3c50b535 100644 --- a/ethexe/ethereum/src/router/events.rs +++ b/ethexe/ethereum/src/router/events.rs @@ -62,7 +62,9 @@ pub fn try_extract_event(log: &Log) -> Result> { b if b == BLOCK_COMMITTED => decode_log::(log)?.into(), b if b == CODE_GOT_VALIDATED => decode_log::(log)?.into(), b if b == CODE_VALIDATION_REQUESTED => { - let tx_hash = log.transaction_hash.ok_or(anyhow!("Tx hash not found"))?; + let tx_hash = log + .transaction_hash + .ok_or_else(|| anyhow!("Tx hash not found"))?; let mut event = decode_log::(log)?; diff --git a/ethexe/ethereum/src/router/mod.rs b/ethexe/ethereum/src/router/mod.rs index 815329ada75..6c89fb4ea50 100644 --- a/ethexe/ethereum/src/router/mod.rs +++ b/ethexe/ethereum/src/router/mod.rs @@ -178,7 +178,7 @@ impl Router { } } - let actor_id = actor_id.ok_or(anyhow!("Couldn't find `ProgramCreated` log"))?; + let actor_id = actor_id.ok_or_else(|| anyhow!("Couldn't find `ProgramCreated` log"))?; Ok((tx_hash, actor_id)) } diff --git a/ethexe/observer/src/blobs.rs b/ethexe/observer/src/blobs.rs index a1e0e548bf2..b9ff6d5d93f 100644 --- a/ethexe/observer/src/blobs.rs +++ b/ethexe/observer/src/blobs.rs @@ -113,7 +113,7 @@ impl BlobReader for ConsensusLayerBlobReader { let mut coder = SimpleCoder::default(); let data = coder .decode_all(&blobs) - .ok_or(anyhow!("failed to decode blobs"))? + .ok_or_else(|| anyhow!("failed to decode blobs"))? .concat(); Ok(data) diff --git a/ethexe/observer/src/observer.rs b/ethexe/observer/src/observer.rs index e0ac96532e0..a2b24e21103 100644 --- a/ethexe/observer/src/observer.rs +++ b/ethexe/observer/src/observer.rs @@ -255,7 +255,7 @@ async fn read_events_impl( let block_hash_of = |log: &alloy::rpc::types::Log| -> Result { log.block_hash .map(|v| v.0.into()) - .ok_or(anyhow!("Block hash is missing")) + .ok_or_else(|| anyhow!("Block hash is missing")) }; let mut res: HashMap<_, Vec<_>> = HashMap::new(); diff --git a/ethexe/observer/src/query.rs b/ethexe/observer/src/query.rs index 0b19f922978..f7f7f916bcf 100644 --- a/ethexe/observer/src/query.rs +++ b/ethexe/observer/src/query.rs @@ -228,9 +228,11 @@ impl Query { let mut actual_commitment_queue: VecDeque = self .database .block_commitment_queue(hash) - .ok_or(anyhow!( - "Commitment queue not found for block {hash}, possible database inconsistency." - ))? + .ok_or_else(|| { + anyhow!( + "Commitment queue not found for block {hash}, possible database inconsistency." + ) + })? .into_iter() .filter(|hash| !committed_blocks.contains(hash)) .collect(); @@ -268,7 +270,7 @@ impl Query { let program_state_hashes = self .database .block_end_program_states(parent) - .ok_or(anyhow!("parent block end states not found"))?; + .ok_or_else(|| anyhow!("parent block end states not found"))?; self.database .set_block_start_program_states(block_hash, program_state_hashes); @@ -276,7 +278,7 @@ impl Query { let queue = self .database .block_commitment_queue(parent) - .ok_or(anyhow!("parent block commitment queue not found"))?; + .ok_or_else(|| anyhow!("parent block commitment queue not found"))?; let committed_blocks = self.get_committed_blocks(block_hash).await?; let current_queue = queue .into_iter() @@ -289,12 +291,12 @@ impl Query { if self .database .block_is_empty(parent) - .ok_or(anyhow!("Cannot identify whether parent is empty"))? + .ok_or_else(|| anyhow!("Cannot identify whether parent is empty"))? { let parent_prev_commitment = self .database .block_prev_commitment(parent) - .ok_or(anyhow!("parent block prev commitment not found"))?; + .ok_or_else(|| anyhow!("parent block prev commitment not found"))?; self.database .set_block_prev_commitment(block_hash, parent_prev_commitment); } else { @@ -312,13 +314,13 @@ impl Query { .provider .get_block_by_hash(block_hash.0.into(), BlockTransactionsKind::Hashes) .await? - .ok_or(anyhow!("Block not found"))?; + .ok_or_else(|| anyhow!("Block not found"))?; let height = u32::try_from( block .header .number - .ok_or(anyhow!("Block number not found"))?, + .ok_or_else(|| anyhow!("Block number not found"))?, ) .unwrap_or_else(|err| unreachable!("Ethereum block number not fit in u32: {err}")); let timestamp = block.header.timestamp; diff --git a/ethexe/rpc/src/lib.rs b/ethexe/rpc/src/lib.rs index 0fa3282a04e..6f9987287f4 100644 --- a/ethexe/rpc/src/lib.rs +++ b/ethexe/rpc/src/lib.rs @@ -42,11 +42,9 @@ impl RpcModule { impl RpcApiServer for RpcModule { async fn block_header(&self, hash: H256) -> RpcResult { // let db = db.lock().await; - self.db.block_header(hash).ok_or(ErrorObject::borrowed( - ErrorCode::InvalidParams.code(), - "Block not found", - None, - )) + self.db.block_header(hash).ok_or_else(|| { + ErrorObject::borrowed(ErrorCode::InvalidParams.code(), "Block not found", None) + }) } } diff --git a/ethexe/sequencer/Cargo.toml b/ethexe/sequencer/Cargo.toml index 2a1bdd6d6a4..4e0c9a18285 100644 --- a/ethexe/sequencer/Cargo.toml +++ b/ethexe/sequencer/Cargo.toml @@ -23,3 +23,4 @@ log.workspace = true anyhow.workspace = true futures.workspace = true tokio.workspace = true +indexmap.workspace = true diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index f2a48cc5196..513f75809b9 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -18,8 +18,9 @@ //! Abstract commitment aggregator. -use anyhow::Result; +use anyhow::{anyhow, Result}; use ethexe_signer::{Address, Digest, PublicKey, Signature, Signer, ToDigest}; +use indexmap::IndexSet; use parity_scale_codec::{Decode, Encode}; use std::collections::BTreeMap; @@ -68,20 +69,14 @@ impl AggregatedCommitments { pub(crate) struct MultisignedCommitmentDigests { digest: Digest, - digests: Vec, + digests: IndexSet, signatures: BTreeMap, } impl MultisignedCommitmentDigests { - pub fn new(mut digests: Vec) -> Result { - let len = digests.len(); - if len == 0 { - return Err(anyhow::anyhow!("Empty commitments digests")); - } - - digests.dedup(); - if digests.len() != len { - return Err(anyhow::anyhow!("Duplicate commitments digests")); + pub fn new(digests: IndexSet) -> Result { + if digests.is_empty() { + return Err(anyhow!("Empty commitments digests")); } Ok(Self { @@ -99,7 +94,7 @@ impl MultisignedCommitmentDigests { check_origin: impl FnOnce(Address) -> Result<()>, ) -> Result<()> { if self.digest != digest { - return Err(anyhow::anyhow!("Aggregated commitments digest mismatch")); + return Err(anyhow!("Aggregated commitments digest mismatch")); } let origin = recover_from_commitments_digest(digest, &signature, router_address)?; @@ -110,8 +105,8 @@ impl MultisignedCommitmentDigests { Ok(()) } - pub fn digests(&self) -> &[Digest] { - self.digests.as_slice() + pub fn digests(&self) -> &IndexSet { + &self.digests } pub fn signatures(&self) -> &BTreeMap { @@ -256,11 +251,10 @@ mod tests { let router_address = Address([0x01; 20]); let commitments = [MyComm([1, 2]), MyComm([3, 4])]; - let digests = commitments.map(|c| c.to_digest()); + let digests: IndexSet<_> = commitments.map(|c| c.to_digest()).into_iter().collect(); - let mut multisigned = - MultisignedCommitmentDigests::new(digests.into_iter().collect()).unwrap(); - assert_eq!(multisigned.digests(), digests.as_slice()); + let mut multisigned = MultisignedCommitmentDigests::new(digests.clone()).unwrap(); + assert_eq!(multisigned.digests(), &digests); assert_eq!(multisigned.signatures().len(), 0); let commitments_digest = commitments.iter().collect(); @@ -270,7 +264,7 @@ mod tests { multisigned .append_signature_with_check(commitments_digest, signature, router_address, |_| Ok(())) .unwrap(); - assert_eq!(multisigned.digests(), digests.as_slice()); + assert_eq!(multisigned.digests(), &digests); assert_eq!(multisigned.signatures().len(), 1); } diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index 832ba4744fc..c91a455b525 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -27,6 +27,7 @@ use ethexe_ethereum::Ethereum; use ethexe_observer::Event; use ethexe_signer::{Address, Digest, PublicKey, Signature, Signer, ToDigest}; use gprimitives::H256; +use indexmap::IndexSet; use std::{ collections::{BTreeMap, BTreeSet, HashSet, VecDeque}, ops::Not, @@ -310,7 +311,7 @@ impl Sequencer { commitments: &CommitmentsMap, threshold: u64, ) -> Option { - let suitable_commitment_digests: Vec<_> = commitments + let suitable_commitment_digests: IndexSet<_> = commitments .iter() .filter_map(|(&digest, c)| (c.origins.len() as u64 >= threshold).then_some(digest)) .collect(); @@ -321,9 +322,7 @@ impl Sequencer { Some( MultisignedCommitmentDigests::new(suitable_commitment_digests).unwrap_or_else(|err| { - unreachable!( - "Guarantied by impl to be non-empty and without duplicates, but get: {err}" - ); + unreachable!("Guarantied by impl to be non-empty, but get: {err}"); }), ) } @@ -509,7 +508,7 @@ mod tests { .expect_err("No candidate is provided"); let mut signatures: BTreeMap<_, _> = Default::default(); - let digests: Vec<_> = commitments.iter().map(ToDigest::to_digest).collect(); + let digests: IndexSet<_> = commitments.iter().map(ToDigest::to_digest).collect(); let mut candidate = MultisignedCommitmentDigests::new(digests.clone()).unwrap(); Sequencer::receive_signature( @@ -540,8 +539,8 @@ mod tests { .unwrap(); signatures.insert(validator1, signature); - assert_eq!(digests.as_slice(), candidate.digests()); - assert_eq!(&signatures, candidate.signatures()); + assert_eq!(candidate.digests(), &digests); + assert_eq!(candidate.signatures(), &signatures); let validator2_private_key = validators_private_keys[1]; let validator2_pub_key = PublicKey::from(validator2_private_key); @@ -565,8 +564,8 @@ mod tests { .unwrap(); signatures.insert(validator2, signature); - assert_eq!(digests.as_slice(), candidate.digests()); - assert_eq!(&signatures, candidate.signatures()); + assert_eq!(candidate.digests(), &digests); + assert_eq!(candidate.signatures(), &signatures); } #[test] @@ -697,6 +696,8 @@ mod tests { transitions: Default::default(), }; + let mut expected_digests = IndexSet::new(); + let candidate = Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, threshold); assert!(candidate.is_none()); @@ -715,7 +716,8 @@ mod tests { let candidate = Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, 0) .expect("Must have candidate"); - assert_eq!(candidate.digests(), [commitment1.to_digest()].as_slice()); + expected_digests.insert(commitment1.to_digest()); + assert_eq!(candidate.digests(), &expected_digests); commitments .get_mut(&commitment1.to_digest()) @@ -740,19 +742,20 @@ mod tests { let candidate = Sequencer::block_commitments_candidate(&commitments, commitment1.block_hash, threshold) .expect("Must have candidate"); - assert_eq!(candidate.digests(), [commitment1.to_digest()].as_slice()); + assert_eq!(candidate.digests(), &expected_digests); let candidate = Sequencer::block_commitments_candidate(&commitments, commitment2.block_hash, threshold) .expect("Must have candidate"); - let expected_digests = [commitment1.to_digest(), commitment2.to_digest()]; - assert_eq!(candidate.digests(), expected_digests.as_slice()); + expected_digests.insert(commitment2.to_digest()); + assert_eq!(candidate.digests(), &expected_digests); let candidate = Sequencer::block_commitments_candidate(&commitments, commitment3.block_hash, threshold) .expect("Must have candidate"); - let expected_digests = [commitment1.to_digest(), commitment3.to_digest()]; - assert_eq!(candidate.digests(), expected_digests.as_slice()); + expected_digests.pop(); + expected_digests.insert(commitment3.to_digest()); + assert_eq!(candidate.digests(), &expected_digests); } #[test] @@ -802,7 +805,8 @@ mod tests { .insert(Address([2; 20])); let candidate = Sequencer::code_commitments_candidate(&commitments, threshold) .expect("Must have candidate"); - assert_eq!(candidate.digests(), [commitment1.to_digest()].as_slice()); + let expected_digests: IndexSet<_> = [commitment1.to_digest()].into_iter().collect(); + assert_eq!(candidate.digests(), &expected_digests); assert!(candidate.signatures().is_empty()); commitments.insert( @@ -817,9 +821,11 @@ mod tests { ); let candidate = Sequencer::code_commitments_candidate(&commitments, threshold) .expect("Must have candidate"); - let mut expected_digests = [commitment1.to_digest(), commitment2.to_digest()]; + let mut expected_digests: IndexSet<_> = [commitment1.to_digest(), commitment2.to_digest()] + .into_iter() + .collect(); expected_digests.sort(); - assert_eq!(candidate.digests(), expected_digests.as_slice()); + assert_eq!(candidate.digests(), &expected_digests); assert!(candidate.signatures().is_empty()); commitments.insert( @@ -831,7 +837,7 @@ mod tests { ); let candidate = Sequencer::code_commitments_candidate(&commitments, threshold) .expect("Must have candidate"); - assert_eq!(candidate.digests(), expected_digests.as_slice()); + assert_eq!(candidate.digests(), &expected_digests); assert!(candidate.signatures().is_empty()); } @@ -861,8 +867,9 @@ mod tests { .is_none()); // Test not enough signatures - let mut candidate = - Some(MultisignedCommitmentDigests::new(vec![b"gear".to_digest()]).unwrap()); + let mut candidate = Some( + MultisignedCommitmentDigests::new([b"gear".to_digest()].into_iter().collect()).unwrap(), + ); assert!(Sequencer::process_multisigned_candidate( &mut candidate, &mut CommitmentsMap::::new(), diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index 2a90c6f66a6..4046c7fe748 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -60,9 +60,7 @@ impl TryFrom for Address { .take(12) .all(|&byte| byte == 0) .then_some(Address(id.to_address_lossy().0)) - .ok_or(anyhow!( - "First 12 bytes are not 0, it is not ethereum address" - )) + .ok_or_else(|| anyhow!("First 12 bytes are not 0, it is not ethereum address")) } } @@ -350,6 +348,7 @@ mod tests { let hash = keccak256(message); // Recover the address using the signature + // TODO: remove the deprecated ethers crate in favor of alloy #+_+_+ let ethers_sig = ethers::core::types::Signature::try_from(signature.as_ref()) .expect("failed to parse sig"); diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index 0fa3dfa18d9..c4dca8a6847 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -25,7 +25,6 @@ use ethexe_sequencer::agro::{self, AggregatedCommitments}; use ethexe_signer::{sha3, Address, Digest, PublicKey, Signature, Signer, ToDigest}; use gprimitives::H256; use parity_scale_codec::{Decode, Encode}; -use std::ops::Not; pub struct Validator { pub_key: PublicKey, @@ -138,7 +137,7 @@ impl Validator { let CodeCommitment { id: code_id, valid } = request; if db .code_valid(code_id) - .ok_or(anyhow!("Code {code_id} is not validated by this node"))? + .ok_or_else(|| anyhow!("Code {code_id} is not validated by this node"))? .ne(&valid) { return Err(anyhow!( @@ -159,11 +158,7 @@ impl Validator { transitions_digest, } = request; - if db - .block_end_state_is_valid(block_hash) - .unwrap_or(false) - .not() - { + if !db.block_end_state_is_valid(block_hash).unwrap_or(false) { return Err(anyhow!( "Requested block {block_hash} is not processed by this node" )); @@ -171,27 +166,24 @@ impl Validator { if db .block_outcome(block_hash) - .ok_or(anyhow!("Cannot get from db outcome for block {block_hash}"))? + .ok_or_else(|| anyhow!("Cannot get from db outcome for block {block_hash}"))? .iter() .collect::() - .ne(&transitions_digest) + != transitions_digest { return Err(anyhow!("Requested and local transitions digest mismatch")); } - if db - .block_prev_commitment(block_hash) - .ok_or(anyhow!( - "Cannot get from db previous commitment block for block {block_hash}" - ))? - .ne(&allowed_prev_commitment_hash) + if db.block_prev_commitment(block_hash).ok_or_else(|| { + anyhow!("Cannot get from db previous commitment for block {block_hash}") + })? != allowed_prev_commitment_hash { return Err(anyhow!( "Requested and local previous commitment block hash mismatch" )); } - if Self::verify_is_predecessor(db, allowed_pred_block_hash, block_hash, None)?.not() { + if !Self::verify_is_predecessor(db, allowed_pred_block_hash, block_hash, None)? { return Err(anyhow!( "{block_hash} is not a predecessor of {allowed_pred_block_hash}" )); @@ -213,7 +205,7 @@ impl Validator { let block_header = db .block_header(block_hash) - .ok_or(anyhow!("header not found for block: {block_hash}"))?; + .ok_or_else(|| anyhow!("header not found for block: {block_hash}"))?; if block_header.parent_hash == pred_hash { return Ok(true); @@ -221,7 +213,7 @@ impl Validator { let pred_height = db .block_header(pred_hash) - .ok_or(anyhow!("header not found for pred block: {pred_hash}"))? + .ok_or_else(|| anyhow!("header not found for pred block: {pred_hash}"))? .height; let distance = block_header.height.saturating_sub(pred_height); @@ -236,7 +228,7 @@ impl Validator { } block_hash = db .block_header(block_hash) - .ok_or(anyhow!("header not found for block: {block_hash}"))? + .ok_or_else(|| anyhow!("header not found for block: {block_hash}"))? .parent_hash; } From 584fcaf1853415eb9336f7b1d21539fafe933345 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 28 Aug 2024 08:33:16 +0200 Subject: [PATCH 40/44] fix db warning --- ethexe/db/src/database.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ethexe/db/src/database.rs b/ethexe/db/src/database.rs index fda1b61c5a4..14d245524d8 100644 --- a/ethexe/db/src/database.rs +++ b/ethexe/db/src/database.rs @@ -300,6 +300,10 @@ impl CodesStorage for Database { self.kv .iter_prefix(&key_prefix) .map(|(key, code_id)| { + // Avoid unused variable warning in release mode. + #[allow(unused_variables)] + let code_id = code_id; + let (splitted_key_prefix, program_id) = key.split_at(key_prefix.len()); debug_assert_eq!(splitted_key_prefix, key_prefix); let program_id = From 9ec6f22b09be07051b8f9a5af45d460bb4a916d6 Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 28 Aug 2024 08:36:37 +0200 Subject: [PATCH 41/44] issue number --- ethexe/signer/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethexe/signer/src/lib.rs b/ethexe/signer/src/lib.rs index 4046c7fe748..c7ab71c26e8 100644 --- a/ethexe/signer/src/lib.rs +++ b/ethexe/signer/src/lib.rs @@ -348,7 +348,7 @@ mod tests { let hash = keccak256(message); // Recover the address using the signature - // TODO: remove the deprecated ethers crate in favor of alloy #+_+_+ + // TODO: remove the deprecated ethers crate in favor of alloy #4197 let ethers_sig = ethers::core::types::Signature::try_from(signature.as_ref()) .expect("failed to parse sig"); From f33632c27469a96d8df38d44b6dcd3dd66da562e Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 28 Aug 2024 08:48:41 +0200 Subject: [PATCH 42/44] fix fir clippy --- ethexe/db/src/database.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ethexe/db/src/database.rs b/ethexe/db/src/database.rs index 14d245524d8..ea53ccf06e9 100644 --- a/ethexe/db/src/database.rs +++ b/ethexe/db/src/database.rs @@ -299,11 +299,7 @@ impl CodesStorage for Database { self.kv .iter_prefix(&key_prefix) - .map(|(key, code_id)| { - // Avoid unused variable warning in release mode. - #[allow(unused_variables)] - let code_id = code_id; - + .map(|#[allow(unused_variables)] (key, code_id)| { let (splitted_key_prefix, program_id) = key.split_at(key_prefix.len()); debug_assert_eq!(splitted_key_prefix, key_prefix); let program_id = From d00cd1a8390ed7175bc14f886e4a4d2b50822ada Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 28 Aug 2024 14:28:48 +0200 Subject: [PATCH 43/44] impl ToDigest for [T] and Vec --- ethexe/sequencer/src/agro.rs | 16 ++++++---------- ethexe/sequencer/src/lib.rs | 4 ++-- ethexe/signer/src/digest.rs | 18 ++++++++++++++++-- ethexe/validator/src/lib.rs | 4 ++-- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/ethexe/sequencer/src/agro.rs b/ethexe/sequencer/src/agro.rs index 513f75809b9..4d510ac0638 100644 --- a/ethexe/sequencer/src/agro.rs +++ b/ethexe/sequencer/src/agro.rs @@ -37,12 +37,8 @@ impl AggregatedCommitments { pub_key: PublicKey, router_address: Address, ) -> Result> { - let signature = sign_commitments_digest( - commitments.iter().collect(), - signer, - pub_key, - router_address, - )?; + let signature = + sign_commitments_digest(commitments.to_digest(), signer, pub_key, router_address)?; Ok(AggregatedCommitments { commitments, @@ -52,7 +48,7 @@ impl AggregatedCommitments { pub fn recover(&self, router_address: Address) -> Result
{ recover_from_commitments_digest( - self.commitments.iter().collect(), + self.commitments.to_digest(), &self.signature, router_address, ) @@ -207,7 +203,7 @@ mod tests { let router_address = Address([0x01; 20]); let commitments = [MyComm([1, 2]), MyComm([3, 4])]; - let commitments_digest = commitments.iter().collect(); + let commitments_digest = commitments.to_digest(); let signature = sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); let recovered = @@ -257,7 +253,7 @@ mod tests { assert_eq!(multisigned.digests(), &digests); assert_eq!(multisigned.signatures().len(), 0); - let commitments_digest = commitments.iter().collect(); + let commitments_digest = commitments.to_digest(); let signature = sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); @@ -285,7 +281,7 @@ mod tests { let mut multisigned = MultisignedCommitmentDigests::new(digests.into_iter().collect()).unwrap(); - let commitments_digest = commitments.iter().collect(); + let commitments_digest = commitments.to_digest(); let signature = sign_commitments_digest(commitments_digest, &signer, pub_key, router_address).unwrap(); diff --git a/ethexe/sequencer/src/lib.rs b/ethexe/sequencer/src/lib.rs index c91a455b525..a3e726c3d3f 100644 --- a/ethexe/sequencer/src/lib.rs +++ b/ethexe/sequencer/src/lib.rs @@ -489,7 +489,7 @@ mod tests { let validator1 = validator1_pub_key.to_address(); let commitments = [TestComm([0, 1]), TestComm([2, 3])]; - let commitments_digest = commitments.iter().collect(); + let commitments_digest = commitments.to_digest(); let signature = agro::sign_commitments_digest( commitments_digest, &signer, @@ -904,7 +904,7 @@ mod tests { let router_address = Address([1; 20]); validators_pub_keys.iter().for_each(|pub_key| { - let commitments_digest = commitments.iter().collect(); + let commitments_digest = commitments.to_digest(); candidate .append_signature_with_check( commitments_digest, diff --git a/ethexe/signer/src/digest.rs b/ethexe/signer/src/digest.rs index 4315d6df70a..7abb36b8d2f 100644 --- a/ethexe/signer/src/digest.rs +++ b/ethexe/signer/src/digest.rs @@ -88,6 +88,20 @@ impl<'a, T: ToDigest> FromIterator<&'a T> for Digest { } } +impl ToDigest for [T] { + fn update_hasher(&self, hasher: &mut sha3::Keccak256) { + for item in self { + item.update_hasher(hasher); + } + } +} + +impl ToDigest for Vec { + fn update_hasher(&self, hasher: &mut sha3::Keccak256) { + self.as_slice().update_hasher(hasher); + } +} + impl ToDigest for [u8] { fn update_hasher(&self, hasher: &mut sha3::Keccak256) { hasher.update(self); @@ -114,7 +128,7 @@ impl ToDigest for StateTransition { } hasher.update(value_hasher.finalize().as_slice()); - hasher.update(self.messages.iter().collect::().as_ref()); + hasher.update(self.messages.to_digest().as_ref()); } } @@ -137,7 +151,7 @@ impl ToDigest for BlockCommitment { hasher.update(self.block_hash.as_bytes()); hasher.update(self.prev_commitment_hash.as_bytes()); hasher.update(self.pred_block_hash.as_bytes()); - hasher.update(self.transitions.iter().collect::().as_ref()); + hasher.update(self.transitions.to_digest().as_ref()); } } diff --git a/ethexe/validator/src/lib.rs b/ethexe/validator/src/lib.rs index c4dca8a6847..8c033ff712f 100644 --- a/ethexe/validator/src/lib.rs +++ b/ethexe/validator/src/lib.rs @@ -51,7 +51,7 @@ impl From<&BlockCommitment> for BlockCommitmentValidationRequest { block_hash: commitment.block_hash, prev_commitment_hash: commitment.prev_commitment_hash, pred_block_hash: commitment.pred_block_hash, - transitions_digest: commitment.transitions.iter().collect(), + transitions_digest: commitment.transitions.to_digest(), } } } @@ -309,7 +309,7 @@ mod tests { let pred_block_hash = H256::random(); let prev_commitment_hash = H256::random(); let transitions = vec![]; - let transitions_digest = transitions.iter().collect(); + let transitions_digest = transitions.to_digest(); db.set_block_end_state_is_valid(block_hash, true); db.set_block_outcome(block_hash, transitions); From 042c8bb6950d640c8ae66d742bc6f981b0b9469e Mon Sep 17 00:00:00 2001 From: Gregory Sobol Date: Wed, 28 Aug 2024 16:07:13 +0200 Subject: [PATCH 44/44] fix digest for [T] --- ethexe/signer/src/digest.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethexe/signer/src/digest.rs b/ethexe/signer/src/digest.rs index 7abb36b8d2f..1f34f8ab7cd 100644 --- a/ethexe/signer/src/digest.rs +++ b/ethexe/signer/src/digest.rs @@ -91,7 +91,7 @@ impl<'a, T: ToDigest> FromIterator<&'a T> for Digest { impl ToDigest for [T] { fn update_hasher(&self, hasher: &mut sha3::Keccak256) { for item in self { - item.update_hasher(hasher); + hasher.update(item.to_digest().as_ref()); } } }