From 363126f7d4738c613e4094f17e827d4033c7385c Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Sun, 18 Dec 2022 21:14:14 +0200 Subject: [PATCH 1/3] implement vesting release calculation --- .gitignore | 1 - Cargo.lock | 85 ++++- Makefile | 2 +- .../src/testing/mod.rs | 2 +- contracts/tokenomics/distribution/src/msg.rs | 1 - contracts/tokenomics/reserve/src/lib.rs | 1 + .../treasury/.cargo/schema/execute_msg.json | 8 + .../.cargo/schema/instantiate_msg.json | 9 +- contracts/tokenomics/treasury/Cargo.toml | 1 + contracts/tokenomics/treasury/src/contract.rs | 122 +++++--- contracts/tokenomics/treasury/src/lib.rs | 2 + contracts/tokenomics/treasury/src/msg.rs | 5 +- contracts/tokenomics/treasury/src/state.rs | 4 +- .../treasury/src/testing/mock_querier.rs | 67 +++- .../tokenomics/treasury/src/testing/mod.rs | 2 +- .../tokenomics/treasury/src/testing/tests.rs | 149 ++++++++- contracts/tokenomics/treasury/src/vesting.rs | 296 ++++++++++++++++++ 17 files changed, 676 insertions(+), 81 deletions(-) create mode 100644 contracts/tokenomics/treasury/src/vesting.rs diff --git a/.gitignore b/.gitignore index 29f22fa3..ef76b67c 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,3 @@ Cargo.lock **/*.rs.bk .idea - diff --git a/Cargo.lock b/Cargo.lock index d0671476..bdace2c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,6 +37,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" + [[package]] name = "base64ct" version = "1.5.3" @@ -78,6 +84,9 @@ name = "bytes" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +dependencies = [ + "serde", +] [[package]] name = "cfg-if" @@ -99,7 +108,18 @@ checksum = "20b42021d8488665b1a0d9748f1f81df7235362d194f44481e2e61bf376b77b4" dependencies = [ "prost 0.11.3", "prost-types", - "tendermint-proto", + "tendermint-proto 0.23.9", +] + +[[package]] +name = "cosmos-sdk-proto" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4776e787b24d9568dd61d3237eeb4eb321d622fb881b858c7b82806420e87d4" +dependencies = [ + "prost 0.11.3", + "prost-types", + "tendermint-proto 0.27.0", ] [[package]] @@ -154,7 +174,7 @@ version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b13d5a84d15cf7be17dc249a21588cdb0f7ef308907c50ce2723316a7d79c3dc" dependencies = [ - "base64", + "base64 0.13.1", "cosmwasm-crypto", "cosmwasm-derive", "derivative", @@ -543,7 +563,7 @@ dependencies = [ "cw721", "cwd-interface", "cwd-macros", - "neutron-sdk", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-contracts.git)", "schemars", "serde", "thiserror", @@ -622,7 +642,7 @@ dependencies = [ "cwd-proposal-hooks", "cwd-proposal-single", "cwd-voting", - "neutron-sdk", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-contracts.git)", "schemars", "serde", ] @@ -666,7 +686,7 @@ dependencies = [ "cwd-proposal-hooks", "cwd-vote-hooks", "cwd-voting", - "neutron-sdk", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-contracts.git)", "schemars", "serde", "thiserror", @@ -690,7 +710,7 @@ dependencies = [ "cwd-interface", "cwd-macros", "exec-control", - "neutron-sdk", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-contracts.git)", "schemars", "serde", "thiserror", @@ -716,7 +736,7 @@ dependencies = [ "cwd-subdao-core", "cwd-subdao-proposal-single", "cwd-voting", - "neutron-sdk", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-contracts.git)", "neutron-timelock", "schemars", "serde", @@ -750,7 +770,7 @@ dependencies = [ "cwd-subdao-pre-propose-single", "cwd-vote-hooks", "cwd-voting", - "neutron-sdk", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-contracts.git)", "schemars", "serde", "thiserror", @@ -773,7 +793,7 @@ dependencies = [ "cwd-interface", "cwd-macros", "cwd-pre-propose-base", - "neutron-sdk", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-contracts.git)", "neutron-timelock", "schemars", "serde", @@ -803,7 +823,7 @@ dependencies = [ "cwd-core", "cwd-interface", "cwd-macros", - "neutron-sdk", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-contracts.git)", "schemars", "serde", "thiserror", @@ -1073,14 +1093,34 @@ dependencies = [ "thiserror", ] +[[package]] +name = "neutron-sdk" +version = "0.1.0" +source = "git+https://github.com/neutron-org/neutron-sdk.git?branch=feat/NTRN-300-burn-fee-send-to-treasury#61c1a93acf75f07e2a85500c3bd2d5eec4ac5c3e" +dependencies = [ + "base64 0.20.0", + "bech32", + "cosmos-sdk-proto 0.16.0", + "cosmwasm-schema", + "cosmwasm-std", + "cw-storage-plus 1.0.1", + "prost 0.11.3", + "protobuf", + "schemars", + "serde", + "serde-json-wasm", + "serde_json", + "thiserror", +] + [[package]] name = "neutron-sdk" version = "0.1.0" source = "git+https://github.com/neutron-org/neutron-contracts.git#3ad81939da78954ff032a26e54d792cc16a4d9f3" dependencies = [ - "base64", + "base64 0.13.1", "bech32", - "cosmos-sdk-proto", + "cosmos-sdk-proto 0.14.0", "cosmwasm-std", "cw-storage-plus 0.16.0", "prost 0.11.3", @@ -1097,7 +1137,7 @@ name = "neutron-timelock" version = "0.1.0" dependencies = [ "cosmwasm-std", - "neutron-sdk", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-contracts.git)", "schemars", "serde", ] @@ -1111,6 +1151,7 @@ dependencies = [ "cw-storage-plus 1.0.1", "cwd-macros", "exec-control", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-sdk.git?branch=feat/NTRN-300-burn-fee-send-to-treasury)", "schemars", "serde", "thiserror", @@ -1546,6 +1587,24 @@ dependencies = [ "time", ] +[[package]] +name = "tendermint-proto" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5895470f28c530f8ae8c4071bf8190304ce00bd131d25e81730453124a3375c" +dependencies = [ + "bytes", + "flex-error", + "num-derive", + "num-traits", + "prost 0.11.3", + "prost-types", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + [[package]] name = "thiserror" version = "1.0.37" diff --git a/Makefile b/Makefile index eeb73735..b771bc9d 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ check_contracts: compile: @./build_release.sh -build: schema clippy fmt compile check_contracts +build: schema clippy fmt test compile check_contracts diff --git a/contracts/subdaos/cwd-subdao-timelock-single/src/testing/mod.rs b/contracts/subdaos/cwd-subdao-timelock-single/src/testing/mod.rs index a1e507b6..6e26792e 100644 --- a/contracts/subdaos/cwd-subdao-timelock-single/src/testing/mod.rs +++ b/contracts/subdaos/cwd-subdao-timelock-single/src/testing/mod.rs @@ -1,2 +1,2 @@ -mod mock_querier; +pub mod mock_querier; mod tests; diff --git a/contracts/tokenomics/distribution/src/msg.rs b/contracts/tokenomics/distribution/src/msg.rs index b09c1ec4..9feafc46 100644 --- a/contracts/tokenomics/distribution/src/msg.rs +++ b/contracts/tokenomics/distribution/src/msg.rs @@ -44,7 +44,6 @@ pub enum QueryMsg { #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] pub struct StatsResponse { - pub total_received: Uint128, pub total_distributed: Uint128, pub last_balance: Uint128, } diff --git a/contracts/tokenomics/reserve/src/lib.rs b/contracts/tokenomics/reserve/src/lib.rs index caff7ec1..f4c03d7b 100644 --- a/contracts/tokenomics/reserve/src/lib.rs +++ b/contracts/tokenomics/reserve/src/lib.rs @@ -2,5 +2,6 @@ pub mod contract; pub mod error; pub mod msg; pub mod state; + #[cfg(test)] mod testing; diff --git a/contracts/tokenomics/treasury/.cargo/schema/execute_msg.json b/contracts/tokenomics/treasury/.cargo/schema/execute_msg.json index 991dcceb..d44ea9a7 100644 --- a/contracts/tokenomics/treasury/.cargo/schema/execute_msg.json +++ b/contracts/tokenomics/treasury/.cargo/schema/execute_msg.json @@ -66,6 +66,14 @@ "string", "null" ] + }, + "vesting_denominator": { + "type": [ + "integer", + "null" + ], + "format": "uint128", + "minimum": 0.0 } } } diff --git a/contracts/tokenomics/treasury/.cargo/schema/instantiate_msg.json b/contracts/tokenomics/treasury/.cargo/schema/instantiate_msg.json index cdd51d4c..9b394b78 100644 --- a/contracts/tokenomics/treasury/.cargo/schema/instantiate_msg.json +++ b/contracts/tokenomics/treasury/.cargo/schema/instantiate_msg.json @@ -8,7 +8,8 @@ "distribution_rate", "min_period", "owner", - "reserve_contract" + "reserve_contract", + "vesting_denominator" ], "properties": { "denom": { @@ -38,6 +39,12 @@ "reserve_contract": { "description": "Address of reserve contract", "type": "string" + }, + "vesting_denominator": { + "description": "Vesting release equation denominator", + "type": "integer", + "format": "uint128", + "minimum": 0.0 } }, "definitions": { diff --git a/contracts/tokenomics/treasury/Cargo.toml b/contracts/tokenomics/treasury/Cargo.toml index 261711e8..e54e1622 100644 --- a/contracts/tokenomics/treasury/Cargo.toml +++ b/contracts/tokenomics/treasury/Cargo.toml @@ -13,6 +13,7 @@ crate-type = ["cdylib", "rlib"] backtraces = ["cosmwasm-std/backtraces"] [dependencies] +neutron_bindings = { package = "neutron-sdk", branch = "feat/NTRN-300-burn-fee-send-to-treasury", git = "https://github.com/neutron-org/neutron-sdk.git" } cosmwasm-std = { version = "1.0" } cw-storage-plus = "1.0.1" schemars = "0.8.1" diff --git a/contracts/tokenomics/treasury/src/contract.rs b/contracts/tokenomics/treasury/src/contract.rs index 99ef46ca..c6060526 100644 --- a/contracts/tokenomics/treasury/src/contract.rs +++ b/contracts/tokenomics/treasury/src/contract.rs @@ -8,11 +8,15 @@ use cosmwasm_std::{ use exec_control::pause::{ can_pause, can_unpause, validate_duration, PauseError, PauseInfoResponse, }; +use neutron_bindings::bindings::query::InterchainQueries; use crate::msg::{DistributeMsg, ExecuteMsg, InstantiateMsg, QueryMsg, StatsResponse}; use crate::state::{ - Config, CONFIG, LAST_DISTRIBUTION_TIME, PAUSED_UNTIL, TOTAL_DISTRIBUTED, TOTAL_RECEIVED, - TOTAL_RESERVED, + Config, CONFIG, LAST_BURNED_COINS_AMOUNT, LAST_DISTRIBUTION_TIME, PAUSED_UNTIL, + TOTAL_DISTRIBUTED, TOTAL_RESERVED, +}; +use crate::vesting::{ + get_burned_coins, safe_burned_coins_for_period, update_distribution_stats, vesting_function, }; //-------------------------------------------------------------------------------------------------- @@ -21,7 +25,7 @@ use crate::state::{ #[cfg_attr(not(feature = "library"), entry_point)] pub fn instantiate( - deps: DepsMut, + deps: DepsMut, _env: Env, _info: MessageInfo, msg: InstantiateMsg, @@ -34,13 +38,15 @@ pub fn instantiate( distribution_rate: msg.distribution_rate, main_dao_address: deps.api.addr_validate(&msg.main_dao_address)?, security_dao_address: deps.api.addr_validate(&msg.security_dao_address)?, + vesting_denominator: msg.vesting_denominator, + owner: deps.api.addr_validate(&msg.owner)?, }; CONFIG.save(deps.storage, &config)?; - TOTAL_RECEIVED.save(deps.storage, &Uint128::zero())?; TOTAL_DISTRIBUTED.save(deps.storage, &Uint128::zero())?; TOTAL_RESERVED.save(deps.storage, &Uint128::zero())?; LAST_DISTRIBUTION_TIME.save(deps.storage, &0)?; PAUSED_UNTIL.save(deps.storage, &None)?; + LAST_BURNED_COINS_AMOUNT.save(deps.storage, &Uint128::zero())?; Ok(Response::new()) } @@ -110,7 +116,7 @@ fn get_pause_info(deps: Deps, env: &Env) -> StdResult { #[cfg_attr(not(feature = "library"), entry_point)] pub fn execute( - deps: DepsMut, + deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, @@ -143,6 +149,7 @@ pub fn execute( distribution_contract, reserve_contract, security_dao_address, + vesting_denominator, } => execute_update_config( deps, info, @@ -151,6 +158,7 @@ pub fn execute( distribution_contract, reserve_contract, security_dao_address, + vesting_denominator, ), ExecuteMsg::Pause { duration } => execute_pause(deps, env, info.sender, duration), ExecuteMsg::Unpause {} => execute_unpause(deps, info.sender), @@ -158,7 +166,7 @@ pub fn execute( } pub fn execute_transfer_ownership( - deps: DepsMut, + deps: DepsMut, info: MessageInfo, new_owner_addr: Addr, ) -> Result { @@ -181,13 +189,14 @@ pub fn execute_transfer_ownership( } pub fn execute_update_config( - deps: DepsMut, + deps: DepsMut, info: MessageInfo, distribution_rate: Option, min_period: Option, distribution_contract: Option, reserve_contract: Option, security_dao_address: Option, + vesting_denominator: Option, ) -> Result { let mut config: Config = CONFIG.load(deps.storage)?; if info.sender != config.main_dao_address { @@ -214,6 +223,9 @@ pub fn execute_update_config( } config.distribution_rate = distribution_rate; } + if let Some(vesting_denominator) = vesting_denominator { + config.vesting_denominator = vesting_denominator; + } CONFIG.save(deps.storage, &config)?; @@ -223,12 +235,16 @@ pub fn execute_update_config( .add_attribute("min_period", config.min_period.to_string()) .add_attribute("distribution_contract", config.distribution_contract) .add_attribute("distribution_rate", config.distribution_rate.to_string()) + .add_attribute( + "vesting_denominator", + config.vesting_denominator.to_string(), + ) .add_attribute("owner", config.main_dao_address)) } -pub fn execute_distribute(deps: DepsMut, env: Env) -> Result { +pub fn execute_distribute(deps: DepsMut, env: Env) -> StdResult { let config: Config = CONFIG.load(deps.storage)?; - let denom = config.denom; + let denom = config.denom.clone(); let current_time = env.block.time.seconds(); if current_time - LAST_DISTRIBUTION_TIME.load(deps.storage)? < config.min_period { return Err(ContractError::TooSoonToDistribute {}); @@ -243,40 +259,35 @@ pub fn execute_distribute(deps: DepsMut, env: Env) -> Result StdResult { } pub fn query_stats(deps: Deps) -> StdResult { - let total_received = TOTAL_RECEIVED.load(deps.storage)?; let total_distributed = TOTAL_DISTRIBUTED.load(deps.storage)?; let total_reserved = TOTAL_RESERVED.load(deps.storage)?; + let total_processed_burned_coins = LAST_BURNED_COINS_AMOUNT.load(deps.storage)?; Ok(StatsResponse { - total_received, total_distributed, total_reserved, + total_processed_burned_coins, }) } + +//-------------------------------------------------------------------------------------------------- +// Helpers +//-------------------------------------------------------------------------------------------------- + +pub fn create_distribution_response( + config: Config, + to_distribute: Uint128, + to_reserve: Uint128, + denom: String, +) -> StdResult { + let mut resp = Response::default(); + if !to_distribute.is_zero() { + let msg = CosmosMsg::Wasm(WasmMsg::Execute { + contract_addr: config.distribution_contract.to_string(), + funds: coins(to_distribute.u128(), denom.clone()), + msg: to_binary(&DistributeMsg::Fund {})?, + }); + resp = resp.add_message(msg) + } + + if !to_reserve.is_zero() { + let msg = CosmosMsg::Bank(BankMsg::Send { + to_address: config.reserve_contract.to_string(), + amount: coins(to_reserve.u128(), denom), + }); + resp = resp.add_message(msg); + } + + Ok(resp) +} diff --git a/contracts/tokenomics/treasury/src/lib.rs b/contracts/tokenomics/treasury/src/lib.rs index 23cbb03f..b70c3292 100644 --- a/contracts/tokenomics/treasury/src/lib.rs +++ b/contracts/tokenomics/treasury/src/lib.rs @@ -2,5 +2,7 @@ pub mod contract; mod error; pub mod msg; pub mod state; +pub mod vesting; + #[cfg(test)] mod testing; diff --git a/contracts/tokenomics/treasury/src/msg.rs b/contracts/tokenomics/treasury/src/msg.rs index 72fb32d4..0ef56488 100644 --- a/contracts/tokenomics/treasury/src/msg.rs +++ b/contracts/tokenomics/treasury/src/msg.rs @@ -17,6 +17,8 @@ pub struct InstantiateMsg { pub reserve_contract: String, /// Address of security DAO contract pub security_dao_address: String, + /// Vesting release equation denominator + pub vesting_denominator: u128, } #[pausable] @@ -36,6 +38,7 @@ pub enum ExecuteMsg { distribution_contract: Option, reserve_contract: Option, security_dao_address: Option, + vesting_denominator: Option, }, } @@ -51,9 +54,9 @@ pub enum QueryMsg { #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] #[serde(rename_all = "snake_case")] pub struct StatsResponse { - pub total_received: Uint128, pub total_distributed: Uint128, pub total_reserved: Uint128, + pub total_processed_burned_coins: Uint128, } #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] diff --git a/contracts/tokenomics/treasury/src/state.rs b/contracts/tokenomics/treasury/src/state.rs index 2ec95c0c..8dcc6800 100644 --- a/contracts/tokenomics/treasury/src/state.rs +++ b/contracts/tokenomics/treasury/src/state.rs @@ -20,12 +20,14 @@ pub struct Config { /// Address of the security DAO contract pub security_dao_address: Addr, + pub owner: Addr, + pub vesting_denominator: u128, } -pub const TOTAL_RECEIVED: Item = Item::new("total_received"); pub const TOTAL_DISTRIBUTED: Item = Item::new("total_distributed"); pub const TOTAL_RESERVED: Item = Item::new("total_reserved"); +pub const LAST_BURNED_COINS_AMOUNT: Item = Item::new("last_burned_coins_amount"); pub const LAST_DISTRIBUTION_TIME: Item = Item::new("last_grab_time"); pub const CONFIG: Item = Item::new("config"); diff --git a/contracts/tokenomics/treasury/src/testing/mock_querier.rs b/contracts/tokenomics/treasury/src/testing/mock_querier.rs index df2eaa1f..fc834c2f 100644 --- a/contracts/tokenomics/treasury/src/testing/mock_querier.rs +++ b/contracts/tokenomics/treasury/src/testing/mock_querier.rs @@ -1,17 +1,24 @@ use std::marker::PhantomData; use cosmwasm_std::{ + from_slice, testing::{MockApi, MockQuerier, MockStorage}, - Coin, OwnedDeps, + to_binary, Binary, Coin, ContractResult, OwnedDeps, Querier, QuerierResult, QueryRequest, + SystemError, SystemResult, +}; +use neutron_bindings::{ + bindings::query::InterchainQueries, + query::total_burned_neutrons::TotalBurnedNeutronsAmountResponse, }; const MOCK_CONTRACT_ADDR: &str = "cosmos2contract"; pub fn mock_dependencies( contract_balance: &[Coin], -) -> OwnedDeps { +) -> OwnedDeps { let contract_addr = MOCK_CONTRACT_ADDR; - let custom_querier = MockQuerier::new(&[(contract_addr, contract_balance)]); + let custom_querier: WasmMockQuerier = + WasmMockQuerier::new(MockQuerier::new(&[(contract_addr, contract_balance)])); OwnedDeps { storage: MockStorage::default(), @@ -20,3 +27,57 @@ pub fn mock_dependencies( custom_query_type: PhantomData, } } + +pub struct WasmMockQuerier { + base: MockQuerier, + total_burned_neutrons: Binary, + throw_error: bool, +} + +impl Querier for WasmMockQuerier { + fn raw_query(&self, bin_request: &[u8]) -> QuerierResult { + let request: QueryRequest = match from_slice(bin_request) { + Ok(v) => v, + Err(e) => { + return QuerierResult::Err(SystemError::InvalidRequest { + error: format!("Parsing query request: {}", e), + request: bin_request.into(), + }); + } + }; + self.handle_query(&request) + } +} + +impl WasmMockQuerier { + pub fn new(base: MockQuerier) -> Self { + WasmMockQuerier { + base, + total_burned_neutrons: to_binary(&Vec::::with_capacity(0)).unwrap(), + throw_error: false, + } + } + + pub fn handle_query(&self, request: &QueryRequest) -> QuerierResult { + match &request { + QueryRequest::Custom(InterchainQueries::TotalBurnedNeutronsAmount {}) => { + if self.throw_error { + return SystemResult::Ok(ContractResult::Err("Contract error".to_string())); + } + SystemResult::Ok(ContractResult::Ok(self.total_burned_neutrons.clone())) + } + _ => self.base.handle_query(request), + } + } + + pub fn set_total_burned_neutrons(&mut self, burned_neutrons: Vec) { + self.total_burned_neutrons = to_binary(&TotalBurnedNeutronsAmountResponse { + coins: burned_neutrons, + }) + .unwrap() + } + + pub fn set_total_burned_neutrons_error(&mut self, error_state: bool) { + self.throw_error = error_state + } +} diff --git a/contracts/tokenomics/treasury/src/testing/mod.rs b/contracts/tokenomics/treasury/src/testing/mod.rs index a1e507b6..6e26792e 100644 --- a/contracts/tokenomics/treasury/src/testing/mod.rs +++ b/contracts/tokenomics/treasury/src/testing/mod.rs @@ -1,2 +1,2 @@ -mod mock_querier; +pub mod mock_querier; mod tests; diff --git a/contracts/tokenomics/treasury/src/testing/tests.rs b/contracts/tokenomics/treasury/src/testing/tests.rs index 44647ab2..d8056587 100644 --- a/contracts/tokenomics/treasury/src/testing/tests.rs +++ b/contracts/tokenomics/treasury/src/testing/tests.rs @@ -3,9 +3,10 @@ use std::str::FromStr; use cosmwasm_std::{ coin, coins, from_binary, testing::{mock_env, mock_info}, - to_binary, BankMsg, Coin, CosmosMsg, Decimal, DepsMut, Empty, Uint128, WasmMsg, + to_binary, BankMsg, Coin, CosmosMsg, Decimal, DepsMut, Uint128, WasmMsg, }; use exec_control::pause::{PauseError, PauseInfoResponse}; +use neutron_bindings::bindings::query::InterchainQueries; use crate::contract::query; use crate::error::ContractError; @@ -13,13 +14,15 @@ use crate::msg::QueryMsg; use crate::{ contract::{execute, instantiate}, msg::{DistributeMsg, ExecuteMsg, InstantiateMsg}, - state::{CONFIG, TOTAL_DISTRIBUTED, TOTAL_RECEIVED, TOTAL_RESERVED}, + state::{ + CONFIG, LAST_BURNED_COINS_AMOUNT, LAST_DISTRIBUTION_TIME, TOTAL_DISTRIBUTED, TOTAL_RESERVED, + }, testing::mock_querier::mock_dependencies, }; const DENOM: &str = "denom"; -pub fn init_base_contract(deps: DepsMut, distribution_rate: &str) { +pub fn init_base_contract(deps: DepsMut, distribution_rate: &str) { let msg = InstantiateMsg { denom: DENOM.to_string(), min_period: 1000, @@ -28,6 +31,8 @@ pub fn init_base_contract(deps: DepsMut, distribution_rate: &str) { distribution_rate: Decimal::from_str(distribution_rate).unwrap(), main_dao_address: "main_dao".to_string(), security_dao_address: "security_dao_address".to_string(), + vesting_denominator: 100_000_000_000u128, + owner: "owner".to_string(), }; let info = mock_info("creator", &coins(2, DENOM)); instantiate(deps, mock_env(), info, msg).unwrap(); @@ -134,6 +139,8 @@ fn test_collect_with_no_money() { fn test_distribute_success() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); init_base_contract(deps.as_mut(), "0.23"); + deps.querier + .set_total_burned_neutrons(vec![coin(10000000, DENOM)]); let msg = ExecuteMsg::Distribute {}; let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); assert!(res.is_ok()); @@ -145,7 +152,7 @@ fn test_distribute_success() { contract_addr: "distribution_contract".to_string(), funds: vec![Coin { denom: DENOM.to_string(), - amount: Uint128::from(230000u128) + amount: Uint128::from(23u128) }], msg: to_binary(&DistributeMsg::Fund {}).unwrap(), }) @@ -156,22 +163,128 @@ fn test_distribute_success() { to_address: "reserve_contract".to_string(), amount: vec![Coin { denom: DENOM.to_string(), - amount: Uint128::from(770000u128) + amount: Uint128::from(77u128) }] }) ); - let total_received = TOTAL_RECEIVED.load(deps.as_ref().storage).unwrap(); - assert_eq!(total_received, Uint128::from(1000000u128)); let total_reserved = TOTAL_RESERVED.load(deps.as_ref().storage).unwrap(); - assert_eq!(total_reserved, Uint128::from(770000u128)); + assert_eq!(total_reserved, Uint128::from(77u128)); let total_distributed = TOTAL_DISTRIBUTED.load(deps.as_ref().storage).unwrap(); - assert_eq!(total_distributed, Uint128::from(230000u128)); + assert_eq!(total_distributed, Uint128::from(23u128)); +} + +#[test] +fn test_burned_maximim_limit() { + let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); + init_base_contract(deps.as_mut(), "0.23"); + deps.querier + .set_total_burned_neutrons(vec![coin(u32::MAX.into(), DENOM)]); + let msg = ExecuteMsg::Distribute {}; + execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg).unwrap(); + + let total_reserved = TOTAL_RESERVED.load(deps.as_ref().storage).unwrap(); + assert_eq!(total_reserved, Uint128::from(32372u128)); + let total_distributed = TOTAL_DISTRIBUTED.load(deps.as_ref().storage).unwrap(); + assert_eq!(total_distributed, Uint128::from(9669u128)); + let total_processed_burned_coins = LAST_BURNED_COINS_AMOUNT + .load(deps.as_ref().storage) + .unwrap(); + assert_eq!(total_processed_burned_coins, Uint128::from(u32::MAX)); +} + +#[test] +fn test_burned_maximim_limit_overflow() { + let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); + init_base_contract(deps.as_mut(), "0.23"); + + let total_burned_neutrons = u128::from(u32::MAX) + 10000u128; + + deps.querier + .set_total_burned_neutrons(vec![coin(total_burned_neutrons, DENOM)]); + let msg = ExecuteMsg::Distribute {}; + execute( + deps.as_mut(), + mock_env(), + mock_info("anyone", &[]), + msg.clone(), + ) + .unwrap(); + + let total_reserved = TOTAL_RESERVED.load(deps.as_ref().storage).unwrap(); + assert_eq!(total_reserved, Uint128::from(32372u128)); + let total_distributed = TOTAL_DISTRIBUTED.load(deps.as_ref().storage).unwrap(); + assert_eq!(total_distributed, Uint128::from(9669u128)); + let total_processed_burned_coins = LAST_BURNED_COINS_AMOUNT + .load(deps.as_ref().storage) + .unwrap(); + + // Should process only u32::MAX coins to protect from overflow + assert_eq!(total_processed_burned_coins, Uint128::from(u32::MAX)); + + LAST_DISTRIBUTION_TIME + .save(deps.as_mut().storage, &0) + .unwrap(); + + // On second call should process rest of the coins + execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg).unwrap(); + let total_processed_burned_coins = LAST_BURNED_COINS_AMOUNT + .load(deps.as_ref().storage) + .unwrap(); + assert_eq!( + total_processed_burned_coins, + Uint128::from(total_burned_neutrons) + ); +} + +#[test] +fn test_zero_treasury_balance_error() { + let mut deps = mock_dependencies(&[]); + init_base_contract(deps.as_mut(), "0.0"); + deps.querier + .set_total_burned_neutrons(vec![coin(123, DENOM)]); + let msg = ExecuteMsg::Distribute {}; + let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); + + assert!(res.is_err()); + assert_eq!( + res.unwrap_err().to_string(), + "Generic error: no new funds to distribute" + ); +} + +#[test] +fn test_no_burned_coins_with_denom_error() { + let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); + init_base_contract(deps.as_mut(), "0.0"); + deps.querier.set_total_burned_neutrons(vec![]); + let msg = ExecuteMsg::Distribute {}; + let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); + + assert!(res.is_err()); + assert_eq!(res.unwrap_err().to_string(), "Burned coins not found"); +} + +#[test] +fn test_no_burned_coins_for_period_error() { + let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); + init_base_contract(deps.as_mut(), "0.0"); + deps.querier.set_total_burned_neutrons(vec![coin(0, DENOM)]); + let msg = ExecuteMsg::Distribute {}; + let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); + + assert!(res.is_err()); + assert_eq!( + res.unwrap_err().to_string(), + "Generic error: no coins were burned, nothing to distribute" + ); } #[test] fn test_distribute_zero_to_reserve() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); init_base_contract(deps.as_mut(), "1"); + deps.querier + .set_total_burned_neutrons(vec![coin(10000000, DENOM)]); let msg = ExecuteMsg::Distribute {}; let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); assert!(res.is_ok()); @@ -183,24 +296,24 @@ fn test_distribute_zero_to_reserve() { contract_addr: "distribution_contract".to_string(), funds: vec![Coin { denom: DENOM.to_string(), - amount: Uint128::from(1000000u128) + amount: Uint128::from(100u128) }], msg: to_binary(&DistributeMsg::Fund {}).unwrap(), }) ); - let total_received = TOTAL_RECEIVED.load(deps.as_ref().storage).unwrap(); - assert_eq!(total_received, Uint128::from(1000000u128)); let total_reserved = TOTAL_RESERVED.load(deps.as_ref().storage).unwrap(); assert_eq!(total_reserved, Uint128::from(0u128)); let total_distributed = TOTAL_DISTRIBUTED.load(deps.as_ref().storage).unwrap(); - assert_eq!(total_distributed, Uint128::from(1000000u128)); + assert_eq!(total_distributed, Uint128::from(100u128)); } #[test] fn test_distribute_zero_to_distribution_contract() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); init_base_contract(deps.as_mut(), "0"); + deps.querier + .set_total_burned_neutrons(vec![coin(10000000, DENOM)]); let msg = ExecuteMsg::Distribute {}; let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); assert!(res.is_ok()); @@ -212,14 +325,12 @@ fn test_distribute_zero_to_distribution_contract() { to_address: "reserve_contract".to_string(), amount: vec![Coin { denom: DENOM.to_string(), - amount: Uint128::from(1000000u128) + amount: Uint128::from(100u128) }] }) ); - let total_received = TOTAL_RECEIVED.load(deps.as_ref().storage).unwrap(); - assert_eq!(total_received, Uint128::from(1000000u128)); let total_reserved = TOTAL_RESERVED.load(deps.as_ref().storage).unwrap(); - assert_eq!(total_reserved, Uint128::from(1000000u128)); + assert_eq!(total_reserved, Uint128::from(100u128)); let total_distributed = TOTAL_DISTRIBUTED.load(deps.as_ref().storage).unwrap(); assert_eq!(total_distributed, Uint128::from(0u128)); } @@ -232,6 +343,7 @@ fn test_update_config_unauthorized() { distribution_contract: None, reserve_contract: None, distribution_rate: None, + vesting_denominator: None, min_period: None, security_dao_address: None, }; @@ -248,6 +360,7 @@ fn test_update_config_success() { distribution_contract: Some("new_contract".to_string()), reserve_contract: Some("new_reserve_contract".to_string()), distribution_rate: Some(Decimal::from_str("0.11").unwrap()), + vesting_denominator: Some(1000u128), min_period: Some(3000), security_dao_address: Some("security_dao_address_contract".to_string()), }; @@ -257,6 +370,7 @@ fn test_update_config_success() { assert_eq!(config.distribution_contract, "new_contract"); assert_eq!(config.reserve_contract, "new_reserve_contract"); assert_eq!(config.distribution_rate, Decimal::from_str("0.11").unwrap()); + assert_eq!(config.vesting_denominator, 1000u128); assert_eq!(config.min_period, 3000); assert_eq!(config.security_dao_address, "security_dao_address_contract") } @@ -269,6 +383,7 @@ fn test_update_distribution_rate_below_the_limit() { distribution_contract: None, reserve_contract: None, distribution_rate: Some(Decimal::from_str("2").unwrap()), + vesting_denominator: None, min_period: None, security_dao_address: None, }; diff --git a/contracts/tokenomics/treasury/src/vesting.rs b/contracts/tokenomics/treasury/src/vesting.rs new file mode 100644 index 00000000..494b2618 --- /dev/null +++ b/contracts/tokenomics/treasury/src/vesting.rs @@ -0,0 +1,296 @@ +use cosmwasm_std::{Decimal, Deps, DepsMut, StdError, StdResult, Uint128}; +use neutron_bindings::{ + bindings::query::InterchainQueries, query::total_burned_neutrons::query_total_burned_neutrons, +}; + +use crate::state::{LAST_BURNED_COINS_AMOUNT, TOTAL_DISTRIBUTED, TOTAL_RESERVED}; + +/// Function calculates how many coins should be released for the current period +/// based on the current balance and the number of coins burned for the period +/// Implemented vesting function is linear and is defined as: y=x/vesting_denominator +/// In order to optimize the function, we use the following formula: y=x - (vesting_denominator-1 / vesting_denominator)^ * x +pub fn vesting_function( + current_balance: Uint128, + burned_coins_for_period: u32, + vesting_denominator: u128, +) -> StdResult { + if current_balance.is_zero() || burned_coins_for_period == 0 { + return Ok(Uint128::zero()); + } + + let current_balance = Decimal::from_atomics(current_balance, 0).map_err(|err| { + StdError::generic_err(format!("Unable to convert Uint128 to Decimal. {:?}", err)) + })?; + + let multiplier = Decimal::from_ratio(vesting_denominator - 1, vesting_denominator) // vesting_denominator-1 / vesting_denominator + .checked_pow(burned_coins_for_period)?; // ^ + + let coins_left = multiplier.checked_mul(current_balance)?; // (vesting_denominator-1 / vesting_denominator)^ * x + + let rounded = current_balance.checked_sub(coins_left)?.ceil(); + + Uint128::try_from(rounded.to_string().as_str()) +} + +pub fn safe_burned_coins_for_period( + burned_coins: Uint128, + last_burned_coins: Uint128, +) -> StdResult { + let burned_coins_for_period = burned_coins.checked_sub(last_burned_coins)?; + + if burned_coins_for_period > Uint128::from(u32::MAX) { + return Ok(u32::MAX); + } + + u32::try_from(burned_coins_for_period.u128()).map_err(|_err| { + StdError::generic_err("Burned coins amount for period is too big to be converted to u32") + }) +} + +pub fn update_distribution_stats( + deps: DepsMut, + to_distribute: Uint128, + to_reserve: Uint128, + burned_coins: Uint128, +) -> StdResult<()> { + // update stats + let total_distributed = TOTAL_DISTRIBUTED.load(deps.storage)?; + TOTAL_DISTRIBUTED.save( + deps.storage, + &(total_distributed.checked_add(to_distribute)?), + )?; + let total_reserved = TOTAL_RESERVED.load(deps.storage)?; + TOTAL_RESERVED.save(deps.storage, &(total_reserved.checked_add(to_reserve)?))?; + + LAST_BURNED_COINS_AMOUNT.save(deps.storage, &burned_coins)?; + + Ok(()) +} + +pub fn get_burned_coins(deps: Deps, denom: &String) -> StdResult { + let burned_coins = + query_total_burned_neutrons(deps).map_err(|_err| StdError::not_found("Burned coins"))?; + let burned_coin_with_denom = burned_coins.coins.iter().find(|coin| coin.denom == *denom); + + if let Some(burned_coin_with_denom) = burned_coin_with_denom { + return Ok(burned_coin_with_denom.amount); + } + + Err(StdError::not_found("Burned coins")) +} + +#[cfg(test)] +mod test { + use std::str::FromStr; + + use cosmwasm_std::coin; + + use crate::testing::mock_querier::mock_dependencies; + + use super::*; + + const DENOM: &str = "denom"; + + #[test] + fn test_safe_burned_coins_for_period() { + assert_eq!( + safe_burned_coins_for_period(Uint128::from(100u128), Uint128::zero()).unwrap(), + 100u32 + ); + + assert_eq!( + safe_burned_coins_for_period(Uint128::from(100u128), Uint128::from(50u128)).unwrap(), + 50u32 + ); + + assert_eq!( + safe_burned_coins_for_period(Uint128::from(u32::MAX), Uint128::zero()).unwrap(), + u32::MAX + ); + + assert_eq!( + safe_burned_coins_for_period(Uint128::from_str("5294967295").unwrap(), Uint128::zero()) + .unwrap(), + u32::MAX + ); + + assert_eq!( + safe_burned_coins_for_period( + Uint128::from_str("5294967295").unwrap(), + Uint128::from(u32::MAX) + ) + .unwrap(), + 1000000000u32 + ); + + assert_eq!( + safe_burned_coins_for_period( + Uint128::from_str("5294967295").unwrap(), + Uint128::from(1000u32) + ) + .unwrap(), + u32::MAX + ); + } + + #[test] + fn test_get_burned_coins_single_coin() { + let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); + + deps.querier + .set_total_burned_neutrons(vec![coin(100, DENOM)]); + + let burned_tokens = get_burned_coins(deps.as_ref(), &DENOM.to_string()).unwrap(); + assert_eq!(burned_tokens, Uint128::from(100u128)); + } + + #[test] + fn test_get_burned_coins_multi_coins() { + let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); + + deps.querier + .set_total_burned_neutrons(vec![coin(200, DENOM), coin(500, "custom_denom")]); + + let burned_tokens = get_burned_coins(deps.as_ref(), &DENOM.to_string()).unwrap(); + assert_eq!(burned_tokens, Uint128::from(200u128)); + } + + #[test] + fn test_get_burned_coins_not_supported_denom() { + let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); + + deps.querier + .set_total_burned_neutrons(vec![coin(100, "custom_denom")]); + + let burned_tokens = get_burned_coins(deps.as_ref(), &DENOM.to_string()); + assert_eq!( + burned_tokens.err(), + Some(StdError::not_found("Burned coins")) + ); + } + + #[test] + fn test_get_burned_coins_with_query_error() { + let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); + + deps.querier.set_total_burned_neutrons_error(true); + + let burned_tokens = get_burned_coins(deps.as_ref(), &DENOM.to_string()); + assert_eq!( + burned_tokens.err(), + Some(StdError::not_found("Burned coins")) + ); + + deps.querier.set_total_burned_neutrons_error(false); + } + + #[test] + fn test_vesting_function_return_value() { + assert_eq!( + vesting_function(Uint128::new(100), 1, 2u128).unwrap(), + Uint128::new(50), + ); + + assert_eq!( + vesting_function(Uint128::new(100), 2, 3u128).unwrap(), + Uint128::new(56) + ); + + assert_eq!( + vesting_function(Uint128::new(100), 4, 4u128).unwrap(), + Uint128::new(69) + ); + + assert_eq!( + vesting_function( + Uint128::new(20_000_000), + 4_294_967_295, // u64::MAX + 100_000_000_000u128 + ) + .unwrap(), + Uint128::new(840808) + ); + + assert_eq!( + vesting_function(Uint128::new(1000000000), 4000000, 100_000_000_000u128).unwrap(), + Uint128::new(40000) + ); + + assert_eq!( + vesting_function(Uint128::new(100000000), 66666666, 100_000_000_000u128).unwrap(), + Uint128::new(66645) + ); + + assert_eq!( + vesting_function(Uint128::new(441978163), 10000000, 100_000_000_000u128).unwrap(), + Uint128::new(44196) + ); + + assert_eq!( + vesting_function(Uint128::new(441978163), 66758565, 100_000_000_000u128).unwrap(), + Uint128::new(294960) + ); + + assert_eq!( + vesting_function(Uint128::new(441978163), 18989885, 100_000_000_000u128).unwrap(), + Uint128::new(83924) + ); + + assert_eq!( + vesting_function( + Uint128::from_str("441978163000").unwrap(), + 441978163, + 100_000_000_000u128 + ) + .unwrap(), + Uint128::new(1949136417) + ); + + assert_eq!( + vesting_function( + Uint128::from_str("20000000000000").unwrap(), + 2_000_000_000, + 100_000_000_000u128 + ) + .unwrap(), + Uint128::from_str("396026534292").unwrap() + ); + } + + #[test] + fn test_vesting_full_consumption_simulation() { + let current_balance = Uint128::from_str("20000000000000").unwrap(); + + let avg_burned_coins_per_block = Uint128::new(5_000_000); + let total_blocks = Uint128::new(1000); + let mut total_burned_coins = avg_burned_coins_per_block + .checked_mul(total_blocks) + .unwrap(); + + let mut total_vested_coins = Uint128::zero(); + + while total_burned_coins > Uint128::from(u32::MAX) { + total_vested_coins += vesting_function( + current_balance - total_vested_coins, + u32::MAX, + 100_000_000_000u128, + ) + .unwrap(); + + total_burned_coins -= Uint128::from(u32::MAX); + } + let burned_coins_left = u32::try_from(total_burned_coins.u128()).unwrap(); + + total_vested_coins += vesting_function( + current_balance - total_vested_coins, + burned_coins_left, + 100_000_000_000u128, + ) + .unwrap(); + + assert_eq!( + total_vested_coins, + Uint128::from_str("975411511021").unwrap() + ); + } +} From 306c06e1b39e90b6a1d41ee114a32b6b751b7a37 Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Fri, 13 Jan 2023 14:24:08 +0200 Subject: [PATCH 2/3] fixes after rebase --- Cargo.lock | 20 +++---- artifacts/checksums.txt | 2 +- artifacts/checksums_intermediate.txt | 2 +- artifacts/neutron_treasury.wasm | Bin 188249 -> 227900 bytes contracts/tokenomics/treasury/Cargo.toml | 2 +- .../treasury/schema/execute_msg.json | 8 +++ .../treasury/schema/instantiate_msg.json | 9 +++- contracts/tokenomics/treasury/src/contract.rs | 46 ++++++++-------- .../treasury/src/distribution_params.rs | 7 +++ contracts/tokenomics/treasury/src/error.rs | 3 ++ contracts/tokenomics/treasury/src/lib.rs | 1 + contracts/tokenomics/treasury/src/msg.rs | 2 +- contracts/tokenomics/treasury/src/state.rs | 3 +- .../treasury/src/testing/mock_querier.rs | 7 +-- .../tokenomics/treasury/src/testing/tests.rs | 51 +++++++----------- contracts/tokenomics/treasury/src/vesting.rs | 29 ++++------ 16 files changed, 97 insertions(+), 95 deletions(-) create mode 100644 contracts/tokenomics/treasury/src/distribution_params.rs diff --git a/Cargo.lock b/Cargo.lock index bdace2c8..11054164 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1096,14 +1096,13 @@ dependencies = [ [[package]] name = "neutron-sdk" version = "0.1.0" -source = "git+https://github.com/neutron-org/neutron-sdk.git?branch=feat/NTRN-300-burn-fee-send-to-treasury#61c1a93acf75f07e2a85500c3bd2d5eec4ac5c3e" +source = "git+https://github.com/neutron-org/neutron-contracts.git#3ad81939da78954ff032a26e54d792cc16a4d9f3" dependencies = [ - "base64 0.20.0", + "base64 0.13.1", "bech32", - "cosmos-sdk-proto 0.16.0", - "cosmwasm-schema", + "cosmos-sdk-proto 0.14.0", "cosmwasm-std", - "cw-storage-plus 1.0.1", + "cw-storage-plus 0.16.0", "prost 0.11.3", "protobuf", "schemars", @@ -1116,13 +1115,14 @@ dependencies = [ [[package]] name = "neutron-sdk" version = "0.1.0" -source = "git+https://github.com/neutron-org/neutron-contracts.git#3ad81939da78954ff032a26e54d792cc16a4d9f3" +source = "git+https://github.com/neutron-org/neutron-sdk.git#c19b40c024eeaa8733af9ddee94a52798d78f469" dependencies = [ - "base64 0.13.1", + "base64 0.20.0", "bech32", - "cosmos-sdk-proto 0.14.0", + "cosmos-sdk-proto 0.16.0", + "cosmwasm-schema", "cosmwasm-std", - "cw-storage-plus 0.16.0", + "cw-storage-plus 1.0.1", "prost 0.11.3", "protobuf", "schemars", @@ -1151,7 +1151,7 @@ dependencies = [ "cw-storage-plus 1.0.1", "cwd-macros", "exec-control", - "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-sdk.git?branch=feat/NTRN-300-burn-fee-send-to-treasury)", + "neutron-sdk 0.1.0 (git+https://github.com/neutron-org/neutron-sdk.git)", "schemars", "serde", "thiserror", diff --git a/artifacts/checksums.txt b/artifacts/checksums.txt index 0e19eed9..ea6a448b 100644 --- a/artifacts/checksums.txt +++ b/artifacts/checksums.txt @@ -8,6 +8,6 @@ acba35a90a5b81256eda8055512e0e9117586b5869687986ebf8f0bf14a6d605 cwd_subdao_pro 341fce8e9437a4f3475d331e54acd12ef092450a39bff804543f9ee4c87e6556 cwd_subdao_timelock_single.wasm de33de7ae51e0d0f64534dac4562f339cad66966f8b4d5762060b850f5f2f114 neutron_distribution.wasm 1982982b78b417fd87108c731f91a2226704b00fe722d0ad6985c45e5e444c89 neutron_reserve.wasm -ea4a6c7d9cb14bed91eb572b2531070db1a7f7dace1e217d759ea2cebaa769b5 neutron_treasury.wasm +fb003c04917dad5e51c8bcbc5c172705f8c86c1ce88c5a139b828f5b88b18de2 neutron_treasury.wasm dc5542363aba30fb46f32d2cf0e883cc8122736bc149a11ce3d3cfeb4ef9830c neutron_vault.wasm 7516c30b8868f52596306c1f54a6daf83da53f8e585cd1fe6210990cb2747051 neutron_voting_registry.wasm diff --git a/artifacts/checksums_intermediate.txt b/artifacts/checksums_intermediate.txt index c3b43c01..80269e61 100644 --- a/artifacts/checksums_intermediate.txt +++ b/artifacts/checksums_intermediate.txt @@ -10,4 +10,4 @@ f9affa3dbdd7632bfd2c9b90de9e959cf441f94fdbb5b47068781de94fa4fcce target/wasm32- e27881309f58faeebada41e462a1210a068f6194db4834faa5f6fb24a6c4d295 target/wasm32-unknown-unknown/release/cwd_subdao_core.wasm 21bfa6eb92d9b98c4fe73567471b09cb849614d0ff8a739e6bfe3d28c24e0094 target/wasm32-unknown-unknown/release/neutron_distribution.wasm 143a562b387797caff1e6c51ab80a4ce678419e00b2986b362b7aff378b762e5 target/wasm32-unknown-unknown/release/neutron_reserve.wasm -117bfb323974358045d534d1362fdc26d1fed805ec357da9ba1fd38f17fc714e target/wasm32-unknown-unknown/release/neutron_treasury.wasm +766ae9b870511352aa835e53b88bee081b565c31af69ddacc9d5bbc32f41c3fc target/wasm32-unknown-unknown/release/neutron_treasury.wasm diff --git a/artifacts/neutron_treasury.wasm b/artifacts/neutron_treasury.wasm index dd9f0a417b99570136183e426eea7dfdad645660..d370fe49e34dddce500a79b82cad49638d3e6db1 100644 GIT binary patch literal 227900 zcmeFa54>JiS?9a|y#LO5-}mIrzb0t{-S6Abo=6S^Cp57X$vzU=S{MVLj-nrC+Cnq7 zC#AF@VDa|02dEH~!Jt(F)6vWw?ldaZpr{dgzQJF9Qaw$%XzJbz?&9Vy{!6Y;lIuHGZjTx&4R7*GJN#|&*NSs~lk3~z z_1GY-Teo-VMg3I*hFhz$!5eqK?zV4# z;bnVXaNV1C@4fk7zr{OQJ1*Y4`*lFF_qyBO^x8eU-;%6UOH;dV{Pq{V@CDzopw6mT z_}Uxxz3!$3kD52`e(jrn&_~m~{Y|^~zU8{t-E_mvw*v3)W*^VmX`bipe!i;R<|0k= zv|&GaBTZK~8az$Yc7DN{Bx%L}AeSs_r0s-f{G)Qlza*Jz@I?Q$?8#)u@2bCQoIdhp zX#&a7E5BC8U#^mL8Ly^;i8O6aOr(Q6ZMGWie0ighcb9j&c_V3xQti#WMIHN(_LA0A z1E|x69(7v0(o9?F+EzNLH`+G);Z+;j7-KbYLSysA&p z-XB!0S{Wq2_lA9M*qhwE^5$E){?|9WZnp^MjW@sH*6X$>H&0%79b|pOb-Qo9F;BbK zU3b&&8*aPqwKu$Rcb-jr9<-Hd_dvSs{n?+UA5DKI{qEmNFMl9ClKx`)OX-KxUrv7| z{Yd(&>93`~o*qqqBYn}!zH9r=*_S??mH$`zlK+%$`|f{r!)vblm)BGL+RJy&-uO`V z`s?5H#%=FU-<^IS`|dm5eBBT2yZoopd#U!$^esE@N#Btk$jW~?_rw3&|Ni#$&bwZ7 z`>lI#dBdLDwjE0^|Lyd_bZ*;&*`K7_F8_S`xpeNY)5~}MdHP?{7yVf}cOv~_`la;C z>EBZJuIxv%cV_R%_GkYg`*+!~?7i6sv;Q;ukJ;rvll@%wOWBd^_p%RXznuL__KED1 z+2o;Py^m*KX=IJN)4MKC$}M|F?Tty1PG`xmmF+0fnWWL!QM9JB&al}_yLL6|6s@u` z$2%|6v!XK?_!}Lb7o9Sl8#OP>c!@WP&Rn_q@+9dNX_;J}G_2-G?H5h2-Hf%H);i^L z<%k+I)vTJz4Wy#E=Njv=S>%J|0jjE2kx}~T>_RH$G!kHNK&e@#ukgBMc52=7|M+V1 zqR?kHC*T`GL9=L=#T*TC*BPaQ$I@&ESZPmZ#ZDS)m(z1INiuAxWaBUs!YEG5=DuNC zG|F$Jx9=S0MFtGRM!uuS%k*}hXKF0B9)tpcJ+Q)I-qjtW76iPO6nR9S0n#k8!3yiX zpMjlXZU~C#AuWqNqqLuNOMuZI0X~?cF$1DZt{nV7sp<{-S&vTI<%T)_Y}OoJMlbE6 zy(!zcEnB524iAgDvaxrRmYwlS>832dVAM4N6Z=LDJt`VkuNN%5)VXFo z$OTP}yY=_7Y!yF=4P;QJ%`)j;maV0T=D_@5Zg8bxQi%4kjFO#w9!+PBA{qP`%*n37 zqPmT6({4hA0$7)I2k+)BAkG5Bd4#yg7D1ey9%ASKi1{ms>1;8?n#GjKH;8kd0&!l4 zn6e6DT@M*{4Px4bT6W{<0z(qq2Chze03vc6bt4Igy?3tPb3@E(FXOiCFcq)3MWK*^ZQUGEn43S9g z1O(i@jCaBl>)J@qs7+NwPL2t^3yGesy)KPt>bn08@$H-qLTg6OmW$q;vkB5+Lv8A6 z1nY3x)56S)77NqfXz?7@1%WmURZLIOic2$aHq~^_*6`YmSi51ZCq*N0Hr9UCl(E9b zp0X+Kqz5gylS5V2g7Sst=_I)QJ$gDov9r_6AagJ0Ywk+*5X{R8dXGeM`7++RSNfjPdO$DjaGO5A?lPZg9 ziN}~!LFO>!0fvC)RzR~F6`B{-jcB&VhGyf+O=JDcjIq|iAEuyOycv`~RmK`o-gcBf zo~4bj;{O-I7a)A_=(%9Iv6!$M3kW-4`DhoWl1p8BBH1%)oQ|uQzI2XU#q=fKJrh?k zeF@DbausB%)rk5Mk3`wllq*yFTus9x0B#Xop z#U`2(5r#|&pNdVef+IS_!X-i@%tB`BELtq4A(cn)EYfOFFI=lJ8Bnp2^FekaBD=XH zvj1_6Tw~#1=ia0((hP(~jrDwy4SFYb3AeBUaQ>OpM_o<882N_&%d#y+qeAoL$yP%S zf40n(KmB%OdIt`?+A1OMZ6fX2&*)jJXoqJuo9dA%rNNnGYY_Pjv`eZzl0@~9&NgK) z-Ii^n6dj<@goc++ofLZm_;9cR zOV9v1{`R6Vn{LaQB9_2N6Usavf6uXG@R7{)To%$pna#AwCrsybwq4>0yl&lzUamPF zd_ju|L>sBunySnQn_@E~ayLR6(kk*YfhJVPt&j2~-Im(`;bbyb9{DM5zWCz+a#*T( zSf-~osYj?Idd|vrqr>_;tvXUOIvQ|lse@myt0bMsxEC9`ZIPQy-q8f}RPmZtF#$oC zDLf%VcS1DKmP%rV?!+Q>P&Hj8X^Z}}WJ2wBFj?D`q1&#S3MxrE7`km!NvzLttx6@4 zp$m_87#z@|T^YLVv7tMz8+kO~lxFCPD{B#VG*zv@HvES5*JS#oZg*Tg>1YZ%^(lZ$ zNF$tFEI20@2+oeHC-2OoHeUBLGyx%KIMx(J@mrzyXGR@Axj9>PcSDNeiEPgZuK~R937Cdl z8rk6E(qvAin*C3qoMv~i4zQU|qQl(IiYyyL6X6tnAua!VawSDmp~zZE2fw2hPS66p zo6DKx@f4>(UOq+PpXnE+3`f`qcN0T^%Dm5co@Y|M; z?KlI`5Cr&f1H8Xh*Pl*@@Ca|WS&oF7mF0j&XdCZPZymZ|`EafB!(MrfDt{vN8bT&7 zhOQVZmygiZbap61CFS?NOcGwd!K=8k)dMf6L_O@rLovm8cUbU*R zs+-*%@xgHQge`zfTL=LtUz%;!GEn)UA{`5Eg!~MVb z*oVKGysDp+8C4=1K|&z%2W zm{aVb)mQcf#IYLX9Air2ax9iH=abZ&Ngk{%$ygjH>8REA1^F@BE{{+E@{XpX<C1Z^YT!w{voeFsrvuEwvKo)^rm&R ze7ufq-PG2Rtt+P0{A#w2wBmbRc%Qi=F*-E|?ecT)gdp3j37pr%frvk)Qlm6wYVl*1 zh4j<52}$`U`#WJVk(b4`HWbTt_NRJ`zHd)OeT}{GDWqRM3h>pk!G44oHnHlrWshX4 z<`lCWiUC~X1EUT!V+8n6tjc0BPi(CEF#st#mt{w_f@$KYA?R5~5m~wVWqlTP?D-fA z7U~Z@=SRI~QJj_vconUdk7aWio@DW%QJ)s#0^s?xRSddU=ohxNOuwMJ@2~GP@;+oM z+Mx-n+ur9r-WS(k40zEQzhPvBUmgd7Wj?h2Wx_}|!qpml0=Ntw*3irPQ&lTNaf3yD zWSR!%Kpe!HI2Z^Fs)syglJ`TH`aLLOV^gCi`>R;9ExSjkoVY9#KidRX8zKx0F(y_Q z0O6BD&vGZg_6-YJu@YQ~b#(>9YKLKU9EP{@yS1S_wN{dH`&_Z&0at~$24u0PHdlbJ zq)22Do0mS3!Mx7j!-87rPuI>BJ-=EtSFD*W_J5~U!uh>c6p<86NrzUZ=gOp*G$y*9 z_h*w{H3BiSD0(Uq)sz^C?ATKY(;YRY)`h7#|0&06MiEK_Ph()MpkrJC&KVLI-9G9B zwz4HOmkfJiZ#_A@XOb5THG#&>db7!J9sjSbxLPG5$MBBDrpgKz?-S1PCYIoMNZ&fg z6up0FKZNPz3*&Nn&4@~6# ziXM%cNMYKe1b8?zt$}9Q8ruX@)Jk0?E7@45%L3=LPA|rw4`e(0u@938W1KIbq0GDV znsqhB*E0+w66@Nq0A({^>_fBb#xzSopjmYLie?|n9B+>XT0NfOb_IWruz>aZaMo{V z6;|qHF##=IG#<=EF*UfT=t}TT7)v$e3&Vj#1jweGwXkM39j-OSNzzp8I8M6wjx3I+ zgVI7B3Z<2fu13cwjT3C61DcvBUnsbo+n`jUOarstNZ?dZ0681fl+)Ryrzv@DWoE%G6qwJa)5hxrFp{;!?!m2u& zA53u>5RLLDCDLSP%Ycwe7XzYQ3`*PCS^PK{5N22xZ43w|=gPVX5n9`zQ4rY1NPtk* zLwIn`*282aJ6MS4XFW^~YSx3c#e&^(Y)R|EY&b_}B|;jqbRp96L~S~**L0ZQslnPS z`$O2j|I_^30N0q=Gu3D(NovttFW4h%vz)jZJ!Fay3Rt)`i=&@EO$ z2K`L(YMXjk-%RrTqb5ynxtce={c)dDm#I7#+TXwfEx_ZH6}HMuhiV zZ61WQ1t?x($uStMW*0###s~mS-D3bTa7iLIZoyR!8of)XAWR;K;EGurw{+=Fb?OA)kT1-@iI=k1;ONd> zy;E=AXs*^Nn-H~5`#UkPj1SAq(-;9)K&bs7Jg_;1$pxVCWjusa_ZG$EU)pNr<(4&D4dMcVF{1ftw(`XvCPm0_h+ue3bg> zh(v<)%Cy1NWBLMS3dV0xgOYi$z8C=rrj;NhF}W11*EI&78M12v8DQm#q+}-E8x(>A z3iD#K@M}K~KMMx$U^tt0o%l{<+SvMd>Y-i=NH9OMT7W5w2;hFU$t+jU^RTt_u~$Yn|j9K7jNn@ zqD}c05C0<6EMY)cwK?XpPZO8EKlhY}aqNG}Va)f_NrmB@h_j(Eh!lYt8S2u%qOl#& zSi>bVcjYK6|0LNnb#a3*?=$^J7`WmX%h8^xZkELVnv{h(f&<5+#k3=`%O5DIX2B%v^0JqYT4aE+GMIS91zzsj>s82D+m}qr)u9K!!XWAQ**(E|WFEQcaj(;i z&iv0a$tKWt<#;TGUXs$Js1mJd_SnRVW|EE68FrW}b|eWz1q%$r)_&^pugKzXc*t;u zZC9XBio$*d*h9>8SOdhb;LtDINJBgzrmXpv_x_eE~2+b38pCl*!f z$~T^*NG02CzG!+T`3`xWu!#ei;9siE7jF=F;H-G7=Bveg9cOL%gn^-EwYD_U!rHaz z8VUvSn6aZJbZxh*NuNTkLKH=`n8lk@t;(<7kQBFDCS|~+aNCp?Y=okI)uYopY+D4v z)O(}dpacU$*VN#aO)H9$QAMn5RDrHZ<>k?6H+3rX1IC(KGEDJHAzFTRXhx^AD>OLV za8i34JBt?bB{Ltm$N*XqS@QfUf~Qc-(KWS@xDpy@(p`ntLZqyTVloKQ2_uFDf>d~< zn$hC4YM3pUm0OJjWoB%#D+6&egbgATa!nmG1SuCW8ciB8YO71~)3qAmts^no;KxX_ zBhoY#!{QFm3yd`377J)|vZ77*LNBIG6yUSdCTbsBa6%AnqCnIb?18@#f|`^v+co_` zc%j(_=_T=O6iz>g-3C9#6`ANzAEbx+4DyV?$Ukfm)6Q6#$WRd_>Z}#T?a}Db2Oi9- zKu}i)wB}HxvJ9H{e_D14E5+r3Jfe_Go%b7;UTaf|DpIbpEAh~QU6~2ib7tD<(=dB5 zl3eC7QdiP$FbBlR>3Z<}BV06~kH{gq`82u~Lt}!`Kco;WM4{>$7D1+75?aPDN%t~M z&CqMi*09v@SaV25)zD2swFSLsY7D&00&*Q8UP?RylDENNsM)JF~cZVdW^Xn8K|G?i{s?&b64o-WWul0Z^80=25qrH#9)Z7>nLV*@V?yo?Hs5A0hxAXhC z>MiN7FQ??*_ep=f%HG<}Td$^Uns_UIkW-^<@E#Z{Tpv>Vaid;)c{TP+(42L69E_bF~l0i$HCy4*VZK@Jbhej|PRSXZeFKYGWm z&MUh*)MjBc##Ci7gQD7`6ioaK*kFqD22?O4aq><1V5B|!(BqvW=W?p1wyJeL|Sd_pmHY9qInJ)KB2-V7ZCT{GTm3Ubk@T zO#B8&jNh;)3@V{>)J6D>f*u(c!bKJh+(qjaEof}cAgMUD82Hkd<@l8tRbVR(8I8cj zfE-Wgj3Jtzd(keEp@~_$6lQg@$iNi`ibhmJddkAU$lu6n^k*!c zhM5A5?c?BhQ4mq0c|c>qd+BUQj?TNZ?xMp|fQF>Ff^3Nw!RE z!M3D23arW+84hYx3C97}lL}LWY!(v;HoMAtB-D4jIlvQ?Rt z&)!!)`%U5@Q(!W`9dXEkNr<(}J56&q`s~Ce<&k(?QPcZ z(nkqy+9FnK0bS?RT5lj?@X2*|^BvAnP#0xCL>iHdl%Rk{+*Z#bVIbQkL#V+<&3-{l zR3f?%^S-UfXFJ>So4A8BnFU1)W`04K91~#$H+a2`BUf#&8`=t+pa?ldbOMj!N@DSu z1)s{~W|gp6&SMU`W5Fvh#mp}$cW%I#H^XhU$qUssds^LcC9SCX1VuLN=D?s9&7xe) zr=!)jRVVl>LRo!(pbOg*W#frJP1{%7l-;7h%jxVUW37%xx47>ZO~~SsvBQ+U5a|Qg zymNR#VeOAt(m=wwW1S0Lg(@j^4+6B}#vZPW!c({^iz>5oxAKY?7Xs6LQVw7rx^2>mU9adCE5x3GR-*(Ceh;Q0)FvIW`lqv7ip+Pa;cn(+DL8uI zk{dH1v!HjK_w9J>`lzSVvzV|vY+th;&x4HjhFyK*8{c@z?KD^B`v5Z2NLLjp8~S(a zFSj~Xn<`EnDjAd=KNz=`qE)nKhgYv0BgAB~p92O-NOeC4tZP~qIBq(aJ(^Hm76F3P z4g&l9;9Q-~ZWI6L8935Cu}~FI0%e*TH)SF`xF;=EBliI20!cyq1R6SO1>}rybvo8W zjMz)=6q*X=0Z5>-g}!IsToqm5QBUSV$kQFsem~=KSD>T?gNV{Oy>K4Hf)`u3#?io8 zM@YeUHOJt%4)84n2OoLxXQ6>r5mj2muBxHn+y1*LqaK%K{xFvQG7Tp#S6ic+1anZZ z>v!q{?RuFH(${H>2{DG}bng!=<^$PgVJh>LY=c1|+l&d0S%Yloq6=4^8g>AwD<^CH z*7`d=PgfP>ByGS4ZLg9aWJ4>&n8Gq@45@0z2CEt{1S7mP8tyypiPTu4>%sq=FJZ4r zB^UY7oiQ4vTbOVUfsvMZ2wbGv;u&G^irI)Kz+NabBH}QwhzM5g$emEMDR{`OZJt(BZ*xVT*)2c}0D{}#f`=p6 zDFR?}PwfhUw@wzOH`<7btpJXSZ7zYAN&d&mF8!CQa^)jGbCUz9X1!;Nr!D(LV%#zG7KeY zaRSQ6IxHfpuETb4zZENY?ZlZM9O1E%^*#qIB$KW9WOTV0a`ej;1og0B5&ku>q%6|5 zXacj<(?t-em&vyio7^D{M7CfJ@ILE)nJK!*~8P2$jshTZffh|chyLX! z(n(N-jZ_D55r6Sywn=SE=mFkLrepPoL;tqihY+Q2!$mZ) zY9goLH9vU1*%ue`!>~s*;N0L6LA(~Z@6SNq6$adh1I|csQ~cn?cyeqAHUP@2)Gy{|1jqm1>m z3J~Ov#d(3ZgsE_ebuS?}nKXnJkSd4Qf%FzcHUf+_h7uKVXnU-vDU$Tq+293{Et;9s zB%)u9ClNyy9I0HiD6`hHUQxnIiD#)D#!1T{QKLXD$b;-W+!*QSvh4aW9$Pu(!$!CO zs%_#P%!PCXbppQL7xj&i(ro9*C`~Su8l^3mNTx`qH!DhGQk6i!xS94S0AUGIyVglf z&&R?Dz+FsT>#QF#y3xsqlg~-TvW9gcpN z@8h1erbQ~PCl3RQt(|-NAVY|#}u!pIsrPi<7-(f1u(z-rK!?1F4fr!*&KCi+LIk@Ph_7}|c6}U`ou;l|4iD>B+czmQZ0vxde&lQc@bP6;*G6)2Ft=5^k7B+@6+5&a?9Y; zY42i53tP$Mk1T>@cn*+M{Qybm#|I~CV^K#v?9t-dDiTG@J}ZfSRdxCh;1zo+ z5|wuD%7KXZtzxozW6NpY;8C$>u+pjbG*ne|dmR0Z6#O1FSpyU$_^g0_5JpxiQ%4O@ zDbE$44q*hN|16zbjvXFUhn+EIE^*Jz z00*aXt|MxD)p+ph&SCI=E|=zNoJ(u(6n4R({)puFsh@S@ew3c^Y#g$h)p0+kp`Z)9 z9INXQL3_T!;T|o){Ar{3%uDd+#qs-N94Kq$*>LddQA&&{`!qNJ0k}INz8_S*?zk^V z|9txDQ*TVv#)zmuU1=_j^IW0xi*$>p!NC`kP$P$rqs7IEy;nTBHn9lovtn^x z>~SFu1$hZ%jm(@aNN)?W9($xcmjRs(gs!8Pm~9{OhsbBYLAf?w4TS z^Xiv+HA?w)!<>;r%^FZ7aqT6k$R*Zgjly^K2lDYp;C|bh83TtC^Q^#CL%u?qBdu@M z?_f<>Lh^%-@$)GgJuh|k)ZtwC(h_j?7rxv4VxOj&%uQtFY&K?NYEu{Q4V9z`nB&VA}BBzGo)Uu|tU;@I$_W^JV&d)F?3df5`JYL}CR#SGl6Q(Dj+s5faP7IS zn_HWp$gSXgy^Ct(b&uiB?WTFI!}^e8;kYoS{NrddQ7x_7Uvhx^sBiGAhgwUIsUKou&2!Bg3yBo zE(j;xajk#&(@+0GO9_nag+QsXrnwvRKzT(M*9^(o?J+LOPKL4L|B5LYJH*xI<}?-K zYLvevojxD@Q3$d1!vCbgOoj428yz&tUsGXQg*a$q;m@nEMdTTeL@Ct)cglKzcM36W}7TNsuPc=58Cw*(v6sVcX5JWo-?ZM>(HRzNex z%9&sz#^7bh3xMytfEEP`BFMuHV6w&&2)R$2)MtnJ8GvKLeXgg415S2UI8HZ43mNhW zT5^o=x3jkGwDt6G?YpPuZCDZx&Jvszj?;~?<_KA`Z3qZoVDw#&-G}UnMn9o>*$8?O z^|=J@Y0p`g?(z;!H9KEiYs**I=gbAe{8c1`KYrh~%)FqG9L&L`miZ*3v(z0X5~} z#XuQZow>xcyx|VP|7heg>}B^9213Wfvsn<|EIfsc2tt`p^&rpw-6tRXi=Y16Kl=4A zhm8mYJU=bOR6HCxvWSQ0<===2w-)g5y!ly!dH3h&jX1^XM}>l*OU9r%@fYJEeN*nz>N zH6dcVO-uB@*;FugZhcqciokx^|AJ>4BR-$~FXQlM7_&JwS=Uc@`zn07pviQFeFs>S zt!1Ku8s&ZOIhIWOmkXr3mWQ~1e*AI)m7am!tPODs%679X?tIi3?`ENg$K9-UP#Y>` zjjczH01!pUano`wn_3e^d#BWI&2`+yQV{tV*D$G*lI=!Z|1ilI3tYYCN zR@DoW(blPImjvc!?b)88?G37kSCHk33 zuC2V=eU={s_6Cay(RZ0}?uftk)fk|=jldBjL*E>;ozBzmbDok@+t~LNu01}L{n3x+i`QBQ*`vYO+AA zCKDYrOl^jaKmXHD1ImqUoBARgFCjTGq5#7+GRx%~89d0FPl*iWcYhi@jQ6mikPu9z zpa9B)f_Zx0U~@v1MTh$N~8>bEk@7t zXhVXWB^xax%|u#QJOY?Y3S!8V#W_*tBDegOG_V-Fu^Oa0ulcfBYBPOb{k5euVD(~X zI8{H`tdo72vdN#ZiCU$}Gl@hk6*hu{ey_42a#99}sfUFTU{;EbTu}d?W)R;VrNx3!!>{ zr;|SRF)pH|!^b7Gcdp|+FGTkvN`nCcY^e+`hbl@SpXyOMSCpE+h*Q)GWw52pp8F^2C`tM_I(dKgegtd zj=#Lr&*v1fq#Mw&#B3WZDK=y%VzBQ&44XOF4&kSwPOY{I$1pHwZXIK8da;5>Y)(Q4 zb}qF{pSUtekh6Bw^eWSFRP<6mPRdJ4K2qLK02lt=1~OKV+v&FWEVzdnlC$vz;LpXO z^4e!D=)w7iMG)(V3r%rmbtbt&B9@!!zD}jENUW)X{I-&?!JmQ8rl_xW1L-Y8elo=208KZrxuuu{v(X=>oLTITDl(n?1?M7Ag+_|=gpZ&w6|C05 zeIDY-fnyNL+}H$N6*RY(G9fCH>LzI#|EX|`Z>mW*&)@>(LyVwY4WF705k4O2Ts{Bb z&+=TSg|=4DAprsA^*^fmlPp%yZn0}hhFW`GeU@)W@PqHN2<)o8UMQIgJboW6zll3AXo?FJco z`X*e@K5bo?&>8ANAv($>Ulms*Bp9+M27`tTV-hJffKzI<+|q^1O(MwNU`a`kMWVOW z5QGqHH6G*6+$MI%VnhE=YHBva8nBY zZv0#;XywyfT^D<%t8^ogM}(ydLoBWZjA{Yzpi3~v5f*1uBivnqlceQmk~vZiqzTxC zlr1L$mjunn%N={dm43GK42jFu)a>No56}^$w@sH@_FkU+tMU>ZsVKU;ir(zxwX)yS z@=u9Yosi%Y8A!d$S;O2Qg1wDTnaY4aYLx5rzOZG4GU|Jhjj7O&GUyO7Nx~uqYyFYg zZT9ixTJ_h5tfq!too|Jby5)f{u+oO**Z$^MGI*bk`CnS(dn{L`Gg;()LgEhp3?Y^{ zY~5^IoyHJp;SV&bV`1=lT|(S=LEpKBs+?_6468LC%;=1D)lfK!_uC-eq& z++)qP65LaH+SLVV%M)g)j~bPuOtH{fcH2*5AZ=00i|ixho2l59eY9m;zN;|n=s{UW z7ttO7$~fY*Sf#*lWHPg4 zhkGF+ZZIA=BHY4XVNhy;wrByK?)Mz4Af_SSD_cH2Ok1u?MwPJcxkmD4< zV8}Ty*eo$CR)ZYV(q!T+wSd4;B{~FEET%E48WB~Hyo8mbDyaYkjXjEmG#HEU-ntkUZ~O4ha;FXtVu=OD$q)I%{M0gl zu>4NU_1@ubo@qEMm6z96RUR8&91bd>_fMof0pe)JkpXB=E(UlKPa8Q-Rqd<;rvJtzC3+ znPH;|?y3h)(;{$5Xoy_wjcP-3 z8~v$4!BCcAtBmpDcKlOoq(=msQXci56&iv%WBQ6+cndAnLa(?mC_XxiRb0p)2nF6b zrpGL%T2MCFK2d5_ss)kL6HZx1PPgDZzZj zmLFSlC({;E+MsxUBMn-4fh`^7w$hP*ol z6kd$Z3s8iTHy0?(dWnD*0Zom-ETLbg{DpUt4AB{jP{0NJ=)A@XgAL)Hr_vcb}_tvc+qS+ z9C}U|FiH#fras|}Z4`1BS4>6(f@Bcuv0OpofU6)4-$7f=m48&`0&@e}x_I3q1Kif2DiYzVhfD;3&W$ql~i(D#K#0+nK|I3|HGXgjj~dOIc|n%W-CEg5!ntAGxVg z<(!_Inm*z9wA@4v+!8EFYD&}w5Xe)qI_TmxL*rzxR@N`on$oo)m%9A zIrwX(tG(2P$EuwqjOtJwh1ms*(UT{4Gx_8B*>dshYr!r2dZ8QAsJgP2*Vz`~bhcH$ z>r58q!Nd3`>5>^aimW6h{|8o85WC>b&%05XNwQ#=si|mYw3)R$h3Yu%zJ$}*8(=CEet@egkHFOnJOT(U%UH}S*kriIaUsqm z<%s;qVxVrwAGiD|%sVD{_`1+FdJ((Ux`Jw2u_I+Dg}D3jD3GKS@1=d6C`~hn)|>O} zEU>0_J)1H@E!SRs$ZI8AU&)Kxbcy1CacNu`!{3u(Sz;ryVF78COBv6ZXI-8EHe%Fl zBOx}3h((ajPI}JntSk`HwR?7*NZReY2~=l$?@l&ACa&GP5DQEI-lxPr0ovgTKbmd8 zZOV%gOcQ7gggf!dPO@!G&U|(WNC4jXUiJqje_%Z_FZf}8KSeMw8X2deTP{OxW{Goh zGpBHx2~*`7#l-zYor0a(ge(b4Kp^a*Wr|VFFC#sv=9hu)>bDrD_=Chbgm#BaEG$4~ zex$^4Xx!@yJd$>rF9LZxGgQ`LHrcLxTKzZ%2 z1M8tI%RS!UiNq7q%X3QPjl8Hsr3wQRqqf2ini6OD6xxHWAfB!I>mj?*3n>^QdUFLeV+;(p=B9% ze8)>Z(9wjIaEpJQ+ezKBEvwyGPctQ#zEQ!1Ur~3`uGr-v(-M;|Nb_B^%@(v^05Fl3 zwi)inDb@@&hGgohe2}4_B$h-34e{A-Q{%b4I}mLlnHnH$OD5 z@3%k!bw<-HB%GLv65v z?hFDloe6h>L3EjxZ~M1^LF!TAt`V2R>2TKw%V9a|PSyFtw$tFZvhMf!2gZt!g{)wK z$g7WOsa+{KikR$7>pkw6>E1V@2pCf+UwQDSj_Dl|nB6C-ZvOY*XtMGo)EEAq%*^@PG)!2yw7d%+zuA=~iYeYC6|QOQ(;$zrM^oS;OCX*ExFtnDoGWU1Bz@(e46`G6H0vrPGb zOv8!@BalUwjyt!?bwY52F;A)u$qZukT7((&LqtOyvn{t3rq4D$aoB+7KPFWY`tLjBNDKX*@o+(O1uT zYGf6k8gr_ib|1(R2V|+ghSsUxmgKv#tG8|kDzYjD9d zL;`!b0=b_tyFiBV9fXNk8!X-uTZk4jn7jNQ$}^vf_t4~qq1l@@_0R!LS`uh1E&4Kx zOh;GLmCfwvX>>(18k$X3ttJH|vn!N#zt6kHG%IBok9l#?jM zBkSch2#5ZZR<^3HGS2d?+t7>~?l#!dy{foziqdVSCqL8mWJ`nh*6gnVr)9j(2AJN7{4fjb&?IU)DX>zlp+Hcats|Blp*H~ zJs4){6KMR_$jzqa>5v<-7Xr&Bszz=s5kZ!Vbw*;euK8dVeD>^A*Ht|^;z<9SBc zs6QzzPbwyBOe2cRRQhNraz1C+me#7^o!E6x(>E4hg$4QrrO1&(&ufQL9h`Z|!jm$s zgDkleuTcngr5x)Z92}6grI?&&5?Wd}XcaaDKq2~Q#MdA3NUe?N3Nu>dafAS`5xNLo z^l~M?`GP2jHx+1FSR0Gy=T?G=0Y)V!VoXJ2Tw?r zsC-NkgVIio2+XI5aW}AX1ro~Fn|wdR$8uj zbNR%Qz*MkC;QM8xJ7i!HFn)Dx9t@50J=X|#c%4&^;wFaF#z7HVUEq`l9_Nc+ffz`5 zp9q>T>!kYwi_I}we1_~>dWj+u&gei59c`lFv z^}9oRp{b=1P&HLUz_=;&h|tu%Z9c3ViAcYNLQvC@xUW9^Mz|4VAPFWv%%~x`C)3O< z5leJl@+Av-ASEz-Pl!+c&=UVZ?u2MEWek6jj(UnI;w?z>&XT+kgRj8D?Psp!+Y{W* z?J0lg_A-~-7y|bhGVHQ_wM>GN*e5?zv6cE6vki_0PH%h*DNoZ z)9Pg0?98#<<|DGYqt-Pv4l~ynsK>=WLbB}WgrC0@y2~dVUV%rCuNYTRShQ7fP)4lO zy%4iiu)tCqw>x^tuKvXZ?Off@vmFbdX=`2KucLQn+Tx%cHqwZ<7l5eyuL)9-OL^Dr zblNqvT3^xE99 zT)m#9XZv;HYCV5ZFWZ9)Lp+6jUPW}p`GLWFW}l2swJV@bMf%_0HB|^Eq$$7`s|WCN z<1QvgVt@nQSPP|mB;`w~@x-!mc^XRLwia9;IUlQpz5wGx{60n{PZ!HFbN@a7HTt9*s{2SA27L{ zANfTu%L=>FH%qtJmA-K*PdPQOqA5F|=01D5ug3?}xRG;haKBjINj%X+-8YvyVFbu> zMB<)9Q-bjLL6n%AACgo7>)uX9tl}9(ykN#IjpOM1z$*6oI&zyH00ZVWbqp|F!hm#+ zVN+h!EXK<|$=RppsbMyJ)4ADSBu;f8cVJ$AQK<&}$w^+a-t+SDacTOZ)D|F3pAdEP z^5^)~n`EQM<<6^Y)TVQTpG+fLT==WCdptF5kiFPUGKi8#+1|_aqISyXwMs^_coe*{i=jRXn z=0`vCz!QDnIn2vrdSg?*KO1$Ic)Te;nrbJJv(}c0i6ct9d?dYdG*$Gk-D}K3ASxaw zE40H`@8E4hE(6x|)017WXOx#mL)kP4ASj2Z27&HIAty?|^iUO(oR%l68}MuU>-_qs z6pfHYY3ySD8|cBdcAwuSz0vzmk+T%1cT|1uk`Kno-|Ka$?G5!*7^e1Wb2*{?7 zdZWIA>?_`2<5+5Ou!n0zB;q&>xybVA4+((aKp0-58tHt9rx4Ho41`0p^%(mcUHFlY z*RW5x_}9nCNz1<<-z>n?K`=G%n>9;gs$5a9($Q)qnDWv|lIRhmz2RVXa@ZsGgiY+B zS+Y}E3qSAdV}M?kx5O$-0Ep7`L#$YGMAj|LFPF1g3^-&p-XgKmGIN)=c5eD7sIO#An`AS{_TTHgvIn7@HjMiPSK# zo2bL}#O$BE?N|Tizx+EQ*=T?T_{491=11-}ES1N9=~z+@%a8p^I2H)VmtO`0;rC(Y z`7*c)mo=t@lrg4s)Sd>Wbi86p;(ZlUYKp@lu7u=yDk8uzM0vj7*0)Ik+uelt%SQmA zd~SIk1mp)4wd%#DN)ezgs7MUPB-7W6s8sw1d`Z)+kCS^e4L9)(UVfEcc-8HKVFwp` zb+OAYv?&JKh+d$KbP0Ti`_4Pj;|YY2mZKOqTb1Y-%j%u5-=t0lvD4`}T}L2zwbmyO zyw4)^={s%gBXW97f7a6FWYM!OjeAaydIF+dTZps3Jtr|CVY>VgIvw)k*hQR0!z|ZDRwu2;Y1ilzL~(}eQJSCe`~dQMmXC11$y4@e zyRm$ze*dxYjme+)YvG06Y8llKzXo7+wyadM>vwV)X*l9p$zGJO?PSJDe_ z;+ITGu5dP_W}@cxYK2%mg0(?osoWFdz{umFTo$S7nSbE%?D-g6NShm zVAj3b{9u5)DZj%NMbmpsQEW&#)DSZbXZzgXB^V*vOCU<(M>E%rPq3kGaT3zk;I)QR zP%4W66GEDo#AioyUPmQs&J;sKr81w4QEBSg#N`QRqvc!oA!7(igVvh6lyTCi>(Um* z7hVxoUd{`T8&STdT$D9NQ7^YV12WB>e22b2KfRf|yqog23TB_bSH z7r6M+w2Sc!@f5;lTnpT7j z+cqPRG38$IjPd?kHG8|pv$yMi=V2DE&4T7}{JsdV&|DnTOZnh*bJ2ZoqvkefV`;NTcxukAmgb%Cvkp;`3vzBLF}2Ev z#D6sL$;6Zrlo9M3GeV`Bcf3CUHB$RUORnKX8M~}}F6P`K@HS+pfUnsjb9qt+mr}^N z#m=eq)55%^R4z|>%*e(-G-3rPDIGlRAa%#-wZ?U0+Ch5^%i{1oGKPg^ai}IRfmk&T4P1!0B^)pW6`~|s>cPaJH zbn_Mx5}x{7D`TAT37iW}d0%Av+cYr$%tnJq#^+Odg1zmu&XDBvcr5j3IaG4obl9h) z0}VO$`Pd1}Sa zO;vABEcGU!2u(&akEKiu8#5^$6e5n(I7a$z%s%*m-VcDqwET9-gBwcZs9LcX-p4`|NGzZ|q1iB$Sx8q6LtyI_3xLF(^6b4>G z`)%BbPrCa9#F2CKolT?iLqy-1T>y4SgJ|98RS)-*x?nI^ZRtGbm9qX-)UzUkVAS81 z-^OG4e|pj{h&knwj2*iCDwkDUVAQ{iTAD?Fo7_U~$l3(Rs-b;Annho=8$M73Tw40^`e z62DW{jfe4Vny0A~;~!aMF&lzNU$b{SGgrn~eHI@;Vg7r9597Njgj>q$Z?WqlgasHFGEuE3rh6Izsad7;9n^@hd zp-#imXD$Cp+fsSZb;y5W{5FRHu+l`Ek{|R` zmFnXIe1t|1tNbToBVLW;2XGH~V3pXzxtVMNK3lH=cH~1foK#`cxS(ZI4j!s`u!Y0L zDYCqE5bu6dj{|z2CU2!9Ug>JIUJ1Q(86LjYVmMIwXId9`GZi3!cU^J)`5CPhGc6i9OX8BbT4WjTpF9a$uv z4!Q$R2hTy|==;{r-NCF0C*$}PEGCfHSTjy*F0sh)ktpCibWX<-IozA9OSJw%4^RtY zOma(3EWcv3p)YWxX%b;*Zmb847@s+dP!fkE%}8LY7Fy*+SA-&u`Sh}@LK$8Gu;pdf zhO)=4OyM20cfA$nt_$*>Ts2k{GPY2p-L-M4#U!b6#@J#p%9Ok*-IEh2a1Cu99j|tW zj!S^>;s~`;3S0{X&bD;w3Y<9FaZ}&y_%RwtrM|JD?7ACz3T=5vBfT5<9*Kc6a6aQ; z_fo{9wiX@z35Ftv;Ye@el8UZ}-#&_YYZ{Mb?j@THA0M}?Q z7kxgOatnV!NV1P(Bn-4s7#MTHD`Erpr;LwjtQD~0Y;O=0Y9`F+tnf9)Yrq!>6~0&| z0bgRA-ZD^(aU%%L$>Eb?lnK2uf9}l*foxv1)u=iKZhF~{P=Eeq z#L@*a3u3qBRJ|c85?oaQ(`ySU7KnClstGX}Le)$?gOdz?!X$G(F(xZxY-W8Mv!hod z4D)%z>3-rR*~NEH*fx376ve^cNYxWjCxega($=eA9$?jFerb;OX?(me+B*gp)=k(2 z*LRQa#2ZgoZbr6eX^CF4xltkeqXaxF%y3=P`0AFj`LjEUy-$;xW) z)ZS;^DX~_|6Kl0XVy#3$aKohJ;B`sLir%!?Ed`3YqiEnoAPKUIqi$P#WX3y$e_@l(yUrOF0yc?#U|j8nG@O% zS(BE6qiS3mmLQ1vp=J%XkbYoc-P6LhplZlAa1K?KcSh+QJRz0ODoHz-D9sy+pJk+K zR2ivEGA+(XwOzFEELGXA8X+MS%QqrEy8^s#>>8>zd3q> zf}64Q<>qmmR%xg#HI2h-X{Zk4`+$S`gz4?^e1>^v(wHK#MomsYk>#i&*^}G^Dh^1u z>`|KCP+TQ@3OTB#pVlB2rl|5k6pnFAi*<%UT;xb34b7|KYKqyso(dYPd{Zj}Vwph8 zHzhPubOs0@7y^A|y$fGe@-7lru^iz)Rva>5Y%tEO63XH9At}|Eu=4UFVb5Y(X%`!7t3!`en?qJh?Zb7tGBXZg_>)4x|o)y*qST~750l~>!;)C z!1D6l3~ilCB%k;54K()1lVW{{gEamx?E~nQ=j#dmUPO!`YK2m4?bk0g4)QCCHGz-j zg}7*v5zn?XEc|jF1Djx591eDH2W3l%7NmBui@`oSG~6Up&9IFciv}+pt;0Mkq?DKV zC4fg4;RGOVu~9#y+I0;Bd{k!`vwL;t4;GV@N37b>Mb%UYKzZT7*OkU z!zbRS@!pd}XbhD5KxpB_VxSb(n3W%)BXafIWREV9otc#%vNDW4pc!52WgoOMnYENn zTUoJA*PFIw_bK!Ob)Ywf(U)u#|6e{)%OAL zCN7QLWLid^caK4E>CMXrzy{T(Z8_nS88awyD7bw!KZJQ~%F87)UnQl%ZtS|J7LpNCpG2lX2o? zfb4|5Q_s~Q)l{Oi!X0uW(v|ftmP?&DqYhCdY9Fs=Q>dOOwJ*dR$OrRq>c2MK09(%A zcMMpH7EK)^c>JF^q-2S*&7`I496UoEEiEB|Ch-woR&P!$qww>T>$#Sv6ib*}|W_bk|k zyuYCX9AbeJ;|UAgneN9tSzA&r0gf1>`Brpq65w0cy|MmpUH8W27jz#OHk=BoIFGrv z`ufJ|3eqR>mD6F#ztr#Dr_H@=Lw?+!orQ#x!I$X)px+Yy z(5(1F3V=!i!3tJz`mh0iAUIWw39op?AH)KUg}@(D_=8+fwjniIz!;jwg1XLoXoB;0 zTB@P6+O_J|cCCmP)UH(_ivR=AJnKn;v#1=0Jw7QdD5Zh6z zeRN#7tBL(KUX+>2$JewYsOm5n&qbL?_{IXsdu@DF1t`=u+^Rs{NX4C01=u-wAdAEb zu5fqO!wvO_Z&!sdMC>F=o>ko)wdc5IV~Ie2TpnY&7isaa;3GY*do1RW+Bm+zM|y-d z%tv}Lj|3HadJBD|#~1oYsi0V5jQV>u^ZXugX3o_;p=7=)*|)Pl)H}B^f$l2{9yjtg zrag1Js8h>?oMY2?cI3R+U;)EYr^rccNx~iRF&n0wQKvZ8IN4I-T;q|uYb0CZjKyS| zr}1KWy6ezKE${Kz?^AWBE^x0Ay&=DbR}B8AY=@JKIZtqip1}tNLo(2i@a9aHtHk_Q zxGnU|-AweO_rh=pIiyb$`w^4bd@Ef~Yy3@wLLQm`g-!+;6i|#ofm_R_@KT!#8`NfQrWm=PvUzpjn1;T8?zpRZ3S!*@0o-vvVzzi$z zHSloA)nLlT@R;uvcsNUA@JzbH6xLdKV9mG2)58#}5+PfL<8KS|{ahw^lSV+`P4xV; z>mV1rl9$5!ZD+&|1|5^3lC&pp?#Mc6>-8zS(Qn?Y?+ZmUge!dwv!JIc&=sl zLU0J(vnmffRg8d^ABq?+WniB2Qg@E_(9-d}T8r*DHKAHusvNetbR9czi#B63aT0NO zA0N0WS?rRHqhtU%mrt5xs_*bUVI@x@tK#%B6}*XaFqXtAwjDjB*U=!okYo+P_bh8)~sGlA0(Y`00?)H8K+IL*_1Es=veh<_>)Po)K# z#*G}EtSFye4(^ZsLY}?g?!F=pPE1&Eydn;oY!7p5uBA;p`;hIf4Zn@cV}AKuE+6ts#p*unp5Yg98HREs8-2Tmax@!UtltCr zewa0g&%6AfSH090C7$GFd7qcyWhTm?g966yy&d#D8aLgR`(xSYpQ-%eOi>6#V;WjN zmBNY{&rEVKlLYcu1a_+!6K6kcWEB<;TM2`!N)A~GxQZnaF9+2(s}7Fk;nX^!@)#Q- z^d&XA;#UAd8>VNk;n7Fh>J*L?_?030G5FPol%YkuRligr8euh1&Lr>G?&*I|q*JE8 z*FK5lwGkLLg@M5<^roL58eeifM>&wzG0z#8S7ttZ>R6r17Gr?9iW+D_dM{LPr9tx7&O3Z3_<3fp6$QaUuvPU(~>* z7>|y}cyz+pCsfGz72g5ub_)s=+re$$X`sOQ96Bzn;}z<7D2u}zEu6R%$Wd4z$0`ft z;2TSJ%r{oHudNYQLuEyB(2vYH-U|JQ+WY!a8e{!nO9O&)wVWjGYtcCO2V0ub)RYw^ zLSm9MDd8hhyl}Y1lo+9~A`a*{mYQ9yZC|TCrqBiC?Yk8q0cq@>Ae`CV5|{9PHaG<}3aUB1T&SAE=hPy$2&t zi>+b}hLr>G?ePp95Z8{&O_Ko6%4+M4qOjifTRmTJ?^Ze&5G+YYq+4cd&RNI2HHhj% zOK-)7Ipey^cAWdlgAVE|kK3>!oEY^ZFX5qZY!j8^y9on*9VjYTT*`_kQ$A$Rk%$J}(5#|7%AQ;}=t~k(szcdbX zPaD~Rc_`p8-ZGzSNfkvxq9X)6I8{DoZ3emJWd7M8^^L!d$y};+IO8RU z(n|3Sx{7l0VF%TS{Sy*(9T0AH0M!Bx4!W>eOEXdKjEUZb4iFk)kNPfl`a$e;YGQ|P zYuRlOJKU~xv4j54rBC-UhsGBDgFq7&%qSa6p3EfAgb}|@yd3wj{t>T_f;5wSxJLZE z7<$u8t_;HGKpQs(XnA+rMZ$h2ME6Wgq2Kv7lvgl26J17Fh}}(;9pwkw)*noS~*|FUtUCg zS1^ht(Sz?Af=uKbY%9VJ9VzyDh+eVKkyb7?yjK@*R;^lC?bz$8Vr>AFjBadn^QY2l z>Ght_t4~Y7I+*~*eJ(vxV|ysw#dfnrq!_YWY#9!sEE#SEZdax;7uXxo!7}Ez*cw!6 z-Zp+C9XTovW7T$okxFBAwU(w#(z`52rGS{NMI8#K!TY4_)1XPwqqYE@qK}Fqoq_#E zoq?%glpjW19&2hw5z%bD+F|A>1SRocEo481QLtc4iEwShij4f>XcW1|A=3jQ-j0v$ z#d`g4SQ<29OX}yez*!oH1r)9}5iK?Ks&Hwc2R_#p9cDt<;}|&Ca~TvCriB?@LYW`) zuZ8M7QGT>v!^t6ArGb^H&6(ui*I5}wL1G`YS}w8gGvIY%PPk*McTHd#2V!#>OVyiu zuNbkZ%R;a(A|jg%fl`;(aS6hQLp6p&($4j2x7{bitDW#TwB~pfu`~ zeDju)o69eo`XA=har?;yjZCu6Qdd#^G1luDO&n9^p+hq%^)<|)tJGe*4xwZU`bG`H z>&FllYgyKPc*HtQA+X+Xc35RRq;l&=d_-80^F|#e8EfX4%uuZvgSFNprDw3PeEQGy z0{eG9Q86C+%nkaa4OvCQp+4<-@tHA3FpDi4Vdd2|jI9D=JutR5VC?(P6=SBEEu3AV zG7V#x(#ARFp?hs2o&DVDtUavned|HCZ}u@OlWVU$svUZpkNS1<(*ZIwYS46hDxrFQ|NpnvKIdLtU0o$k!&v2e_Fj8EzxVpq zx7NBMP3EeLkuQsYBrB7NRqlIwk}XSbwR>Z{eCyLdb*LB8jIo<*>0lKong@H&K!7P; zjS;{1+9Pf;;yXQ(r1;8cf*DBk`7VZfXPB1^k)_4t*z$9avyDBnJM+lmYvi2tX94I= z$(8ar25WgIV=M1^8ow9d+kF@bUA{S19Ff_#lyAm(K=kg$uli<toh(caD8o0KCxS^ox;AIvh%?>5#Om(BXd5;emv!1ENFs;^0w_1*-u1;MP`Ii@SV}YhIG)@X1M1 zr>CtEv_R{rOO_>^#-Q`Jl0cBmBEX3A@1HGi@Scu7v!qvKej)Pst0f7x&(KY#T#cBa zT0SqGcCk`|gfy>wja?UPiS|TJ?%Y>dOer<{LOZCzi#WYv-z>iuTby8#4~Ke%31HqY z!o~&O@}3dmV0p{?M%;t`E{f-sN~+dsQ~yon8)~i7=X5IePZMyUuV|<~$9(I&8BLCz zc9}8W7WpsnczZm4jmNools5FW?~H;+A4?M2@GVip^Q7*Kyi$x7zY&tk=`|!U9n+}k z$3^;Kg|uT|aY~Ab;KPgheIu*n`X%dmezo=_0NdVf(azY zE<|))x6&jI?@yf&$Gp&MGSlC5oS3lEEhk*6EXVjJW!)uCp!*LHKt2{Bd0q(An&QL- zi63{3E6&Nt;=`h5*}kz%tEyP0?Zj{or7F~o+~w4byHh8c<&9-S3#LMlAU4mD-xGXf zCxfBgm&>ESU+mQ7;Cuc6bguyS_eCPR8Vvlt))M-Aok$9x@zSqYd^_(?Fy#1HJ;`G# z{1lI_T*r85VH9VWmNNw~3LZmd>i`ONAQ0W|j|5Cd$fI%+OPf!l7^}7`FeoODtaJqx zx+Y>_ML~1L-JYZJa4+-QEy<+-^Dx~dc8Ke z)ON{FyT8U~xje`AwB~?gh8g>Mx1kT!GQ@)`rAF*nY=k{8Vgp-AwiC$$*(Wik-FR$H z)L%A)a4PQh7`}#vzG~--Qr9FVAhzW!x9Dl2-|}HeNGF9J6Ss7n^U`+3X~d06*Sw~) zJBU{)jvV?pry1=Q*d0ckVrz7E+H=L!J_X1uc%8q=Qv@Exu?O@W8CB|1n(C$Ik+_`Z zy!YP`dK*G*58sr}bx1|h$@5J%?c0e<4DXB0-W^dMB*~y@X)^U(QF(>5u7^Bx%BzUi zm%XDQwqKTa>?fH*s0p^zIIhkEtQ0Io%iUf@Oge?nX>*5zbq`PPJv9I1U%t|s@9!z; zAomg!kM-}k7aNjhID_h594J9PZH~*{!{!-*R$&S3by0XIgTpr19vl3`sjYJRj)L71 z?!qPG%$U_VCju*I6aw8npCDdb^6}1wKLkJ+nGdjVU5egj8!W&%A19Jk1aO{-(T+kC_yov(NSZ~UF$>g4ij#LdNA)mBGD{);l*`Mi2)-By zG36oo98eyT&(Y*pk$gfOF}or8=svd{WXU%Wc1S*tx)yjyKQM*4F(d)$n@{1;fVW40 z{Nd>XJmv`bsRJAy{)q)FyXpiRlj5*Pu=Lfopvi$9ZOyI>BWTo7uwQNWf)WT};kf3n z>v&y8-0*QQUnKyq3d9ksQl0t%s&1$2u`jhm57$%oor|juVPGOmL2iSV{!A^6cK^_L zq$SZZZC%FueyXEqQHELfG_R?Pr#h?vxFE5bY|Nj7oS5?se~yqaf>QHmRVA@OW>vha zak|s}?dH^NB9}pTE~wV2L3hND-&A*G`dq!i=hczw8v~jbwO{5Q=ySpYYV>S->Q?n^ zH5s?BHsdX;&Dba7_27F&TKb$oI`aC`k|;`Dl$=y(QqgQMmmEgq%k#9lwMJy11G))p zk~PRmBw#>4qfa7)*z!@YYZ)7+#4uh?cXWWra7&lf(w4d<<2`Cy2EQg^@Ovt%$+V?i z9Ce@WY?umyC>09(qaULM$z7BcO26yFQZ8}3RG+lfG-bpOi2SpvZ(H5t!_(y|>k(ZH zG0ShOp3QYVs~)+kS>4G0QY{diuI)XUldr3p)LTLEHPxjJK*-u}wXQGZezBP-*L8TB z-5sk!M{hA0fB5_9*p1f@Mpd&qFkY2_v~y}T1jIb;^%Dr64w3)6S>#V#U){?pmn;y@ z6;~4or;h{W@fymw^K0N;pQ5>{WcP6*s}b0ogfh%V&#Gr@>Yg2*_I@^Nh^xpWi;Iv) z=h|@s&w#tXsOl!_>dY>y>D9I&a#|T8|JtA&sNU;pB5|Ztc%WpUqYtzGxH^@$buk40 zjXE@Q{X&J=5#EGqeYW60x z)tivZa-zByT!>P(F+L#8XM*!puo z@(B&ObNxeBHQ(kT5A{@<>N7^p@Q`)D+iHePOvdn#e?as%ws^?jxY}g!a+(ZYYI{F* z9`ZFN3+5;qWp5F4nM|)n_G()ivYKC%nj*_H-zsm&2=Q?e=T zsL295?RHDs(P9ffzG{1K@Hh$J_L5{@4O8ZGMRL~IZ=Af)+mn;pUS@l)$8e#<$`T>! zxPfr1Ozlzxs~y(%VC&psd~UlY?K}LG4suu>f{F8CCVzDlPT2rhDT7q{>S<}En!L&W z`K$G1NcIqGxVk0@z*~8ARxYb)lBL^~YqH>6Mxe5Qvz#M^RQY@3sKo#Z-9SOwNhp8H zId)lHZhNzH_WWE%ZVb)*uT}M+%ga}dd%5n~lBzx2WkzF*Xqoikt}L#q9;kf3D-G1R zN-mBej?{8PoTa5PR=DVwo^bcFRaW4YUy;3g_!ON( z-*KYKjjyX2NW-0mj?8|9bl=4SLUD_X5HjY*u z-JYZmBXPqK-KtCBlRn2>d@f&vfO+;D@5#OILb+$reO1`Z73voIrQP_M%Z<0Bj_9IJ z+%9v)^92h+A;vMpWMy(Y-OEh@Y+zxALn+1L50M3@9dd0}$=Ir?4|0DI`=ENnOwb)~ zLC}uU&Ku!>zGK7_=I9%TBr5*Fq<}iF^TThk4cR~-W`GR#U-0v*I^&90l=j^kT z#riRS-`V{w3*xifRi4Jh{$KQ5?bjIck@&ERRe1@B|5#C~czJ`B%1&=wpxXs$Fmf+O zkBHFp1fh)&2n}FCDbAtqL1-*>jCrMc7!W~dD%v+Rd~4WvIg*PL7C|-Ktdt0iPa-te z6$Oq~~^i71eq{4iam_G-h zS?!K@{{X^TL|OwTJuV-35Sn2k zyrczNd<@P9jGsu%Y>+jVkp+qW6Ej;dxYa0dv?_x4xKS(f9#zwQNey5u+cGh)7w&$6 zcYFUO8Yq;vYuh_RCLpBC(OyG5eWC-Gz|JQ-iG!XLaXJP; z=vac1WFc`_X!VOShmp-(l2l~Ztd=o`vYb^Gq3+@$2ky|4g(~`=l}q@zTxi9k``(Z) zLoBLX3(CcjC%YQ|Pm!}|gIPx7vXc(Q9Ic$e?sK#p*_N-tT4bdR)@&K&)lUFKBifi2{WZ^dq zCTbh**6EI|4Rt5%5)CMFE;9h^62a?w7Fqsg$$}llMRXV23i8kzu$N`UXFkSXfM&(N z%i+NLpGF7e1M$nbSWna?OpYB1@EZ;1LLZ#*_!fr2u7z*M8=MlQDOd$;5zF<{CUkGf zr=I&Yq7TICxZ+pxtpEyjWUD#{RK__?M1hIf1fF3KUglDc3)HXWOL&jpi){yfSmvP_ zG`LI$y)V248$dwL%7{=Q*B^dmvw}Lyu5$PPtg8sQau8r=SW}L;d7x z*$Jr$m?B^=Y0xiVTX??E(nVP|rZ4}X4lR~VrDk>E;(~ITd}MO^QeTcDp$)Bx69Y(} z)kVVD_zRqK!_@_6D4-%|pwaVGDj1w%YVu+$j(wuzlzVXiwmey)CYFyWs@kEq^hO1? zgJV6Liaa6*2Bc9POQRw(aewKN+4?-|kqHje=aJ11Mh1X2GNK-07z0Mo4ZrHQZfjU@ zVa5z&yx1C+q34@x+RdUh;wIjz5BMudHvsb8SD`}k?a%;V1 zXE+SP@0ZW2K({(im*Zkuid zW5-c5YpW4$#~i8tTuukw-ifJ7^e!f=3T>-w)GhtY7_^OP#FCZSna;xjhnbgtsYE@0c6(JaD^+li7 zYoY=h+l36GlC%pmx4HaC-KIurj!#GK4+Sd;Ksu{RK|(Zwytw5sks+JKf@Y~f*)Jy) z*MUygEGvnad_Ax5c#B74vAH=OB_Qv}2g~;zglti%Z7Amni&qzXAL<>BhVBcP&>TXI z)5MxYmjZ@Yo4s4~d$HNG(}fT|^Q}%`ho*OkQsbNsCQDY(73cvTSJ8zs>6k$zp^Df~ zLKQJ(RWT5%p`R^O6(bcOCa9X{WG4c=VWEnVpK+RnszyTC6v9+vIE^tvucaS^fD!He zv_O@L+ZHerU9XKt>WeG%&~fw_Gi9@a`4vbj1d28&n9!>!2AWC0Qz%Z4$&=Zmyd#bV zO9n?BbjB?P)n7^fzJYuiNbgW{GD@GuLj!5k%~0hV;QA>yxStzOq^&?VBjo`d$%ALw zAY1M4)sWA(*vDaaW*5rS2BhZzfTHBiwy120g+K}+ z@)Xh5TZy*bDmBq3?nt1(GO5Fkx1udD$256N`gv>2uv!NwL>%{R{2V|z90K&HfEj-8 z;CCCp`}n;@YJvZ6r?E?1CNN23lM0{q_3=Ey{KuR8D!g-wOeg43n@nvg@BU6RYm(RN zmzIt*LgFtQj=yUXZ{3Cl2^;TXtton3GeouSdA!o)&fu5(RC5SgJ2^MHWYnfjWv_nc z^H7u5g~%lsh^<%$DO$WdaEWrs6*I!(((OF!R~DA ztjo+Dss6Fclxqad4a)u?`XtxM_ovipjse8L&fi;nm$gi0D&E!DskzN9IwZIr>JO_{ zuL!%wv2U&?F}&rQdeuX$Vl$AqmK zR;u9Iu)2a0W>?WSLWAhWx5}+w61R@ZyQVQskFL7Tg%e?5nigw zM0!o(tr`+_tN?*e{H&k`jno=$^|dEPM-K+hkK>Osr3+RsYAp35p~8< zU8^6aYWQY`d3gGU)pU>r)}apmlsZ^z?!(jT>nc`(QlgI-*0;)2zbc+`1eajMY;3i4 zF2_^0lf+L&Q;}OkBmL80T>`gqGuH<4|DiGy!?eWyv|J~O6IHu`uUlo6bpI|2&_6A zGFPz*0>XK-T4b+aLj8)mFfg>i&?<@Y`UvQ(L{^Os*3GXC=;~j%%rF66g+7R}$#7eN zJ~)eD2=xD}DtEZm>ghu@T$4VQ>GtZVZ>WFB(BE|b7(6m`lNv>3Os{5`oaHby%nPc< zAy%s&rfT^14Rfe}4D)xF8KwqsO?@U38km+}5EVPDsvhR{<*nPT6vJ@dr29+rC|59? ztAAzw01tTchm6A2)IKo3tCP8wZpNl*VpX-UhnPXp$6bvND1eHWO~i;R?0Xe(vP!*L zJBm$eS6BUNtK*uOF!x=x4r|P7)`9PC6=T6cxk7J=L|R21IKEb>!#d=ONwi!RSIpu` z11kzYO7$_w;raCk_7__fdsLTPJWE`$&bp7w)oIF4eOz3p$96^Ut;w%Q9d3V7EqPo_ zrh_t;>w_^7li!*!wbY?&&=ygvoT$NOiZMFC3_DMiVSp6BKvx{UKrGH6@`D>0a{K~{ zj1sD96$?s+@A;hOc8%fG=+;z=#yqfCkXj{GYfRrE04zzx4#JU{z)7UJvFW;*ji7&wj+Yzg%vp4B*twny+YKrt8rJRtSyRKStVt0 zyi|&e85;W%%Gwg)E?Y8PB0L?qvL%HS73CHYsjG6h%a#;Uqz?)yGQAH<;TrxJ)BNF( zq95eFrYs7j+7e%sRG4DdwhY2u1{Ds%UHI&fqC`?Tq^Kq(@#qH?4z!3L!SWb4puni5B|SDH2MX4z-l&e7+4+1F56TfmVk+UO7Bi888|F=6ZZtfdd&eTSO}#$6lDi0z{z z?uLoc(L~LV0dCXaU7Mnb^g+=?OG*J=8BqzGjwbpo-tE?fm{ll`Ack2|p~0(fiY8i8 zVFs^1C-9!PZ;d-V2qp?(TS4F5ZwSQqBwo=e7K_&@YD^>};o#BgC2(Jjlxudh<_IHF z1~Z2ku+73j^@sW{@3Ie;$XNysXtMmNvP_cY1-q{a4{|jFCM3^aD9>oQW>@2I`mX4q zjI?F!XT=V!^qEMVl|EZ5phL*CT;PZ>Ug0fNUqdZ zwX<}nFDp=|#$(^;3N^W3OLQIO@bZU9vpuwDkwLIi27!8Dvq8OgrYjrSnk3q)d;<{` zRC~wOcSYXl8e{lUfwZ)w)6m8gDSx*QsfiOVrW6t1CP8^5DqT{9OUEdiOBP#Ij$Z3b z9)9A?5 z=jTsNXqi}N^C*%>Pk0Bs$Ty|qd4SBO$WXFK73~NVtg3C-c^omKPq81MI!!05{e0VW zq`IV$o%uO>eTGj`$o%_g`t@5msqN`f+>>eNR*x+Y3RWuDGsV{D=L=N#q>j6wU2Yok zC9DyZ#Q@20!RwejywpUKPU_ZV{t^U~;K7AbiWhMZ(IqYX5$G|gOQ#i=HL2t9fiT4n z=+9k>%bGOW6bmxBtD$fXu90BfSn&q*jq@%hbwOsXUR$L};j-kkUg@Eb!a`|IDJOT( zJsnv>IuS<4_~nTuND<$>QctrCE2MZid{WUu|Q0yK#+ znv~GsFY%gnr$FO_YQu+RvG~&H{a>&dZ$`KJPMcx4a z6Jk_{%wT13!df8#7_`^xey;|8k%QKKTzYO55)`AQR&`LDS{31$WCyKYtXmx|-;i1z zRjX<`Q?XioKDEj?dpEPLza_2j_tSd+?YwW~|5^S=diK`v|BTlD8%O)=Sk_-Beix-= zngcWIBE$>W^W=+a0JQPFPORS(3-DzR!CC9X6YF$Cjn6$Kbxs5WIf8oy;F6+{m~G+$ zWtXIeNu}!~?sMVbs|_kVn(}y%HNuw8%%R z29tmY5FoB?i!T}^wMpvdx(&+P0WQ)>b!tsJiKYs2X?U7{*$C7}xwXT6nVT zA7=GzA3-Z)85Oybe;Am6%GB$M%V_nuwCA^LxuZ`bI;(c5Tbu@|y4z7}>g_)o)T1iF zH&x0+8S1%Ck=%C=lxE6E16sD=WOU{o0mg&C0jXxv0^t9f0e*jfEyrWI7YMVAF$**3 zp-mBFJBX{VBXUAQoNUF6xd#Jt-_u(oTs;s?ejqT%)D&(p?$qaU3lTyON(iL4&D{sN zEfH}QxDc*|=XE<;clY-?!fazYEXpsl<=&@zZQW|K1}(Qw!G=L43LzZ~PYjCr=K)gN z8_OL@KD<%#VMi?=>WcJ9#c%LRd=jOC>Qgz@xd_s zF>O?MVEFTv=M@*#FT!zCzi1&@^_;S?#HxQ@SufhE*KB|n_w2lq84rJ=7< z^gX(^YIeW7ABU1Y$JCG%T~gD;MyDfV<%|X=i@mF9*-Sm@6{dbe_V9XmlS1mdgiC%5 z*~%p%$U>1ye2!d*!a?{q+C>h@YQwu2YZ2l}DlEAVJ@^@vT}*7<-%r8*d15<*Ik{wF z8)3YF<}v}~z=PecK0>mTFTghr9}?{L>x^DLdyxdJdrHc-BvTy9iZAddeUI(@%$S@8 zqbkiuFB;_!%13dqyiI1FOW!70Z)U$u!*|Zx6#6?xmBgNQ?~v?$z1j`T`^11rpE>EX zZYL`a`HB-CZwo|D%5wr)+$Qn%9Ar90mp5pX3s6%`Gj5Z<^3X;XfV1<*tt6xwPRPy^Vdgbk&mkmG9# zKu%e4$?8b~$PnIx<<{W9t&*a6U$)BolJ7PRdN1hCB6EIe=O80{bQMW5#Xg^QXJmA2 zd}31jeG1Me4p~;n53rMjuRSeMHpkQUeME%74N&erjvg*Z>hg5JPuqFIGfdjtkuC?b zGF@J=vRiXy+Lm>#$}nGDnR&0U_2hPQAHT}nRDB#YFD0U}T&=`QSCl|$u2|x^D@x#$ z5i~Ra_K*+YqIMD9V(hI)s@wc@2r?8jPo!E3r3;!%VYta@Q%j(UMZF9(U-_pQHCSG& zM-3)#?l*wH65|VXwVa>6Tpx$=jFGe=*iNU)2B^V6TCv2jD@vfim+9u$eld@pv)E(w ztDz+n&Wg>ykg6SY7!kH2yq>B%auu8o!Ap%x!cTYLU9^?Vu)QS$RmpkLBc*Q_r;^vfviB9X?3!3Sfu%(I67Mg>!Nv_L6z{J ziH|lskbGF3NvWW-PHoqzpe&`LS5j6b#r*X!UM6pVH?y)q(hmA0570hU!Yw%Xa!hND{Mf_z}N z>agkj&3s|w(K@5vCc3k@rkcq83%HyR{1De}6mq%0d~12I`}0jvlWdON znj1^j96U;0(&)%@UJqEoqpwR|x<{(VyH9iVtIY52eH`Rpgo^6#xsSxX@7|AA$fAqiP}9U;=7G=FAHN$TjGC_5AQV@ki%| z-^(M_GsExr`A-kOGk~Xt-!aji9DaXd@FIpdv;dms*)1eqs?o$SLU=c=2Sv=y>T%80 z(l9JP3^*9Kkf|i}0JOPcPfr-QiX7K(~_~5uTD@ZDNJwj)d{iV`gJ@(JVL=& zdv^kWL(&HSa>67W-O_Hl>bclh$A-Ect&ec)BfI`=toIJU#W&!@)yYPiJ0L040w|t8uENemsAL$UgMpr)^Yt9U6nRFrC*juiCyq2 z@N;@ct(?_6G~TCDU1m`oKfB=N*(s?JwBxgdMyrP4Z5LS>F0!zw$TKeTxhSIjf~xho z+Sf4UTSXv@L5fCpmiuFTyTz2=PIYBtzPyVHCG?nAEt1 zo-m9bf=MsZ?-V0p4Hwc-AJ6e}`j;5n8L7ch?URNuf`ps=0s|5EejZ;|$Mv!gvfh2P zKMtR8JJz9wuqk3Sz(qE9<##a4bNXI2do$=t3cOE*^}dI>ai$gc$LyYnHE#-mu zjH1-%z3T1VzZCjUQ19@&Y+9D(!<^0{!=mey+wDGZ0q1w?df7!=0-{f3JtYU3yQtMsSzecr=1i!^Q6|1S# z6K(F`J$q29hOb*0k-E!#gvB&!uP;h51QPX*%D2d0tce;}rgqXKLZm#@o;U8%*0l zCkk>&ZEmoBRbWh=fHp=J+OSryHdwL91-C&O<0Jf_LLTA=AKZid;FNoSpA90b4Pu(^ z$1Qyg3MZ#yTD`Z>X2?pN-9dRZe5%0aX!I#>7k8`-35%f0k1N6H56msluABd0M zfwB?D24WK}@~o8&)|8uIbVh{N8*dR~R5HcUB0XuqU#h_B;PXg&);L)v6nh|js8Sr} zHO)cR1LfPgIV-ACS>NVtbYhT8`X%S;sKKLDmg-fVI@~4`ssYXq0c;-$KN3ldG*0{Od=_33>1r zKzD(TIR2oWpAE@ZO-4ROLeeG*Oek@fmM+;8=FfXuqzh|Hm$_s7L4a><(Pb6;T*O}=w4;gE)e z_|UY%{XD3Ciap(4rNu1T!5)IJFwy&0L%0~AoEz~&s{gM41-XJVzhZKkM31B8PWJMHtskA&pB&Uq z9|POVS`+8!M@)xg{8rCrYr@7~BH7kSOur;4Z3S`)5R*Z>W0+;G-`;@!cnCWpOgihe zz1fyRj@A>A?pF#X99h6Zp?f7UFdy%I_A&T(FXY?X3ms!J$Z{RNoi*mEY@=gY2bBzQk`?e0udagjGs2s_JXJgzA(*pKRUN z5MMG-soXPVvJ1>CQt*-t98`;Xh~zs_^eh2S7CoU~zV~o9G|BZP=FnJy zivRiG9 z%XE_&tL_iDz8=O^4Od&LVH1nPG>%mouA71#&8C{!B@2AWa78GE=?ZSKuH?N7gG*L- z8lvPHFgTMFMBg*j$BMT!5h@U%Rw^6SxxsWVS)9sug=M=K$5&Xki?FM0yfg5d`UW>? zacQO&5i_-jP<#&}Vy1fXg%A-EeAV$UXAz+RF%-?TU|Dm@21zU|fJ-&&d(ITJKS*ZsNNq?QlSd%Y?9Xkb?PK6-m#KTV9MVe@GT z-Y!4T!x(x2Xw5UjrrZKs^R&50{GnTm3r_Ew4sQ*{88%7TWBM}qr=(5NXsX0BV!7_< z3Usjv0W|H>$=h-~-VGzO$h5dEnr164Suskx-=VS(5CzMfw@RaPC)GJ}&>2`#W@7Xt zTDP^7o5xFAH{VXpn~bm0c&>Vx#yiot&oPYd;nZ^PHmP^oW-(Q9T%niBrX2`5&Hgn( z4{DLVy@a1&8iECf!LZYE^pUjPN#;f%w4>OndFBIDhtcS=QV`azyCpdQH5gvl}1nv((d6JfwX`BBHu zs)V^BRt|PU(XN8M20vOv~M)O|p87Aic& zvz51e&zOAmGLFZNy=$tkS8qJO#-am(n4Z~K^c=e{pu-k}H3`S3dx<|uZo!atAMnIw z&(r-84fe@GDktc8qzkv z^&>GCGowz|s{%MQ>4m7i=|~_wX(cNrX0uXEbnO%-m(mf@24Di+tgy`I6F^L#VNZj) z{=EB$cT{*SXcpC25_wOLtrw-+Rm@{23cd9Ju0`#$5W{{d{0gWMLoq$&+BSJZ9ifYyrW&Wc@O)({&zAC~vk@)ee zOT^QjVey3Rj<8?=mQP+D3i+f6xIm%~AsG@2Ya|xrYzdLY@k63W=2U5EGv?FU<7m*0 zfl$jU)-5fsF!JPsa&&sY8N-mKnD-9T`d1moLZ)x820`C>mB{o>nQ#~yKU#fbvJ|u} zM^&UEEBeBvXgkx8Xg#Ki;Yz=Lx)vobL)Vpl@Js$531O59(W~4t%tM+v?~vAxv8dI#;vU_hC_z^13{98qlpc2^fIJh zC~nC41u`_i`~nGj5PDfc5Gh!W^ z0>p#1s*_gumzm9BmfGrSRVSRr4s@lNggh5PfYrzI18h%Nm>T##2$QDLI6fSa)*9Na zj)g%Q0f&MI_n&A|5pz$hkZ>S+MuSAI@#R3a8fUc5w+vEGp=ykI4pj>&)yVt^Ga=1; zXg4e!W}!a`2)1;0mdLW|kMuI8>00-Vh&HxPD`C>H25%&a4e7y=@G-{)^kb49^nEA+ zlrgfQ1kmP4wIn^pP7B2_z+XyVSL&DQ#WCS?TS+qB2H1g z0|p6C(UayQm1iWmzck^A+LG!s^}F}iQ?*0t;!>G#DTfx%*UE&;I;L1TW-*-BiN1sC z1Vsldg6cE~aGU}bL2eo%SWSIH9%yVa*i<477Q4cfFCY@ZD}vV}LA;vO>+#An^bO+F z2vw&>Kws(tsx!q=5~{kmIp#O5>IpMxP^7FY@fO#}sCAQESZVpLiEwm>l_p9GvIGWP zEWqo^5t0NkT{&zBlG5i2;2}caQJiJ(gR+?qo`X`+R!%Ud$d#BA%u6D_oB#?;>>*qg zjGGacDBk|AjNrr-ULscKRkbZpUqob2ct#8Wx(>`>w}Iq`WX%4bGP&qZny3p6y43M}f{*x!z1 z0!k{doe_q}5V+2ELhK{TST1cp!Y?|Szo*dNO~P+*nKY_b>ZMLEq?5w>bdufn>5+mz zI;X(5>^R1}t4=CN4@p_QpobUb^*VzhF=b3-L%Uf{M29qSNdYYgm9C~@c8P;;Bw1Ie zQ9NX7hN}hrRPqHNl{bacBC?)wLiik9mhq6I6v`t97$Ct0R3w~mLRtn;bH|;K%pwxX zn_L)}bY+2+69X%&TTZwycb8*)ga^9@W7k1ld%Ew_fG0J~DK<4sg#7L|K~=Nre5l9a zWhChU1|MSM4V zwgWuTX(istqy0O$4;|C1M1@txY*&H4tZgfCFOL`FQTQNrF+v1|WiWC#dBL5!nQB^%KZmg~dJRI9yxgVI$bQREdM!)zWPU;s&gpm#WXQ>iMuywdA)0E($E~DYj zCnLJo#;b9WaOsWsOEyYMl8$4_w`*YQFp-oS^v!%jqFyCjXycC7g{It~8wHZS%#Gw< z*$8|2u{YxAKSs>w5iuc;@5G*;Rnk;B!lwAr`(HSE38(6z=6k76he0O7=Y$K6{p0^_ za(t-J2FV1T+P!INRL|+`SV@3iP&ac4qb5!^QVSP!oRNd+_>0!07U69~hqUM{p$AE} zv{BQX(PJW3w4VA**oLG#MwBA-fMk@0KemdFRXr*j;$lsd=L6`f1l_m}Nl`&ykl zphlx}ds652T%&VqhdQU#e7ZKxQMA1^3e?|dUT=mhiQu4(CS3*g!bV|JY}9DMspUzS z6!{Pe!EB>InLQfVC!xOdzebRe|m3Z;W>k1~Bp!U1KvaR<1mm1$F~0H}SD_C{;> zoPZ*Q#!&Y;0YyspGAbpkY>H`slpmNcEFd;A0m&;eQXQjv;1OjZ_e2;JBi`CiJSwT) zt8dd}#D_tRs3SQ-irzsrVhKC>=3 zh7Vp()DMB=8d5IIqL3u_CrN^i?5`;2)(nY~?6qF}>qzVn-Es8aV4e3qdosmod$ku~ z?>$=({u(?s&WL8mI@^~pvn2Qt`xLNRj~qJqkJ3c6il`;+N4h(bP^TiXA}oMT|Bs)= zUV}MxdY#6Tw;ZsKZNu78?|byD6Gy_1ycJU0xGXCa+gbhO=j!7+8}y_4H19iN8>AvB zt4|HT;~D(;@H@8k*Z=WQ{=Xi)$Ob?33%LJJa5bek8p)UDIh2woP-lb~b7)>mA&*#t zz@EU%V0o3(ctaxjO^Pc35UU+nqt1HB7Nhf}N3BA96?oOl5CkHRXdU8$fGC5;z^$HQ zOw~>J4v6l@72z2FBx0m46*IU{R2>7*E7RU4^32C;$Th1oyv#Kk`x@$hS`AynBSWDk zIdem>uIau(*m|_bIYRt?2-Ua=&u!z-Cjiw2G(o#;#6*;e?6@zm7c^e}qM0&0B(+JI zPcTudNO%5X4cB>IbIOT2g;Oh(g)!EnTVsFQqoe{}{?gxEJgk6#6`13MkrDYoS#yXz z3~H0fSze;y4NH&X|BC6!YQnH$1%pkysM6|R0pT~N)10d>3`oeTgU<8?E2$hUNC&i} zUJ|rkMZpJKvm}fJfr}soI(@w zLB1*)0UY*jh%I@~2+{s*z77MDZz!_XgVhb0&%k6geWd#B!DwYpRWA;|zc6@l&v9sJ zOGk|!YMo2u%26zO=^?{zHkb`2Z85XlDt`cuCYL;81za-~JGO6uVj)xLTwUoIG%~$WZAC2Dn-XA;8t5MN3z3 z*yTBhY9daHu#FM3UrJb%d8r{Ldx1+&iR^g@5hUL+Xk6lBOwL>whxv~{C;&@`*Qex5llkBW=|(?DQ}{vh%Map3Kjh5xc$qo+GN9&sf*Sk>lZ|^}DD6Ed z?MjraJq%#h9A*l+?eL_}_g};O-jio+9Yw?YToOInfmwi(nD#e)-q-pozZ1F_$k2IU zoM5Z2seCxf1~eddi2L>JBLg&mTVQ6Lwn8a1X@Qn_ z7>kKoIYrObw3-DMtwFWC;oTD*3XzE%ULRlU0>0J>e616etZcbrZ6)+? zl~ix{Z|lA}Fa;zg6i6bs>O}Hz^={{pSq^aT&G8r-v)AJhdqJr?c*MHV;~RKfh{rby zzL%T5o%(&H*&Ed_JDEoG`$Ds~vAkKH%31w1dbdyz-yM&A4)VmMs>#PKWv^^=JP|?2 zi{wG2iH2Z9yJ+|c@4-w*z=cC`!Yc{sAh^&m6A`sO)dTwESN^>a1{v6)eWY8>gRJ5 ziV!Z4!}}%PBR1hd-hv+0ZRVt+>v@2|Z6bC(On50un}IZ4r0@=Q9w`nILSgdOCms>_ z25=3KD4+8SJ)|73XQJc0c~wZ&P4NPIrOea3L4xUR18;yPy|Ha3A$39rw?ZltIv1D# zH+ShHUN!L}3n*tvRX174GmB|xr#zn)o&Zqpov7}WR0RezZj~67SsPgZ<0?iCk1QV` z3%bCOTggAgr>EGF%@?jI(3jh?f2wJCNQN?UfCNp(WK$4Ss1<*;+FZj_br{MLI@Cko+uWsCgh0{Rxq9U16x(UhX1U( zrMt6Yh8*XX0Uz$Zs{Z$ZV~u6r!OMhV>Qq_+YR}ZZm(t*Ya0D zs&)kY#Qtyhca|(6Xy4M0f(&X}hX` z*i+e6MQ7E$0mK3remA(%NCd9r89AM%Y=(qjz&B6X46HhVDOTY&fYXrkWwN$LA zxWv;X;av}u3;`q65^LLtkX%-^TFT@Efny#CU6Ony$CHQ#iLrpt7b1KkOBM!5;)Rqb z0TL;%Cy&@NFZ2MocgP$AWh#ZdbcEy6e}lT^mETtELzW z-Vw2@EX~-BvQwQxSly7`-pu>umQ5i@YBz7+sNXu(bL8wO)+(1RJ3ES32s%9BX+_zY zD_(9%&2_4mMwOMA$cXU=t%Z5DQ@zL+(R`iof)fa1$vK{PLPTDGw@!7=37CmF2Ut8a zT6V&(R6H{(B}w;2)aJR!NB29`S*JWRlyZiYH>nFb&Uea= zJ^TDtFSixV*{K#fN3v%hLtZg0+m|_#n2aa6no%6DlZZ#tNyKoX)kCxU1u=9~Fm$G| zWP>L061WA=Qe6iVV}q|);^Y-20N#ov z=9iXGer?m&?kg?MXReAPZ8nu-(YvwgiJ#8B6Z5He1RJba;G91v6&JLC~G*d`F0uXo9*}Xkaz)8K_z- zkY`3~yC0@HIU@3Dw_EKt^Z>_>sG#@^Wg7aZQ$6EEEh}{@sGJN^8NkB%yKfg^IKQ^h zs}rYF0X;{JDqv2ESIL;67LfBY(!aw}hxBuL`!Dj_X-tcm^6#mNnMqx$g2-ZMYW~Ei zdeggs$0y=(oX6wwIHo3!jrM34p~l}`hq zC1ejl;W>|J;3C2_%bttvkUcMJ-P6)1OC8=2Etu6`P#{w#r;C;wH95W99ww(K!i@|v zT!Lh7pi92Z@2Vt;L)h}D@040)7q=c*6N8A%ZvCA%nDLn4|mmH@d4 zhTnyl3-Dy3;rDEvBEo5ya7-&!F=s}PbZ-^TPK<>*0nUs7K~4X{;Ubm+7jhN6EEot$ ziI+$+a==ITi_OApa%MCtqGmKw_h8WZS<_&m^Jhj)Ng#C`K81pfFaDlIKV&?DFH+77 zr9{_IqB&1=#&0hZqpSS~ZzN5+@Edx0`G*!#3~6$=cB*-LwbhV$&FUTW%DtJKERMP6lDNlZz(aRY}Qr+LH^uE#Yz zz7mg|peBzw1$$i{&v=gq1G%6u6MkQA>ZU_Jc*wuWp)!6+m<(wC0*6?wiKB}R%Zs?1A?e2F$+Ri1?=HX*SPca3m zq^-NG=*xUTTfRN0NN3xr&&WcuPHj;5w9Jf78&T*~awA7asO1Sp$hbAa<1y}5bb~2J zTekz!pe}IK4dguf>O*c{N*$b2rWc%Pr#n?LFx_@Inu?Y#3IXW$G;LMkjyHGS7Ng^d z83(M|8*d#f{10g9M#D~A+tx|fwzcYO+nO;T^7z^|zm5jHm=@%QYIrs@fGV8` zM0DxOgs*K|&$Vp{DF~Kan27@e<|bwC;GqQgObrO;qq?w-K|WFRI{H0sbQso7pSK67 zdARH#IoYLyv+TWNey7m_udc#O;ggss>}C zziSPzk&3l|0j-T*K_+7nl8#LxyT!{Jw1`sC4PC*Xqup&9-h9jbng)l44-J7p&Zmg> z8i0z~Y}}J^(rlf%4KArpIAx)pfkI_Y8RFi|tMj4@x^R|X+2UtRC-_!W4@^;O#ps^2 zq8UQ-R&tze31(7@=KeD+_HFrm*f z#`lR^*gifGU#}0hpzX52yFPA-f(c{l;d~5sz3f80e~icm0@KIjbcrU!EJDh#RJ}U8 zNTOPuEnychY3I5`N@kgdqsfO1FKvET*(Xf5!RzrDyxu}`#vHz-S++h4%d}Y%c%q*Nqez ztYvr-+Po$z!4X=M(migO<41Ni-n#-JPM8pVH_pMMb>V|9%odehjY@RL=G)hs4t=@K zHzT!O5I3h0REfdq<=yVE_3FDq&B;0&P~mE6klE0(G$;XzV||ze?}(NU(6Xd9%?+6v zVUm2AzM1w%u4+-3+%BWHU;DVG@uGDOd#GNl-(FQ*LH)*h201X>lIdJ{JD$#xAsO8u z4S;7}hMP<^{$kM8d9ln&Z=f$K-H_#j#^EjJ!`SZYjtCVYAs$uTB`FX@d&z;y&*_)L z$zIbhw?tmhFIg}0D=W&pcadL-|18+%>F9#a}^yit&+W**o1vAmJ}w`@Et*K=OD ze%D$Xw}b|?v(9E>$KCHpNxh6{ZFc{FM;XLKAM#mCO1L)YEg3F0kL*$$;xp>Ja&!0! zp=JMb02rnweAHE;32#!u{#-R5U_^f7MGAU~P|u*5&b#oL7W}4j$eYAT zm?HZ6&|3$1q?=6ieL=l?{v-$|8XVx`gJ0WT#GhqTSE7!{ituQkqWG zAo+m8RLJul<>4CNurJ!_DuHVNTn@(!aM3YR z33tCWgM#f_fuz21CmG7+08~!Ey_<7#G)IEq6_REd=~;3+dbtj*gRR1reIRFTATpJ# zOwewL09il!kbGG=+p}3%61gbFu}yA7T8t_IvD8Uy2Jx90&{TJl*bynh3hNMh zc`^>~GCnhJWm~82K3{9EgSji4N;P{)#m0*W`I^I8%qyU(4X>2hp%H#GRhOL}Ptts7 z)}lHI8FAm|P|7K%#8SO@8C#TSLR^;ft$OmQ^BFLZqb!7xYm;Ivswan1q**ptp!G!n$XV5B6nIoh2klGNNov&umtq*P4BRrSL{Y z>NqEL*xC77Q%4u@4X-a+^XswurNl$UUZ&Sn+q@?YR9^l2A4WVE-QOiua~(U9uBY-l zy|ZSx?f~D(Ma`)4Gp*?G*;Z=p8KJcv_BYY?-z*te_!99WFv9R04ii*yEID*n%CL6Q z4#U^aAz{DE>*CrNcs=k*$zGM8PSkcBWZKH`WbT+Ib?Co&P3o9%Ru_L94Bs3`XSUMg zDYy_Bk{Ca8D$}+)<+#DPI`^b-4cdozXr9tq@n@=**#XuZW}&P2B^5q5Y4JBB`*n>U zp`O+A$RvZj&D7kION%=2?mb#h(}$PI~ek@@l?7XHv7#h$Zcq6$y84ak2erQXl4^xb`z-`J z7&F5z!kAMA7;|3-_=^oYt$D;|EXbjB^zho!#W+@cz}(`+xba4bQPusk=Hy=#&GzHW zN(lPsAmjyup5!vdcAJ5rvc~Y?OY`!C1<{IN4v8eDQHUewfJ}A%1T#HC6gj$>T1p}r zcOpAvY{ABw6iYYiOFK%pb7`44PCruhC2d-m6}hS?aI_lz`)(0CyUS$Sy{bzc`uBhF znNNTA|Ni}RuQv9l;#fD)ljv^QK3X+%4aJo;R6ldM@s?DyK!$21TxJW)gfD^1l7-uD z`*9L6T{>xhK$!VjwB680n*mW-NKOT{GEAE+U)r|O>~VWz^2b|6`|+k06@m6hhIYHC zq0LlptfwW(Qcuj9+XHCJ*UTxU%7FuyH-V_5u9C*-d`qCMk^$|Gpv}sAE{(zI62$x% z+I*_3GPFBKs}aFUA4Y+d+Z>d_EV=agg}iN$>xzz4e?542q1>?qd@3~X^-aKEQeg(Z zKMVK(#Cpn`jN9Gc^Q<6V5Pi}v3dUe+ESzZW$Di1OY}@cUSx2;hBf~?P}s( zTgvtkkumD{D6to$zneep5BFGbrsJA=^o#0a&F=!n1#jIaWs^0lXMW_@(bSBLO371E z!_n?PlaIoal~r})_ubyNwI7qSbPNbM5RBn?P6MEx=M2O6!pj$$LoY8BS1a=`i^&a9 zW-|bI{saKn)%}TL^1p00lTc#m9h@UdrDw3!?MKSyp=Xk{TPGP^obC&>k5n)J{DOc% z$OLiFMPU1l@5?_WA_0R1|R{a-huZryGuDn_{NBjS#ks6{rXHpS$qbqL`lf8dFyE?t;{9?ui zumeuN*&I;ka!+MzSK}Z{8f{at-YR6tA2p7yxuxA40mE1SuhSd>&PCNfx@NLy=5P`9h0Rdz_7r?nA4RqgyvO8s%;J0IcaZ}^#3@b;I4XC!a48^y*EpOjHNfkVC< zm6j+RHWvqgu#%z+L_9|2+(b@0`UzXm8dfJ)idT_GA`dvB)bskD9>W`?Mzm4EbLqQr zLbo-aAq+@u(Ly|F6CRN+aIe<*MYVOSb8ZzgW>;eeVAIlB8jHME3h-d+&4xDI`*TIv zbH?qI>5YLat_`v{(lAD}+S%-(yo-Zc;fmoPa1@0x+6wfHMr6mRpocGW3?69o#*i1) zC`J`#&qyrW!6K?pg&pKTzIJ3FWo<7-1ACCj8dpb_^<*KSsX(+*{ClOAN)%8Ej9E?~MF z3cP`Z06HIPzQXp70V|ogQUb8qbz?YWq4y)>2jXS)$ zJD%~idl9~DbM6+}b~W}0UnAg4_xuFHfKaFAEseBvy+&8ht73Bzn!~UT_-P_gX!N!n zBv2z09>9M)QitiZwW97p>+6*NlWwNYXX?T{fDJ0kKK@a5>^Y9fbvo44{=1 zsB}FwTQ^opL~Va3B7{hX7wL_kJq(&12;%C5$pu8s_c5bg4JgAqP}j>t5M6zQ%acVeo?ao8M!jx8r3g5m4~S#)$=@eKVNJv z8{L0u%IFH$&$o)^N0}_iZf8oebe^M>7ntWTP_0h3;T;_Z($nmO>}^dzdL7Ba)d?zc4m8S(sQ#PgrxQ1|`dgE=3*1?O^D3>i-~nIz#4_;8vh6`m&@ znlJ7xi$i0_djwFM@fnh)P$KY;HQ!~sdH%}j61M()GtHIURk?1y*`a6xwTiKj?LXUK zCbxkfqi$D&3F3#Ur~d7N4Wp_BX-vK+*cb|xu1gqZE>xZUlLe6)#Nr8*HrM>Rl28ny zlvn?GqLczkA<2aD6DyN_P4F!U-qb#zXA|&%o?l-AUNYzO#sG+xIp+_l$HAdX#{bG6 zGuRs!jsK}XB1sBj3Sm-RCWCne_#mIfOhxs}k!8u(Zu)vm0K`;X9(q^r%W3sxI`suv z8EyTNQe~pKJI@bwC%(U^?`*jlYONHP$Jdvx{5pim|2n{uZB`RTl*<#nf>|3AJ$#S9 z9uvKy`VLL>L<}*})00}8gZ@My?04cEBYqBv=LqiquZN zta%f6^LdL|qdJ9*RG*rBj7?n7?usRjT~Wfab%i!w{oSQ)NQBq$srzy|cNO z6;bgNDsnOMY(uSpisM(5u&uR1i7N?2HrYxfbtQpZi=;07>C$oh9U-aL!}s?5FE5DV z7Wv+`G(t+lx4=^7aQA=Y!D{E9v||+lGLFwiv6!T#%-oMFBQD(>PBlU96;b8|^BS%s z#K3s+hw&axVXTBJnAEAYMPs@_4&2&feXlXg6PPy?;4g~NU7>H zb!J+Z3OJxCG3j%1Du$7w${T&G<`k(lHf%<|51R%1G}=7&I<)B^tk{%ohQ2e{6a7nB`hB57%c5;_Y0$xZzkAYqx{+vD~z%SAs0BO6d_tVCZvoaL5?6F z?qSBuFEhJMr5r0oe`7vG?=_4T!WfbE*;X+YOE^J-L0pY)r{AQyAO(Yh^YU@Ic;KAE z!R_-w2fKkKQB$HJF01Wye-W5L-ux*wF^*^_$Wr%?PUwn9(OQ30X1j9kJklT2Gd6>q zId~HQS_DI>6@0KbZB(gqu}GxMOuLoYbMCG5lDAC)1AR~KGw6e1@+t1eFz^%v7}E}> z*Kl97BCmJ2f;{arXrv?p*Jf)?N;AoL8%e(VnW$#Og4s!$82wVc@RAa+0su<&A}?|G zvj!U4dzmud7%p=R_31MIeZ7n+0y)Uo@HjJDSxgq(4QLNyA`9GmK^D4yZj$jwdG#pgt{J_VARuHTn{t5 z#q|(}vbdg$OY6b&X8K&zpA$>#Sy);R!6>dc`U8TPou6p-@!UbfK+FpOT4Cm#j;1f8 za-^!>ack=5p+5dSC?#d?vOr4e!M?mZj@I=tbQ!!4`J1MgGyU zt7=Da)6J;h*u625j>fL>M7EJ~QjLzMYDef|sxa-Lp!@_CLDtAJRWw4@$23?Em!P&W z^ah0OU_P0(isa|3WU7L74{@~yswP5nTQIAHI7>){w2Az~W?k_%zzK6h9B!Z|bED+m zj_yxs2cBqFS&<&fDoB$RJwt2RIFaHdw|y1tB$o9K(Cshv6G5d@bPw}KG>dqa=(SW8 zWv6#9cStwZ%F#r;L_7ZBmSW@MGv1>dGKk?J>=n!1-`txmK3b^9o9|)4v07-xmu{aM zB7vVAJI*@RpS?#$#q9SX<*Ef~3yH7qo9t~-bt9=3GyH6>3RNOOGN{T4S5)OxRW+-g ztAvWH3Q(Kl>b#`cO8wL1W=Inau_T}sfv6b@bH2y;l$!uT; z+oD0v&t zaBcVrI$EpK-gPg>S_6nD=pVFJck}q85W?nr zSqI~czUcCQYN*S(444vHq70oM6c~*HvRlcmp!DM1TQq`PR5oQ@l(A5BHri^Jv$O?+ zq&+B@wGxv<`&Vp$3LjLUZiznlZjGw<4pNR-dBnq|f3eW0wpTAPq3(V*{O2c%ggg}8 z;1M|+$ZhH8wI;W2E;QZ+V{4~N-4Gj2f-TevGbk|T!6N-U6PI?hBDz) zv6K1nRQ;%wlLb-)mY1Oi!{*Oh>G%3R?X9uB*F@@q$n(-?2j z@5N^CR{g%*?A=BMBky8!+ITs2v_d4^$jpbi8FqcMY+{~G zU{Jst9pD@gh+wT)W47G(eqmLLrCCypn`Bi?W0SEO1q3;vTtF_jg^D<}{pvt?CrjLC9r4YG7BN%+L2rb0kZ!zxn;t zvgN&7z$u8*V$kfN=40y9eVk5#awqeaavK8Weos>f)}hjpO5u*sUGpT|Hk_at!>z*! z7fHBfC_(+eAV)Nb_w+X3>}$_qn3K>@;?CNpoh`S@%<~8ydbEEt(Y7wB-Cbgvt>w)! zK>hsze`iN3HD`M^zO&+=?g0GWI*>P7VF7S@Aa>}QcWv?9dZxVbNKe+h=xQDF z;Bri8+FEXTOkHjOkFEFlNOSl?Eb0tnWSA`rI&t%3{hmmBYuUS(q?_-11O)}>C@a@_ z^Ka_iv_xEh)|tgYI?sellleD}R49&CAAPvjg=(Ap-!=(y8rml5*Nr6?#fieK@JiH+ zZa|Oj70(`Oempm?6V?&cp5Qn7+qvP(9NNE~9?>nqLx%F~WBsif(rkIV61S(mcD4T! z9+kkd$HI>+iYufHrUiO^+GelL;@;$r40 z7ZzgS&x?^`fV)Hzsh3ddy@sX0UNr&U6eajyWn{1s%?_XgoYR1m4@w4{YnFoZ1}RRT z5iSnI_yE}qNvBC`6k9;0!MWAc)F^Kd_!BsLrS2b8w(TYcIu_vE44*_tx8KW`-o1f( zgLBPda7y1S56(evaz`NS)C-Ybv?g$_EhTSKPiYsJDy{`#6Y~Gl(wv>D6LFtJH%Kwc z-UYib8|KtH1cW*)GZ%?Ri0e^==#1WGIBbP89CV^Wr)m!>yh6iNr+x*MGdoZ@tbbU& zYnGIsvJIvQNlLRtiE+uKWKQa(HUng-@?L9i`RjN$0c(^f9(HG;&OD_dc+1Wn2?Tk2 zp69o^Y)`y3JBDF&?Z*X;#jrt|4+bVVbiC-Jh@^uhl!|^|FL2uqOpE?4da=w!P4T#` zTn{|?b^@2!v;CVsS#CK-NwR&i+;)u5l>TJ7`50xS-OAZxQiBbZ&PsT)PyIVTh>4I>D1X6l5eg@cNH zMOCn-BE_+Aq@@XX)06;(DpAJ#N-d8F;&Zr$n3I;g9XyITqwwZ>PRe|~`>Z0G;b-SQ z5V>~`auc$d=ev%yRsp06Rz^%>v0}^pg%WroPBTqnb%*5K&?Gip4Wdb{FArKYiS<=d zOD3`7R0-ul1Z#MrDyGk$XjYBMuP87(Rt#9#Dh_I`4?3AoVbctGO0Qiha0&9aKg_pB z?raeF$J@w<(doQRaWoh#NyRJxfKo3UJ17lbCvz*gvb9nJ=CpSTZ-Tm@y)Ab(eEK_0 z%(oq>J=6vVX7RS}!{{Qlkz34N;G7FSPkngMr^;I>hPzqkxwvc<(^X48=w|LRzX(Rw zG+1gl`fli(P68>%(z9X1BXqyDpuvaVE;eJtAx{{TjDLs|$H)6)(U!@W77N3LFX!%c zMpiGkx-$v(GU~27M0ft5%MC1l%Kqz*G|pr@9BG`E6l`cLAvi(q+Z1Vh`tRg0{=6Aj zS7eX2_^=!x-oei!dhcjim;}u@_N0ZOPDFqsgwudJfft8^-bG0kcC-?v9o1TE(vwz# zIbD}0tvb!|3r6q8;fqj`cEjO~ncP7*)pEvLY*J`=LRd$Z9GJ0Tj$lmK;;>oTGdhBGV@XmQN#jzvpxv!+D5in_1yfwC-9$x7yCXm6fT z#ulRumeF#U`ynMcWjkXOTZ}1o)GMRTmb}p*hxIQ!7h4kkzyp4fM4?!@2uj_IYnuSD`W=bXG({# zstE@}7Yq=+5fMx-$jO@I0z0rIFGN<1FEKO)#47H>li8HyJTmP~rd;QYGDyYS?Og8Vb@8^lmye4} zuuyTFT#WN;f5WF1hg~!QCNzw{**ONAl=y8z8Zf^evtdTLpoP6awYW@yxPVgSrcWKp zIPLpmh&d8^tk>Gtsohd;81jv=y&0XLL^&?uT{UkUFXp9fA7kDZf00khdCfVC0^D;s zPm*kq{0>^^DgAEoTZ7ORj6q0jvg-p6X(MZ6vRB=~QWW^(Qxo@ zneJ~1xBMNZpHvm3NrcH?R6vx2_9Wn_AfpWQ2ntVv>$5 zovX){eL8opRGpmoA)~ruhTjp9_}JEB5y5CODt57h>3h)bLYgt6+-|7Ork6;;ShBBw zK*Hv5U32j2bLj3K&93WYZ9Lf9t$yeYXPLk-&7)9kkXaeJW`^7}%ypI(HfEN2HHT_= zHn49#ubS2Fo1>8&0xAV>l$A`_sE-M|>Q{4^qxBg46fj6yotu9v*~>PC^N2#YbGEBq zp;#SMXE72e3wqmc=5M+1RIX@iXa^Y5_a(Q4%A);U^@9PLJqUY(=e$kA!!n5uJh8acX+9Mk0ZE}%33cZLIq*4+!e8>@i_ zcrB$V-Nf{d&cQ$Gk{eMTUUuU$+sGI2x3jR7zukoqe|rn(^LJ|DZ2nF!3~pQoc9$yq z)*J2Kt)-!RaO~S|;H~Fx$1k{HS&6*^%KhY=k~Zu2iLMpe%I~j~`g-Ys z<>h6Q%N9FpBG@C2ZW@6e* zBh6-swAq+8+eowdA&nrqR_D4#n#~Mpb1`kMkrwBKYfo)5n4DdW`8bDL$-dTRV=$bl zXJcR^nOH$#J+>l2b$uf(&Blh9wxN-hW@BSa+t^4;v#}|rZEB>Y**Ghvoz+N7vvGDz zJG+sVX5*Zgc1|O$o(*3b#6z5%4L0OoV{2n`9L46wD4doR;oO*ZZX?ZSq6p{3wDTHi zJ`+XQ64SOc(tIYk+b5=--$?VBD8ln%+VdJ|J`+WFeoT9QBh6=`2p7b(3mR#fiSI;K zIVWI}`PzcH%uHNrGJ-|USDTPLF_SCSZl7?T*zk7F_F)sXrQyMv1dN@h~R7Ld$dSZp2qN#T3}c;e6L~B)-ed;*A{6cRfeq zyEsfVayZ}h9EtA|e1IJNs;`M~g0Jb|Otbjz*BX{%+Z9^P2+MVQ{Ok~k0aTv_FW4kC zQ2h4ygO)!n(G!H2kiQ;I$e#qVC(;Loynb+t%77jdWtQvO3g`l2VYNv*PW%w{-_9+= z0{L)uaX0{@uuMI@e;}}p%7P3T`mR@}xqbuL^(_87X91%QPZ}A{@gKtIa1;N{@ZW&6 z*31?g=1#8ez}Tf|%HaB0tQL@54iu^lh{<%HFuh+(E0VrukzfZ@%fE--3*gKsJqM@3 z)w0+zyRoqpyr7e8jlQ^wMW>bGYu%HbYL_IJSFzfZ?2EvYop85FZe7KiRI;xCPj=dk z3r4`7vuDYU{+{gQ8z&$FQ{nBS(vJI{>=ay+)4ht@JCy8*@5xTYK^TaNVjWAm)KYu; zsD4sWk`2yFGIl9vEK$Cc+?qIKu~|_&h}l&-f)ee(kJi{X3*})yG<)^zOiFxQ^Cd(N z1^-Uevo|ZEXIZCH)|>82S<6s{TlHoWjd?LrheOxM9Hs|o)91Bj~6I3&|!#7{7kxioiXN8w&p^)?CU^PxF z;vuw^i(OT07XD`@>NpTrnhS+Oo*8FBn>HzNQ#DXPoAtx9 zq=sRFJzvPaV++-5r#MkLF)1SqmhVq6h#ziV`Qi5T0hwePH4)f;mM!eWs?^$CY=t}D zfR?qTLEv~0t9`JprA0mT_?+;cUmIS!`)+nnH#oT0*yqkD|SAg2)7nU;P-wqGS-`#qn>QJhTWW3Nws<`fkO z-|U#rLXSS=(5~730-;v)lmF(}H7;x(zoK&DL)H91S796aymj?wl1S+2j~*fSrilqzA0{oZV(4$(X!n7c z)~q_)kdraPv1f6Lb9~ilW;zk&L0cfY^6#nq22fymq0s!J=7`PQED_FlrBOp7DzeXg zah9nH-HkVg#03JF<_<+rb+-OP2Qv3EsIx>Q3T%%BkbAg%VxmCIh9?vI@t6(aM_zu- zdSf=cElLQeH;)9wGF&Sg1Y3J_&xROORD-p$wUuoUvx&f>7HW!^reYGXG$5(&CR58h z6xSz|3XD@OEbYIcFLf@xp4AaCG)yhJ`qJWJerbbqL)BV-Dduj|k6l`Akhy!i>9t_V z8}OJ))^64SXV!C6bx~R%bt?o38pN!{i&1mLg8I%wUQje&mdQ1l^POg+&vh`)PI~4# zvn>ypC;vvvMZU?8^1M(ZLm#CD#4lOm^`UEadV~ZxO}tXoDz%lDhnpVvC6{Yas?uYz z(s2pK{!Dsz>oe$`8r9);&^?_E-C!Z(4%~Yv3%9=q)V)(88xwb>h1cB7sH7XkyRzc0 zl@?Bx8kofO4YFfz03i5ajc}UEn70i&AcG%OPc>|Z18=yfxCD#+X0qW}rD`BNcv{&n z%Hw*aZ^;g>=KKULF`Z~ft>9dXi#!U%M7Qe&Hiwhv?Rpb4V>NHY??8BqKGzKNqJcII zX87Oe4h6CI8$}bp9mVfPsarQ%pd3>nZ`4G+oGB{|o;l3izLBDByo$r2<~o z4Y7=5(U8|ykZTv^`Otg6XkCob8TsNDy{C@?}a!Yu99zOob zLpV=hu>rz)_*{BJCdM3s0mf}zbT(dN`47s`m4yd?tWfH^)pJat(TiQdE{^id zLF*Jn2+;MkowN91+(1jrh+p8`fZS&6L4aEgSev6LYUrJxItJ9ElBz97Wy08~q~>98&!w9!>tSqmLc` zh&LuT4ojjSMDLJE=;{h$F-m-e7{6WB#LkeB_jmAT-A)b)Ap`Qtp*H*+FnQQC>cF@_ zD32bUaV!?)KqPR@%9u7?8HCGfn#}>cD#PU9(8L>fB{Xrq!XY$*l3od-!06A9<<32lyEsy-aZ5JI-(Ua|{j}Hw=88;^0;WaFJReGx zLq&MT6=XrMCpfvHO3;zPn~K4cxy>DGL^eRCcQhrtr0P@l;<|8WH24(|1}uga8Ke`o zK(~T?kBQK1yP!gp2H8ZoO6|*#wPnHM;d1@)#}COb`_Sjd^753} zD@%b@%IUH!!*F1Y_4|4l`{yTi(m#UUpSO zKMW?nB5PA`HCSFae?^ND$e@ayT_*$3lro$VfH>*-3;@)(QmX)j47V15W>Xtud*G=- zw0gwrRK;4Ln^VFn&>?;ZKr<%=(E8M+NrUDZ7=&r!831Ubm0ATL!h5U*ptJS)Sz*vQ zs$mrv&a!&f!XPAY0cgWX0fesFhkaTAVRL^50NP@uRso2+sn!C}^HLkn9D|;(D!`!b z%Efnq61tO%uY>?kL&P{urZbF4f;teyNIOQjj4ToeAIeAA45W@}NnGt}TFL{;YO8Wc zv~3uUCE8ZZLl`-Nr_-=)<>T0hQ^-ixU329WQcf`D;}9w2!7n5VSyoU;Nijwt+mJ+D zCyITEmY|5#aEJ=2FQau0GE+L)oDD6GQ1e^qjBsx_f8U;oY(_JwVQ;lg$@N)(?# zlTEJNmW|_Cd&Bky4MkBxl@_hQ>Xk%50o+(7>+Lq6HSP6w(7qa1VO$hpe!NImpptlf z5>S~P%(^A!7rR9S$rq2iMYYVhGe4Zl5|HjWp5}8J9J)udYuZ?`{X_K|Rfi)JZ?~zO z#T)b;SzAbtXvvYNVF9kPHDap6 zOT=>731~BdAg+u|2g(){>Q$*bI5?0mjJ6=FH0DY?t&PW1tKo^iW-I(;;l)7kwJ|V}=J^>xGZd zYT!*3J*m@xNBLm7lPS7_V0CxV|2O;!h|KoEWJ7IK?E=0!9EpV|Nf$3Dr>R1y)n&>4 zbAMRv));Q3Bh|>699Fwk@*zX|>K<16hc?l_S`v~EO4EvzY$vA_E0?{pCQQHjxDg$E z|8M=byN}Q6{J1Qbu78@5Zje{$pJrcF5<-y@G7gLj_~~sJC24lj@{Le=3iL+(YwmvI zh#Ek9KK0+I@L-n~+6&Dr+hw0cxE{Qb@9E(WJGK!V?1jbmdW)P|A5+5>)#f&PB6RP;$zuaS! zy^@V`p~<6B=|o?}Ni&qoUR?qJpX7+8!9Zyvz z$=vj>>`FF=7qGrf=fDjx>$7aOD5+2)f7KeHH54LXU4j&_*{%uW<{uvQ*j`Xm4_?CF z4Klkbef|~VlHr2g+Ktrt%9G`rtMgGCz8Go^|H9DOy9Yab`~wSHT6$0y0O*`gXA#J# zt3*WBC+%1{&dI3Jc4iEkeGR$fR*G|CJQii}UUe)=BXy`uiDC*qAs?FB)2G+xR6ECs znXIuwj@dSyHW@+-=0TH+ig*ZlDHK%zB+vTqZx>UJ`12?g4eyy-cA=VECJJ0dXeiPI zvp|jjd}1qUs+nw7$YvBoJO(2OoL0%K9=*}J!lyH;QM|L zRTln``yRA<35mrvwn2)TugiQTZAN%BvkH zuXLci%7FsIX{&E^HealWEFqS2YREkOKG?DI_A0n2s615^y)!i-(pn;;Qi+CYf!=gb1H7`@7 zntYq6IZ*gk4b?(vnoh@}8)F34!O4sH{_yVz7!Y`IbYgDuN!7Ao_@x7q+_K9r!iZ|6 zX*8R)>aJ(fDFpe{DSpOIVKqygVn_-oIwmz5{(;nz0uC#V zu%M|yr{P-=ObR;3DI6+_cz9^@VHAg|8Z zLbOJaIuJS0Xq9DwR#_e>UOOBk6G8PvLM+o!B~t4VJ*oDvGC`sFdnbgAL$DAwEQ$*5 z^coWb?5HgX9Hh0lUn8T?ZP9wZa!z(MCGu;L18C2_9DElO&m_kLNYkB&#y?7R9rmTbm-*YI{F%QbSp7MtXK?)fYfgQ6yRQifYcrQQZ5i}Ee=brL})He3YYW+xNPt$pvCSL zWk%+NWHu$D064nXMUij^JKOw9KikX^XA^^@P(&z79FR9E?+lPjwbuoIG|l3c1~Cav zD#08!N}%$nOVBIJ0TXldBR3u3FB6cyXsWJs!0P9ntQWgR)2|n%&s=0{wR;{Gfh3^m}nvlf)%vL~xz37XL|J6wScBl^Nm{ z>;#W6q?05=GgHtLO_b<6VvPu33Ne7{M3Epd1f87Q&?{k)#WE9EK?7birr@HPA_HrW zMXuss6`7ojy2~=MT1XMII%naFhs8jYt+#98%^XoU^rZvbU&uU~#oMXXm{wT>Mwh&) z{(7q8rk$#&&+=kZibz}7L)p@aB^}kW|f48cBqh7Udp#goEY#@KS4QNoJjW*D` zX}J&Yv@Zila)UA(D2;A{!@&(&ahod{m*z=T}-=z zuW{R`(pbw7c*#T*jTVps10b0Tlu&5kD(s^zkr+2-Nbf``j2V*Qbc%|@VuKq`|VEBZei!>h|3n~wb2A!!+xem{P2pK?J(DvXr> zU`p=)epz(uOH$#g^{gdJ6beKg!J_YMxEQ`*g4KB|%0j?IK)t%dy0C5nf_p|?w(XLo z^I{&LQ;qClqbVIw8|Ky29p(Vmap?jSK<6h_O^@8nH7X^a-*FfRIJeC&VI1&IWG>iw zqF7P*74(pTDe|H4wdb>~3#vc?h%cHe{kLO_eW_Y^M?XC|;It9BjQZ-XS(ms8#$oZ4 zkSin>DbGW|OqGk(gogz{#ZpRA^=%2F2q=DA2E70YB+*1Wq?m#CCwUcR?p4H{8E<*O z(Nx|>7g8jnOUWxwqU=_EQ}7Rwf$%ult@X(h13!S^UC*E08t!-Q2s&O`Kl23K{CCgns-&?vaAE2)KVjQh@GOR~UqCJGp zni0m(8sv1JbfXu}IW!~)2|~1Z2sD+^Fb!>Uq%=YT3hG-Lpfw{9@g*UWZ>!8dERA&S zUjM&&9W4mgO-*A(e`C)rL_9q({L=#}X?F36d31d#I$NJdBXwjOFvaSog7GuHI2otB zU*qvVa9lTRJMxDK*AoiV1HA+}#t_M{EhPga>#04o09+axK;`H{|9u)M#5s3dl@&kM z(iH-+PBlz>5Qf@j2te1F5C~)zf2b-=?Au!nvBppa1j+pn@w^X$V}|;UygUaKn(GX?Z$-^uFE5a|LObX^hg z=zB92B1*BKBkp2zHUs<^bVt(AN*^QI#Oi3$ zCP=5q6SJ)XtUPCCf`BmWLTkiot}(3I6&?Zlu=5vY5#t_iViXwnQ1cz!d9e9@|M zkm1cKo%PE))%~j40N6FF7;24@jpevROtim%I!}#S>-u?Nw_j#i)`jUAg;urvVjrmr zIFOMdj3C^(3#?pI`3;>vrEv0y%~BMp9_7X4Ot0F;=J7Ywl4uewp-!}hZDcX{2&tmQ zY@en5uoZ67lQbo??;^-}9lfVaR5S^d8g>Muv1%up6EeXV%Fx3#pj_3y|1}IDmr*{L zMmNYNWK^!}<{9A3bTPMGqAjWk8P(tftR8vnMr4sK`1zDC0cK1?v8+-QRGCR#PZz*X zGyp6a#DNLuFhclmV9ri9sv*>*q?Q_l27{I8eG1XjF93?O`>cfQ8_KVhCDH$CFNs_K zM1(5>?RH*#Nt|*S9s1)&nZvv^meF&!ZcfBW(9J3kCeQ-R6`6P!D1x;XR>Gq<#i4}`n#EJ*JK#NW#x1vY|FTLb; zWI#%89pY_gC0R5q4iPqOyLf2Z1+`<%tU>1J9J1xisIw-SbLx1eWbPpp#3mUgaqdbN z=Uz;oeNrW8V!(Q^F{!62RU#?JlVG(E&*Zefj9e&X+|u8qV7<0 z?Q$;rs+1ICs`>ObU$egX`uyd^CU-nOE``ntiM3WAB$7GtT#*{*cR(L8Olo@V(c)pk z`e3kbWIHaAP6df(K&|0fj*@3{3}D*#rLAz3leCr@)oLN7_y!&1cR@ zBb^$&BaO1H05mE!F}`;&KKw3LjF4Wf9AO^L5;)VihTKk}0g3;}UcIi>pPuURVqbwi z!=%r_N2c6y#C?Xm*;ISIYV#e#j*Y`iUK*)7@@mav9OPLx$p7dgv;puX4nW4UslkIb z1+NlJRrq@;Ji?l?EcyYuE!k9%Q^91F;gzxW0$^;g+P_ni5Dp@ZwDu5EpcU@pxClRq z;~WlgLUKbz-V#y6{;fdog!%vhjRLL;7YjUzHF`ew%m%{sX( zT&|6cpAQ+(4wtB{nXd;+s4>q&r694jxWA+kp7)ir7gT1P>xA~=x)MS&!}<1FCDXI7 zS&_4A+#k?+jU(f2p;5-MKd84K`~MF4X)3CpG^p#M}xrYbI|I0CK=7@8n7GZYZVVfTpX*EK@|6HURT z)~>-@(||!E0|-|T7(fi60Z3Q(Sv7{D0KuZW-oZG+x2SiqOX^+hk^z@G47m3RxO21T z&v4(1VI9-)(Og7kYjLop;KxFs4b`kHY_Pu#;?@dAz~Cfp0>LzkZ;zcu&8^a!HYJY1 zGdZq70S>K>!}%;8hj)UEJ5QmKozMPe7_U$$MBm4=c0KM_f{&DF5aO>3y<<4 z_Tv~o$NhLjRGEGp)pH)hHw43J|2%6-Q@t$H6m^-$zBNr;Nyq%qzPJy?PC;=Sl0K2tC^?%?u^K#P5P#YzH<>V zW}0}D(Cxl50eF_%F&y25X&fd`0P|wdMzHj4HY<*!?l>22btWcUzr}wVCf*DWoY|=H zAoN)j?+l~|eivyCY|FL+P%L*MB{SRvXh;*4P|>1t6l9Q2&5*;DYK9-o^jNKS+Je53 zsSDOy8Iws&BO{z^GT*B8P1(ozxGnp`Rv7Hvvw~G`%V6)*#QoCxygZ z4h5w}LMn#+nop7Y9+#9@ircdHFb8Cf+)o#;Kn|S|!WD}7n(rn4$J2Qko}0$&dXd*j zNj*h8Cc=N1b{$^V_GQBL8`clCcc-^);>^1=|HkdqTe#f`bj`*m!Aq0c219)ix9h^~ z`qEc`X^rY`@#;XpZQ0KhiQ)AXh9NdC+-*mOcN@B8~oD&dB4PwJ2e`ly*Ab3Qw}` zozom_i2+$pY>CnnZWy(mbfr+JONknM_|M>{5cYL@wA&gird$o7wzuINL)yGdyz-@@!gY05-nVAQK*Xc?X*IJ+Fp`nOkh2MEF< z2R$b-ct-KlC-1noZJg$BXgf*J-9%GZltxoJCPB+ZKrViD`D0$*2VA4bxFLEmB3SYr{E>&TT7jTy3c{|lPa>cfu~iC%8zL@j>>;2 zQkqcN98dlC+t(wODTpKA_#zjmnqTX5Jo zl4rwVQOiBI9F_`=!`@>n%ZcqerY8RBIIQ*hmd228v6U1_kR(||)+Pz!QzStLt(23XgE~5Eyy#|?U!~hR zK;ER=I*?i@SoV_Jwqk9~Ld@xwJo4aN&Dh|Fm;Gtwc#{pM!p2-Zku zS0p3>;u)*Ex@qL9a}1*u>aJR$@^sZ*>|jq(EqhetMMRosrSL+wf7S{w6LX%W!i#<7~H}y@W1uYQzr9uqkDy zVPLQImk0UMxx4CF#O}uC_$F})X7hmdvK-VIi@ulAvUA#R)og0_5e}FJvOnY;4s9DE z`6sEj;9QXr9cQ-}9gbYVi7ODk{*Tc|ZOET2LQY|^V#vegM5we)=?r@v+obk+=kTGu z`X-bO&(p{qxk`o63{~9pc-+Iyjun-U6GWI!d)P|IYfM&AwkB=IVj08L_A=A$n~s8U z*H*!teSzsH(!RhH4r|#1rDJe)#7BXx*#o}ki#saFqb$_9nL743wy`wULrvUc7??-~&A!hib>i0rrWIZ=zV z!*@r9dSQd$QRfmkP(xR(1DgEICZ8|cGLxHUOWK{LQIrg-UFEt`nWR-iQ?zb5(pn@K zr>xS-fiXI@l-6|BzMGY17XlEovoF~pM*}sQjdbMH_|o5?#(X+HRVu_^%|>KN&ojg+3>3DHFk z#(!65)er*jeGhWp0Ub-x{L1`sjJ1x@qfEOmu>vu^`lwqg&<+daLps1{a-d~FRm#eC z-~jof@Q(XRt-!5nm5UaD+ScM8cd^+@kLb2KD%hHrr@@DrxQKFMDL~eSv2fr`IO?u% zOr!riq+Udemya-@wzRoiYZw~d>S5%A-_kH_y1dsmd5{pqt9nEh_Jj+hG_R1sv-}q> z-9%sIn_cN;e%=Nfg+m=MI;uF{GDjE(x;ekahAU1thr2!@_pZ(Sda?UZp<}>rohv~Ey{&q1=txC! zer>iOz{s9!)O4_}=_O}e69UB=H68!&sZX2&mtWTz^ojkz8Z{k#1~tL_3KnX3sliDQ zGcV>4$IEq{XFhf@r`0q2*wLpCMX|O< zO=+CZpeC53L6K2_Z4*!we&JY^pm_7@+Mfm#(IA{*JCA>S6+E6sJJ8-HWa8>MT-W(+ z2?I{MdfVO#2_`)7 z@FRy5Px<|dMy$~iI1p6|BQMqQbdUlSpQa*aBK4l$cW@n;@xYO_;qVJ zjWa=$0^@N;a1#$d!CJ(H8V{=M%*sC8`b=sR8KK4}g+0BMH8yc-iP{aPL@p@th)S&L zL$kzVXHcTsSmGCZFFKCOFDe;7!_qf{dIY!!q`fhQ`4GFP2p^I-P~aPhK-v{Nc-K- zX#`utXa-ej5$=w!=SqKEgm=W(^W~>igunl+XWk+&r6PPhzFr_@CUX>D|Ama{MR-em z-70lT5&rlyUiL*&rxf8=;_EjUAq#)^sHa{ky-yL|U%#5H^|tu>0%;41@WoGi=FLVN z!e`^_ob8;$C*tdjZJxsiP{c7C&PyfQJ`a?U{S%ja7?=RLSun5O&ez%5i z)viVuWgAqSt4!;0He1;H9 zd@**Z2tJDc-Euyd_0Q1BV}~p%^#5S3 z{4_oNJ`SK)93C)F@(~z|U-_um5m~9c4#Ea8IfdyAQ+TO<_A=2BZVy5Ryv|9A4deO-dgB;@MJA?!yD zFTZoF6XDhAWSv$2Ykq3M23EmJvsTz;JE*bbP6kL;10_oUOI=<)s5plIocFE^<**D- z{PdyB55cr>U1I)w;3e9z9a~VeNn{�kWN^tZN74=1C74q@JQD(5w>ByF^ry!H>D7 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 VvfPoLfE{`-(r1w3NF7}@{}+u{CD{M~ literal 188249 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

+xCA4(}Q~Z!_j_f@WPP>G>VCLgo6x#Ni z>8Z0=rpjOGSuB%`ES3#RSvg8G*(hTcOZ>JTnO$YE40{6#t}joM#ZsBqRw;@Z9PlWN zQTog0mBsSi$J1rQ1);(L{FH`j&N>96tLgG%2xyslaeRJ#ZRx9VX*G)QHV9_D1y&Wt$^`tICK`WI z?QnCf*^*u;qb$PJ93v8-+DAu#%6zbEgt1+#4x=`}G*P`%=1*9%YZ$DvhHpHi^9}}{ z4H`PlH6Y{CWnvqv*oA2|)We?SOCM(P z61HGq;Df6KD+D~yWj7B*4F)Lgpy6=``p$(Cel%6c{1tNm&e$y=P`m-RA>N=6JMkG5 z)-mdrMN0q}Yjn(!i?`4X6kIT6!3As^pA=lMO<^7$T|hswzw|XI$2DPl7J>{OX=*|o z-)K5YJlv#l?honPQhY>%ugUCU{0$aKi(*^aR^dpKB{4*SBAyM90Gzn$?DY|bKGO6h zW026QR?m8*ClMrg-Tz;zhK#gUYgvRznt`G&7ztNv1WPWpcyNrCYtIkpeH1GtCZ;*R z6>3dM-GUq#CfH&G%dDM%4mIQOT18g|HENPYg?C3=@0@#&ti08$xR(6eLy(0NXR%|BuDj_escZvB1 z77?sD*`XswF_XZ^)8Z1b27}5z`1WXp_GLA4(<00y@5^fRMp2-*d3*1Z1}x49i;|v| zJ~ExnXGU|raL|6lO zf*^EHtKvZW{L(nk-WIY0Lr>fS<1F*FmQ?Y`ykh|lj+Mu(%^zkUnaX zj@XOC-5NEqGcK<*QYeTWZUZ_V4nP#(4*O{6b|(2OqX`5v99t}T#tiv=;cM?d;P1mf zW|B|Tke`a7H(yCUX$Cm==Ar?UhE z$}H@4Z|KzrZCd+0A1#Vn<0)rqY!79um~meZ(t__-+R^GLO9q$lwky+^3z+*ld%@l13?`vhjN~FG3aY0`>f=NTFHJZIbJI{U?or2N)B4diCW16R`Tqq zgnm#8tmhLA@U7UVug*%wO1IIpQO(B692Nzsy1ij~jujc~I3ChElLnn1+J)6MgC zzctyk@8mfi`5S_7;yXCtCS!{1Xe8$^WYfU)?F+?@ii#bLx?P}eU(qv2oKAwXu{32l zkYb-glF%cN@$*D+DQ*UEOxUPqjjhBj<=>cDu>gXfG04S6aJjN1wrk{lfJ8>0rbaAb zI>}@dmYJ!luS>0PAfG%!$tv{6u+W0+4Wkk2V@!pVl+}`dJiGDCW0fwH^3^z6T{u?T zxnZovTWV&W#T&=5)_SCY(^zi4op-tlwvopWsyOD;H|UFIzV{WfQC6NFVmf~m*Yvs? z#FhiGE)Y96KN(7pH@moJm@=D#ZKr z4b~vGQr7*>y6JP7y9<-uMY|5dC*jkxK1>Z6)R<0c))4sy35l2)yM(pVfAPC+H zbGS&eQPeA1jlvHOaU1rt>B3xv^z8Z#xEk%LJB6##EN7B;*8CYX;M&L$*YI*dXWn#% zqqP#(Mvm1=_FJ7NY9+3X9Iurev^r1MN?aQ`F)E?A!{H8Xgvf#iTa_!Iu9G~BW{&mJ z@IyeRk>O=&S&@ClEC^h_gaQ{b@ek|vF9@P(NXEEMG1!EbPp|tiauVO^^wuOIjSx3@E0T36KNvF2gs2BN35E4NfD_(JbS4yBMgH0)e4Ijm6U{TR! z)DnZ(^=~XMhKdE721m!WBerRK<1@({&J3Cy(9DF*UW31x41flKX_I?7Fqv^fh*7f< z>TWvNr8Y%h9%{`*5cpHC*|o=l+KjlFG~#A40}zUrqZ_N!W$fbdZ8qO01@TrEJPGAhNtL~#jT#vun#P9s~EPcjM=rhJZQ=)g}O#bk`9J0L3=kl|bhMkROgl!uLAIN zJbd}J(%E##gg+Q-0k%p2Js<8i%Aw@Pr`e6-t=r+6G_0Uwk0X1zJTDl;_ir;HzN^?! z%v`5P32pP2`OZl`!Xn z$_n9$Wr@i*a>OSl!q_<1hgTw(;4hh1g@0rLvZ?xS492O>;fe*lV&E*%sm3#{PHW>U zd=PQGVGygs5QxPuU?9FW0@uy@5HsmPkZ}fS+a?yds%^zp7{rI#aTsp!(#ur{ER^81iq>Sn#F zZ;yD&AiE)CHYTa@DC%GUvPA}bSXFDsBW0PJ2V!us4%80^orVhVP&7GwRILw^oO@oi z;!)g3qPUL)5~<=o!uhC$(dgy_gj^D>YM~Q-9@~>h#wZKeY-!17%1R)>o&E zHxq)(kgGfBq0+O$J@eTP zI)T|qNr2KHzrV`#Mc3SfWD;4)0ms?zC$-K-!Ha`iOy6)QQzEYexlB_kSmHh4ck$>7z*(Y>2{P;M} z0TC-~uPg6HR^Cg2PWT)oAnETZm<0jnb@m0#L!WhIa8ERb%#7Ug4Jq9Agcu6=q8<%= z0>=mfn`0|b**cl8rPX*M9-*;U$`8K#2xn6CNl#upn&R7kUTt4?nx;RYrrZ4^v1!5x z)c9jCu6erAnA5rc&fU8}S$3WEo#&i;>(;HhRb97V>T0zf=U%r>3#;w6k)^gUcAr`n zmPYni&eC{1US2brS5dkh-OfT2=n{@zkSX<_2`F$6g*?O>z=dEetxh0?Qehk+juHmn;lM& zCy8^d)n{Fh35mmx?o@r=F+RufcFu&Q&pNnQROnLt4Wg*IfVQMU$>vvhlhBUha+(d& z)&7-d49jU#GhHId+&{K$9k@YFW7gFs7E!weG^ZGOw1B2@9yb=yg#`5dC|i=y5HHbz zYZ09_f*28PwrUb~D}gh{O#-5t16dBCp}{SL&;E570~e58(6$@|775EtXxeI2J&Q|L zMAy!d$LTbLCl46~?DJsNcO!sxPIqN%Gy4ht!qr|-G}KwKJ?N;|U--Rn`unRyfAGnv zu4YNVVXg}YDV-)oT1adT(L2UFfj>y-#}FriiiX{Rhq@S35D~`riN;Mx^mIJw)+-_i zgta)tzW9o{29Okwjp@lx`UE!x6Ma}C`bfwq83P?Ggi+t3bp&2*tdUtg)I`PxBc@hZ zyV=VTk;tqHt+D7f>iGNkq;nFQq&!9kLnmS=BH8pt=dYk}5(nVuX+}T}rWQi8Ycw30 z@tGDadCNjU@Fc^kBloT(F~$qS@kJKUx`9JK6}A&3dxm(f)g5djxT&e0&I-ShVW)Ai zda5W6#D4(DQ;mq6#rIGWj{02?b zbC&!ZPj2OB2~*dvPy}@YMum*AcKO26VZ9+?Q+9ady>a+6Jnqdtgl@=3QmEhq<2kJs z3%G($UV?LMkjM9-o6mx6XV$d6jY5D?HuWt$f(bqD;E@51ws#Vo8hG`+Rk1m?DmJIB zirHqX!h70&^;U&n=c2PRm8e(hMwm(f!`|$M5w^pqwO?=la;}}4-!(ta_HP#OL|dv0 zACN^sfMOjSB?KE1QbSTy=Hz$;AdYq7S^zHw))EQih@->R^SS4#~<{#9)7_+%|vTIJElgKqBrzl;d$BLJjDahx~|LAO+t?} zkgh*mN(w@qzewIB4n?kXR4foMh=F;x!(EpdO3ULd<&IQj3%pwHXfrIc5Q5IsDsGu$ z%a^jJ*(~;!Z`~?PBlQoNt5$15tZwzRE-7`Z+sZAeRqnhxSgPq-;%G1L{!X+S zoxVJP?JeKB&5cKD0i;5vbnVy1Sd%Hh0FsSI3W?D8dPS0%vxP>+fKX1NY$#RMPTb@3 zmt}DuTg^x!9@A+)xllWt1=aF+WgS6cYZF1DU|M9|zhoQZc1@(==}5Ey=}?ko#AoQR z7G^Mybg;hhd%QCe6>Di|Zgt=T!sdul!@E#Bs5nQ|0(s+Ee|BJ{)*%mL`X|4IQGF6s z^S^}^_^NdRDF8LGv3QeG5CD}rfC}Jclh{hEo%tV*5+z3*=8~0^w;- z@zt(kweWD-PKMl07TTkod(ydiF`y%r&>W9(#9sRIQ}7RmC#HRtLbgER1gIuDtW|Na z9ICiJOM|*n2O~rq5GudaWIgyv)*V0ieF&FtB%cPdYbhUyM)nj>&`pZqyc`}Ri?H`j zH~4yjBnc4EB_mb)5grWwNEW7`vL_2K8YfG(6D9o6}lDwiKwiwywN^B_bDu_jYHhgY-QLpz`|i%ELFYW%7o@H{I5~ zdnwb+Rx22cG8U59fjGmzMXEk8`Z=1HnfiA`zwpsAzY5AQ=3bO06LKKauFrA(LZZi% z>A;~;pQ@LMmYGwvlJH0v&x!%xxTLmN2ao6V`lcmcsgi5itxqKO$KO;ZYT8Vx!|_#h zs#K(ux~TeeCyT?-(m;Q_k6M~qwN_O^QzQLwLQ|P2N;#T(N+^tADy!?!x_wnWC)U<; zdTl+p7gNvT>Uxf@t!HIzJ!e+cQ$QIk#q;quF~a=^ftcR+jo+l7<$O$F&#*V>y&S($ zKOY_MBh@wry$;83*3W_QTS)cF;?D8acaFcMeDlqZ-WlI+8ehXV6am%$mh$TNKgwM& zZ*jK$caGm)zEL^fs#=ca<7>$pHoS6Qxu2{w_hy%g=5JA*Qh}nfYbaY+cFmn*>igz9 z$L}cLq$)i)VwP4E2#aBPRr$@T@~U!w`Br7|Ku_i4{ba$$pgON9uho}p$~Tt#ZsyO` z@4t;#hMwXs(wnz<1p63X-Sk`U9A7KjqT#oakH4Ah5WMR9rt(@fd2RXD@_;G^)XcQG z2Am=Yl~s=ZwAwl@A&>(%xP~|(sw|!`%e0w}$v-}pGQ0w1@rc}O7sf4^#L`X=FrRM=#b#(@s z_#T<`SlbnqFO$(}mLG6!W{$-D2nZ5kQnyS#)pPwdosv{Q?l3WtRopOJ=Mn`t9)!QC zOnDBOBM~H-L+FfjlUyTv+$S+?NS*%hHl7%=<&Br#T67yQF~e#lMHc9PyoKJx!rQ$* zpoKR=N#YN{NE+(!xmV^Edj}A62LK6Dt}k=BMThzRumP9LTnZAj(h+2d>pd^Tav#?4 zM~iY6{pfqSaSo9G*h*H33pw%i+^2ay{2*C$&k*>cw}7dyD(uFWU{*Qm9N~DoOb5=D zGxO=vx#`1F8I5Rb2>t3SKc|%%_lPpqrH^AiTmF&z`edr|baBFgLxFO1b5Aop-y?!U zC5>|)%5w{11Byl%4eW~vq)J}PB|rLcMtGx#4HA4bQ47?K#cDiH<+Kvtyy39ekksa zSqZrMX{d|Fv>!m>iH0rPw`6ZpdbC@ku@?g_qpdLvovlT&80J|=twLkt8F2HL*aFhz z0lMMMUrhdWikAHE6wTLnRCVKis*|6u>87_g%g`+Nfx-wEguy+G_r2<|9~U+3Av!dQ z*d=^={2wb}k*CFj)$=E);)NX26ZYYV(Hj+*r9V(trseL@=Szx}&(k^TJw|VudXKAX zu2%|^?dIaI=g>c;6z-7@Y-JSPYb5z&RcCx9M$XsYHGb30rIej99v|f!?vgI^{zvZ` zzwu^X->Cb_wEDxAh{{U-y?lQIH-JIk(t)8p^SnJ(%(9@uVX(2 zCO_hy$@ZXz>FP2GUW+?U5vJDRUJ0s9>X;W4TK&j!9y+0xOY}X)K}i%gG7o=%mfT{f z&~=Llw03*oR;@8rL{uahcIh7aV;vRAQHSatISSG_dxW7ueXo0DNXPne(j!!HHIiU( z_8!%(ZPX(cQHGIYES|{KTGNKy7z3@Utv_HAVq*{lLAtf3=}&n@1q))q}2$GGAxV)zK2K(_c;6WvBMl zr(F!7Ue5D(bqFz8n_d>}z7)gF#)pM2Gfz{9=YV{;hz6w_4rBd)0DFOU_dGxLs;6}zrmOw4JRCu^<=*!si>l&WXk(l? zYP27eLun_4oyfgbP!Z`iLv6Ha2ZwhBmDY63Isvzow%Q|==H_c~z982-)zF^eKvE%P zQO5(qvIBL9CGa(!n_Mv+`0h`vWYuooP_~BOU}cV%W*go&+++b5X)rbwq^-DkM~RbP z1TSpjx^t*;UJ%e^+{xlb4`}-cS1@g+S!8pJh*17jZ0&l@!$QDwyDZjbgE0w?!>fIt zs0-AA6Lcs^GNfMGZNqrkz>79iOD3Mab&hiOoxGW+4-q{iR)SKD~2Bv%?wB z8Msu%a7bYd$zP_zCgrqKkQz-2%UAM1)hWfjYTn$!3QkK*IG!a!i)3HQb~6$qc)Ut! zQ?kaB8B`zRMrMlxUtto%R;XP*p5f*1;rH4gYg{eboi-~63 zy^hD#As8Xer{z_^@2N0kvO$Su@f|*&S}j}q89VlXRZYNkf08orNZ|~YGO;Xpy%5;9 zlo3>gM!Z34BvnFN2X(mTf zHt4+jMS}*bfmWR)YH78LtKKA}|D|5gpy4m1fSfoO{_x6D0`8CWjb3WUh;Pr;->g6x z@B&p$mrdAKC)gVR8PViG7BYxd0@BYwuXCs!S@gTmnfLu;v;q9bmVH0vfi1YMQ_EkiSI=%s}^96hc00vy(4psM_#-mb3)1J1gaLMW*a^u zl9DNpKC|l*-DtLC_7taS=P7wJC3>~e8pLb{51Q2;gFI>R)edQJ0Gy+MO!l0#-XM)N z$m%7}hH^AKrXYT53t%++U``8=HA{g6qO=;IBW&TlVWY-2>XZaya$l@+FAJoNF3TBGm+Iuxx4ppKyV&_Y-LB|po_W#5@p&2pj@D3Q9yw3l#nGtn3 zbAxEaA&K(&zWhD4%?sC=+HH|CvBy@3H`F4Co5PS z7Dl_h1(Q0dpaN?;Im;m!IytB8bZ(*P98c>yCwE;kYzV=r^L4I?I8N^(RB>#nu*gf@ zOIrufc>}|Kt9zV(3WQ%d+0=P|`Fggx%Gckt3oilhMhkD4i&&c{Gx=~&!m(D9kgNu< zsd`$Th@^1TD)%}w@U9yqBBK2?9-KIZSxwL`@fzPu$t0~?kqv43F@I`ptfXX)lkHb_ z;Sa!pG*B-ip5QU9LUaqEmMPFnZ!!V#WK)2b5x8E}?wR!^by|LkzZr^`5e}B#Bx$i!$0e0v>G1_@PaDS6?+U``pYoJ zPd~Eit4>`ZbyI*qsiXsQyCG;n^&#FHKxDp-(STsr5G2CH*^bc3IOU!t_SBeV&^`ZnJ+jo}$#`SmLD;CrI~|C>u<_1L z##^J~9AlksM#NYr181z0fw#sAd&|QPQpOngw=_VZaLvh(S9E~0F+e=3uJADdRu`Qb zlDe9>`iuXqIW55Kf3W&f-iZ-&O(t2!j@BQy-`V5)Kico~{P)}MU!J_kbiedDHcO9A z1uwGnNw#`Qp)uR{)6;^5jF>W1{LBu(nxSB>I*m8j$8Wj|G=$Z7m~O;yR;@@yWaLYa z=_bys*|3lqE#1WFy?1gm3sx`C?dmcXhwQSWJj=kA*n#?NFeAVsv9vg5;r&3u?j5Wi z`d9<;NJ08GDFBNUw5BHI8K*2aK$K%PSr}q7x?Xc(Cs5-X z{jH0u{SWvCiA+mV;@@W4is!P?a9fa`aum0(V;^7fhP-zPbMEqz&r=( zQCZL#)zCi%4Si_Hi0owUJ=P=ugTFBqO0Lwm#ER%@_?p#T62YPIeoqdyZLUEszXe3p zuL0G)I-L?js(yI_<=kN$8jz!H)Bt-))b~lrHK5;c>(>kQH9|@TP=wT%+MxJ#UK$}4 zf{vTA*Y83EkBb4#;X!br8N=pd^AzEIT1MaFHl* zLM*X?DRxbtY!_|>9)+#$H8Rl&$U9lEn+d3)UVRM#*O=ZI!v>3l^{RQYC$N@?8xFnT z?y^3MTY#Dcw>orQ6LcmMbcP9fg9SGsN$l9mQoCMzjW+QJJK7N}>^(7MSp~I=Rj`q? zY(#>MN!CoeTI(jW(!}Tle0&k1_t|}K;aY73>$Wuq`C@wt^n>KPA0+MkARb(mhmLNr zFx&vb_0>#FhjEvSoM0iOSgb{`ZoBU^X|Y7guVYo*zmB!R>~(|*C=L)Pfb&)2XL}qk z)OH^bk(O{AypGR07Cp88yBEhgs;%$ylkZ_HoghBhk&?0HRl$AgG>elH@+ib)Ri!ZE zI5aWqKL33y5XBLuUOBpHE!JACEPV|5RH6;BC)bgo=Kl+}F6N#MY+d5hwyi4}x-uCN zVsx+8p>47DOG<`8+@-J&$)cKV>f~$$3?OLUx@;*yj6xxw^r*GBKQh&cn$venpXNIS%zgTr z^J1MskM(_g;gmnAl`Totmg;sxjo}pI)8vy2TIRhPMn(-)ec;>@es_bAsYn8y^G z*>`wG1`8BQ1fKQ_Pn^UTTny?k4aTF6*?&YrlLP3ogUC9FO|Qp~Onfug_T+XSJNieN z{VXiFZ&O&ntXG@xtT5$@H_vop1%ksbRv~G2w1r3ZPxUBG89iN(TX|$w)8jTCQRDQu zLu-Jq<|9Xg=WsL!D2a}i6LpT?$MVrGn-qyYuhsczfr8Jv;P_IdI9%rf8yA;i_yZcN zM1YQr_=vS!jVbs5%B7Sek+5BcG}~F@Q%agS@43kmL;fe_MfG>SN%fESThOjdR^ze1Cg-jOejgF=`8{qefoB_xeGz-y zRC^I=n~fY@e0_036Vz85EI>@lU?EsG1`7dL1`7eb0af*bvRAxj_>I-3dgYVD%Dsct zukax)Za9E3dC3$Y$H>~kF-Gdr#mTNS?3J)kX!+ld;&2*%{Wh||%(u|0^|P^L**?)j z==WIBiZEqd#f?82K3<$&np3$b4&*28UMtaB2~P{kL}wyoA8QbDY8sJyJjoL@icd-K zW>OF`+(N>WExIbaqP&V!V97B7^|h`rvCmQN5U8Q0Gfzy$zYTzzb>gp2pw(|HB8Vc% zsE$CvsJ(&+Sbet^fxv2az^ddM;t>!5EN!<0q$E5Os2<7_tRB>qEW3|^RknZ?a4_)D z8|q;QP?XTB`60h;`VE=3m8aRh7KS>ZeL9$uEuZsvw8cpqq;Jbqs zOsu;g+Z}$|#?y8`?c^!0WY&4USP3DO=LkL1ODiGqg|9r+I^?`7p+YO6!Yd)U&I^qB zbuN!KJ{>C|v|JxYX^BpYM%_ncUhoP;Xx0OHEiFbsIhGXW@h2?S#N*8V{6TEAN#zV; zjg6+d2P!sU0gz9?XBV~+* zPi%5|qwsv{U`B>o9hA}zwNri+adWW@N5JOG&COZ)4ZJ^%+lY8OD;3o2+2*aI+k!~> z>Li6IXvO2W5WdipZlEB1Cp(&{sKhbe@M)4urzIIx!eX83DZWT*s|_bS;e^FW!sAXr zE30!THl{bq>I9S_g~Eg|l=4UlI)2K5DG3#tx=)}prw}HzNg;3`K^H0Ip`Y~kh(qlZ z4d}(*3mX}uU>GdNWpqXA)PNt>mxS3e>l#*YX)=bCh^` zT?y9d=WOG#btN?Ko~u_!*OdSQ=PYps-?xBr8i(==0xTTsi1b83L<&l|b0mGjF-FW* zM9^{bM$I25rbG+fZl?=!>lbuFh4XVw6k~M$DwnrI z9VJu?*}6s*U|jX9L~N@CmQw|7zRq(N>5u5`we{PBESnZe`2(=!s~cLZ^tii(S7n$Z z#S%;*w5NC^4y#gO5#O~yyW8xB)W436QyGoo2EtXrGsDZF6@im%ao`?O)|DB)rr=z0 zx;MOOL&Qmlbr96|MKn`&@X67Yf(FqgS+j}t6)jSMdrOe!>rPe>RnL9z3ekqhr#p^zb9k9tcix-<4uYPCo|y)))D1XQFwQYFw&)76>#PwBA5P!H9{N%F0=qY zDHsSziIqq)a;U4h$nbdFWTyKYm|NprP;n<_&^uZ=}LibJKv6$K8mFq_9l&Jex6T{YV267y1KuPFIT!#SRrU&&)Ct%NiAIz z0`N6*>c_3od8>J>BRmcrsh;U1G6;FhT`pHDfYDTnBh_i*Nckc;zosiM7@x1~kb5Fe zfeGE(cHKO2tGKpJ?woOt#%vu%DlcapMrx~X5pr}ql&rciesmPxtim(8-C|fbAcRb( z_)(wG{b3CDh|ytKCtL_mthwUiI>!mKl0{f0XE>_xGGS>hl@{&8r}-xv1`$q5{5d@wX?V*W_lr16 zh2cX(P#*`nqrHsg6^qDc4IeOD*W4z~JnEE{#D7XT;*^t~6Z}enKAwnN z+$LUWCcqFMngGoZcJ?Y-p#gnZ=s3Z#L>rVPZ}#!R z*U+7XA(R8yOSz#UmO}=90ln(WF*Y8cmMq>rW1eSHOB{k_fX85w2XoUtMk4j&f!tgY z#jvWl5>@y~f%cW*6kHVBoWg736d6uyYCjTfGkEUJqwTXY%e0xr?us(v*5%_y0Vq^A z3cxMhx{+6oTX0*c1>Q^JmMEAorXDWGV7FF9(C^1|CDXfb#P+aiW)V`_QuXZYB8lqh zYz@1JXywx>Ak{2$Yc%;$qq<;@RoPEC9#`;sJO;0K5X4wx=qB@Xy5CKg#t1u>-6*PE zM;YT9aUXHUKxo3$FhA@zjFZ1>k&QVjMD}Ut3WEGL)1%DljP{mBX!|-7luPRQA6_w1 zWUy^gLrinh&VtaV*Uju_r$My54QWsUl%2db3BEO2 z-cQSt+BDZvH9{qc(0B}tyWcbeZ=g|_+@5FmypE4wRA1xm37q$|pyiMxZ*_e9LObuI zP3(g>DwC4J=B??_|WLP9*MI$0l& zBic(s%Q(ncer@)G-f`17rC+k1=2u#jdG9p86932fRZKD|xSiby^|SvMI)yc>tbkZq z8Zc~!<&>55e?cW65|_eZ;0O^vK(LKob|BLh>u?d1-dz6hD&>pC<)U*zSjh1eE9 zmOF?$!n&&5%3=yom79r>qF>N(M&_(Os<4h}v#>$5=EGm*k%eA9&)Qy3k2C2$qY7C2 zrU1v!>P5M^Gn2XeYg&_VA(YTIq|YwR;<}aPFh-OLDCr<_lSOufNiD~eMYW(*)LA@k z?Z#jgv7xy(vCu2_W2C5bDhWZ_R3G{p3YTITUotL{4 z-=GV*i!}Wep(vDnlOR1#4joN`bVfM>Gzs91gw_DXvpRfI=aBOUJ%6r%-$^n30c4x?@3(DCxEY zSrWZwk_r{TyH`NyI~GI@I&Fy?e9=K5CqNh>7YYdGKSJ;W$Pa*FMSwJ)Qo0S24_(tC z_TQf3-O5v+EHX?i3u@4H_FvQaD3x$%t5?1FJ#_bVyfFd};2KUXk~6d#s!P0^C@%`=1iq&tD6 z2o{U1RBTHs$5-0Tg*3XjYyiARdhHCWmIWb_U7&oa0@h5+;o23h^xS@D;_^ z?6zz;bSiYA7((ShU&gj)r6lT%ZcKfR!Pm0dQ(Kcm@>;V=BvcU;uM?*#X_VGWb4w@u z2O{apl=L>WA4&UD5^|_XduK``oEvH0Cm;$6iPivH6U(+BJ`5?_<7pi$i(Ty_M{5_v z#I}3`)lTwqZsy}}cPht1zAgV@X>$wc=ghH=eNPcw>IQ;Gx$wFdH{>8Z@hh7O z@V1HzI*RJaRW=nYEKvGto60FKNQE%RhNFa?f~DBRn4d~$GHGSzb87WwMT^3 zX4o&I?fNnaEN}R+ypXKMAfK_t60}B`2&y=o?78R4u-O;HMNIcs#2#U@%PUe-eM@v~ z(xI-hN$1*+fJ`eHsHkWY< z3Tke?Fzcjn4cgb(CB;L&j^%OI0rX`x3!TL*DTlU!W%PnJq{80~s=06;88FD#iqMvc zA}MZ!clrB5I8s@bnum%03)CzJ08{LmF|ovIS&Kw=%_xUxMFP_+31WAQ%@9dEn?PBf zi>j0DYC>*EoYRyRds39&GvT3Q69O^^pPflhwBoPPg}=vB_}~+6lv;(cj)RsU?|EN^ zF{i9FICNi|w?ckDtSFX?$<~{<-A)}|2?zgr+YPe&p7C!%vE;hd_UDDLph8QFg21_UidBt$0eW zI>R3?2A?nT&OQFj)?GgQ2@AG-cq{}QDa!>%vgv(VaADvOmhiA<`^|AcDLO5^3zm&&VUcLAi z43Z(MQu0*PaA=6)h!P|n^MbnZ`)==5?Z-Kg`=k)DBOy0%bL7`Z5_1`|r^!%b79BRS zd^)nQ@@#({rmtsI=hQ0Hw~+gIr^xT_CIpHUS0hji8ks}$F#b)Q*EGRQ#2bV81&%a$+!Sn@3$2$Ef zyxh^bkdLzY=CesbU!2oiSHt)u)}x!yL9)o=vJ5DvdG46T_Fja#ggnzbuwm+;z$E0!$WpUvo8a+3ARf_BIbvMHoNX-sa)zX+KW^ zf~$BUo;|**9>2o*4}P#XCsQ*GU`uhFM)~-;Mmd7S3+&R`iY)CZ4}bSZA*V*2YOd-=gpgc}7gC&`E^lrn zA7)_s%elmY!mdg>cs+-_pi=bkbSZ?63az;l!jM~p3zs=U=zNQ7OOowr;2c0L6Hw;o9t)VCN58Obr-SF`| zpAxadVcOv30^U%S3)^n3JZpy&sC`t%$^LlCZqiV>Ubl_df((;oIA61~!45J#kFz_N z#^1%tDA|EW1$NvKz!z%ZA)N)2PHK+);ZD)NCzm&6NNy19)%Mg_t7koqJ8IgutIP%# zxvxdnWSgk>K^W{ch#`obH#PjEh!VL_P`wIAY-btn7RR%?Fr$ER#?ySFN19E1T{EHi zP`!4W0dW>cg~;y<$W^JLQLsnuf>V*1o$|OYn;*xjqwigr#w|J+CXaCwrh!)&C1mWTSD4=xf-_lFdkotdYq6Tc#1A%-K`(n(&@ zJs%9zdlP(ESLV5PnKN~nZx3mh2n1p-@pflTwVEtAzzrH2vS9N%$ihJq7=P>+LI6l| zC;}oENm*xif3!nkI{3p~#YOil*sGQ`7&KWe%e7FukK>C+JBz!;P36S|E!TnA_%a;t z^!-b$sUo32-g%Rx)6Vatg=!^>)a*M4qg|@5mufLF?5wK-joKESRON(qRXJ5v?VRv6 zJ?fP^A3ii5FjSV9T|=%w!SZe80xuy+JWJs@@$O8^vBQ#dlVuymG{h zV}?{xPQ8c4q`YKU(RwHvf1i`vGSiPP1y<~Q>18;+th|{2b}onJMNPwp!#K6GC$e4MF?-F^|IzWz`_%Mw^{e@f{yuw9Vwf@a%lOpgR`&6%%IV*Y zT)1;^yzN^fFLgQZu*r*S&}_N(^J07+1R)dlB--Q12|QEw4~_f$-ipvw=gKMdU_1+8 zp)~>D-8^z9gmCfA3hWoSoW^XXF4twil+Y4o==`L>bQI8>L2hlM7B}wF2)GVW4fxC-K!UjJ=ux*&3Rv~Zgg13K8lD}diy_4Y83d(8xL z^z>p?cYDd6gCVU>zUIC=2`vGMh*LxxMXCNpE`zO97UY+*;B0|pgBth;H2~dRqn+9) zNBE^OA#_w`XSwTx^BwzJUp%@Lc@H?qjvqrgb`%wn$&fch4>1wTO9Llmc^TYwMw_UZ z{S!`Q?ynz@HIGVpKru;Rd2}7^mm#kKAn56o3kRzw?VL9n6AV(Kxl%+8L>cG#kze>h z<)hc=_jEpbt$v@$N3WxT-VH?Tm?`HDRfwb=XdUQ9%&B>qGat;ebiHwY780I%?|g6R zp3%kiOp`iLr~?t=b7y(!2ZdElEO|*W-DXEIjctX#MvnzKpPvb`#a1l^iH? z($m8zFO5l}ko~i%u6rXB*2T(vBEJigSzYJo5-S78s18Cd$5F#2%6=^Wpk@vo3UT8f zq?TRp)4^{LCG*|RrTi}S>HSomy8$>Rdq9B%+ zl$YyzN`Jq_-|?ZO<`niKefOnSI>!gmcWxhTfj6crG=M{dbe=9Z-LT7g?LxWZAORr) zqFWTH&v#>7QtrA-U1oYLFM0o{pfG$P7IlU`jqfZAI&t}3@Fl5%u2NteH0xADO_ z$~s3o)8*Waw1k5zzSAs&s*apkXZ&S`IiomK-F@q52-W8N>zV{PySIoq8(-vLBBl-| zyprkVqL6a5UOc*#-&;4IaR?4k&AL=r-d$c4@^AbN^oVW=Ub;qe=UwAVG^Cy7Hz;v; z>g!M*gYc*XmRAdY9CZg;wC1Uq&|v>J83KtHG)HW@B(pdZWInBM^4#g-9=26F4{fvcJ?*+6AWa9!1!M{Qplm z)A3X_6q7|91-&hBJcv^VIs-rewMm8RW|(UE z(@Z%#CsPi#VNdrm;MGsH4yHv@O0!0Za#>18rPGZXAWfC`X7<*?pZD5vGd#4OVmf0r zCG9g7O%e!NX+6$w^^}d$p4p+y=$bE8Tn!tf`D9>{Lr01+6Ora%38i8@)(iA~1**mP zHF~kkWt!sg(sC>Cue|gypDBG`dGTS&Xm%@i9@aESkL3p~ zs59Ni_!(d5+#0zNVwjld1w}^0qzE~<6p$f-sj*2wjp|fPkddHu+i8VVz;<%#A#gLA z;HEmtt*X@}lY~Fcxw#6x`Amimf#QsYqgk3b+?u7CP$kM(U#aDuARZTDg0`NV5s46v z(pFpE$T&Uxl*|?IvvcqF^_eWyo80?axiu0MK&qf+=mJq1VNs)FUw+yb$L^(NLnM1* zbKcAH9z>DedvamaXd6>ePjY{atw@{aP#(*5wMJ1EyLVLC;CHnp4FIq_V$UoN_=Z|J z8peh(BUV^~<)P+p$?Hd@$Cj>++o5 zu!{MrBlAyQcbQ-0BDPUXJBMzByy+x>Vp&F#N09n0!zdqqvA7r=4spVuYzVQr_JeCp z#1wjkti-b*FJbQ2@@Ph+i&27(V#8wMmZ7E(pfP`jHA`CV-_??U=P zY>((k#!v+ZA;SE!!Al;-;m>?M4&zS}HsmMo6?k9+Gm)?{C2W8mtv9Yp_T{O-%T)DP8W5R;7Z%=E zbIS!sHNv1S4`7+BWvkI%j-vW$)hK*T318QjQ`!m8+=dMXgz5H?MkZ;&xdvg5B)J}8 zIQ1V`i?At$pECKX>*%^*?0Y(m{mok-^d(tCITM8hY5gZNWFO^ZyJP_~lMdVEFkG=W zLxbT|rXO>iO4Qd!c~xy4AK^vvi|e|i+0LwT3`S|tx~%-RcJ?t=Ple32=7eG-%_*<4 z>pAa1d)VKx1!BWtg$pEpv7or^m}U>#G2=-P?@CjWn=}M$Tc{XaW=@L+8$q3e>Rb}H z&^gO%fjM>5xs|mW5mhLjo;cmqmFfpDqjCzR$|X;lX0$cHYGnB5QeiX%2Ydo@D(Y-S z*d|}&-8~q#! zqy|$)rO-ByKd<`3^BNMfAyYI)BOED!{P+-s}p%_O8iTFm2{Ka?Bc+c$_dguH#y~@6C2oX4D5)^>(+0(F?A@I9I?#^>9G8 zj?Pbaj6_y)K8`;v=)qNedl&VgwQ3rEz*x}>?td3N{EMCCS_1^GqabJo1Svr3h(Z}RbXC-BXoj^MlgD4{HC5=F>&S13Qr@DUm!US}>*`GtnJ`bh2!pG9KteJ9F4)dT) z@ej&b{=k^xKZsPsMo&zOdsKq@mFh5#ni(J(v9Y^&C4>ziJh^C~mD5Fx^f?iuedWvy zSYRL(YWPc-K%<6Qk5~jLK;1pR31QcBT)NI)pO6TWWysdadhq&Z+>*CclWrn zR33R4O7A@E&HB6?ytjK#l}%AA>$r@ACmhYxG`mwj*AM92PFbj#rN~G>$bwaKoDY8q za|9b%>~)QcgJ`(}i!u6*L6dMgTgr=AEi(5Fs-s_9(JEoIsXci0xthLpJin=zP2uZ2 z)g4s*(Y%z%S$+zgLYjwEtGUrURWm?b19IA1z@k4dhn+lD=(eeXFstHGSLK`c`9OTl%)G^{vLn_VjIg>syVDi_*7?THk7H>`32sw7xai z2-YC*!fI@wrhlFB#$p=9Vrvv3%Zh4e`nI$6Eih437pHF*x4s1?ifUK-wyX6mFu|25 z>Dwi(Z-I%Tx-@;ewDm18QB;?uZc1tyB>^7QTU);D3|eW*1%Dt6MozF@B1K?0?Y znIaD`uW;QU7!Wsvt=Ajp2TT*q2GK)5RZl?+^F6zJnbF&%)gM$3GEr5psa7;! zX%b&!p1c2Ze11dq1V1sy$8_eouH4Sl${d~Mr0QF=9gYwZFj?K>l9~iP`>y4Ehlwp# z43^||&5Zv}Oi`Zy=a-~CF{yHm@ga6^=Wk>v!}rP!rag^g31;5b^#Fq#K+ZhVGxNzd zq!g3&wi~2VYiAp;pc^o2ZB|m3ALiYuBr^t@cQ>z-;YbXwzcT(qw%7A6>c>IMJ)Udfp`{YAZ*~yOE=wcky#+ z<%oGVa@6xK1~YOD%7G9O0$=E09jy65>(}=9*MCG~;eSU<-0IAPI7p!kvB!2jR zuSpz&SfzhGRug}%kUd=|Fyzg{|02x{@>o^ot4)>yxqw<&Zj*5u_fh@3ao4CoKb$`_ z8bVRcLAo}Pp6eL`_NaU;*5tccR7{*tbl2_t+p)wJ0KYUcTHqhb=x7`N=J+?{TX$~P zAn0DMZ_qtJxnX`g+yary??tr%F?n3nls;&*6=`4dXs|=7<-bQh3*hWau)s`%hiq}f z{MHsLM8Oc*8h!B|m`8fP0@RymS<508GLRH9gr^#RpuU${3IocmcQz>w$*^X@5rjOgop*CSQkG9Ja0)iu7 zmHjuns9r0@Rh1L{BCQm^TI0P=cz$id;fE8N&`D;o@Imd{&Dix+rPdZwE89bxuV-BR zMN&HtHMMl9haT^!zUw2^+i!i86%@l|B*Y$OM3d1VXeD<5resthpz^PgORJ?_xntAJ z=8Oe)<_jdSQ?PW-Fk#5Gqjh?+OTy`&&~CRr?bdNWZf7|j$0(E($Ng}PCe5cQmiqJ| zM|RB*me?N9BmWjyH7+eqUNIMvP_`53D$|CN_pDFm6JG{P`!@c>XGbdpu;FUeJRoml z*1%R$Jzld{4dqWrk20gyU|);P=YOQmksNvMuMtya114#Kl|9|=eGWWsi)VR}iIXui zW6$Hu81#xyF#<&jn9Vw#+d=<)*3ysp#~8&WTR}l9%X5mvPr;V7HX@QHZciU8jwu?tG{+0)?QTA z(PmC(Y5DGZxzbUmZ_-T{(<3pZ5r^&E!$e`93>WUu>``$J7Gs@G1m{eLa8LpCnW%5 z{xW*^wLg66y;Gyw4~5)o51cIe<{s9HNwX>3ycLHL(Jl5|dsavWCILtTTf-A1^?s{l;yW??Zk4%p zYxOK%Z|=fYA?n?v9DPLayCnN-QWCa~%aPtP9kFmd0esUq@0q6v2KN7`he9d zd}{Oo*CMT3iwbXU){v3NK3gP8C{&$D#3d&ZyGq2vK*ibRk3@d(M2$q8nIf^L#9k!g zhRNQa<|J-J8^Mm#x)?{I7OxD(@2JA8Eg1RW2L5ciQJ2!l`E9^yHa2H5ntK~Xr!)n^ zIJ1bTIwapAfoop7Gqa^3+$m>KFOhZ`M(cnkZoq4yiH`!C$qAJ7%D2Uy3zWUHfszmF zK}q6zP?ESFlq9YPC5h`nN#e$!%-4WYFno`|_g=Y#tb&VT5TaRfj#)-~%HfnDyENV^ z*NLKa4In?=arayC$AL!KoO*4!3e@b%C2y*TDm??yv&ncVxhYSB)XVwxpAoad@RlQk z{|?Vwe>V$A27qsGy3yDOkD&I+YWr$I9pqY9(*kI9ZaGn1!gpM+!>u6pSCLorLXzrh zTZ{R73Z3*sA?u@%nS3PiorP0Ioo~n0;IH{#=T;69BOKWqz8#XnJ&1jxLx2uaD?3^g zbZ)#&vn%c*;Y0vnzQcnk4locM+LhTx4}cCBRQX5?b}GVgt>6pl8^NwP4j`xw|2QB1 zo80it*d1l32NaBFwELv`l)bp8dg0&4woU=_vM=QG|GjD#vZcbIxVjimQM%V-eU8%! zot|RD1xZ0^2tvZ8BkdcFO8YeYg!Z=bdn2@j_74??G!%LT} zX;ITIlB;*{Yyg^3h6@4^$1q<8fCetL4nRz#8v$s(Zez0Rb8Zl=AMqwtu@UGN^kE(7 zP#y%Jxw8UjbKRxY+g2M;5C-U%0idlewGKd>d*28^7b*E~L_s@L!#Xf*cfA`?5PFsX zwB@V-!Xg>NJ}-dSS$!D*+T~K~07R(cjR16M-NwtOpvzPR6g0h-`7YOo>DA2FK>*Jp z#5n4u1BNJ=a$aPlJqs?2#U5e~x&6^Gn!&8JqN#FLOGL_AA(dasdy(lNyyW6EyzwJq%;jn$SFi38|1|uwJgEhq~Q?MO)29| zErHSrv58%Y^UXZ#J0rZky5x@AR%Nryq=wteP5OM|&MG^25MWzKRslaCem3KSbElqyzy}(wz zZPG2O1>-UK;q_GmX_@6&*a2ptq2)hF%M^9FI@-KZb#-jj+nMG~+sIR3FB`4{Dr#Fj}E<)di(5%~3H+ zEzSvPG5Pe5(kH@$=bzMQ>z@ratItfd9kMfBH{;@6j{!IjJ_ULU^WnJ+8BSM@SuHn#G$!~^;w|>IgQGg^8rA}`5zE8 z{84mP`d!E`H;ZF%FbW=-^orYyi1er54~^(QX(PhmmT16u{ppGU6z#?84Unvtx_gS@ z<}90syo&?UV$1FrbBEA{SsdzSjo0w{;@=zh(U_^Jk9cIsfaF;B{lI@K!Czf|s}$@e zA6Lk%sVC)IX!21To5;$AV^r0<{Wdlb(;uYr^70e%w%5s$-XS2Pt`ehDNel_Wsi?1* zX)*?ls!lFBGvZa1VmcY#>ki^*qyd!~2?4>U%15@>1bS_R5cpSPvY`q&0~?)2MqDgm zq!RaS1jn$apo2VRHaIy|%mm>dz#3w@2e%jugj)~=tuhZ%HV_PhoC5fqHWR8rHXO2u zU4ozC7@ifE%dTz15c3i$nT1=zKUpa!Y{ZrU1zY0whS#DRqs$=7&n+ z7)XYm8!j)o3qIpKwGJveEK?ic+Mz|*bFf&cj}mi2P_)GyUOn@rkT}dbrX4gUI6^0m zD}j#qD-5N=mZ7k*Cehl2-fn=y<)Stj7V^3OM?PqT|4%fPf9!| z;eGhQB)lK##=+g7+aSl9D5(bEHbKn_h(JMCCArWPnQ|ZlHLnd6HTfTNz5s>Sg>WSR zob3ojHFh*SozuIL9FILJU?AN!LlG&CBvlKy@TBv2TtdPV!SBRo8qK13zF?N16+aS` zD{BC;FhAen{dFa5bhkKZ{CamoPLykb?>|r#k07X$Eo)bSRteg&izzI8k5xUJE%rL zvnzIO8Ml#%3+UB`fHC;lPTsqxIMDu&o)S|+*B}c97)%w8r#G5HR7q#m>0=02acXpB z58pT)#W_=PG)0p=s_@m}ycdLG;dl~mJq4mJOiNk?PzuwM1du$J@vdhk!sr|Q5>Ubo zTjUM-UT3A8EutR1P?zY$7(&0J!u9i3npwQ#Hffn8BU-i6>2hTH9;$)naaj(=#DG_~_8or6~4eXOwfMIZsBOmyqAl<_;VQW>o(vP&TarGGnf?~Bv!#qGD1 z)3;rnp&J;(V+__k*UCYoOs2oI=df}N(c$gJ6VfL~)z^MLC4@pLs7Rr#^S@Ys9(<`& zOh+I<%z_;5tug2J1QnKZa(kxl=n4#9Fu_j0hou`}BKAuhay%oa@DYomhrQ|A3*LYPSb<4#?voqdMZpjJPR_itlrnxf^NL3RxIk$_&DBwL zR)vBo(oNXzhXOx|^~XAbI;U^gCH#ZNM`IuUur|G>l7`O%yKQD_PA)sf-=fbSJI~3- zBqMa*8Et!o7w<~fbHXQ-APk^KaKOZao2iYgSWl! zSc5m0%#;;6LMSRe7T}$PP&{Xu2%(tDG$9l@{F^rZS`k>1Sj3xh9cqzLCcXjS_jsg`LG z5PYg(`iID$#t?vRGO=eMgAMXrG;6W$Ap>?KHhM6d_(N@?;LMcBT~nC&UNk9Ckdvnf zn#%1Tj4#B6hyhQTdK{AnRVBoBvV8CZ-J)nhr<%NKo=fBDRLcbdKaB}d#q6;G)j>Nw zra9(7_6BnVI$T-S9EygUR1_4EYWbh6WLIPvM-dRQ!-Lfe^tgEkLucCW&rM#W3@#nx zl*2N6-WgTOI&J|dCexD)CLK2liLq%2jiC+`MnJj>xeYeY^6?b37ffQ}_tcx1AEFee zu=OHJ0~O+wJX++wx#XfCDV8@XnEC%o5{@y(+Gjzs4~3K7^9P-ioovg!)OY%&V4T{W zcEA_~5TXk)Fw>f*5#gFtquX&&sVk}84T1%4Gpt~cI2Yy6Rn?qJM?$a5tKi%{?o`#t zn=f>0d4s~fjvxT<8gfAA*?=6X6-nAqT@vY7O(~Xiv`kZ-F~GxcdMpEjRuocn;E=X_ z0<#iPfJOz90>p#|97JKe-H2;$D6Ax|9?)k>m#QJvw^~_4aVOjF(9VhW`|-((DefT% zZsn{L2lsKv+_MF`Q*>P>0Vu_y^+E~eIa>X%PB2E22xTH01ksmEI-l#TmL&k+yRq0> zgx*mRBBd53ko1P6^M?)T;A7E}dP{%UBAr5oiy=XbG|$!41H+%6dc@>4&gj6)$Jvp8 z`s(4VnT*#mxuLTPXE5+f=JJ12H1jh&p1@2f3c%`Za7?wqa4ZCnL=!x~Q88KhM~uw; zTz`ju;ZvQ(*CN12@-dxTl1+5EAObfe={z&;ZW`o8M-GkE5?a;r#Hvjd;0Wmx z^g66tWpQvfvAAP=4OVL`f)UXp6Jza;;T%{LGpiJc(K)Gyu?o^rn zlR}YngxPUl3z2bW({!Ez&P+jEIK>=N6EUj630QsdIC_S}7W4T`umBj-Pz?KiNL*=N zFBQP2TL4C&IT#60Q%wo5z?{`=T*_$>N^@yIXc(*|?{i@Hl~c6u?R>qk#NgFti6g%( z!IfCzC@;Yh=hX8bdAwETF-?aAt0WsEiVzqj_n`w) za?c3=2bY9tP(dWvwDjUfOE07y@@fMyN3YOV=El7Z#au|o3l(!uVZ&Xe&RrjJ?rror zkSax!U^ORNNIh4fz-lUVtSR);q+u)@_Y_w$6UQrvpXZP#f3N`Ud8R zhA6O#=U>_ajQtBF$KYRGS8NMcuro61#A>q^kn8c$e31aXXVqIRpNI4j)4I^>pDsUE z)`!DQW3Rd-Iu%os0d+^)gCsA)c@no!3A1kX3@2D{Q^l+P5xo*Io-dAO12OE)P8AL{ zL`cHD+3ys@MEcK}4sYZU#%FdkJ9h~RK=mY+IM+42M>(JD&UZNxJ*zWQ(Zq}*3Prw| zA%lrr(um0Z8{H9S&t1t3L3?DIe6l;9jrcyiJS8&#q+6Zpde?N3xa5T!);BWt@6d*x zK1+Lxyib#t!AD;DvE#b=i_{1MoQVO>x)UBC%f>Fw8w4~^cMA65Vw_X;IPc^Yfz#5rFuq!aBJeUC?9Wk&thq z+YW|nexK+di}_vY2oigW$2&B_@5#>m%D4<>;Dila|#V5lHor#l9iejIcvtd z*#;n*?r*GQ4kfgUMj6N5m3sRHr78jpskqZnUr4XKx(vUazbC_^;M2JkI>JALA!Fp> zv>$ft8X0vR-$}}ozOq(bubzlU*|lzKom_;GB>)H#`j&54ykXcLxwC>7_uh?*@gK_=7@}M zk^>it8L8%ub``}m?Gvcy9d(fC(MNc}j? z9CMS}Jx&c*bWV51Z5anY zv-MEhtM*%yn}bVpJmIK|knr@NDdz^TlStNfU#S})RHDcUcn--HWC#-bS& zqd_x6k^4kwNHE9V?DOD&tZCj;e0n5dOo7Y?@&m0)PJUw+!{NyB8T)CLlW}^6_y-)f zjZlqD1;HdlDR)2A-tlPLip=MPf6sI3E%V%q*qA*-LY65^qY@ORahiEpPjv$wdrXasbRDV@+C9dOp=kI)G$;K&AQLpd&?_^oXd5O6SQG~@u?<;q z_W_0$OrF)h|J^VAWba+xD67~nW9GAy&8lzo_d4eHbgh;)DJUI6zFWNj*L#vV+SSzK zj+jB|2$vGNBh#`YG=;!K_4!|8;_MD33M4`~cWpgU%nI_ap!ebvj;5w|B8p^;XTsl` z+Wft#;cu$IfUxY1Q{x_Bna`IUOp;l+ZuN*Y*}ByZ8wF~W*nyEjRi-95+3zPlGhteX zY>nf)n9`@C9MeNRQ!uj0Od+u>0WO}@Aekd9n^{O&HcNM}=Lpp9vnZuvju5ob4TNVo zsqk^3g$hsVm$3O%7^>khkyHr#&p7@r&t|@Lvb@_!Y~~)67Ypws)))19v}QmB+Jr(s zX=dA-9aR%@j}!HGN5-6B;k9*u)0-19QF|uIOvS-;vq-yWY4u{;}$|Momaxv}$zNqPioY9F1 z$o8MuuA&dbhiyq2X|+uAk}{oIzA#0v)10;8EOj}wXL#SQtO-zmB?|f>Ue3@5wXXKg zMBAQa{*1P3y?MHpCorVtiNd}*NFl0AtNiIGZ=w2?B!r|o<3o^IqvJe=>U?&US?Y3L zhkuoxD=kS8z>x^ROFFmsoa0ijfZ9`6WZrm=(bS~;oJJF*{3jBla@G+pLleQ!Me$4?<6f^hV1h|(uN{d}F{(q;nrIIFw&w6I5r%Ju6V7PRc>4p< z3HW;^;4fbULFZih1h<`1NKP3Vex4M!vx1U;T|ooOjaPMZ0hWEJpQlB7i7xLfiV zYsn|wBV~R{<=0KFcxif4TRXX~#0X6NU(DNN|LRPxICi=p>gma7+mq`TX!~VMuE$%| z9gpffxqhx;hF58F{mPS{{M7VWCfE8KSibHRo?MS>Rr>#f$u*7RZ!o!Hg?nWuS1R=6 zig$7&kxq!DLLz;>Es<6kgDjpDy#rQ8>@c}n82GUwhomHaj=EHcpQAdv(6V>+Ca$4N+566J+LGhiIZa!immum}%b!?p&S%=%7N)Ijt4&)heqOq1ODm?; zqxn1YDEAZlR_fpdT8yx7Ef5e14i4KvtvI}F`_{Ddrt{jj8WYM(v~RI!U2WfLt9EjI zdIc<8sPunh3zyZKzoCVTept}IV9R;v&41s_WmW7uTZ$sXe#sUtpK7cZUXpi7*RM^E zYfM@j7;i&!oamo25e4p<8K!Ln_&Tw1S@Y(c*eWB}-wjpv!82*7HfFuqev zf73`q&uI@}tVAMSfyFSamB(0K80d|;@+c|2N4e8iAu(Gk;!kLP0GCI!faN|4DgB}F z?x*FLW8W%VYROR@vB7aLnswVIqezlHi#aPzL1$RvCC{QT&*JlgJ@YyGs8#q2MU|ss zYZ68@Tt^5fuSDmxSBSZu2v3SY5)0El>yWalGSq#`NQ7;B;WY}QiPiBR%Kr|bF(`jWV zQz7Rl>TNNwECYzQ{I~`9EPG+(LeP5st5d99?X7#iugk##2C!(}v@W2Fdl;%Z3hAxt zs8*yEMg-`_n<5xg^oZS|Wxuplz>-w^olwg(kmE;ZE}&4mfcLZ$!`6G_{-@(81bwmZ ze2;Z2sOGwDF*aV8L3KfQ!-noQo9+l#%?NrNNkyre)-4jm(x=RT#eL>b+gNkU$@t`oTVvvw2 zpTYSQv0$fn4TzaS)bD3NmZl?__4FGRcUpJ0Rp|Mm{NfGwaLq9on7M zwVa%A7UH5m@R{T75)y0RJ;%qf#z8q; zlgz0vt=FG`8Q4lG(%PO5E?!f-C|&M^zHl{Wp$mJJ^&|;4H;wJ^VHx!Z)T?d&UQvH_kh{&qx@uunQA{4#rR)cR^wZq;BM#d`82K1g|(+c{>^GR22>)l7@03 zw?BdXeRrz&@?W=yR=HjLwN+39PqT&^_6k|~13_!KmmPQrVki65H_^MD538gxdE7Sg z;kOH`0zfh=GGLFCo*zf#qW|Ki%aRrUn(BVe?2#moX$_QZrql2`dmNp5)uo9*_R9L4 zDQ~m`gZy;vjY{m7&VqFmDh}WP`Dd6pPIknBd(`aYem|_JFWPSYfF&E;ky6hPQqg`S7zEhS3$hHflg9 zs#P;0EbW- z!yPT|7h64L!~&rHTk5!q92@4sjdHp_Gdtiw6_X@KbASfarhO_-0#*+^Aup~)o~{rb zYOFetL&R-CZ;yUBU#TKFPm4Mrsm+oNYI^aX*EN0P1=oZ+u|ZAGHZ_eexF%Kt8`Si~ z%czOTPuCJuuQ!|oF_TeHflrU>RHJ({(;JG60%}_YMbQ`jQ#BNq*Vq0Mporz*0^51!i|Zi! z652ubwjqvof+4jbwXbBnV(ioQ-jasafTabW?~N@#~Uv=pWSEkX*+#`GPP5$%QQRU^vcsMox^9}r*R}#3p-yAexVoglHern zVsYSX|D9c4G6g>N>npnJ=`*k}5EFJah@V4jR)iFkpm>5D!;cpiTP{-KlPWPhSBZz} z5|V$E__#{Ut}XGYUn3Q}mD~7CYD0345`U?0^A}V?@{AH+Qi*09I`gh^{DD%DPqe{~ zFHpy7+OW>MBf=&T-yq(uwaU^}SC|YIstYG~oEUvi@tU6AJZ+Oyd7z{h^#i6)v+} zihC*iP9j>a4>TP6P096ch^Xvu5_@uWO$$1Ju1J+q%>F~?LY1$zLZ%Te+uF+5{HBHB z<}F*dSt2;^<#6|Tdr{e1+a>6RA-%hW)H*Fyjr*VcfS>1 z-yrKiQTc)ekHvwc%@wZTzZ}JV!8U^^twxHW&+_n6;Ni_ z5xS>(n-+aVbuzuaRjU}0kk`Y~O+`%*!eAr~gV`fA+v+y~=5FQGmE1)=?VNBmp^C+= z+#>lpp0p+wR9jL!KMqB594%_7YKIc2un(D`4mRm;@I=Z11f(ayYG6D?|8kx_M{QSr zcZJ14b?j-FL#OBeC(f3aoC&al_}FyZ9TzuHL=-K@f@+IqHN``#W^i7wcHCI8Qn`fCKX1hEB2ftVlpQ2(Hrf`jYbqJ62F)`QN7^an)K05~r z8govC8K6N-PBVu#?as34Y5u?Vf9<3W%XMw_+5vKj{8vI_lcoS&o+$7kJP zLss|KcgKo0*MFl1qSO(wqTQeIbbw%b0)h?N%?2!v*Fk$-Lh6}tsihg+2n}NJ&+>e# zas3bE)R1eCLqv}TUU7v-FTtzV%X;hn*G}pp_t(KnSSuX69S^lo z`az{Jd{^GTr|OJ4)$bf#$>MBF7w;tSFEYRycEhfb&#hpN2FN}p+0+im?II5u)IG&6 zAgmHOwZmFc8++iIdNHGsOTLuq)U3$vmvXKg6=Bt_1<|bn-BcnqgHC{ZbCz{F{D1BL zHb_cY&IQIAl@roZT#xm@A~wu~4hIiy$p?z|&6>KSXfv^@j!|F(66;JiqrjzLQ~)`L zp#U;*RbJ25O;Gr(U{Yni9XdZ4vI~Iqh~-V#ebOC8OqMQfbCUQSDeItSplPfi1}a^Q zpdda{B)|e%jw(37Gi;)}p}>szs)Go_-h}m!^g{~v$4S-_i;<>GdAaNkYZB4|`;Fx< zY=*$0Jg4}h?)tB5LprId@obm~3v8MQ-dPz~r}>d}2p@M0Z8XXVIueVVicxH7Me)X} z#qlX6F2>I#jJ@C=q25M{x5x(naKfqI-D#xO*2@ z^8nUMkdRP{caPN=yr72Mc2AdcO;um1UlkW~s`~xxkaxFLn|h{>w?{}%$A>oEoNaCW zZ`DgHeZ$Adob#e**>BU3+;v4m zmIi&*BTk{7;T^CK_4FIU526oRR6V`b_4Hhi_d$B9$D22ccLYV-^;x}PmYDQLA#_(! zG``WU<^S#OT;S}gs{4N)_ce28k{bvRk^pCJQ3B*KlgDH-yygrLh(Hn{fFhbqW^R(n zypnkYqCh5)Dy=A3X|=6dY^hk4O8c>ewp8QaN437N#Y)vGD7Lh<5?gF(i{}6Rt$og& zGm``q@$+y0fjj5yv-jD1?X}ll&%O64z}#S(mGsLu5B#usgxRD z7p+z1Qks5TC@Miy^U~xY7As6X5K59UNjd19xjOm4$M%iIlXpG5Z=E(b+cZRl6nP4{km_(8aW_zd8*@RTpCrfO1vg_1AdpouOUbcY40i86AxZ=mgNSssf2}x+&j&saX zc89fiR4m9xpB$`qdpvGQi}P3h?amud7??L=*E*dSLX8i} zhG>buA$}qof?VPcNjcuIQ+(|Wvwx6WPSn!_No!fJF1!e*a^HbKGk2c`Jn{)HBHl(t zkvW0bFl%VY4!xVM+tm#U9drlVFatsgu@v?zVxWjpm3@H}3Cso20VtYoF_^+5iR*&~ z_JVlj6=ow%Yb{)-k7dJ57_TLsM=YB|7xV%Huukv5GZH;FIqgnDPs71S@x*m#8M0TG z8~|cCNqyKVKWhy?vKnxlq=udRFU)$Vf&&$%KvCK$<_1xM3)4r<+ThTbomc{rC1~63 zyIqm#-YcJpn1~RNEdd-Ex~Nn6XTFk9c|4bs1Sb2TSWHE(kq z*~9{tIq6ePEgMme%GTk%Ix{aFa?K``GjOH8>12-buQx-}PKFieyNE=#l55FfKA&P< zH6w|n3fAd{<5Q~|r-G=eDWKmMV_|C`;0CJ3HVJ^G#b#G~?hs?76?{W8z4D#T3Rl7tu-vX~}?+NEA*mw(`4Vl@uw8NVI~X6)eTa>3GFM9>**4 z`I-7Vu1rqM&Y3SkSN1Ud|{^Hue8`sUb;7}y0eqn+$2#cl0Je|VWu_| z#GAii)SPP4Lf=pJhBR-vl76z%KTZ8MY*syb#YFb+7QE#3|Lau!sdmHc%*T-!5~Rz=WHp(k+(_9q<%XSd+@>nlEK8w% zm~zu(sf-5JjB@jH!Tb*m@}Gv3Tg8EXrWf+@?A_Q9jq992^L(@lh7Mt4=k}Ns_^H~3 zO|?pKU%fLbE)dK%Jzf}zQNCUnTFj17b2=)fLh|8W@zZR9*_KL`#v=x?KE~;w^UV&O z?tn-!icBO72EHVW*)4UR2G2+9%A16tz|OK03w%?|Jh7<|IT}|?1(G44E=ypOi7c^C zYi%?&A|vyh9uXuOzAx3?DYjW{Kyg9^Cry?~Pl~_)Pk->80^+=kVA60QoGO3jm#?%E z<{8dPyJ@OY66~F+F`0>mPCwPg*G04CO(-2sggV6s6iz8UhCOL5KXIl1ZI%8`ke(e! zj5(jm=v<248QPIV&JkF(ilAH6<+S?&OaQw`E2K>3yZWkHVRV!ljTUysoz`WmJ{fDv zIP!&=eH5K*m}el40XNV@wA$p)ANQF+Q{bV(GlRL+A6OX@b@U;~*y|6&hZms7VeiSOv+RTA-sdo3*%U(gs5d!?JZL>ZIBPnkai_z3Q>qj7?tm zBVT&O&oHybrIXE(wNM124}6 z&YFl<>oU99Qb_5#Jb>dcsW}Z2fXsZ*Y!wS+<&pR~0)e6PWB(~HlSw3e2%{IRX_5HPY9b{4(-+IOoIh_IS4KfTJ=HEGBa;s&Dd zGJWWryK11An8%kLO_)Gg-{LW?B$v-wy^e|SvO+psDBuRiJ_!kqsJ@yuN9;i#Z$yw) zp7fdcx^cBB9+TYXDz4^`NS9yvdsXpGe}4HpEx~MO&f}Kl`c`z3g z0RrsYOLXP+fh+hHjFpu@gSw_@|1PaY<;2t2Er0aH9Y0c)Vn)NC2 zlwY+*Ax0)eF23U(hRUjUMMO65ZBT@Z3f$lamCyUZ)LfEdKzUE7tY7&y;|{`Q)F}A{ zn`ms-+fxns97TM9Vd86Td{*?ix4TyGUqpPTBGeumX+99WV^2kWme^5<{!Rfy_W{-4Q)PjhO~X1mt{}+hL0t*@ zg?%0zf&D5~S9=TM;rFD3>7^&`fqg<**A&R^;Xl)W!g@#eJK@ImCAr!Z_{V)nrgeUTV$sOY*jGS=xb<>`^;O4Z;I$(qie(l*f! zaUy#r6pNrdM^J=Z;Y(sify1g0;V^CC2h0aCB9(cf{t{saeQuCg_q(XpeIq%vdw{f6 zOJ01B8q^=b%{<}1z&>4KT;iQB1LWPyU5giX0nk4~*lUwHWqee8=b@wu?_z53`H*-h zpP^UzMo1KdFUzSHhf|XlkQ#D5Fm+!u(0*&ni1r8d4 z2t@Y2`9nppKxA(0>1}I`OxkMZ{rcO+z16b-(g1E(k(B%vgcB{0SDl?uN_Eyid=e2? z@m;=&CIzc75DBBA1ot4=xo$zVpuuBDS~SZ9NkVch4M{yMuxlsHn+!HOD*mCzM&SSv!#NIn=tT)C?Xw{0>wx>XW|D0iMD3N?>Crqr|~f3 z*vf0+iIEE45h#}7i+Pgc^UjC|G#Jzo;gnC+v+RL(`TmX*-B0?J@2IqsrouYX6e>2> zg-A`MDK>4&3E|&hZMTPqdYCN6I^#on*PyOJDT>%|^W z;@%`j*Ltysl=x7Rqiem`K_xzt%|^X;*&{^uJvM%De?IvN7s6>$CY?A$?tL_k>u!F zFLp?YCzBjq>&2c`;(JMsuJvM*SiJEwNsg}dVz(>jxgZ%t$rx0=;mbNo8bp^3x>E5I1!n(c z;B`{LMsS)`z?w|Q4ynL)1Ib2{NQU!t9AtH-V z)!+#C24=M>WWFtZ5OU@DuMq(7Lm5Z zbMaLB!nzB}LRKOa7VEH929GfQ(6tMg(YzL63(E6qx~5W|`BPG-iVS(`GA+$$9lGUP zj8tI@(+qZfB$ui<5mY6CM@N;FWTfMrP&6kv4H8nrY{v4Sc?s4+FNNj3l_)T7WIdGo*` z3Z4dxal)fuU$zvfF>1V89`T#@nU#``c~)K0H~GxAEI=R-2Tjs1E(GIru{C3EzUe!l z3Uf0np(E(T>fyoR)9lY>&K*#`qiDp8FB>Lo+I=9F={u|*lVyTU3|)2M2$m^uWHC&! zOjEi|?RG3vFaP{lX3zy2NSG$bp-F6%gh&!A2P%L%IJ5#T2-YBpV=>NPiXlEPc_3}9oQ!dE_djUZKerIsWL|_T~G8m4+yvt@{ zg8})<&3BZTC5cf|kB+3F7HBxpA((>b0}ue75Bc~L%<48#JH!jk5KY~tEkW!BU8$^* zKwzpN7qRxMfy94O2YNy3K!MCD0)TY~2(H(Zi^@li7NMDx_;C`_=Kzb?t9;QP(7;NQ zp@OuhgiV}ZVIOFb@G=fWBcSgKzME_^Q1lAHAI(%n0H|&LY{?p=$}v6Xu&KIpQggFz z>t{p@^HdXE&PmO8A<$jqIWO<<2x$@*_ld?mi9ddcr)YkB}D`4+4t zA(NIR6JS7WX%Ng&K#i2#va~2gQDRRlW7L;%R0~NXFLj^N<8YEZhzo|NkBH&m*gk2GydeX zzL$?b%Co1Z=$#cpM(rud6JFHX8_y^{C3`KS(81(E7c^UBM;p<=0JpIP7q#00=Zq)? z*~(UcbcR#|?R|3uPoJnm%-7L>GGD4;ZeKb{qzR~>l{voZ&2zMx=+GAWFtT%boYqV` zEan(ce+hx$p^S3OO#8?-QCybMh?!2Q9xUVs38>^+s={?(cX_t3f+x}=?G22U8{JLh z?Jgh3ZG5t__YCm&w6zP!72D0lH}1AYVN1MR9I)DDPd&rmT`p5b8N}tvXK?S{Q0!_n z4ifhoC`g~{N%>Tj!&Q2W?50e1Sxc5En|kUvdR3&&!XV950e1`GE&1?{EK{^scb46C zz^>3@avdn2taWH~uu_#u>N5^bbuB0TYa#?Ub-TxKz*Msy?kpb;gM#~PSb}>=3lM7) z8+A*`7Qn(nh`;zB2f-^K+PW>Y{yF4{{jhY6LDfbE6NDPsyu~I>c|?bVIkXfI2VJNj zkSsCvpi67Da|}M0d>S#ewH?kzC=$rl#D+Gc$a2wZ;u7=XFE~K7a}n?yAcU(;Mb-gs zQzbvHl0cR%=@#Ex8S3oxPNGLEcgFWnRFI27@aH7WBc>dr(@wM#{7 z-lK4d7j=3ax?>on(fd)u>TnU4(&{kcA_mhQwBmf%r}*M~esEAYo#PQa5n5a0k2x5* zUzy<4meAnW&J@;O9cH0JbWVtNA3kQZQH#O1Bzzt%f@0v6i3ufWrA(F9=EaYz4PT?V z(6yo3v{0see^6h8M0YE{ zu_L7qn+98+x_xin77SO%CEv99fZ@+!6GP#eJ6v{h>JnGp2&DW}CU z=l+%l3lPLQ3Cq_$Ag3`i;2F&n_GFfPs+m4%4-(DvdnD|Gr{B!EokTEnF$GhOP-QCb zXTFLP!Xe=^Nz!xyc44C!@u#x0@_T`Fk*WVwxV2h<+jFzB1zyUhoS|mEUXQ&m#;=`( zza$JR1}(J1?)9dowLc}CJ|x;5V#|?j})avEIDu+B;miH#H}Oe6R2t~ z5@*$lb}?vM-Y&C-&>U}44-6AN6bD*~6l&!lMw5F#YEg4AS6P3^wfM1rJ?Jg-*x`SU zC%m&5{cAj7K30q3h@xp73+ccM^{sovM1qt>LW*i@tvboc?YT;?WTJBs5NQ{r9;IC{ zfoPB@{E6Z<)dgTuTMnr|X(ysO@X<`5g@(i2CZYwiGYy`#-Day`~ zWG^NIWm+$qpEM}SE1wIxwJAijp)Y-xzY}t0)NISHw&h7k6{^3+o~O;Wi@4i}(5ZW*DNj0hd1 zK^v|IT%=81VJUER%qS?v*&ILm?_#&okZ*rRccm$v zLR2BQXcL`=cI7gN&yMeg(Yp=NWR=+4Kb3WFJ)L7O0FFYt7Etvesgyz0-i^SEM?$pd8 z-KjN=Xncs`KU;%${r6AR;5`(#27gen9qn$aF~CqliEVKHCAzDisQZ^Bt5OLpfNuGB zS%vCYFN}!+=SU854TPSu$;+y`cKiWF;B7gaLq!&@!Fod&aTIDpFk*YX^wbd12s_xK zU2T)Hm~DTZP)p%T*hJwLzF$Q}WmVJgQSBI7>o?A9!X%8sd+oK#27z zP72il2Ruyx!1UHrcFVd^{_a{gYV6g{4yiYpOPb`GHp%S~O^P9d!MtXl=gui1vW$*E z3K2s*Bj;S@E)8h@P9TW8P*>1401+0f=n0%GT`bYcR{1zwyTBG@4T#eO z@`AH?-hmHEx^HjG`Ljnyq6lW%NC=Ncjh&gBVqS|EbO97a;24HR5Udd498Xa^yaI%r zKm%<$!U55d$e1#6WuRy}Er6~P0FC8RPurVbleG~Q*3H&e0VC~6IQo<*Us~6*otBJ) zHDOq*Ag^s&PZI!BNJnd)YPLKX{%;L$ES-ecBk@8A#1k>RWj0j0)F#m9J zTY1jsce^CBNBJt!YKxxwqu~}kb0x~w{62y@f{MX-Nt%3AFs&4T>f4~4r zlT928sZAf6XCa*CS-_zHG;%ID{i^O)5Tly%CQw(#n?Q526pzu|YAVE!@lv*CO4elJ zMB>L&e#7IVnh7p%i zV8I`gN;^b&LdDYCXh!u{(NAq!q>Cjq_b8ViZvpWM05EgrF-uZ45PsN21x}k+h=_(0 zAiOLPQbOQgjS6)v+zDkGc9_ieiPi4tmz=+Oo`8deP<6%h`Uc3#OR$u8xB&{7O~BmM z#s*Gwt2Uv<#D^3;jkq=XU%9lh0eY#kfh3%-g~+`l3Uv_RbJ<;m9TI1NDeC!gMjW&V97Na3*YG z1W{A$u}0pOZD=&jNKD2OqDcE?aSAAK6u)s@Q3XO&KrzP3{(yl?d_xi-lKR>6svQgC znR68c@h5-i6ch9&fW{86fyXRWUAA-2Y=S7n2i^V1cb|RJo4@mcA3p7sKN@7up$yOn z5L+0$I=KpbNNBMcYJp4IIdmt z_`Xc$@4xjxX|Tl|G1knKmha>;ABZ}pl2&Ef4E!ggy6LyGRfsXJZ zVh~83xudvF`D=Oe;nS2%K*k<(7v!laPQNVDj>9M(SsA+c-t}K-e|bsX4yF^+YTkG} zZ-RC9W6qi{B^=$+DY5H%Co!be%5s z#~YgQNMa$=u1WpJrI?5-=Hq6RQzXHR;tIzl#nZ+qdkAik_dU-8)i8|N2q#>l!DV#b zTQ60zYr|-BvlQbH7UFVSY1@(Ao%>$V3|SC!GEg^gyk63Xw6Nw9AT*MT9ZyFx5R-d( zbKarmae9^F#*QnDx9pDZ*>_2EgKPDkee0VQp$EFtT>DMZ84E;};^9lC!D+=pYr3fJ ztL+prLh!EpmYtl%S=R)cbuf+Cwq*$Q7L(8pA35WaQ9PIhHJBP&pi^riT?Xj>15x7v zJC?~DMpB>>TNUat8$NMn^kdHX0MAH zk(d`-@aGfwxTA&zF>HkkILVkSkb(-*ZM-k_&`9z$ehY8LGcphcPF?i$c{4C>J{oK7 zVHKB_d_)7DJ9p4RP5Er7$qs4AC!r=zS(7-xdPzb}TuY1(mkOej=Sy6ui92|@BnYRm z$%mMa8Wn1iGR@qhmR5uceX86k4y=bsU)%%n7aWZapGKjyS;Iw~kSdB@ zRx5EU1#4r9hX(qph#M+7ypY%K=BU+$86!4X}lE( z!P(<;pa>gS{mDt$ydHN^T~5^n6PmLVOmxZUK;ers)3pwS@}#1q>Bu(ND2$hiD6Z+5 z60SKXgwr^>5Ql072`%8u4zGfh61mLc_ie@jQ`Eh zns?_d|H#t(_)Ir7h`iIP1su}u5QN*S6Q-XD`aCf-DXu(5K=Qij z=<*IBMlV}nc7beH=+^ju<66Q3p=14MY);!mRmkxwWq>ZG2vRp@?;L;JLqB~O=ppKe zN(Sk}P!B`*FiamJwsCE`hr~8roq0XvSZBSSPam?siap=%VIgkh7;rN)tV>nS)AY;0 z&qQN(ic6KHN|fVYzWe=;cw?!m0qZi~XQF^i%S`2~&?I`UGIN}|0g7}m02gOiaD(ST z=>b{CG>Pf}Ub6VJ1+)nUrDTN2Co06SE(bz$K>=DMEBi&)i8HR#S`p@e!#)^C4T705 zQzMif$^%a7O1PY^D>B12J=*8OVmzv6*@?X%R!hucXvMw-|I7>O$W#|E@Z_y+D@g%VKA#I1l$ zvkJA=eBGL3R-kXf(ph@s8tM0;6~0OW1Xa^NgGUUQKx8S%10GA(+9Lf zD&vmpcT~ZUA?S2C1$Cm9qkh?P4(&3e63B<)fYgg9+!PVft6sDn+LLR}X%M`u@;D%w z|JedTy@0vyN+^8O3!q0Qhm0fz0A^YZqJ0Tx2vtoK;ye#Tlv2G#Rnn7%8AbKD2m?qv zLG1v!ycs&Rj9lUkw;uWAGBvzQ^_p`FYLe+3L%4LjnTZZp!%dkRg^5WaYM6v#pe}i16@2Fw zrCf$jI48BZ!iw)U(C$^Bx))oMPB?pZY7O%|77O=8{B_CdHyK(PrLi>{OVvO zMV~z^QQpcOUhm6kBaAr$xEueSHJbZ!Wv;W-#`*X2VM{&2ZtbXa44?h;E)oMz;Q3tm@I^neMmj$xDyD6 zJ_@WfUqoBNp9MHV&U&1}pWsVi)qz5S>LF(4^W(|EBB&fJ!czjvBfRWjp=mq3HolA4 z24SF&2ueE_7bpSDHz;pHe=ya!1;Ri)iAauHaZLsW1&OdI9Ig19FKMLFC z20%AQw@x0g*Cwk|_qW_!EpH73kex){6?YF~_J^0c@A{%Qd5rv$ z@(&(3?^yYb%Afo{UtKnN9}|L4na^yX$qIbt!}q-GSS4mziF@w;-M5@V5k;7fR+Fq~ zH8uHSciqzFxZoUtW5`X$X8UKaxlU$N8pfHA-l3+}53tL=y15`fg z4P((CrCONE0O$f!!_NaE)&p`=!2(c5!J~sHv*$@~(2lOv5W=!~V>;$cnhT;kzvzkY z5(N>DmdAk50P8QrI0OwvxD4XEN#PpC`7*sSy=JX&yoI&wicT+N+Kgp@pzm0tp%V;Z z(?}I-G-oK%-$6M?8LJt!0H8f?l)MzN@}{ZYOgzP|j`9vFhzcUvvISe^zb@a!cD`FM zL_#DsY#QT)JLwm9Nf62>EFO0UGZ;-hxFrg@CnuxpG;y^2BG>J8|Jxrv_VM?;=g&X? ztNXgW${&jH>uVTf{M8d5_}ahR_t`i7yO(A>;vtNW`byV;WgPhmY#fNFbWw8c&=v0l zAV)W8wZW$QZz6I-vg;-u=SeblUi_GQ5qQoFH{KKlJfAAweg5rIkGq36((L)SAJEVT z-AmpG+{fR3p!?5%`_|ui>j!g_Wz|oIAAjJ%-+J&}KlHlySqE7x6XkBAjqlPQ_T2hA zE58yTYbbnRBcj}k{}a~RD%N%fk?euWgLV+|T!%+$q@h3!Rde;G7U`hFnW9Zz~d*g{e!r zJMIkW?5-9T$U7s`NgfaU-10V}%ey^5sLt8Ip!s!7t-;ZuMK2%+`im72jI@4A_*OKK zB{b&r#G*`;E}g`fs_%paq3=WsvP9kgv(wIMMuXC4T$r&9(zb0yOUUWXQ?*$!lyVe7 zO@M+G)f&^yk3Lni=}c%?4$S{i~b zI%yNy9Ec6TfF(C0vZx+A4Gq9D9kV)^B24$JlSzpdN~!^91_OB?jc_iuv{rw99U|Jo z#gVpUP+(B4b7RWeIRP8DnnM_LaOR11UM5G<4yDmd`5fLK28oeGXmTQ88ps7s55HP7OU&O}*$s z;73EK?+jrvDN2;qt;cXSTM&gc=}>@6jMrhxd48(R4Mx^eSANp3JGI<;9VT%T=u;T0 zz9Pmgc0FR1tD-c7v?ldshgrbKW|;ax%1UJpOw>Wj7Vs9GN0)Az-lR z$s;h29FSRY7tMY?;UrC?e7MNEN#mfrEAN`DblevB0?@8Zwx!f7_eK57fOP_#wb3z=**k?`6V$Xak zV&}!!oDBBR95Fl;_YbtLM4GCF!0Em^k2Vn>eMHE>TNM`3jApmqZIIfOFa2-ZV5 zL2Q9V286F4fI((ri#h_{WMBm#FD~w(!-YMg=HuHf)y4Vvj**$1DRA^Roj5$&n=~z5 zu?oMFJ5)M#5nRFK@Ozl2dry3L|8qrRs_wco-anZe_#6H!W}5Z0{jzAgd)^or&Byf8J5{%D<`Wr{vUN8z*$AWep8_Uogo2!pv4cLcTfy_ z;6blLZT32dDm@R*kRrB=&s>cn6X~LQ+fXC4_?jqcn8}h-KZBH+B!rgg^MahrB#~8+ zz>{_-l4du(HZvX|Jr7s`+kBsVA?7lV+0QmGldL#;W8VopE~&Vas6@X&u4u)RHUcwZ zTCRwsP0MIKRQY5teOCmQ32V)WfFyZ|qz0a!RGb_Ug<<}hs#npG`{gth?T+(%%B>7g z3g@&PD>i_(1r1zG?Xf9;t{60NIBe`oePe)F9x;#kTLnPtOSO#JP;C-6K$?xHhK^=- zwy;;FrJ0{;9N@FSATj}xmDO0mnl=ol>5_>j5GEr}pya82(L`Q54rH*B?u#Zw@a&5w z@)5d^lbHJtkF&Y|RHgf(Np8vq$UEi(w0HRYSE4eZ1VJQamNc~D;AbVYx;Xv6C^zdD z3V!l0$oYPlCbHK&Q$L3niwFicmEUoTw=4Gsa)A;(8Ql)EjEiIUV=GNgKH?o{nN6Ss z4vzlGCzGB*Z$+Vr|5aC%#_#J27Ri>EQeSHXwJ*unJAZQ$ve`H*HDwgfrtSVp^D09mzf?xOCvpL2^sQf_#jk83_tYqUdF_j z-5uTTd@hRb7eaJiK%R}S>hR$^x7=pkjgsDSay=^&u@a_dx2D-YR5tjUo_#PymW+>9 zJ|c&3ntflj5jML=>&%Egv0si=wtPlX$L-GU_HVZ4XWz!X(7o%nqy?c`B8I?|)W@QE z^R$R8@%?f;<@*(l$oI>Kl_<`z*1>XP$Jds4&LGvFTVs`^E#WwfG%q9<6wN6{%>!nK zMg?XCXDqT#iov$IqCrkvq)sYY&Bq*Tt!kJWMT*r&k=d@vsdiyW4Pr|X`H5@uNv#or z3za#oB#v4FeqqoR8p*?C0}K@AEhyzUm1o&1r%)P&t6G#xK2bY#VApHP5;78X5{f`- zN7_DN-AQtcTX3MP(IFMm;wL~nO!YJioyE_k4V-`)p@EST)})68s{l^lj++h(ROJyS zz{I8D+!Tx_>_NJsXMt-vtUv`deL}X;C-MY8rIP?A`kuw`d<84C9?FlOeG9$BF4n>k zt-%nwB&J!s&6M`kL(;n?tKukr?#;N@|I;T2=;C+Lfi(4re0)cm{EY9>d7WnC#gUN~ z)v^{-x7>)V)DSlo!R6cn^(ub+3yqiX^iRIuI1m>u+s*Bd?fH8SHD03B1Me;m#G~tU zJ9&uPC$_u$$)%~F){cSrbN6nt#G%_d)(LPge$yL2?!{-tU)SZJAOGgm(% zd@wMv6+bmedQtq)elGU}@ng4f{cxb{vL{6h;$h*y{kg!uC6E8xwjE1|pxohvNkv+v zS}-918}(tQ&{c4YXkh9;$w9B`&019QlYhtLrdb z3)O5D3$;nE3sc2|7n`>P#3xUV!j;QRiLk|rh!e6(CiX~%EncPqefQ4X|V-Yw{I@98KA-K>>b{K zPV|Pj9fGT@Ma^v!4SZ7XHgwy|hny}r`PnjdzW>10?I!r}H*0H9U;(p+X*+$J@_ z0MmE;v?laOz)^50p{;7iE`fErQ?e?bu5GieCV7^*t#^7rY1-PhQnI$q;1ras!86H| zx9~di=7oS_asX1f8e$^z9b>IhK(lZoZIMM>Oe{jx1K-f7_>{boBtkpALe6^|YI2NQ zVUr^;DJ2KGkY)vld zd&*U)N8+M{@~iNOK0_+WNjwEZ1SJs1vV9*M!!^+`(s<`%FnSm7qR8&@8^a*H#kSY6 zY`&nFNgAd{2LU*&fvJdZ5w zc;m1lfT!3h3LITok6{C^r`*RjhJ)_$`9x4T$XGV+H8w6bn9( z_T7gSSdNOeBLoUou<<*dwoM1r!88{Xm<~Lr)_RMIksc%TM_paT-Zba}(~JEUW+o({1BIG+ zICX@J$AmLEx5O(6xe7s0-Wsxd7yZ`)aYojKt>Cumr!C3-+x=fXlmb^=QAlw#JrPyucx|8X6aKT8jtM)y59Xh45h7D&1iAg7{8uH&3X4 zUi^9C#;3{*ZnVtKGC#`ZjG37&WY*VjFvJ!jcrak&ve8zH$Hbn5MKZI4F87}Z39gdt z<_eSDTy37H^!@;!pcn{XwRp^WQ&Zd#G0(S?i|Xu*nDEFmVw!ybte*@sV=tFh@E^6Y z=h?^g;@grc4mOfymi0Rs;o8X+l!yHSaebJuJP5OIgUS2pZQ&O9ywcI_)zU3hg%3mB z7j7Yv-W|R1rYbAA8AYUS<2Cn_Te^kf4V&&KkDz&U`+=KoikK{{28hC2Zn}xBPUX7` zLD9)TqB-T$HCEg-*-&N7mnf{}Hfok`)c@46Y4<4WXITLm9|Y>X_wnfiN#)8P1>NWb z#If#wBSGROXdC&#OlZ=jz-U6|H%o*>rJHrX>HeF6-Fr247o&y)Xd{TY>mafGMov*g zgtq{zD6G_d!5gDOw}1Nq-02NmslKF3$u`Odf=vVuwQOR%xx5lNiJ~9nCRxCkyX9uI zgq&&mmFpxNQy+;iXE;4jg-leMS8lnPr+Scck3wFjQWXsaBzLz*1wiSRrwY9`d6f;S zDk=KqTMk;+;m{N13`GO+1yS>Yqo4{@GW88dLKVCt>{6FN7FCyoB{YYtn4_cw3bNmj zWql5lGY%pH-ZBgW1`2GfAlwOA2N;RGkcK4GrC_+D4^R?NQ#7B9u27jX^m4g?u{6xd zn>4vES;5U#0|5tp-CPY);2H!R^mhQwG#L=*%1bayhT^z};uhbqhYetZt3f@$s20^M zilen|01BN#aDcFn0`;n!ja$syZsY3#3ZVK>mV&#QMIK0PO@y*s$a%Zd`GF9jg&Cu= z@a#t_VC1PR5bIvCK;(rmFQFgy2+4{Qp=L>As^;CH#wbg?;dG|JWOm~GLH8nBf&?jF z&^ep@46;6Q5nNp<2X>^`ee<*~f=pPmU?Xty-r)Z^;Fom#-3Ynw0(!}MNd*gPV zuy$vHc5StUtLcJ!Y5y0hlyxlJ$EhZ0o<=?IJjE~ob zc8y2lBT-LZUvxwN_>O2~Pi=JD;K&W@w)S2zw!L?7WURKicSq0gaBVQTZ0_$Hs}1*U z-qq7PP#f>-8SfeIAF7Q^jE|4@43BNAjgF6Orn=GE*jUfd$i(nCRc&%5whoT;4yg3l zc+b$Tsps8#K3dz;Kh{4oyrb5?eaHBPBmKjDwc(K=&-04>^v~y4;@7~hkzbi#Hm`|v zGrw8fhQ6Fr(Xh#%sM3W8))3TYH8Fy7|3wqBgoW z>BrWd!JgsXTJOj(ee4~#?hVxT4vlTMKJy5;(_HlrRP_%hhytGz!+m4w&W)bY_!`mYR@5>aH2jDql?{^5yT5L?aN+k>J0?V~&yuHCS?cciaI9sR=$=J0sGM$LEkMeUpS)W%18w(?FtkM`EauA10NoBe&;d&V{o_7C-sUs>BV zxOW58&$Jku=L3$pw0|otjm7ERm9?>5BXo!g zhR4S?_Dqb`)(vkPNgq!P@6w|__m|1iKe*XV0C0E$KhboKpXlQxexie(=%W6yU4uP) zqyC{?gS8=QW)6-FN29fIuvhDgdWIeCL=(e|U#)k%);G9!*(e0wyKLpwHEliZwVu_> zS9SEPS-HBlYE5tZs^!aj`&M8P#lZS86A>FC(DY_NapXb*(bGYCByEkH-mo=Cxa zI;?n?0n48<88zQh>e&qSbapcNCkDsIIy+NR-t3-qc3zmwArL@`bEm(ywSSlfJ3G7W zdj9lGA($F39^Nzk`HO6;{u(znLY=0FfkA3qu(h?CiAR@9aE+Jf_#eWEU*isXqgO^-hVe zQ`E@wSlzkU%?f}$Mqi+^gr1LDhG{civk~3aKcl}xJ>xq%J16>w$J>^7bar0tZjRB+ zx~WNf1mcn|iz!1Ejt!?H&^t0p^CLE)J3HOPK6j#h<@x-K*K6MBcQQZms|EbBGGHNT z808=nW($=9!)VX0MQ3h_m`_ZjEfYLa#*xw71(h@w|LY`z&T4rK+V0h$)VOoH<506vJ;wYW65#CDBL7ldStBSM?W=M@FMvJ);I)U#+))sArI(k`s?n zMttOHt|8ZKeT-Ff2G4RO2cxSme&8;&g)cW`w1u&WttJSks|*u^gAlaQf|HYD%f?3r zB*XiAxlQJhF_M%mh?QJNYp7Y?1^iCu=UCxp1W>rLIG~*q;kUg(N=gTTXn)_)BJ=HCnP!rZK~94W{?m8JNkF+lAegTI;R#@2T~9-uD_R#vZCC(mLC@N>lCPD$Vo?u6eFkaup{^ zX;rLr%<9Rr_2Uh>mqz-b z`JCcO>C-dmGU+oj=|!YPCu#Y%8Tm>}Ye@4~&B#}JQ6_&SY4cqq}h&EY5Akl^k&lXHKpkx(%Js(Bb^@0vg{-HV%o`$)=T)VqTT zxY*S+Ji=pVWjHDr^S*O@#oLsD>RzA{mX3gDRKC0E0Hr1 z*9i{03ZJ4uIYm&fVq#7fQjEj!4Qv_luiGX|?j^g&6W zP2_2oT!`a%WE`b%6jc<3+c{by=&Li@MHyM5Z{jLRJEJUMIM3$0$kz-{%f0yVPQ58J zJe+b?EK96pka>ku@npD5r%i|0JN+aF?nKT(q^ECbbomIvfY=Pq&*+lc__%y-t^uSJY=W6EGGqm4Nk*tB z>W13jAdD&HYCVLxuxy7$h`W^2SBP*qoaGxW>@9?ibxT4=trp4TB2)f z(GCET=}IV1-52gr2#jxA)IzBX@mnkOvN#&*84#k!cYsjiI%6YpJYw%e#6IM2Q!69< z8C|*&`Y6F%UUGUSz>!9uwk&kE`v7z&JwkIz){%bVyIuTZe%<_>iX(r=plHWDg@hzG zn^pt%6xXXKoJm#dgM*Y#aXkK5??Vx{8YQj528|P%&xFD(1i7Dwx(Q?dBbH(Cl?yc2nC&HFmb!_0N^P*EL zHdZOT=g)v&TD16Pn*X{a{gTty5Ugf&FWmA(&rl6W znALS2=D1yF>PTh+yp#9kAxYmK>)(!Goj^r^5=r z%0j8xxpm>x`&TC5A$NO*k~*(Sn{))0Je{IAyg!Pa3b|>oJ#Q>>`pHGp+%KKcT|Aep z+K}kg66){gne==Bgy-O3uE)Toqed#?Jxm$tl7G!rI*uzVwNosNAssP=HhPMD;Ug_) zl42W+6#AxgRc#PjW4FWbnZHiYd6+&uP0ABa+;^r5|M0z z&U%pNya+vyxW#!lQdYXp-CU)+r|)!|f1+Nc_aXAt*GmX|kM{T0vHE$QiigrzG zm1L?T{YmnrM_(JSdCu1L>#|5DOfe5pjX{&nPEwPWzA9itmZZoqJ0 z{XpE;ccG&kX9k;Uu^lKqD=2Y3*{_pxUVg_E^K);kxdXzDZjvX-hPEAy>`wtCDLkSH(kiaurXK+^h*Fsm+))o{XYso5-qZ zUXIc6&OzQind`K9LHbFaOJC^j8OKVsTD|9Zrqx49eQx+21G8fE-%E9Pd1EwIG9-+R zCC=h=U*`HC+iDZ{h$wFae9bgT(x0+1oK7_Ky@4HiF&q4N=X45l>5fUS^5DwXwT@VQ_qHab}g;HD2?@o z9XNCeGa;(w)EyLW#C0q~6AqoJ)2dr)6Oa~Bp-?j?7!IwHLh0PmFLPh&u2f((Yt2Zz z=c$xj%sJ;u>61x2(q_ezBwZ;5D|8D=(qWxIw~}6Ae@qlFO|!%*(tBrC z*RyJ4y*&tmG0`V#$kL0G6)#S8t#?q6n82o8gV*(PsA4U83b~BqAla26E))T zTekHKj_C&Z!&AxnEzj4AdS9>OjKycLmcU*-2z}`$cQl zu08Xotsbz>c|{ib@+PhnqkyB< zItU>xg{x^f%oI(csvrYIU`e$vUjIXH=&LQ+Ii_i#MQ*K2SJu7#%UC64G=v@qA6ZoK zwle2l#_t3?uYV=aYnbtL!kngiIMX*)@P>T7`j;txbe}kZqa`~~72>NdT(@p!m#3ik zb?OqA{yFtLiHOnOnQ$oDIh~&@`!szs_ti{#Klk!_bvyqiGkF`+foSttPMZ8Y;AHI5 z(4Dt~c3wyOU*#t_>&Ck=cGRlpiHkkPyJzu^{=MM%F!F!H$baPJnUY70{EP4Hkx{3* z?-}T>Kim16e}#KRA10(T)?JZD@iwy*$ocB0-WBCYZ%*s_WA39&`a$j$Sxobl7R{&W z|KMJ_a+-dQ`(-oI(pS^`A8{{RB%7A*lBSPGKrWq;)(EEgbIH%96$#3gS2~;DOj^1` z`hL@l{Mj?obCUGBdVmC9j24CT)kZ5zoc^2Ebrxl%E2rsm(s$Fih=lIg-l4523e-fT zAL6<6n3;8_I^>a5G39=?@Qy`$%(L-Ql5IU$di+vHv!4J)(OpaR7fyfK%gSi zUeemOe8tLD?W;T1bj95lUUc!=OD_mY%J>eYG9^ zI|l}bcI_UWUT#BD@LEb*xoz8B$>9;oj*U<3x#7mWub*n>?8Qr${cJTXT{czQi>c|w zyff9}lFdKc`)4oHZm;M4=W(DyE?+2?8XC(@hYvT;nq8T5-0^cyIMKaz(!7)BFIafW zsi#FYl82L_JiG+NsDvBQ!-pBu&U4N^eE7WcFK{pZ@B3?zJMyF}=OrDOhMy_yfEQOF zi=C9t9nt*n!@yzB*W^_1>%*9#j%mH0zrgixiZ-VAe&wqFmHnUUZUTPOj9yRm*Amv~OzX%QIA3pq3(*FgA|No(XdVlzWpR)gl|EKr=p=A~CMt&Xqo<%l4#P3Fa&#vUR zg5Pp}ZTwpKQAVqrQh&rX++WKt`|MSux5yPh*zAgS=dW2Dp(AlGf5+uqrR$_uvwF8o zrEer(zOOX@#VaAsmTOz8FhgsyVkjOthaP44Vz;O zUV9sB^8oqMv9C<@%fx+xRo1_4ueo=uAJLAHkpUOw>~TFyLURh%euz4>E@fsL_NL0w z&Qp|;t}bg%dTE+o%fOwMNnb)*I~!zSX_cLDr5L>MmeR%+?tA#jGo}2k{CfFi%k+`1 z@!Q5P#rJmZckt_<@qA~J=3?|CIMcouo(yB7JvXphtCzmu?CD{Ii9jYn0?I$q;Z_rV zgsa}q(+~OHdXiv=g^X<>;|p$?IVEoTe}3kXg@G|4#WSO^ z9U~KL48a|A?s+oLqD7d?TYAQ~MC{&zMr})=J-m~;q%T+!&P(XdamlvU*H^- z?w`e{;-E%$&ZRjm4};uWOHf=sb9|X2@@spEIdDS?lonhFKNiilgq&q4a#eO^iuuxrTi>Und!_)Xx;hTWX5YjmBqPTB;2`t&Ri-R@ME2h z$2g3!E=){ltDHk)oz4pic0sPKFpyW&737KMeV%u@c;DkH9`IAl_0AIS=-)Z#xbaA@ zjd|1uCaKEP~aJ7ERJ?1<#%%p$xrLqLcl1!e+zk#lBc@TxweP<8~EMGFVep^ zG%jvj%q6-xx_MFKqQ#A`vGVDh+Dp0DrbJj@01v?~V}Kyq)*D+}TiaTfx2|Yi*}AH= zy>)eKN9&rl*0#2`c3@?JHKV=vc94W$VhemCIMISh;fLs+H|4SFh|?xn@=CsR7d=y|ulqeR=ze_Lc3c+S}V#w|BI!S>3w2ZT0fiD^{;uy=ry)>eZ_| zR}XAha*}*eRa#$KeqB=DweO&t3NRaG zQ;9{Jy$7g6{)ta>6<s-ZUApwO<`+o@k%>NyDQHBufQz{oxH!*gT!pVYl6m>e`Ho)1LnRNl68#?*m)0;X z(#@I9oua`|m}CpO4|PbE4|5f5jdImE&a88UXBzjk4awXk{HCHF3Q0Kb#ctPg*o~ts zRy$dEZjn z*i|u~-+b=d`FVbr&lfnrrBEt1%xPR$KDlXrb7fZZ>|7;0?zrO{PV`U8&GSzV=NA|F z3xm^6jKZ_SCFP}lYuFYn_wNgSFZe+2gQfop{yYDp;K$+NhWl^a`{uX&cI&mTdh;E3 zE&RJ#voE{+zn@#W?1JlGyZPG(-tyMB{mSqC!Jq!wr#}7Jzx?Kt-#zT*<{Wos+sf6Q z=bX3h6|X(;Rx&^Gr+@b8zx?8tp8T$tYo2Afo#$MgBXTSKR<~e8b zXx+81x&C#V`)Y4_+wbwpr#}0wC%=2BdCtY_`f8I0{_x?Ce(Wn>J@kXye(}xszVD+S z`_x~2@k?L(`lavu^Dlh*i(gu|e#5n|e%S=2)S-;^`*Ioa*TlW3Yryl*vHxB*a zhofV6j!*pB%a<;@@52v%>@U9b)o=Yq*E`_2?H5uitRpYl@}Wl{1!o|LNh8 z)#qK%eeqpyyK4KyXFmJLmmmAvfB5lXFWOwa^;@}HFDfm_73S>!(5%T1=1*(bzaTuh zR zxeLQ3p`V*mnBCNwJLP4YqoLf+mrZ^qf9nI`{KBn23SV73v0+}r+@`rrI}444`Gr>( z&(5!HT+9cr{IIROI5)pg4ktfE*0Q!M!pVC}=Z3SxbBi6Nv-7teo-?nsY|fIfWp>N# z$vbklzT@Qb3Af*!UzR_o7|fd2F!|Byc+=$H%x}t19?nmGtLb0g9jOAW0ja(M89yx-N4yDYyf*H~;Qc1368ni|@}&iwphuBo_j z-Rc$1D~d}?jr(7I<@!aXvre4<@`ZCxYFJML7d4+;Y%E+_I-_Btd_jCx;hcP9;gtnH zUkUS*Z{B+9rKQHn_r0!qak;V3e0*o2v3+swq{%-yx9_T^OB)*3UcBJa(pAmt_7~SS zo)TWNZgn`T)L2+kY~0^|^5ld5?B&h3{pPlb^5iFf`SRZ81IzCG@~xM=_fKwJQ#>no zec|PeYa18kkH7VS*VHb{ttrmw5)HiL+0uc(IjiBf|6%`%CE=W0Y5yI+lpDx5hYiKb zuWY%bVf@_5e{UQs?K)xYcth*(V&>c-rI>XHR}*NjN_j?C&~l zPG{af@c86^oOyY!F&Er6=c3EcoBTiL7W~}R`2{P3{j(P5`kJn3oc#TcQ<@j&8ld~a zMx3vGrf1=%QY*~GJ^AoE-IICyPvU%@a)4K49OaATDmdg+A zd}70fk(Q0`e)zo`y)X5=vi9ZozS8?z%az{aPh8ddM9bsLkOPNF=PBUN4Nio;P@1|+elctePW8{> z-6q~#MD^6lVEVaYP_|kH5{(8*FAUZIU)stk{-wT7EB5`8|4Kh7HkG#eK|{IlieLft z`TpuzJ}u_U{^4zO;@?zLo3W9frezRXxgJJOL zF3w`zmzRdE^eqU^@Gk`O0pHgs z`OEwj)XFiN^!u!!{NJU1FZlIxTkZ{h`|LC6 zWnw@btW2I-fHVS2i%?{LP^dS@7@i!_ow@6wlAi1oF37Eg3~1hK@Pi*R>QIA!7p>*|sBuxjMyU{lOF_2B7tVbD$`b*E zT3%nE0q_l_sVSd+Alp3ug4`>0zce_>qtCf~sT34X&D|Y(t8>ds{w)8*yg!?o=2$Ix oDAqqO=M{&F-j>NjZa>Z`OeN`W>F=G`m2cp8HNR#28agZg7hWN+>Hq)$ diff --git a/contracts/tokenomics/treasury/Cargo.toml b/contracts/tokenomics/treasury/Cargo.toml index e54e1622..f2911b55 100644 --- a/contracts/tokenomics/treasury/Cargo.toml +++ b/contracts/tokenomics/treasury/Cargo.toml @@ -13,7 +13,7 @@ crate-type = ["cdylib", "rlib"] backtraces = ["cosmwasm-std/backtraces"] [dependencies] -neutron_bindings = { package = "neutron-sdk", branch = "feat/NTRN-300-burn-fee-send-to-treasury", git = "https://github.com/neutron-org/neutron-sdk.git" } +neutron_bindings = { package = "neutron-sdk", git = "https://github.com/neutron-org/neutron-sdk.git" } cosmwasm-std = { version = "1.0" } cw-storage-plus = "1.0.1" schemars = "0.8.1" diff --git a/contracts/tokenomics/treasury/schema/execute_msg.json b/contracts/tokenomics/treasury/schema/execute_msg.json index 1370cc07..2bb9c2cc 100644 --- a/contracts/tokenomics/treasury/schema/execute_msg.json +++ b/contracts/tokenomics/treasury/schema/execute_msg.json @@ -72,6 +72,14 @@ "string", "null" ] + }, + "vesting_denominator": { + "type": [ + "integer", + "null" + ], + "format": "uint128", + "minimum": 0.0 } } } diff --git a/contracts/tokenomics/treasury/schema/instantiate_msg.json b/contracts/tokenomics/treasury/schema/instantiate_msg.json index 3b7a745e..34b790f2 100644 --- a/contracts/tokenomics/treasury/schema/instantiate_msg.json +++ b/contracts/tokenomics/treasury/schema/instantiate_msg.json @@ -9,7 +9,8 @@ "main_dao_address", "min_period", "reserve_contract", - "security_dao_address" + "security_dao_address", + "vesting_denominator" ], "properties": { "denom": { @@ -43,6 +44,12 @@ "security_dao_address": { "description": "Address of security DAO contract", "type": "string" + }, + "vesting_denominator": { + "description": "Vesting release function denominator", + "type": "integer", + "format": "uint128", + "minimum": 0.0 } }, "definitions": { diff --git a/contracts/tokenomics/treasury/src/contract.rs b/contracts/tokenomics/treasury/src/contract.rs index c6060526..312f0fcb 100644 --- a/contracts/tokenomics/treasury/src/contract.rs +++ b/contracts/tokenomics/treasury/src/contract.rs @@ -1,3 +1,4 @@ +use crate::distribution_params::DistributionParams; use crate::error::ContractError; #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; @@ -39,7 +40,6 @@ pub fn instantiate( main_dao_address: deps.api.addr_validate(&msg.main_dao_address)?, security_dao_address: deps.api.addr_validate(&msg.security_dao_address)?, vesting_denominator: msg.vesting_denominator, - owner: deps.api.addr_validate(&msg.owner)?, }; CONFIG.save(deps.storage, &config)?; TOTAL_DISTRIBUTED.save(deps.storage, &Uint128::zero())?; @@ -52,7 +52,7 @@ pub fn instantiate( } pub fn execute_pause( - deps: DepsMut, + deps: DepsMut, env: Env, sender: Addr, duration: u64, @@ -83,7 +83,10 @@ pub fn execute_pause( .add_attribute("paused_until_height", paused_until_height.to_string())) } -pub fn execute_unpause(deps: DepsMut, sender: Addr) -> Result { +pub fn execute_unpause( + deps: DepsMut, + sender: Addr, +) -> Result { let config: Config = CONFIG.load(deps.storage)?; can_unpause(&sender, &config.main_dao_address)?; @@ -95,7 +98,7 @@ pub fn execute_unpause(deps: DepsMut, sender: Addr) -> Result StdResult { +fn get_pause_info(deps: Deps, env: &Env) -> StdResult { Ok(match PAUSED_UNTIL.may_load(deps.storage)?.unwrap_or(None) { Some(paused_until_height) => { if env.block.height.ge(&paused_until_height) { @@ -153,12 +156,14 @@ pub fn execute( } => execute_update_config( deps, info, - distribution_rate, - min_period, distribution_contract, reserve_contract, security_dao_address, - vesting_denominator, + DistributionParams { + distribution_rate, + min_period, + vesting_denominator, + }, ), ExecuteMsg::Pause { duration } => execute_pause(deps, env, info.sender, duration), ExecuteMsg::Unpause {} => execute_unpause(deps, info.sender), @@ -191,19 +196,17 @@ pub fn execute_transfer_ownership( pub fn execute_update_config( deps: DepsMut, info: MessageInfo, - distribution_rate: Option, - min_period: Option, distribution_contract: Option, reserve_contract: Option, security_dao_address: Option, - vesting_denominator: Option, + distribution_params: DistributionParams, ) -> Result { let mut config: Config = CONFIG.load(deps.storage)?; if info.sender != config.main_dao_address { return Err(ContractError::Unauthorized {}); } - if let Some(min_period) = min_period { + if let Some(min_period) = distribution_params.min_period { config.min_period = min_period; } if let Some(distribution_contract) = distribution_contract { @@ -215,7 +218,7 @@ pub fn execute_update_config( if let Some(security_dao_address) = security_dao_address { config.security_dao_address = deps.api.addr_validate(security_dao_address.as_str())?; } - if let Some(distribution_rate) = distribution_rate { + if let Some(distribution_rate) = distribution_params.distribution_rate { if (distribution_rate > Decimal::one()) || (distribution_rate < Decimal::zero()) { return Err(ContractError::InvalidDistributionRate( "distribution_rate must be between 0 and 1".to_string(), @@ -223,7 +226,7 @@ pub fn execute_update_config( } config.distribution_rate = distribution_rate; } - if let Some(vesting_denominator) = vesting_denominator { + if let Some(vesting_denominator) = distribution_params.vesting_denominator { config.vesting_denominator = vesting_denominator; } @@ -242,7 +245,10 @@ pub fn execute_update_config( .add_attribute("owner", config.main_dao_address)) } -pub fn execute_distribute(deps: DepsMut, env: Env) -> StdResult { +pub fn execute_distribute( + deps: DepsMut, + env: Env, +) -> Result { let config: Config = CONFIG.load(deps.storage)?; let denom = config.denom.clone(); let current_time = env.block.time.seconds(); @@ -265,9 +271,7 @@ pub fn execute_distribute(deps: DepsMut, env: Env) -> StdResu let burned_coins_for_period = safe_burned_coins_for_period(burned_coins, last_burned_coins)?; if burned_coins_for_period == 0 { - return Err(StdError::GenericErr { - msg: "no coins were burned, nothing to distribute".to_string(), - }); + return Err(ContractError::NoBurnedCoins {}); } let balance_to_distribute = vesting_function( @@ -299,7 +303,7 @@ pub fn execute_distribute(deps: DepsMut, env: Env) -> StdResu //-------------------------------------------------------------------------------------------------- #[cfg_attr(not(feature = "library"), entry_point)] -pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { +pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { match msg { QueryMsg::Config {} => to_binary(&query_config(deps)?), QueryMsg::Stats {} => to_binary(&query_stats(deps)?), @@ -307,16 +311,16 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { } } -pub fn query_paused(deps: Deps, env: Env) -> StdResult { +pub fn query_paused(deps: Deps, env: Env) -> StdResult { to_binary(&get_pause_info(deps, &env)?) } -pub fn query_config(deps: Deps) -> StdResult { +pub fn query_config(deps: Deps) -> StdResult { let config = CONFIG.load(deps.storage)?; Ok(config) } -pub fn query_stats(deps: Deps) -> StdResult { +pub fn query_stats(deps: Deps) -> StdResult { let total_distributed = TOTAL_DISTRIBUTED.load(deps.storage)?; let total_reserved = TOTAL_RESERVED.load(deps.storage)?; let total_processed_burned_coins = LAST_BURNED_COINS_AMOUNT.load(deps.storage)?; diff --git a/contracts/tokenomics/treasury/src/distribution_params.rs b/contracts/tokenomics/treasury/src/distribution_params.rs new file mode 100644 index 00000000..6125e489 --- /dev/null +++ b/contracts/tokenomics/treasury/src/distribution_params.rs @@ -0,0 +1,7 @@ +use cosmwasm_std::Decimal; + +pub struct DistributionParams { + pub distribution_rate: Option, + pub min_period: Option, + pub vesting_denominator: Option, +} diff --git a/contracts/tokenomics/treasury/src/error.rs b/contracts/tokenomics/treasury/src/error.rs index 9654c4df..2a8c83a8 100644 --- a/contracts/tokenomics/treasury/src/error.rs +++ b/contracts/tokenomics/treasury/src/error.rs @@ -22,6 +22,9 @@ pub enum ContractError { #[error("Too soon to distribute")] TooSoonToDistribute {}, + #[error("no coins were burned, nothing to distribute")] + NoBurnedCoins {}, + #[error("Overflow")] OverflowError(#[from] OverflowError), } diff --git a/contracts/tokenomics/treasury/src/lib.rs b/contracts/tokenomics/treasury/src/lib.rs index b70c3292..273900d1 100644 --- a/contracts/tokenomics/treasury/src/lib.rs +++ b/contracts/tokenomics/treasury/src/lib.rs @@ -1,4 +1,5 @@ pub mod contract; +mod distribution_params; mod error; pub mod msg; pub mod state; diff --git a/contracts/tokenomics/treasury/src/msg.rs b/contracts/tokenomics/treasury/src/msg.rs index 0ef56488..4214a3c2 100644 --- a/contracts/tokenomics/treasury/src/msg.rs +++ b/contracts/tokenomics/treasury/src/msg.rs @@ -17,7 +17,7 @@ pub struct InstantiateMsg { pub reserve_contract: String, /// Address of security DAO contract pub security_dao_address: String, - /// Vesting release equation denominator + /// Vesting release function denominator pub vesting_denominator: u128, } diff --git a/contracts/tokenomics/treasury/src/state.rs b/contracts/tokenomics/treasury/src/state.rs index 8dcc6800..3430fd98 100644 --- a/contracts/tokenomics/treasury/src/state.rs +++ b/contracts/tokenomics/treasury/src/state.rs @@ -20,7 +20,8 @@ pub struct Config { /// Address of the security DAO contract pub security_dao_address: Addr, - pub owner: Addr, + + // Denomintator used int the vesting release function pub vesting_denominator: u128, } diff --git a/contracts/tokenomics/treasury/src/testing/mock_querier.rs b/contracts/tokenomics/treasury/src/testing/mock_querier.rs index fc834c2f..3ec8f14a 100644 --- a/contracts/tokenomics/treasury/src/testing/mock_querier.rs +++ b/contracts/tokenomics/treasury/src/testing/mock_querier.rs @@ -70,11 +70,8 @@ impl WasmMockQuerier { } } - pub fn set_total_burned_neutrons(&mut self, burned_neutrons: Vec) { - self.total_burned_neutrons = to_binary(&TotalBurnedNeutronsAmountResponse { - coins: burned_neutrons, - }) - .unwrap() + pub fn set_total_burned_neutrons(&mut self, coin: Coin) { + self.total_burned_neutrons = to_binary(&TotalBurnedNeutronsAmountResponse { coin }).unwrap() } pub fn set_total_burned_neutrons_error(&mut self, error_state: bool) { diff --git a/contracts/tokenomics/treasury/src/testing/tests.rs b/contracts/tokenomics/treasury/src/testing/tests.rs index d8056587..e40a87fe 100644 --- a/contracts/tokenomics/treasury/src/testing/tests.rs +++ b/contracts/tokenomics/treasury/src/testing/tests.rs @@ -3,7 +3,7 @@ use std::str::FromStr; use cosmwasm_std::{ coin, coins, from_binary, testing::{mock_env, mock_info}, - to_binary, BankMsg, Coin, CosmosMsg, Decimal, DepsMut, Uint128, WasmMsg, + to_binary, BankMsg, Coin, CosmosMsg, Decimal, DepsMut, StdError, Uint128, WasmMsg, }; use exec_control::pause::{PauseError, PauseInfoResponse}; use neutron_bindings::bindings::query::InterchainQueries; @@ -32,7 +32,6 @@ pub fn init_base_contract(deps: DepsMut, distribution_rate: & main_dao_address: "main_dao".to_string(), security_dao_address: "security_dao_address".to_string(), vesting_denominator: 100_000_000_000u128, - owner: "owner".to_string(), }; let info = mock_info("creator", &coins(2, DENOM)); instantiate(deps, mock_env(), info, msg).unwrap(); @@ -125,22 +124,12 @@ fn test_pause() { assert_eq!(pause_info, PauseInfoResponse::Unpaused {}); } -#[test] -fn test_collect_with_no_money() { - let mut deps = mock_dependencies(&[]); - init_base_contract(deps.as_mut(), "1"); - let msg = ExecuteMsg::Distribute {}; - let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); - assert!(res.is_err()); - assert_eq!(res.unwrap_err(), ContractError::NoFundsToDistribute {}); -} - #[test] fn test_distribute_success() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); init_base_contract(deps.as_mut(), "0.23"); deps.querier - .set_total_burned_neutrons(vec![coin(10000000, DENOM)]); + .set_total_burned_neutrons(coin(10000000, DENOM)); let msg = ExecuteMsg::Distribute {}; let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); assert!(res.is_ok()); @@ -178,7 +167,7 @@ fn test_burned_maximim_limit() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); init_base_contract(deps.as_mut(), "0.23"); deps.querier - .set_total_burned_neutrons(vec![coin(u32::MAX.into(), DENOM)]); + .set_total_burned_neutrons(coin(u32::MAX.into(), DENOM)); let msg = ExecuteMsg::Distribute {}; execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg).unwrap(); @@ -200,7 +189,7 @@ fn test_burned_maximim_limit_overflow() { let total_burned_neutrons = u128::from(u32::MAX) + 10000u128; deps.querier - .set_total_burned_neutrons(vec![coin(total_burned_neutrons, DENOM)]); + .set_total_burned_neutrons(coin(total_burned_neutrons, DENOM)); let msg = ExecuteMsg::Distribute {}; execute( deps.as_mut(), @@ -237,46 +226,42 @@ fn test_burned_maximim_limit_overflow() { } #[test] -fn test_zero_treasury_balance_error() { +fn test_collect_with_no_money() { let mut deps = mock_dependencies(&[]); - init_base_contract(deps.as_mut(), "0.0"); - deps.querier - .set_total_burned_neutrons(vec![coin(123, DENOM)]); + init_base_contract(deps.as_mut(), "1"); let msg = ExecuteMsg::Distribute {}; let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); - assert!(res.is_err()); - assert_eq!( - res.unwrap_err().to_string(), - "Generic error: no new funds to distribute" - ); + assert_eq!(res.unwrap_err(), ContractError::NoFundsToDistribute {}); } #[test] fn test_no_burned_coins_with_denom_error() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); init_base_contract(deps.as_mut(), "0.0"); - deps.querier.set_total_burned_neutrons(vec![]); + deps.querier.set_total_burned_neutrons_error(true); let msg = ExecuteMsg::Distribute {}; let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); assert!(res.is_err()); - assert_eq!(res.unwrap_err().to_string(), "Burned coins not found"); + assert_eq!( + res.unwrap_err(), + ContractError::Std(StdError::generic_err( + "Generic error: Querier contract error: Contract error" + )) + ); } #[test] fn test_no_burned_coins_for_period_error() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); init_base_contract(deps.as_mut(), "0.0"); - deps.querier.set_total_burned_neutrons(vec![coin(0, DENOM)]); + deps.querier.set_total_burned_neutrons(coin(0, DENOM)); let msg = ExecuteMsg::Distribute {}; let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); assert!(res.is_err()); - assert_eq!( - res.unwrap_err().to_string(), - "Generic error: no coins were burned, nothing to distribute" - ); + assert_eq!(res.unwrap_err(), ContractError::NoBurnedCoins {}); } #[test] @@ -284,7 +269,7 @@ fn test_distribute_zero_to_reserve() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); init_base_contract(deps.as_mut(), "1"); deps.querier - .set_total_burned_neutrons(vec![coin(10000000, DENOM)]); + .set_total_burned_neutrons(coin(10000000, DENOM)); let msg = ExecuteMsg::Distribute {}; let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); assert!(res.is_ok()); @@ -313,7 +298,7 @@ fn test_distribute_zero_to_distribution_contract() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); init_base_contract(deps.as_mut(), "0"); deps.querier - .set_total_burned_neutrons(vec![coin(10000000, DENOM)]); + .set_total_burned_neutrons(coin(10000000, DENOM)); let msg = ExecuteMsg::Distribute {}; let res = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg); assert!(res.is_ok()); diff --git a/contracts/tokenomics/treasury/src/vesting.rs b/contracts/tokenomics/treasury/src/vesting.rs index 494b2618..763cb49d 100644 --- a/contracts/tokenomics/treasury/src/vesting.rs +++ b/contracts/tokenomics/treasury/src/vesting.rs @@ -68,12 +68,11 @@ pub fn update_distribution_stats( } pub fn get_burned_coins(deps: Deps, denom: &String) -> StdResult { - let burned_coins = - query_total_burned_neutrons(deps).map_err(|_err| StdError::not_found("Burned coins"))?; - let burned_coin_with_denom = burned_coins.coins.iter().find(|coin| coin.denom == *denom); + let res = + query_total_burned_neutrons(deps).map_err(|err| StdError::generic_err(err.to_string()))?; - if let Some(burned_coin_with_denom) = burned_coin_with_denom { - return Ok(burned_coin_with_denom.amount); + if res.coin.denom == *denom { + return Ok(res.coin.amount); } Err(StdError::not_found("Burned coins")) @@ -137,30 +136,18 @@ mod test { fn test_get_burned_coins_single_coin() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); - deps.querier - .set_total_burned_neutrons(vec![coin(100, DENOM)]); + deps.querier.set_total_burned_neutrons(coin(100, DENOM)); let burned_tokens = get_burned_coins(deps.as_ref(), &DENOM.to_string()).unwrap(); assert_eq!(burned_tokens, Uint128::from(100u128)); } - #[test] - fn test_get_burned_coins_multi_coins() { - let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); - - deps.querier - .set_total_burned_neutrons(vec![coin(200, DENOM), coin(500, "custom_denom")]); - - let burned_tokens = get_burned_coins(deps.as_ref(), &DENOM.to_string()).unwrap(); - assert_eq!(burned_tokens, Uint128::from(200u128)); - } - #[test] fn test_get_burned_coins_not_supported_denom() { let mut deps = mock_dependencies(&[coin(1000000, DENOM)]); deps.querier - .set_total_burned_neutrons(vec![coin(100, "custom_denom")]); + .set_total_burned_neutrons(coin(100, "custom_denom")); let burned_tokens = get_burned_coins(deps.as_ref(), &DENOM.to_string()); assert_eq!( @@ -178,7 +165,9 @@ mod test { let burned_tokens = get_burned_coins(deps.as_ref(), &DENOM.to_string()); assert_eq!( burned_tokens.err(), - Some(StdError::not_found("Burned coins")) + Some(StdError::generic_err( + "Generic error: Querier contract error: Contract error" + )) ); deps.querier.set_total_burned_neutrons_error(false); From d90a465540d4c72b5b5e7896a07deb1d26cc0d8a Mon Sep 17 00:00:00 2001 From: Albert Andrejev Date: Fri, 13 Jan 2023 17:25:30 +0200 Subject: [PATCH 3/3] add config and init protection rules for config options --- contracts/tokenomics/treasury/src/contract.rs | 19 ++++++++++++++++++- contracts/tokenomics/treasury/src/error.rs | 3 +++ contracts/tokenomics/treasury/src/vesting.rs | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/contracts/tokenomics/treasury/src/contract.rs b/contracts/tokenomics/treasury/src/contract.rs index 312f0fcb..2038f592 100644 --- a/contracts/tokenomics/treasury/src/contract.rs +++ b/contracts/tokenomics/treasury/src/contract.rs @@ -30,7 +30,19 @@ pub fn instantiate( _env: Env, _info: MessageInfo, msg: InstantiateMsg, -) -> StdResult { +) -> Result { + if (msg.distribution_rate > Decimal::one()) || (msg.distribution_rate < Decimal::zero()) { + return Err(ContractError::InvalidDistributionRate( + "distribution_rate must be between 0 and 1".to_string(), + )); + } + + if msg.vesting_denominator == 0 { + return Err(ContractError::InvalidVestingDenominator( + "vesting_denominator must be more than zero".to_string(), + )); + } + let config = Config { denom: msg.denom, min_period: msg.min_period, @@ -227,6 +239,11 @@ pub fn execute_update_config( config.distribution_rate = distribution_rate; } if let Some(vesting_denominator) = distribution_params.vesting_denominator { + if vesting_denominator == 0 { + return Err(ContractError::InvalidVestingDenominator( + "vesting_denominator must be more than zero".to_string(), + )); + } config.vesting_denominator = vesting_denominator; } diff --git a/contracts/tokenomics/treasury/src/error.rs b/contracts/tokenomics/treasury/src/error.rs index 2a8c83a8..726e4fbc 100644 --- a/contracts/tokenomics/treasury/src/error.rs +++ b/contracts/tokenomics/treasury/src/error.rs @@ -19,6 +19,9 @@ pub enum ContractError { #[error("Invalid distribution rate")] InvalidDistributionRate(String), + #[error("Invalid vesting denominator")] + InvalidVestingDenominator(String), + #[error("Too soon to distribute")] TooSoonToDistribute {}, diff --git a/contracts/tokenomics/treasury/src/vesting.rs b/contracts/tokenomics/treasury/src/vesting.rs index 763cb49d..ceb0c734 100644 --- a/contracts/tokenomics/treasury/src/vesting.rs +++ b/contracts/tokenomics/treasury/src/vesting.rs @@ -8,7 +8,7 @@ use crate::state::{LAST_BURNED_COINS_AMOUNT, TOTAL_DISTRIBUTED, TOTAL_RESERVED}; /// Function calculates how many coins should be released for the current period /// based on the current balance and the number of coins burned for the period /// Implemented vesting function is linear and is defined as: y=x/vesting_denominator -/// In order to optimize the function, we use the following formula: y=x - (vesting_denominator-1 / vesting_denominator)^ * x +/// In order to optimize the function, we use the following formula: y=x - ((vesting_denominator-1) / vesting_denominator)^ * x pub fn vesting_function( current_balance: Uint128, burned_coins_for_period: u32,