From e0c1d13be669111c56e0516c374d5c372ecd3ce6 Mon Sep 17 00:00:00 2001 From: Gav Date: Sat, 3 Feb 2018 19:00:23 +0100 Subject: [PATCH] Genesis block builder and test. --- substrate/Cargo.lock | 2 + substrate/client/Cargo.toml | 2 + substrate/client/src/genesis.rs | 84 ++++++++++++ substrate/client/src/lib.rs | 2 + substrate/state_machine/src/backend.rs | 1 - substrate/state_machine/src/lib.rs | 13 +- .../polkadot/src/runtime/consensus.rs | 2 +- .../polkadot/src/runtime/genesismap.rs | 48 ++++--- .../polkadot/src/runtime/system.rs | 2 +- .../polkadot/src/support/storage.rs | 124 ++++++++++++++++++ .../release/runtime_polkadot.compact.wasm | Bin 69324 -> 67817 bytes .../release/runtime_polkadot.wasm | Bin 69374 -> 67867 bytes 12 files changed, 253 insertions(+), 27 deletions(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index ad94382aa2..bf903c9e45 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -964,9 +964,11 @@ name = "polkadot-client" version = "0.1.0" dependencies = [ "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "native-runtime 0.1.0", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "polkadot-executor 0.1.0", "polkadot-primitives 0.1.0", "polkadot-serializer 0.1.0", "polkadot-state-machine 0.1.0", diff --git a/substrate/client/Cargo.toml b/substrate/client/Cargo.toml index 524429d1af..8e2f3f699b 100644 --- a/substrate/client/Cargo.toml +++ b/substrate/client/Cargo.toml @@ -10,5 +10,7 @@ parking_lot = "0.4" polkadot-primitives = { path = "../primitives", version = "0.1" } polkadot-state-machine = { path = "../state_machine", version = "0.1" } polkadot-serializer = { path = "../serializer" } +polkadot-executor = { path = "../executor" } native-runtime = { path = "../native-runtime" } triehash = "0.1" +hex-literal = "0.1" diff --git a/substrate/client/src/genesis.rs b/substrate/client/src/genesis.rs index 8aa6d9409a..9e7974abb5 100644 --- a/substrate/client/src/genesis.rs +++ b/substrate/client/src/genesis.rs @@ -35,3 +35,87 @@ pub fn construct_genesis_block(storage: &HashMap, Vec>) -> Block { transactions: vec![], } } + +#[cfg(test)] +mod tests { + use super::*; + use native_runtime::codec::{Slicable, Joiner}; + use native_runtime::support::{one, two, Hashable}; + use native_runtime::runtime::genesismap::{GenesisConfig, additional_storage_with_genesis}; + use native_runtime::primitives::{AccountID, Hash, BlockNumber, Transaction, + UncheckedTransaction, Digest, Function}; + use state_machine::execute; + use state_machine::OverlayedChanges; + use state_machine::backend::InMemory; + use polkadot_executor::executor; + use primitives::contract::CallData; + use primitives::ed25519::Pair; + + fn secret_for(who: &AccountID) -> Option { + match who { + x if *x == one() => Some(Pair::from_seed(b"12345678901234567890123456789012")), + x if *x == two() => Some("9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60".into()), + _ => None, + } + } + + fn construct_block(number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { + use triehash::ordered_trie_root; + + let transactions = txs.into_iter().map(|transaction| { + let signature = secret_for(&transaction.signed).unwrap() + .sign(&transaction.to_vec()) + .inner(); + UncheckedTransaction { transaction, signature } + }).collect::>(); + + let transaction_root = ordered_trie_root(transactions.iter().map(Slicable::to_vec)).0; + + let header = Header { + parent_hash, + number, + state_root, + transaction_root, + digest: Digest { logs: vec![], }, + }; + let hash = header.blake2_256(); + + (Block { header, transactions }.to_vec(), hash) + } + + fn block1(genesis_hash: Hash) -> (Vec, Hash) { + construct_block( + 1, + genesis_hash, + hex!("25e5b37074063ab75c889326246640729b40d0c86932edc527bc80db0e04fe5c"), + vec![Transaction { + signed: one(), + nonce: 0, + function: Function::StakingTransfer, + input_data: vec![].join(&two()).join(&69u64), + }] + ) + } + + #[test] + fn construct_genesis_should_work() { + let mut storage = GenesisConfig::new_simple( + vec![one(), two()], 1000 + ).genesis_map(); + let block = construct_genesis_block(&storage); + let genesis_hash = block.header.blake2_256(); + storage.extend(additional_storage_with_genesis(&block).into_iter()); + + let mut overlay = OverlayedChanges::default(); + let backend = InMemory::from(storage); + let (b1data, _b1hash) = block1(genesis_hash); + + let _ = execute( + &backend, + &mut overlay, + &executor(), + "execute_block", + &CallData(b1data) + ).unwrap(); + } +} diff --git a/substrate/client/src/lib.rs b/substrate/client/src/lib.rs index 13f881167b..c20c01e44e 100644 --- a/substrate/client/src/lib.rs +++ b/substrate/client/src/lib.rs @@ -21,12 +21,14 @@ extern crate polkadot_primitives as primitives; extern crate polkadot_state_machine as state_machine; extern crate polkadot_serializer as ser; +extern crate polkadot_executor; extern crate native_runtime; extern crate triehash; extern crate parking_lot; #[macro_use] extern crate error_chain; #[macro_use] extern crate log; +#[macro_use] extern crate hex_literal; pub mod error; pub mod blockchain; diff --git a/substrate/state_machine/src/backend.rs b/substrate/state_machine/src/backend.rs index 4f5ff5d18f..3efaf67953 100644 --- a/substrate/state_machine/src/backend.rs +++ b/substrate/state_machine/src/backend.rs @@ -64,7 +64,6 @@ pub struct InMemory { inner: MemoryState, // keeps all the state in memory. } -#[cfg(test)] impl InMemory { /// Create a new instance from a given storage map. pub fn from(storage: ::std::collections::HashMap, Vec>) -> Self { diff --git a/substrate/state_machine/src/lib.rs b/substrate/state_machine/src/lib.rs index e497a20474..f5db302063 100644 --- a/substrate/state_machine/src/lib.rs +++ b/substrate/state_machine/src/lib.rs @@ -33,13 +33,14 @@ extern crate byteorder; use std::collections::HashMap; use std::fmt; -use primitives::contract::{CallData}; +use primitives::contract::CallData; pub mod backend; mod ext; mod testing; pub use testing::TestExternalities; +pub use ext::Ext; /// Updates to be committed to the state. pub enum Update { @@ -151,12 +152,17 @@ pub trait Externalities { /// Get the current set of authorities from storage. fn authorities(&self) -> Result, ExternalitiesError> { - (0..self.storage(b"con:aut:len")?.into_iter() + (0..self.storage(b":aut:len")?.into_iter() .rev() .fold(0, |acc, &i| (acc << 8) + (i as u32))) - .map(|i| self.storage(&to_keyed_vec(i, b"con:aut:".to_vec()))) + .map(|i| self.storage(&to_keyed_vec(i, b":aut:".to_vec()))) .collect() } + + /// Get the runtime code. + fn code(&self) -> Result<&[u8], ExternalitiesError> { + self.storage(b":code") + } } /// Code execution engine. @@ -195,6 +201,7 @@ pub fn execute( }; // make a copy. let code = externalities.storage(b":code").unwrap_or(&[]).to_vec(); + use primitives::hexdisplay::HexDisplay; exec.call( &mut externalities, diff --git a/substrate/wasm-runtime/polkadot/src/runtime/consensus.rs b/substrate/wasm-runtime/polkadot/src/runtime/consensus.rs index 51666666cf..abaa24b240 100644 --- a/substrate/wasm-runtime/polkadot/src/runtime/consensus.rs +++ b/substrate/wasm-runtime/polkadot/src/runtime/consensus.rs @@ -17,7 +17,7 @@ //! Conensus module for runtime; manages the authority set ready for the native code. use runtime_std::prelude::*; -use support::StorageVec; +use support::storage::unhashed::StorageVec; use primitives::SessionKey; struct AuthorityStorageVec {} diff --git a/substrate/wasm-runtime/polkadot/src/runtime/genesismap.rs b/substrate/wasm-runtime/polkadot/src/runtime/genesismap.rs index e10b5e4557..20448eb093 100644 --- a/substrate/wasm-runtime/polkadot/src/runtime/genesismap.rs +++ b/substrate/wasm-runtime/polkadot/src/runtime/genesismap.rs @@ -18,7 +18,7 @@ use std::collections::HashMap; use runtime_std::twox_128; -use codec::{KeyedVec, Slicable}; +use codec::{KeyedVec, Joiner}; use support::Hashable; use primitives::{AccountID, BlockNumber, Block}; use runtime::staking::Balance; @@ -31,7 +31,7 @@ pub struct GenesisConfig { pub block_time: u64, pub session_length: BlockNumber, pub sessions_per_era: BlockNumber, - pub bonding_duration: u64, + pub bonding_duration: BlockNumber, pub approval_ratio: u32, } @@ -50,36 +50,42 @@ impl GenesisConfig { } pub fn genesis_map(&self) -> HashMap, Vec> { - let wasm_runtime = include_bytes!("../../../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm"); + let wasm_runtime = include_bytes!("../../../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm").to_vec(); vec![ - (&b":code"[..], wasm_runtime.to_vec()), - (&b"gov:apr"[..], self.approval_ratio.to_vec()), - (&b"ses:len"[..], self.session_length.to_vec()), - (&b"ses:val:len"[..], (self.validators.len() as u32).to_vec()), - (&b"con:aut:len"[..], (self.authorities.len() as u32).to_vec()), - (&b"sta:wil:len"[..], 0u32.to_vec()), - (&b"sta:spe"[..], self.sessions_per_era.to_vec()), - (&b"sta:vac"[..], (self.validators.len() as u32).to_vec()), - (&b"sta:era"[..], 0u64.to_vec()), + (&b"gov:apr"[..], vec![].join(&self.approval_ratio)), + (&b"ses:len"[..], vec![].join(&self.session_length)), + (&b"ses:val:len"[..], vec![].join(&(self.validators.len() as u32))), + (&b"sta:wil:len"[..], vec![].join(&0u32)), + (&b"sta:spe"[..], vec![].join(&self.sessions_per_era)), + (&b"sta:vac"[..], vec![].join(&(self.validators.len() as u32))), + (&b"sta:era"[..], vec![].join(&0u64)), ].into_iter() - .map(|(k, v)| (k.to_vec(), v)) + .map(|(k, v)| (k.into(), v)) .chain(self.validators.iter() .enumerate() - .map(|(i, account)| ((i as u32).to_keyed_vec(b"ses:val:"), account.to_vec())) + .map(|(i, account)| ((i as u32).to_keyed_vec(b"ses:val:"), vec![].join(account))) ).chain(self.authorities.iter() .enumerate() - .map(|(i, account)| ((i as u32).to_keyed_vec(b"con:aut:"), account.to_vec())) + .map(|(i, account)| ((i as u32).to_keyed_vec(b"con:aut:"), vec![].join(account))) ).chain(self.balances.iter() - .map(|&(account, balance)| (account.to_keyed_vec(b"sta:bal:"), balance.to_vec())) + .map(|&(account, balance)| (account.to_keyed_vec(b"sta:bal:"), vec![].join(&balance))) ) .map(|(k, v)| (twox_128(&k[..])[..].to_vec(), v.to_vec())) + .chain(vec![ + (b":code"[..].into(), wasm_runtime), + (b"con:aut:len"[..].into(), vec![].join(&(self.authorities.len() as u32))), + ].into_iter()) + .chain(self.authorities.iter() + .enumerate() + .map(|(i, account)| ((i as u32).to_keyed_vec(b"con:aut:"), vec![].join(account))) + ) .collect() } } -pub fn additional_storage_with_genesis(genesis_block: &[u8]) -> Result, Vec>, ()> { - let h = Block::from_slice(genesis_block).ok_or(())?.header.blake2_256(); - Ok(map![ - twox_128(&0u64.to_keyed_vec(b"sys:old:")).to_vec() => h.to_vec() - ]) +pub fn additional_storage_with_genesis(genesis_block: &Block) -> HashMap, Vec> { + use codec::Slicable; + map![ + twox_128(&0u64.to_keyed_vec(b"sys:old:")).to_vec() => genesis_block.header.blake2_256().to_vec() + ] } diff --git a/substrate/wasm-runtime/polkadot/src/runtime/system.rs b/substrate/wasm-runtime/polkadot/src/runtime/system.rs index a3d3a3a03b..3bad541362 100644 --- a/substrate/wasm-runtime/polkadot/src/runtime/system.rs +++ b/substrate/wasm-runtime/polkadot/src/runtime/system.rs @@ -43,7 +43,7 @@ pub mod privileged { /// Set the new code. pub fn set_code(new: &[u8]) { - storage::put_raw(CODE, new); + storage::unhashed::put_raw(b":code", new); } } diff --git a/substrate/wasm-runtime/polkadot/src/support/storage.rs b/substrate/wasm-runtime/polkadot/src/support/storage.rs index a0f2a93b49..aada8c8ae0 100644 --- a/substrate/wasm-runtime/polkadot/src/support/storage.rs +++ b/substrate/wasm-runtime/polkadot/src/support/storage.rs @@ -142,6 +142,130 @@ pub trait StorageVec { } } +pub mod unhashed { + use super::{runtime_std, Slicable, KeyedVec, Vec}; + + /// Return the value of the item in storage under `key`, or `None` if there is no explicit entry. + pub fn get(key: &[u8]) -> Option { + Slicable::set_as_slice(&|out, offset| + runtime_std::read_storage(key, out, offset) >= out.len() + ) + } + + /// Return the value of the item in storage under `key`, or the type's default if there is no + /// explicit entry. + pub fn get_or_default(key: &[u8]) -> T { + get(key).unwrap_or_else(Default::default) + } + + /// Return the value of the item in storage under `key`, or `default_value` if there is no + /// explicit entry. + pub fn get_or(key: &[u8], default_value: T) -> T { + get(key).unwrap_or(default_value) + } + + /// Return the value of the item in storage under `key`, or `default_value()` if there is no + /// explicit entry. + pub fn get_or_else T>(key: &[u8], default_value: F) -> T { + get(key).unwrap_or_else(default_value) + } + + /// Please `value` in storage under `key`. + pub fn put(key: &[u8], value: &T) { + value.as_slice_then(|slice| runtime_std::set_storage(key, slice)); + } + + /// Please `value` in storage under `key`. + pub fn place(key: &[u8], value: T) { + value.as_slice_then(|slice| runtime_std::set_storage(key, slice)); + } + + /// Remove `key` from storage, returning its value if it had an explicit entry or `None` otherwise. + pub fn take(key: &[u8]) -> Option { + let r = get(key); + if r.is_some() { + kill(key); + } + r + } + + /// Remove `key` from storage, returning its value, or, if there was no explicit entry in storage, + /// the default for its type. + pub fn take_or_default(key: &[u8]) -> T { + take(key).unwrap_or_else(Default::default) + } + + /// Return the value of the item in storage under `key`, or `default_value` if there is no + /// explicit entry. Ensure there is no explicit entry on return. + pub fn take_or(key: &[u8], default_value: T) -> T { + take(key).unwrap_or(default_value) + } + + /// Return the value of the item in storage under `key`, or `default_value()` if there is no + /// explicit entry. Ensure there is no explicit entry on return. + pub fn take_or_else T>(key: &[u8], default_value: F) -> T { + take(key).unwrap_or_else(default_value) + } + + /// Check to see if `key` has an explicit entry in storage. + pub fn exists(key: &[u8]) -> bool { + let mut x = [0u8; 1]; + runtime_std::read_storage(key, &mut x[..], 0) >= 1 + } + + /// Ensure `key` has no explicit entry in storage. + pub fn kill(key: &[u8]) { + runtime_std::set_storage(key, b""); + } + + /// Get a Vec of bytes from storage. + pub fn get_raw(key: &[u8]) -> Vec { + runtime_std::storage(key) + } + + /// Put a raw byte slice into storage. + pub fn put_raw(key: &[u8], value: &[u8]) { + runtime_std::set_storage(key, value) + } + + /// A trait to conveniently store a vector of storable data. + // TODO: add iterator support + pub trait StorageVec { + type Item: Default + Sized + Slicable; + const PREFIX: &'static [u8]; + + /// Get the current set of items. + fn items() -> Vec { + (0..Self::count()).into_iter().map(Self::item).collect() + } + + /// Set the current set of items. + fn set_items(items: &[Self::Item]) { + Self::set_count(items.len() as u32); + items.iter().enumerate().for_each(|(v, ref i)| Self::set_item(v as u32, i)); + } + + fn set_item(index: u32, item: &Self::Item) { + if index < Self::count() { + put(&index.to_keyed_vec(Self::PREFIX), item); + } + } + + fn item(index: u32) -> Self::Item { + get_or_default(&index.to_keyed_vec(Self::PREFIX)) + } + + fn set_count(count: u32) { + (count..Self::count()).for_each(|i| Self::set_item(i, &Self::Item::default())); + put(&b"len".to_keyed_vec(Self::PREFIX), &count); + } + + fn count() -> u32 { + get_or_default(&b"len".to_keyed_vec(Self::PREFIX)) + } + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index 745c95ccf5be004e450d5c6df6f60cf55901bbc4..16c8ade8e383ac81198c7957453b3791865dee29 100644 GIT binary patch delta 24622 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

00^}6mn_hCbRT+Wq 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 TCiJo|47!=Sk%e7HMppelC}||Q delta 26020 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 AKL7v# diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm index afb2e9471182c38c6edb769cf918f0daaeca009b..9aa36684060125bbb17071c326801c0143fab754 100644 GIT binary patch delta 24592 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 delta 26056 zcmd6w3wRw@ec)&2K6IsfuQZabq$|mm&b_h~$(AkK@hf&7o)9}WiOI7iPy&7_iLalr zmBfKG(I!E)tMhTGP3i&(UJG;pmvY7p*4CRJ+yuQ;q5y|cOTeqU0Z+XzWwhR9XULD*m_I7 zYg?X`ZMdO)Wp8&+U)Q|#4d1?yxXS+ZVD0{%fr;MLPDWYYK*h^dJbSfc@#3s@hLk+4 zt*myIQJ(7!9^T(!7lLE^7bTyz-2UL9KfKcK=u)mXEq|T|6pNJ81IJZ@f2YzjdjwV*>9neaWsk%X@FI=N^1B$ECQ8$5d zGQGw*?F64axFCJn5rBbv|AMsCP9%b{dl#e)u0iSEYtpBfamLmiX6(5gzI^W$P+*NS zZL5@b+17lL;*YGY`IL}el{$rHhF^_U{%EQVYv#K<| z+^FjRbAB~n%&(S9@T>Kb{QAh@SK-%NW7&Gih()1BwxkNOwbjU$R6(}(i)HJj;O5bV z>6Z|S*^=Asc#*=*B!ep-=x;oO3Ai@7CNYul zlBINT@PW&mGl}509@zL6G+s5Rtb4sG4nU@I{l+||Y0!BprMgsocd5(Spfb{SI&rDRL6j0m2^GCE*)7fG=KMzxA>vW>jm9yhVfi{sSr#I%M zF0xGZJWk^}#6U(G5t*o5*aj_Q>!#bFq=1ldJa!DeEi{la>oh8_jaFzs8|XM@WDF}a z+mJSfZA?(Bp~3zKOTIRrq2X($pJ7J1C59nw3~UYCcr46n1GBcUjmP$=O>msSJYy4E zVyj$;4R3qM-DZd`U9~YwsyfvW^uAYt)f#8aQAyPt!po@E@To(!)y^RjJZNVVY z(*_AbDhjI&6(c+&FCy;F$o8xj$R;9Sgj~1yAyq;G#uP(MSLc@M)e^Bty^2&>sS~s&L=ut?J}osL7$A&_App>y1)?a%(oAGv<~QbZ%2BC3<$5o%HJ?{R1(mWrU|HoH0!^gF zD~huv--y0AH{_dC&U@&lyo;F=(S&oy9c*l7O=8T!#?sYGZq3`_B&#ZZDO{hos#2=+ zGNp#Z2DG<+OTJEuJ>`sd&DMNIWxNg8G;d&QzMkh}J{C_9Y5<{nM0LR0?ftzaR*$!g z%5KSLG0({xz}`@=16%I$jINj(iEp8zuVavvl_i!{(pH!DI`5l8VsAyM9xI>qR&0tS z)Bp&FYJRMQ_vsI8ObV(9u7^aV40anR9V#<$TZ-ubtgY=M`@@LQ=n&8*%Hat z28M*w8-U{HLx6^#qHAV=MnD6NyD&W!V(6nTX8nR`w0^ zbPyYn5p@v04qygK4MH!2l~|xzSXGztI#}%zE;JxCFIjsv9tM&ya-Fpj;;)*8U5p4L zY^C`=J_vK6)k=rKz5ROD+~6r%8f+04Q_&= zq=txVMxM~U$DLA_h@&{@1~e$D(?X)jnu!$25}QKaDF%c@Q#Gx2asVR`X*4NlfiDy<_3s4!kfHk)j!daWr4 zp}o@}l5V_IMtdoUqumW8((mH6W_z*79hoF9Y5IL6Yq$7O$~I*;?kTr2p|e5$&%Hcw z{7rUWu*Kg|ce2kr)#t7azUY6=-ZXjd(SuI!UnbqlEa8NXdK_?8tz?T8)_1Xwq^mckM|fvaygk-=r`;XAyYnXJ>2&aWo$XTmQRl5vba!o%VrSPs zIb)gN?cI+^@mJj+p_tq^Z_ts~<2^?h-rW01TLr(@yVzEff6==tX_tcL1s`u2D|mz6 zOu?IQyzvh2zdG)s;HwL|TV^`Fk~h`m{if}m@AfWGJ^8%_XKj1_}O?T6LQW=h8VWN>Z&3k`0+gcEuc`x41Z z!+6J{6~z$Xi^#(=2GDaQ#Ut6^vx}A{AJ4h{lYg@49=km?3j)F?I3Q5ONrZ~^-wuORF#)4L_9U}8~6DTGYb@kYVgJDC&ybXm$CaEjh}H~8_; z(oCJq*x=O#OP2ha`$+R@=SJRs=(1|rTzPuQi|v`~Nf^afi@|Vm2!Q3CRl(Pmmh4P$ zerdbI%h!k7g8cA~OZGjjg7*(ceR=u%@Ji>T3jTTcn+wlma7gv;LXaEJ7~vs%N2sM{ zEPM?9YT24@mOaFF&T$ZABl;{PH2YKltIw3&E0Hi^nIUYl|U(P;M3%L9nMz@;Lt%yd~%6HofpXm{jV8R=;(l;1o{teqs z`l7kA1M_$(c<$^SQuKdyz&;avleTDOSP|+ zFCSY{DA|BcC>#3;b7eKM$AQd%ey|DM8_P zRWSFxUU!9{sF&chl%|+ZTtv}RA+PN9dc}$Lda6=tpeR)cT6(>51*hEW^;JrFiUk#d zz+P`*g)p$!>#vjqt;;Hf3Y!{go3K~aevQ0Hup>ma z1RKUS#dY}E`d=OOAwbL;p$3^mt5|{gvit!di?C=fg;-Hy$hK$(c~6rGYGlIp27Dl@1hu}AZJ>*+*PWED8cXi+Txows}SLy8iWg~ ziryPQ3w|gUQ5bNB0`-9+Tb5N`%vKY{?zpIl;Xy>vKW14X2{e3H9u1ves6PIwJjNm* z3ifAFjcCvuI{Rplo`Do{4v}A<#E4GP%^7OeY7G_#Z{(#$MWQ?~F11mDZmFFTTuU94 zAX+M3#RK@2kdUh6SA`Sm!2cEz&Q@bTLg6%o3GVvf5`VJ_#miCjnJY$Jrb@tc&s|}8 z-Wyw^HWqq*F&3>_idv&(U&UG_e&W4V^%!e0N2oALRiT=_m|)Kb2bwQhL2&Rx^Lj67 zy{t%ja>0N8P=9*H!gD19Z~7MJ@p7=}!+V{-cu#Qr!zBX0FMs%*cHd;%qx&6u`Q#%X zdDu37BR#f}#v8}3cP{izer#;LP4*Xj_oKVwAn~flz8OE)1?LGEF9ct4k`fh8KKYxM z*^CROk3D3so7{T5!Io*?@mqf@#g!lbl5*4pT6GNNzyUwO%st0dl%Rw z8;~qSKbq>O;y7nHvwBSF3aXwI2`TA&TyPNnxahB!01a0^Ld`@) z23Tsbj6N$BbK*Cy68~&VR^;< zN)ejHuHf2<+k8aNT@AfmNy=R|4zk(*ND=ZcAw&O>B9s>yLO#@x$WZWmpT4(Ndg_cD zTO54%4;I?1gO~nbg(9}C4S{)^75aWI82)yLuN+QG%Ly?KI02nVNeFL}>I4d!%G(0S zE~T<6Eon=Eg7BN8L1AE#!bQ|Mgk4TUngp(#QVEo?$aWR4Y*08fV*1hql%j=B*h{#- zCoMGz9nYKLZW-XpJQvD3zey_!wkV=r2~ox*^N}#|SWfBeN4Ce94|8ivaKWU~2Evju zU=R|4{ao4Cse+aLe$q+T1pQM4{p6eMJZOnZipH@|D9IH&go00q%lCvb0F2H=yQc@+WpfD(tt<;4vEXOAUj&C6FEyQnjo?EX(i=kv)Y)22)20BG^iEKTpE*I&V>2HxxfD-83C>!1eIwCIqtvMUa(DIMH2WznEtb?lVy z1w+rRwU-AY&yDi;&!2mozX!g3fWLq9?a%S|gMTc~|MJJ*8v1m-ldKWYX#`X&0r`N4 z1H=*mAiieDEqL!&@A5_D^#6;%C(RXx#Aav>Wd@{JZw;BZrRHsgDOO6c&RT7XHQqCQ zp2+Wj@HrXgqsc*QS(#&5VO>#^$-HoR0Wsitt@7EVUxUu;4&Y}ZayOT&%eq(R(peJJ zx~;O^{_lk5NunKq#b^>ua47Toc)l8%Sht@ELw`LR$+Ic>$Q%@ZMhw{jA<3_$Ap)UU zJzyc&YzDq*UQ5VWOT?c6Lm&Uc4xGCZZaX2S*zJ(pwV3`}5IqiWUK>%(|BIyZQrs3q z*##Hb*7&(^6=S-#%n6nttao6_+7q(*G~isxuE`r9Ec#cgMK4%YggGdFvvNu9NrtUA zwk=~zl9EW^q1f|cYf_)_&MH^oqcLZ?Au7+7Ws56||HD=Qu{-Nhm^Z4D?tDqR?1^CT z!}}il&dttLUvTSp{*x33zq>5B>G?vi=DTa0XXNz>XQD6Ycz$d0nl*`o!CybW!a36y zoOpgzT2DN`w%xnXM~a!t63&s($$o&|uHW{;f3r6QLw~X@IW5W8*q`(}l6;-{vloa_ ze*N5a*)P~m0yD>M|Ki}kta>8ZWM%&$7{7IX+l9W8MM4du9Pa}J;DUcM=ehHPf4H@{ zfM~+;j&ok==p&;K*b-mJHYjy;=gnO_x%jrrZF|k+dv32J?2VJpzWwVqJAfa0#|pbJ z`PFw!*_|E-?R^9eYji;I?7x_vg0#6Ms)^ukg2S$KQ~={_h#SgA?Tt5|Wsh+p@lu7K8MD94R zaa+09+G`TzR<2IWWJ7?&O0p>VJ8qYWYD7$}f;e^Cn-~1f>ih1Iao!mdgagWSlx4ZX zMGOsNbhM{aG%_+?&M-#0p0LZDmz|Y2%7-XuJff_@ghi^P0m#{d4(tMdO`CtDqS_?0 z#F2`hWsuAhrjZE&!n;5|B5lz$4@nfKXQ3pA)U&ZF62Xi&VdL7a9V`L=9>Hb_;H-gD$`WWi0!&B}u0XD{dyeAR05-QtL~)%P?t_yy=nBX>$W+p**G_o{V`a0P zCc|q__P(1m|LC1K5*)mu-4`rRARjs?biGf>qX>}eeWqG_vikVj@+g5}b#YHdRke77 zZpeArebYEz3e^HExd_*wux@3rY27V;2S8*A+_17BsTL=_BqH|OcgYLFcPZ{rWL6Af zW*I|fMLZh5fFo=RUyx}1B%~5CWgelA6Hetz9a|LKvWV-XO6Mlgl`o;ZbH^I3hg#DB zl2Xx~EWa?P)KuO1!tz!MnR}mH{XMiF+ zCE^4|h6E#84K+Zhk1spwKA_R4@=+fFa6|&qCVh#fPN>I;UhtjuozMb8M$4+M=F*EG z4GUpbF@9A<(IIhkqC83zo@^NRGDj@Ajqz`mOZJWogV86!HxkI?8`d4=`Z+;t-p2eQ ze5zLTTz+wGC<|bb$Y|@DKHJP1?kEx5h)Do%C|XsQH){(F?!KfJkuiWzu_=fI;Z@fn z(xAnM5*Yw1Z3cwQq+3lot!#2O$nxGLnWf}mx+_=6uhZN>DO~miRFJy*m;F~;ZGzQe z`F^(5;v@ipj=kz)<+6y_U2Rb=VfEhZY7-Z)HYJNz+@ea2me~$OmbC|H^3*<#@*lpY zKA*l;JYcHSl-R%>kjJn2xLp?vZ|H5Rlj}(0HV}c7$_00BSheY;h2rLkhI_Z>#cK-v z(9F5^EWDy^+R;j;(Dp90XTf*Yb^7ciy{7GQs-{4jGt|ARvXME)>_peoFJ-!_njM?2 zNSSwu(GP7`jhVcZ?aI%wQ(#hSiVP32MUg$xm}t`#e8}tetGD$dBgG|+i;R>LU&%|w zxA(00zMlqJ)ONYLrf4b1eU(-<3ov;5LisAbmqHVMas$6zjEU005b=WT$ti{i&j!&1 z(j!rS7?=?C$H|tR8aIo4RSjBM?;#0&akXVXAN9lAa+~gAf6JXeT}hV37^5$;A}m{r zAkPI|Ej?l=hzfYoQ32&0^cN9?JYo$1jx}K7!9?*|k=?o*y32mEYP&rz&X+St{tCOI zrQOT{I7{0sW6aXRMTN@=7ZR>u4(=h=;*uk*Ya}X?&_O?1Myw6an_EwvUJtwbvPSqa z6NYH2q^-DiFM|9z9dlh2qxo+nNVB=g5iJ6vr46zs`WwUboWuY^d?+qh4T4Om#h76q zHzTPVcDMzmDkj?#r_lSmRTT9PPhB`IEw_&!+*Xg7&0 zl?rA_H7inupU)RnD?RG8w6&b*4s~R=QU|8xrdo{&#m;C9 z!e_dP!XSbd1*m2A-KDZtVPeq>bx2~eyr__GoQu{I>N2nDY-&j$%Eb1A3%$_y5bqG< z5Z4gPIrxQ`)hLCJR%=8w9&cuPXM-r`jUqm>1tKq3Zp>fCQ9>B94CDs!MH?Y?(v$36 z_Qtv-;TW(uxTj)EzFRGH6)}rW#mJfn{KQybWaP$#JYqk{qJmql?@Eg>cvHc_>pPH( z;Dgsc{k8%=HJ)Z@#*8&UkX8gt&07SYcjdLFkFp2Ftb-uGB;2oI)i%aH-)$7EA$IxG!T%X{>U7;ycYlM%IPzx1~lx+8M@ttCcNx-#- zv^@XcRpGryWVbdFkGYC&oMctc<=qz%e=V;m_i~KetfwpZ4< zx{t=hIC3WNW_4dA(FN+-^;fwq4KL-DeEmSSsX9$>EJ8&y`>}pEJCy? zFX=jB#TjH!cjNMbJIZY0$_Zy`3zx7t=tSDZRCLJZE_+Pu49VeVG1zuv*REp4UCMAV zfch4?mhob#Dc30{ph&ph(b1bQY-yjtG)8IBl&z0V_5EpMjd2@hTgw<0tht;{mg|DQ zzH#un9OL-HbqiaLh%M*#9P>$`x6ZYBm%}#3V6_lM+0ik9*b$InQ&dbquw`qHFFQH< zlBCo&$!8C36z`MlKe2_Vj=f;n*Wxa@K7-Ye$_C3pwt;lO$8z~Bz+mmjM+(~KD0kR8 zW3RV4$A!*Lmb>hhP}*C*iSID99D0sW(-3UdK)bl!7GtYpYz`$Md<|Hd*4siA(Jc(9 z*fH7AV%|q&kl39jHs@=HfQj{fX{1w;B8)*fb`ecwuSX6(a9YCXf0p|&GJP&I1G&UBMEGH(Zppmn}&QHpyieF zT|#5+`6QOqUWC6;+iV&tZgeuHNIdKq@`WU=I(wn%ECTwrx)k9OY`PGAXs7>1wk9yk zk<#n%N_%{4DxQ~bB9UmmooM4Kwsu?IlqnSXy)WO)$%B*}bL#R`zuu0XGQ~Ml2UdVsk&?1@JhwEQf*&>yNBp%MSX&4Vbx zlTbq(RHB-q=_+J~`J-OqbJ(kj6$Tj9JkQ7=FlxcZZWEV?;}R1gK*D`DGIs4QW#f?4 zeb+7hJ_#wTi(FbNwk%kQ*Y;~jCoyd3(;}sM(_5>1nL6HEt#uKIZY(HoDy(@8M-kk6 z>t*Tl65}O<5AT_Ml!UOudE0e^ukM+@P#+^*!1g)b42*h7fAc2C9@Oc#vg3NeD|;3u zMHGU8y{bDtm-40-dpVbw2Lqr%HU~TRUe`Un*lX3bW4NFc|5pc~y%l$(Hxqng?<&rM zUfR3bZZM+7wSb9W%vo$Nn>_2RvFFRBOSJnMx%$9n`Ze51P>N!lU8Gf$FDG`SI7E6+ z{RR$*#_LNQ7JZ|BC(r#2|A)VBb}xT_F?(0{W|fu1onHk&_EZY{uYFyaD>}hXvptNP zpZhS!el;`8UBB0wc||I?zI6xif2UQBt)6Y&hk}Rq?!VHpj)os~9OiGOs8&PO3@(@K z+SZX{SuWymG#TI5!Pn^%k2-z0QX$26_!)?)qPO%1OPsFSA8|0V2_py;^o_weUp5;=jBJ0eYo7O@5*Y9q}jVaUi@I_Qwm6J_JIWW#ydyUTeRZ9Z-7pntoWhT0y187(F& zbL4C1$TCMqcPYa?N5`{e9G{wZLlHjSV<)(xI{9P|qs{e9)&b-Y1+&U<;Z+=3m25E5 zu@-?)K*L@I!J)MlhXOccx=S58U~QKf`E(GERPeGlz{$eKNS$DKyR!i;vF|VQb)sZP zwg7?}P|4Ct=o>A8PI3efDxwuofF%~HieW}*32Bg1c2?c7r_|xur9ze&QmSyTXUnIc zmRxhda_JL!zD%)XBo{_Yt@O<}8xk7?YldV*?k&~k8y1xc7=!{#76jxs020>iWC8`@ zrZ_vgORUYUENZ$5nYpVXv#ahrA-Ao_8~7t!*UF!S3Vd4@SpcK(vNYDn%JrP(E;@U@ z7=c<%(Im@w4%6w5597?W5H)D*geyJoq-`E}O0-Y}V+iG*BqlVdP7ol&o z)vh6$ON2}8Zvk(yL4S(tIV!UUBaudZWT!3?2WV|;nUFu4eUU686-E|CV&psH2Gt`x zXn-B@IvPMSrbvUh(})(BePMu~$jEo6HW#qL1R2_cXVG6=X|t!T-#{(D8?bg4@f%}x zF~8+9O%1<+2fu6B4G9JlekeB~zZ+uwj8lSFH6kD=&*3+c7O^MdH=p&*s?wqtExVT8 z1*E_?T;}8Ia7;0#o$fk^-?h^je%H=s_?@q=p~~-e?If^K!bB+D>5<;D@9JxQdweLa zdETR!V|acChArYb92SWYo~ur631|~DCRSFnU9>QkYSF%UMWS`_qA+Tj51Q+2Dfp5a zlTK(8(t$ApH$L~aa0?hHvELn9`?YOypwaEfV`x_la@u6M?b^W^rfE499&rEO)SxMX zzQX6ltT7z-F>NBGd|@_6&qb2ar|zg;xQYO2WgpPWhl7k7#TaSj%hc9r>5)q^+BQYZ z5D^TmMOOJD=EihM9Wd}Hv#J16qtl@XVk|^@%uxJi_{5F>XsmRcBRrVOs1-vdb1{Dv zVIw^`GKx6}3xyB>zBDMY+ohwva^a?YtNcO^+b4wUnpt5WhtJUr5c3`Kj*51iQH?|6 zHaoMxALIXo0o;oh2GvEgMWWEg zc=l@iiN&gxKaogP`GfM*P6mJcT5HaULDU>FsF{s`NIndIS}w*{C1tF0rlBFoh`!^e8s&FDw5n&=7bBv<%7->W;t)E> zuXwb}R$NZZg^0;fw#C3jg4}K+GyF;el^r;^My<{Dr6LZdT^0BEVv_btFsxO-;5|8Q z-B8X8^4?KCP3%-u~`?$1iBOVmY> z)Rr~XwggHYi~}PP!~s;EAj>b7Iza`8xXvOjVR6EtcS`)#sfj9pL^wO3mN8X&Y^KyD z06~thi-$JBNMiO9U+M5|khVKz!ft@Wbpakx?sg%fv7V~a7wDZzQnLs;hN;|8>K5=B z)wM?~mm;g`WKo@4iO*%GdET^xFI8PjEYyvVQmdSnQPUPxoT8f%UEQNP0_t}&*q21^ za14SuiR-w#AXL&U(#=O7J|taaLV{gT4yPrB&|q5yTHG=lBujPV^D0fp9JFthUw*;l zcT1SgAyJoe!|#28a+Xxfy#D;02yC` zNJyM(IHSxj*BCNMF6CGJaznHh_$>hrbmoDeRHQ^~GPNe=Ax_nZw~IvS8B0Y;oQt9> z2n>@mmq?RnUe#osNT|d#zDyX;!=xf~gw@Eq&Ot2OUt<^KSAw*N^3zUc*?fB> zlam%oF47LeGNy+#Ls6^%nf*q#u0+tPp^7>LjL2L{UJto1F{U zq#znOq|cNakS~*V5DJ*6K@b%G&2pd$k9uW1-j4kc#nSym-+iJCHqpYRi!0#8WUXR( zP2`D2N}WiD_Jwm&7PwZ*AP9)C@C@WZoCKyL3)&`WGiYgw*ZN1vf1tP)IA~n!AjNR% zkWBB$5EGllcFJNqwV=@*d8-qF)w&Zd7BJzutBV!66x44brwiN5V&@e5AFsJsEu%(6 zC0^1bh!zXoZz2&ak`&$I>N07I>-6l=7(TU!q!AiuyC8uLc0sIfOpGu)CLGFo0+}EC3CD5&zK#lh zvrYmk)pL73<7KG8T>_|r%tvGWEqM+FXp;N?hI&GHZ6yEVe-ZA_)#nIWLF#>VrRp;hFa4=xE7j*cS`CmPL5w^@)Ar$a4sGSfdWgd z_*ykH8Ux5LTbHu7lqMs;#iX&+oL1fqWELcE_|b{M6BU6jSTu>!MsQ zis+2NCK$}sfE8Z>41O*#BzKtWvHwrFekpzw`LV;ASbI*mPT&%?hS6YG&1@zbtXV^p zUPx|lj1^SYE=~f5Rtad{NMdh<5<4a&MNE+eq9T!~Ol^jjfv7Ql8E7A)hTEuSct~q2 zo0KM!k{k`~6~~6ephe^Iooh1q!~gzn|9TXMk0-(-rnEj{O7Kfsh#HPbf0vVByFdHs zWuLYAcr}|;9WJ4dn|0Qq4TY?Gq1n>^QENH!7m1x z_cY&pETdVve*usw-M8rlD_eK?!Ncoz9@xe2Us)f!!R~X8+8@i=S1mbfXNyPabp`*n z@voPEr}&rVpT(thSmM}L$6lh&CbGpbS~>fP zd%Y#@bv|*di=TW@W65msJiQ1+;$EBLUK7b<-?Qzd>M!ZF42mtP>9r;9bu@MC{kFZ{ zKa*lf^x_yShP5^BHJ!@Zu;qLz+q`r8!RrGDzM^ znd7~a(()cnU)=gEt@XNfBAso8iv|6g_>a@`P z8cHn&{ODA+c#yZn)Q*R>H$jRv4fIUSn9FG$(6!T=_9S@FsKQHPVYszNSfV3Q@a=a;<9#jYJQrj$VqA6=r zOf^B)Wp)!(ZC~YP8+VM{y?ej9@+vj5f0r6yh>Mc*$^e%i%To{BGqPVD-n)C}?)`TQ zm?<~t`cc<)=NWqKfkTH5Jh1h?(T$WS)eL4~=~4ubfn%~_{yRvCR9Prdb2c**)>{1V zSaw0M{Ra!W`0caitUFDEQ1WBQsiE_9v+%t*L!&TH(WoeepO$yDCHT7^E!aHXl5J5t z?i*F3_e6x)Ez3ULl68;LS*SfmS=NJ|rgj@|1>TzDdCs?F3&&#-w$PpL(V8;WD->Hh(VKO*?>#iKeb<9(hvv`-wsoo(r9sTaC>^EDQI1g> zr8(D|-3&K2!;Nu%B5@fFJ#=`Kf2@xsPpF{q)3P(Ij-`|Ka{p*4o7*$cxF3hc9GIML0bME}Pq=dhw|SkWh}@K5$-6MIMYTYOatej|s)TLELD5Bzx3 zO=qH)z05Tgz95DcpR}89`}YE2I)t$Qh+uJ!Ch=tl4;?`BX)=!OAWawgFu~Yc@bj&4 z9%dtWbOCZe?L5#wiZThCxA4!f`8chL)&(`Kx5cd!GL|s|HLW}2*69V=f!jt89NK>O zh&puOz^K|6{ODij*+-B4ZNl#J#}{UcGiaW;yJ+71@z^s9p$}oee&`Gp=sQKpgMnIa&|Wx?CJ!G*Oc96O(}`<E!+pW&C84o) KW|jzj7W_Z%pf@J~