From 067e0aac38415bc0af112e10f6551500ba176803 Mon Sep 17 00:00:00 2001 From: Ruslan Akhtariev <46343690+pysel@users.noreply.github.com> Date: Fri, 24 Mar 2023 00:16:05 +0700 Subject: [PATCH 01/14] link (#4708) --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c2d1fc71ac7..ca14762bcb4 100644 --- a/README.md +++ b/README.md @@ -78,3 +78,8 @@ running an Osmosis node! The contributing guide for Osmosis explains the branching structure, how to use the SDK fork, and how to make / test updates to SDK branches. + +## LocalOsmosis + +LocalOsmosis is a containerized local Osmosis testnet used for trying out new features locally. +LocalOsmosis documentation can be found [here](https://github.com/osmosis-labs/osmosis/tree/main/tests/localosmosis) From fffe3a2ad32a8c51d654212e70dfa1e8eff5f323 Mon Sep 17 00:00:00 2001 From: Master Pi Date: Fri, 24 Mar 2023 00:18:20 +0700 Subject: [PATCH 02/14] daily check for broken links (#4712) * Update README.md * Create check-broken-links.yml * Update check-broken-links.yml * Update check-broken-links.yml * Update check-broken-links.yml * Update check-broken-links.yml * Update check-broken-links.yml * Update check-broken-links.yml * Update README.md --- .github/workflows/check-broken-links.yml | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/check-broken-links.yml diff --git a/.github/workflows/check-broken-links.yml b/.github/workflows/check-broken-links.yml new file mode 100644 index 00000000000..1f68178db8b --- /dev/null +++ b/.github/workflows/check-broken-links.yml @@ -0,0 +1,26 @@ +name: Check Links + +on: + schedule: + - cron: '0 0 * * *' # Run daily at 00:00 UTC + workflow_dispatch: # Allow manual triggering of the workflow + +jobs: + check_links: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Link Checker + id: lychee + uses: lycheeverse/lychee-action@v1.6.1 + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + - name: Create Issue From File + if: env.lychee_exit_code != 0 + uses: peter-evans/create-issue-from-file@v4 + with: + title: Link Checker Report + content-filepath: ./lychee/out.md + labels: report, automated issue From 68f0de3982ebb1fa357e6c85d7c90f9d1b2b7957 Mon Sep 17 00:00:00 2001 From: AutoStake <22457974+AutoStake-com@users.noreply.github.com> Date: Thu, 23 Mar 2023 20:57:45 +0000 Subject: [PATCH 03/14] Update AutoStake seed from .net to .com (#4711) Co-authored-by: AutoStake --- cmd/osmosisd/cmd/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/osmosisd/cmd/init.go b/cmd/osmosisd/cmd/init.go index 16d98c88827..f61ce528e1a 100644 --- a/cmd/osmosisd/cmd/init.go +++ b/cmd/osmosisd/cmd/init.go @@ -96,7 +96,7 @@ func InitCmd(mbm module.BasicManager, defaultNodeHome string) *cobra.Command { "24841abfc8fbd401d8c86747eec375649a2e8a7e@osmosis.pbcups.org:26656", // Pbcups "77bb5fb9b6964d6e861e91c1d55cf82b67d838b5@bd-osmosis-seed-mainnet-us-01.bdnodes.net:26656", // Blockdaemon US "3243426ab56b67f794fa60a79cc7f11bc7aa752d@bd-osmosis-seed-mainnet-eu-02.bdnodes.net:26656", // Blockdaemon EU - "ebc272824924ea1a27ea3183dd0b9ba713494f83@osmosis-mainnet-seed.autostake.net:26716", // AutoStake + "ebc272824924ea1a27ea3183dd0b9ba713494f83@osmosis-mainnet-seed.autostake.com:26716", // AutoStake.com "7c66126b64cd66bafd9ccfc721f068df451d31a3@osmosis-seed.sunshinevalidation.io:9393", // Sunshine Validation } config.P2P.Seeds = strings.Join(seeds, ",") From a9725d6ec860b3873420ae7bc0da7c93b47a4653 Mon Sep 17 00:00:00 2001 From: Nguyen Thanh Nhan Date: Fri, 24 Mar 2023 09:19:03 +0700 Subject: [PATCH 04/14] [tests/e2e]: simplify the logic for adding accounts to genesis sdk side and integrate into e2e (#4706) * update logic add account genesis * clean unused package * golint --- tests/e2e/initialization/config.go | 70 ++---------------------------- 1 file changed, 4 insertions(+), 66 deletions(-) diff --git a/tests/e2e/initialization/config.go b/tests/e2e/initialization/config.go index 062c4d20871..0611ab872fa 100644 --- a/tests/e2e/initialization/config.go +++ b/tests/e2e/initialization/config.go @@ -8,10 +8,9 @@ import ( "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + authhelpers "github.com/cosmos/cosmos-sdk/x/auth/helpers" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" - "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" staketypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -124,72 +123,11 @@ func addAccount(path, moniker, amountStr string, accAddr sdk.AccAddress, forkHei config.SetRoot(path) config.Moniker = moniker - coins, err := sdk.ParseCoinsNormalized(amountStr) - if err != nil { - return fmt.Errorf("failed to parse coins: %w", err) - } - coins = coins.Add(sdk.NewCoin(E2EFeeToken, sdk.NewInt(GenesisFeeBalance))) - - balances := banktypes.Balance{Address: accAddr.String(), Coins: coins.Sort()} - genAccount := authtypes.NewBaseAccount(accAddr, nil, 0, 0) - - // TODO: Make the SDK make it far cleaner to add an account to GenesisState + feeToken := sdk.NewCoin(E2EFeeToken, sdk.NewInt(GenesisFeeBalance)) + amountStr = amountStr + "," + feeToken.String() genFile := config.GenesisFile() - appState, genDoc, err := genutiltypes.GenesisStateFromGenFile(genFile) - if err != nil { - return fmt.Errorf("failed to unmarshal genesis state: %w", err) - } - - genDoc.InitialHeight = int64(forkHeight) - - authGenState := authtypes.GetGenesisStateFromAppState(util.Cdc, appState) - - accs, err := authtypes.UnpackAccounts(authGenState.Accounts) - if err != nil { - return fmt.Errorf("failed to get accounts from any: %w", err) - } - - if accs.Contains(accAddr) { - return fmt.Errorf("failed to add account to genesis state; account already exists: %s", accAddr) - } - - // Add the new account to the set of genesis accounts and sanitize the - // accounts afterwards. - accs = append(accs, genAccount) - accs = authtypes.SanitizeGenesisAccounts(accs) - - genAccs, err := authtypes.PackAccounts(accs) - if err != nil { - return fmt.Errorf("failed to convert accounts into any's: %w", err) - } - - authGenState.Accounts = genAccs - - authGenStateBz, err := util.Cdc.MarshalJSON(&authGenState) - if err != nil { - return fmt.Errorf("failed to marshal auth genesis state: %w", err) - } - - appState[authtypes.ModuleName] = authGenStateBz - - bankGenState := banktypes.GetGenesisStateFromAppState(util.Cdc, appState) - bankGenState.Balances = append(bankGenState.Balances, balances) - bankGenState.Balances = banktypes.SanitizeGenesisBalances(bankGenState.Balances) - - bankGenStateBz, err := util.Cdc.MarshalJSON(bankGenState) - if err != nil { - return fmt.Errorf("failed to marshal bank genesis state: %w", err) - } - - appState[banktypes.ModuleName] = bankGenStateBz - - appStateJSON, err := json.Marshal(appState) - if err != nil { - return fmt.Errorf("failed to marshal application genesis state: %w", err) - } - genDoc.AppState = appStateJSON - return genutil.ExportGenesisFile(genDoc, genFile) + return authhelpers.AddGenesisAccount(util.Cdc, accAddr, false, genFile, amountStr, "", 0, 0) } func updateModuleGenesis[V proto.Message](appGenState map[string]json.RawMessage, moduleName string, protoVal V, updateGenesis func(V)) error { From 1d76f4f39d898f33d1cca27125b3947ad71c0bb9 Mon Sep 17 00:00:00 2001 From: Nicolas Lara Date: Fri, 24 Mar 2023 12:20:24 +0100 Subject: [PATCH 05/14] XCS + Registries integration: IBC forward generation using registries (#4694) * initial attempt at splitting registries. Issues with circular deps * properly split registries * added reverse prefix map * channel validation done by registries * integrating registry into xcs and fixing the tests * Printing error context on failure * full integration with unwrapping * remove replace * removed unused deps * clippy * x86 bytecode * fmt after lints * gofumpt * fix re-export * lint * added test-contract addr * added missing newline * remove recovery states * x86 bytecode * new bytecode --- .github/workflows/contracts.yml | 1 + cosmwasm/Cargo.lock | 34 +- cosmwasm/Cargo.toml | 2 + .../contracts/crosschain-registry/Cargo.toml | 11 +- .../crosschain-registry/src/contract.rs | 12 +- .../crosschain-registry/src/error.rs | 85 +-- .../crosschain-registry/src/execute.rs | 292 +++++++---- .../crosschain-registry/src/exports.rs | 438 ---------------- .../crosschain-registry/src/helpers.rs | 114 ++-- .../contracts/crosschain-registry/src/lib.rs | 1 - .../contracts/crosschain-registry/src/msg.rs | 66 +-- .../crosschain-registry/src/query.rs | 30 +- .../crosschain-registry/src/state.rs | 8 + .../contracts/crosschain-swaps/Cargo.toml | 3 +- .../contracts/crosschain-swaps/src/checks.rs | 71 ++- .../contracts/crosschain-swaps/src/consts.rs | 3 - .../crosschain-swaps/src/contract.rs | 16 +- .../contracts/crosschain-swaps/src/error.rs | 4 + .../contracts/crosschain-swaps/src/execute.rs | 189 +------ .../contracts/crosschain-swaps/src/lib.rs | 1 - .../contracts/crosschain-swaps/src/msg.rs | 15 - .../contracts/crosschain-swaps/src/state.rs | 8 +- .../crosschain-swaps/tests/test_env.rs | 1 - cosmwasm/contracts/outpost/Cargo.toml | 1 + cosmwasm/contracts/outpost/src/execute.rs | 2 +- cosmwasm/packages/registry/Cargo.toml | 22 + cosmwasm/packages/registry/src/error.rs | 98 ++++ cosmwasm/packages/registry/src/lib.rs | 9 + cosmwasm/packages/registry/src/msg.rs | 59 +++ .../ibc.rs => packages/registry/src/proto.rs} | 53 ++ cosmwasm/packages/registry/src/registry.rs | 487 ++++++++++++++++++ cosmwasm/packages/registry/src/utils.rs | 87 ++++ go.mod | 4 +- go.sum | 5 +- go.work | 3 +- .../bytecode/crosschain_registry.wasm | Bin 327028 -> 374836 bytes .../ibc-hooks/bytecode/crosschain_swaps.wasm | Bin 332148 -> 417285 bytes tests/ibc-hooks/bytecode/outpost.wasm | Bin 199680 -> 198809 bytes tests/ibc-hooks/ibc_middleware_test.go | 131 +++-- tests/osmosisibctesting/wasm.go | 9 +- 40 files changed, 1321 insertions(+), 1054 deletions(-) create mode 100644 cosmwasm/packages/registry/Cargo.toml create mode 100644 cosmwasm/packages/registry/src/error.rs create mode 100644 cosmwasm/packages/registry/src/lib.rs create mode 100644 cosmwasm/packages/registry/src/msg.rs rename cosmwasm/{contracts/crosschain-swaps/src/ibc.rs => packages/registry/src/proto.rs} (57%) create mode 100644 cosmwasm/packages/registry/src/registry.rs create mode 100644 cosmwasm/packages/registry/src/utils.rs diff --git a/.github/workflows/contracts.yml b/.github/workflows/contracts.yml index c63e76c3946..c9c0c96da14 100644 --- a/.github/workflows/contracts.yml +++ b/.github/workflows/contracts.yml @@ -38,6 +38,7 @@ jobs: working-directory: ${{ matrix.contract.workdir }} run: > docker run --rm -v "$(pwd)":/code \ + -e REGISTRY_CONTRACT=osmo14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sq2r9g9 \ --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ cosmwasm/workspace-optimizer:0.12.10 diff --git a/cosmwasm/Cargo.lock b/cosmwasm/Cargo.lock index a69bffc1b7a..c75bcbd938c 100644 --- a/cosmwasm/Cargo.lock +++ b/cosmwasm/Cargo.lock @@ -348,22 +348,14 @@ dependencies = [ name = "crosschain-registry" version = "0.1.0" dependencies = [ - "bech32", "cosmwasm-schema", "cosmwasm-std", - "crosschain-swaps", "cw-multi-test", "cw-storage-plus", "cw-utils", "cw2", - "hex", - "itertools", - "osmosis-std-derive", - "prost 0.11.6", - "schemars", + "registry", "serde", - "serde-json-wasm", - "sha2 0.10.6", "thiserror", ] @@ -379,10 +371,11 @@ dependencies = [ "cw-utils", "cw2", "enum-repr", + "itertools", "osmosis-std", - "osmosis-std-derive", "osmosis-testing", "prost 0.11.6", + "registry", "schemars", "serde", "serde-cw-value", @@ -1046,6 +1039,7 @@ dependencies = [ "cw-storage-plus", "cw-utils", "cw2", + "registry", "serde-json-wasm", "swaprouter", "thiserror", @@ -1200,6 +1194,26 @@ version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +[[package]] +name = "registry" +version = "0.1.0" +dependencies = [ + "bech32", + "cosmwasm-schema", + "cosmwasm-std", + "hex", + "itertools", + "osmosis-std", + "osmosis-std-derive", + "prost 0.11.6", + "schemars", + "serde", + "serde-cw-value", + "serde-json-wasm", + "sha2 0.10.6", + "thiserror", +] + [[package]] name = "rfc6979" version = "0.3.1" diff --git a/cosmwasm/Cargo.toml b/cosmwasm/Cargo.toml index f36b45d7267..710423c7b63 100644 --- a/cosmwasm/Cargo.toml +++ b/cosmwasm/Cargo.toml @@ -1,6 +1,7 @@ [workspace] members = [ 'contracts/*', + 'packages/*' ] [workspace.package] @@ -36,3 +37,4 @@ serde-json-wasm = "0.5.0" serde-cw-value = "0.7.0" bech32 = "0.9.1" cw-utils = "1.0.0" +itertools = "0.10" diff --git a/cosmwasm/contracts/crosschain-registry/Cargo.toml b/cosmwasm/contracts/crosschain-registry/Cargo.toml index f64bcbcf9fb..9bb9baab6ac 100644 --- a/cosmwasm/contracts/crosschain-registry/Cargo.toml +++ b/cosmwasm/contracts/crosschain-registry/Cargo.toml @@ -48,19 +48,10 @@ cosmwasm-schema = { workspace = true } cosmwasm-std = { workspace = true } cw-storage-plus = { workspace = true } cw2 = { workspace = true } -schemars = { workspace = true } serde = { workspace = true } thiserror = { workspace = true } -bech32 = { workspace = true } cw-utils = { workspace = true } -serde-json-wasm = { workspace = true } -sha2 = "0.10.6" -hex = "0.4.3" -prost = {version = "0.11.2", default-features = false, features = ["prost-derive"]} -osmosis-std-derive = "0.13.2" -itertools = "0.10.5" - -crosschain-swaps = { path = "../crosschain-swaps", features = ["imported"]} +registry = { path = "../../packages/registry"} [dev-dependencies] cw-multi-test = "0.16.2" diff --git a/cosmwasm/contracts/crosschain-registry/src/contract.rs b/cosmwasm/contracts/crosschain-registry/src/contract.rs index 9a0391b5517..49f4de35c40 100644 --- a/cosmwasm/contracts/crosschain-registry/src/contract.rs +++ b/cosmwasm/contracts/crosschain-registry/src/contract.rs @@ -6,7 +6,8 @@ use cw2::set_contract_version; use crate::error::ContractError; use crate::msg::{ExecuteMsg, GetAddressFromAliasResponse, InstantiateMsg, QueryMsg}; use crate::state::{Config, CONFIG, CONTRACT_ALIAS_MAP}; -use crate::{execute, query, Registries}; +use crate::{execute, query}; +use registry::Registry; // version info for migration const CONTRACT_NAME: &str = "crates.io:crosschain-registry"; @@ -60,8 +61,9 @@ pub fn execute( ExecuteMsg::UnwrapCoin { receiver, into_chain, + with_memo, } => { - let registries = Registries::new(deps.as_ref(), env.contract.address.to_string())?; + let registries = Registry::new(deps.as_ref(), env.contract.address.to_string())?; let coin = cw_utils::one_coin(&info)?; let transfer_msg = registries.unwrap_coin_into( coin, @@ -69,6 +71,7 @@ pub fn execute( into_chain.as_deref(), env.contract.address.to_string(), env.block.time, + with_memo, )?; deps.api.debug(&format!("transfer_msg: {transfer_msg:?}")); Ok(Response::new() @@ -113,6 +116,9 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { QueryMsg::GetDenomTrace { ibc_denom } => { to_binary(&query::query_denom_trace_from_ibc_denom(deps, ibc_denom)?) } + QueryMsg::GetChainNameFromBech32Prefix { prefix } => { + to_binary(&query::query_chain_name_from_bech32_prefix(deps, prefix)?) + } } } @@ -327,7 +333,7 @@ mod test { new_channel_id: None, }], }; - let result = execute(deps.as_mut(), mock_env(), info_creator.clone(), msg); + let result = execute(deps.as_mut(), mock_env(), info_creator, msg); assert!(result.is_ok()); // Retrieve osmo<>juno link again, but this time it should be enabled diff --git a/cosmwasm/contracts/crosschain-registry/src/error.rs b/cosmwasm/contracts/crosschain-registry/src/error.rs index 94bce3bfb84..18ad07f9b56 100644 --- a/cosmwasm/contracts/crosschain-registry/src/error.rs +++ b/cosmwasm/contracts/crosschain-registry/src/error.rs @@ -1,90 +1,7 @@ use cosmwasm_std::StdError; +use registry::RegistryError; use thiserror::Error; -#[derive(Error, Debug, PartialEq)] -pub enum RegistryError { - #[error("{0}")] - Std(#[from] StdError), - - // Validation errors - #[error("Invalid channel id: {0}")] - InvalidChannelId(String), - - #[error("error {action} {addr}")] - Bech32Error { - action: String, - addr: String, - #[source] - source: bech32::Error, - }, - - #[error("serialization error: {error}")] - SerialiaztionError { error: String }, - - #[error("denom {denom:?} is not an IBC denom")] - InvalidIBCDenom { denom: String }, - - #[error("No deom trace found for: {denom:?}")] - NoDenomTrace { denom: String }, - - #[error("Invalid denom trace: {error}")] - InvalidDenomTrace { error: String }, - - #[error("Invalid path {path:?} for denom {denom:?}")] - InvalidDenomTracePath { path: String, denom: String }, - - #[error("Invalid transfer port {port:?}")] - InvalidTransferPort { port: String }, - - #[error("Invalid multihop length {length:?}. Must be >={min}")] - InvalidMultiHopLengthMin { length: usize, min: usize }, - - #[error("Invalid multihop length {length:?}. Must be <={max}")] - InvalidMultiHopLengthMax { length: usize, max: usize }, - - #[error( - "receiver prefix for {receiver} must match the bech32 prefix of the destination chain {chain}" - )] - InvalidReceiverPrefix { receiver: String, chain: String }, - - // Registry loading errors - #[error("contract alias does not exist: {alias:?}")] - AliasDoesNotExist { alias: String }, - - #[error("no authorized address found for source chain: {source_chain:?}")] - ChainAuthorizedAddressDoesNotExist { source_chain: String }, - - #[error("chain channel link does not exist: {source_chain:?} -> {destination_chain:?}")] - ChainChannelLinkDoesNotExist { - source_chain: String, - destination_chain: String, - }, - - #[error("channel chain link does not exist: {channel_id:?} on {source_chain:?} -> chain")] - ChannelChainLinkDoesNotExist { - channel_id: String, - source_chain: String, - }, - - #[error("channel chain link does not exist: {channel_id:?} on {source_chain:?} -> chain")] - ChannelToChainChainLinkDoesNotExist { - channel_id: String, - source_chain: String, - }, - - #[error("native denom link does not exist: {native_denom:?}")] - NativeDenomLinkDoesNotExist { native_denom: String }, - - #[error("bech32 prefix does not exist for chain: {chain}")] - Bech32PrefixDoesNotExist { chain: String }, -} - -impl From for StdError { - fn from(e: RegistryError) -> Self { - StdError::generic_err(e.to_string()) - } -} - #[derive(Error, Debug, PartialEq)] pub enum ContractError { #[error("{0}")] diff --git a/cosmwasm/contracts/crosschain-registry/src/execute.rs b/cosmwasm/contracts/crosschain-registry/src/execute.rs index fa7acc9b7c3..84829b9720e 100644 --- a/cosmwasm/contracts/crosschain-registry/src/execute.rs +++ b/cosmwasm/contracts/crosschain-registry/src/execute.rs @@ -1,12 +1,13 @@ -use crate::error::RegistryError; use crate::helpers::*; use crate::state::{ - CHAIN_ADMIN_MAP, CHAIN_MAINTAINER_MAP, CHAIN_TO_BECH32_PREFIX_MAP, CHAIN_TO_CHAIN_CHANNEL_MAP, - CHANNEL_ON_CHAIN_CHAIN_MAP, CONTRACT_ALIAS_MAP, GLOBAL_ADMIN_MAP, + CHAIN_ADMIN_MAP, CHAIN_MAINTAINER_MAP, CHAIN_TO_BECH32_PREFIX_MAP, + CHAIN_TO_BECH32_PREFIX_REVERSE_MAP, CHAIN_TO_CHAIN_CHANNEL_MAP, CHANNEL_ON_CHAIN_CHAIN_MAP, + CONTRACT_ALIAS_MAP, GLOBAL_ADMIN_MAP, }; use cosmwasm_schema::cw_serde; use cosmwasm_std::{Addr, DepsMut, Response}; use cw_storage_plus::Map; +use registry::RegistryError; use crate::ContractError; @@ -244,7 +245,7 @@ pub fn connection_operations( } response.clone().add_attribute( "change_connection", - format!("{}-{}", source_chain, destination_chain), + format!("{source_chain}-{destination_chain}"), ); } FullOperation::Remove => { @@ -260,7 +261,7 @@ pub fn connection_operations( .remove(deps.storage, (&chain_to_chain_map.value, &source_chain)); response.clone().add_attribute( "remove_connection", - format!("{}-{}", source_chain, destination_chain), + format!("{source_chain}-{destination_chain}"), ); } FullOperation::Enable => { @@ -288,7 +289,7 @@ pub fn connection_operations( )?; response.clone().add_attribute( "enable_connection", - format!("{}-{}", source_chain, destination_chain), + format!("{source_chain}-{destination_chain}"), ); } FullOperation::Disable => { @@ -316,7 +317,7 @@ pub fn connection_operations( )?; response.clone().add_attribute( "disable_connection", - format!("{}-{}", source_chain, destination_chain), + format!("{source_chain}-{destination_chain}"), ); } } @@ -329,7 +330,7 @@ pub fn connection_operations( pub struct ChainToBech32PrefixInput { pub operation: FullOperation, pub chain_name: String, - pub prefix: Option, + pub prefix: String, pub new_prefix: Option, } @@ -355,17 +356,20 @@ pub fn chain_to_prefix_operations( if CHAIN_TO_BECH32_PREFIX_MAP.has(deps.storage, &chain_name) { return Err(ContractError::AliasAlreadyExists { alias: chain_name }); } - let prefix = operation - .prefix - .clone() - .unwrap_or_default() - .to_string() - .to_lowercase(); + let prefix = operation.prefix.to_lowercase(); CHAIN_TO_BECH32_PREFIX_MAP.save( deps.storage, &chain_name, - &(prefix, true).into(), + &(prefix.clone(), true).into(), + )?; + + push_to_map_value( + deps.storage, + &CHAIN_TO_BECH32_PREFIX_REVERSE_MAP, + &prefix, + chain_name.clone(), )?; + response .clone() .add_attribute("set_chain_to_prefix", chain_name); @@ -379,17 +383,34 @@ pub fn chain_to_prefix_operations( let is_enabled = map_entry.enabled; + let old_prefix = operation.prefix.to_lowercase(); let new_prefix = operation .new_prefix - .clone() .unwrap_or_default() .to_string() .to_lowercase(); CHAIN_TO_BECH32_PREFIX_MAP.save( deps.storage, &chain_name, - &(new_prefix, is_enabled).into(), + &(new_prefix.clone(), is_enabled).into(), + )?; + + // Remove from the reverse map of the old prefix + remove_from_map_value( + deps.storage, + &CHAIN_TO_BECH32_PREFIX_REVERSE_MAP, + &old_prefix, + chain_name.clone(), + )?; + + // Add to the reverse map of the new prefix + push_to_map_value( + deps.storage, + &CHAIN_TO_BECH32_PREFIX_REVERSE_MAP, + &new_prefix, + chain_name.clone(), )?; + response .clone() .add_attribute("change_chain_to_prefix", chain_name); @@ -401,6 +422,16 @@ pub fn chain_to_prefix_operations( alias: chain_name.clone(), })?; CHAIN_TO_BECH32_PREFIX_MAP.remove(deps.storage, &chain_name); + + let old_prefix = operation.prefix.to_lowercase(); + // Remove from the reverse map of the old prefix + remove_from_map_value( + deps.storage, + &CHAIN_TO_BECH32_PREFIX_REVERSE_MAP, + &old_prefix, + chain_name.clone(), + )?; + response .clone() .add_attribute("remove_chain_to_prefix", chain_name); @@ -414,7 +445,14 @@ pub fn chain_to_prefix_operations( CHAIN_TO_BECH32_PREFIX_MAP.save( deps.storage, &chain_name, - &(map_entry.value, true).into(), + &(map_entry.value.clone(), true).into(), + )?; + // Add to the reverse map of the enabled prefix + push_to_map_value( + deps.storage, + &CHAIN_TO_BECH32_PREFIX_REVERSE_MAP, + &map_entry.value, + chain_name.clone(), )?; response .clone() @@ -429,8 +467,16 @@ pub fn chain_to_prefix_operations( CHAIN_TO_BECH32_PREFIX_MAP.save( deps.storage, &chain_name, - &(map_entry.value, false).into(), + &(map_entry.value.clone(), false).into(), + )?; + // Remove from the reverse map of the disabled prefix + remove_from_map_value( + deps.storage, + &CHAIN_TO_BECH32_PREFIX_REVERSE_MAP, + &map_entry.value, + chain_name.clone(), )?; + response .clone() .add_attribute("disable_chain_to_prefix", chain_name); @@ -496,10 +542,9 @@ pub fn authorized_address_operations( } address_map.save(deps.storage, &source_chain, &addr)?; - response.clone().add_attribute( - "set_authorized_address", - format!("{}-{}", source_chain, addr), - ); + response + .clone() + .add_attribute("set_authorized_address", format!("{source_chain}-{addr}")); } Operation::Change => { address_map.load(deps.storage, &source_chain).map_err(|_| { @@ -514,7 +559,7 @@ pub fn authorized_address_operations( address_map.save(deps.storage, &source_chain, &new_addr)?; response.clone().add_attribute( "change_authorized_address", - format!("{}-{}", source_chain, addr), + format!("{source_chain}-{addr}"), ); } Operation::Remove => { @@ -527,7 +572,7 @@ pub fn authorized_address_operations( address_map.remove(deps.storage, &source_chain); response.clone().add_attribute( "remove_authorized_address", - format!("{}-{}", source_chain, addr), + format!("{source_chain}-{addr}"), ); } } @@ -564,7 +609,7 @@ mod tests { }; let info = mock_info(CREATOR_ADDRESS, &[]); - let res = contract::execute(deps.as_mut(), mock_env(), info.clone(), msg.clone()).unwrap(); + let res = contract::execute(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); assert_eq!(0, res.messages.len()); assert_eq!( CONTRACT_ALIAS_MAP @@ -582,8 +627,7 @@ mod tests { new_alias: None, }], }; - let res = - contract::execute(deps.as_mut(), mock_env(), info.clone(), msg.clone()).unwrap_err(); + let res = contract::execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert_eq!(res, ContractError::AliasAlreadyExists { alias }); // Verify that the alias was not updated @@ -604,13 +648,7 @@ mod tests { }], }; let unauthorized_info = mock_info(UNAUTHORIZED_ADDRESS, &[]); - let res = contract::execute( - deps.as_mut(), - mock_env(), - unauthorized_info.clone(), - msg.clone(), - ) - .unwrap_err(); + let res = contract::execute(deps.as_mut(), mock_env(), unauthorized_info, msg).unwrap_err(); assert_eq!(res, ContractError::Unauthorized {}); // Verify that the new alias was not set @@ -666,10 +704,8 @@ mod tests { // Verify that the contract alias has changed from "swap_router" to "new_swap_router" assert_eq!( - CONTRACT_ALIAS_MAP - .load(&deps.storage, &new_alias.clone()) - .unwrap(), - address.clone() + CONTRACT_ALIAS_MAP.load(&deps.storage, &new_alias).unwrap(), + address ); // Attempt to change an alias that does not exist @@ -681,12 +717,8 @@ mod tests { new_alias: Some(new_alias.clone()), }], }; - let invalid_alias_result = contract::execute( - deps.as_mut(), - mock_env(), - creator_info.clone(), - invalid_alias_msg, - ); + let invalid_alias_result = + contract::execute(deps.as_mut(), mock_env(), creator_info, invalid_alias_msg); let expected_error = ContractError::from(RegistryError::AliasDoesNotExist { alias }); assert_eq!(invalid_alias_result.unwrap_err(), expected_error); @@ -694,7 +726,7 @@ mod tests { let unauthorized_alias_msg = ExecuteMsg::ModifyContractAlias { operations: vec![ContractAliasInput { operation: Operation::Change, - alias: new_alias.clone(), + alias: new_alias, address: None, new_alias: Some(new_alias_unauthorized.clone()), }], @@ -702,7 +734,7 @@ mod tests { let unauthorized_alias_result = contract::execute( deps.as_mut(), mock_env(), - external_unauthorized_info.clone(), + external_unauthorized_info, unauthorized_alias_msg, ); let expected_error = ContractError::Unauthorized {}; @@ -749,7 +781,7 @@ mod tests { deps.as_mut(), mock_env(), creator_info.clone(), - remove_alias_msg.clone(), + remove_alias_msg, ) .unwrap(); @@ -790,20 +822,14 @@ mod tests { new_alias: None, }], }; - contract::execute( - deps.as_mut(), - mock_env(), - creator_info.clone(), - reset_alias_msg, - ) - .unwrap(); + contract::execute(deps.as_mut(), mock_env(), creator_info, reset_alias_msg).unwrap(); // Attempt to remove an alias with an unauthorized address let unauthorized_remove_msg = ExecuteMsg::ModifyContractAlias { operations: vec![ContractAliasInput { operation: Operation::Remove, - alias: alias.clone(), - address: Some(address.clone()), + alias: alias, + address: Some(address), new_alias: None, }], }; @@ -811,7 +837,7 @@ mod tests { let result = contract::execute( deps.as_mut(), mock_env(), - unauthorized_info.clone(), + unauthorized_info, unauthorized_remove_msg, ); @@ -868,7 +894,7 @@ mod tests { }], }; let info_creator = mock_info(CREATOR_ADDRESS, &[]); - let result = contract::execute(deps.as_mut(), mock_env(), info_creator.clone(), msg); + let result = contract::execute(deps.as_mut(), mock_env(), info_creator, msg); assert!(result.is_err()); let expected_error = ContractError::ChainToChainChannelLinkAlreadyExists { @@ -902,12 +928,7 @@ mod tests { }], }; let info_unauthorized = mock_info(UNAUTHORIZED_ADDRESS, &[]); - let result = contract::execute( - deps.as_mut(), - mock_env(), - info_unauthorized.clone(), - msg.clone(), - ); + let result = contract::execute(deps.as_mut(), mock_env(), info_unauthorized, msg.clone()); assert!(result.is_err()); let expected_error = ContractError::Unauthorized {}; @@ -981,8 +1002,8 @@ mod tests { let result = contract::execute( deps.as_mut(), mock_env(), - chain_admin_and_maintainer_info.clone(), - msg.clone(), + chain_admin_and_maintainer_info, + msg, ); assert!(result.is_err()); @@ -1002,12 +1023,7 @@ mod tests { new_channel_id: None, }], }; - let result = contract::execute( - deps.as_mut(), - mock_env(), - chain_admin_info.clone(), - msg.clone(), - ); + let result = contract::execute(deps.as_mut(), mock_env(), chain_admin_info, msg); assert!(result.is_err()); let expected_error = ContractError::Unauthorized {}; @@ -1092,7 +1108,7 @@ mod tests { new_channel_id: None, }], }; - let result = contract::execute(deps.as_mut(), mock_env(), info_creator.clone(), msg); + let result = contract::execute(deps.as_mut(), mock_env(), info_creator, msg); assert!(result.is_ok()); // Verify that channel-150 on osmosis is linked to regen @@ -1116,12 +1132,7 @@ mod tests { }], }; let info_unauthorized = mock_info(UNAUTHORIZED_ADDRESS, &[]); - let result = contract::execute( - deps.as_mut(), - mock_env(), - info_unauthorized.clone(), - msg.clone(), - ); + let result = contract::execute(deps.as_mut(), mock_env(), info_unauthorized, msg.clone()); assert!(result.is_err()); let expected_error = ContractError::Unauthorized {}; @@ -1172,12 +1183,7 @@ mod tests { new_channel_id: Some("channel-4".to_string()), }], }; - let result = contract::execute( - deps.as_mut(), - mock_env(), - chain_maintainer_info.clone(), - msg.clone(), - ); + let result = contract::execute(deps.as_mut(), mock_env(), chain_maintainer_info, msg); assert!(result.is_err()); let expected_error = ContractError::Unauthorized {}; @@ -1256,12 +1262,7 @@ mod tests { new_channel_id: None, }], }; - let result = contract::execute( - deps.as_mut(), - mock_env(), - chain_maintainer_info.clone(), - msg.clone(), - ); + let result = contract::execute(deps.as_mut(), mock_env(), chain_maintainer_info, msg); assert!(result.is_err()); let expected_error = ContractError::Unauthorized {}; @@ -1278,18 +1279,121 @@ mod tests { operations: vec![ChainToBech32PrefixInput { operation: FullOperation::Set, chain_name: "OSMOSIS".to_string(), - prefix: Some("OSMO".to_string()), + prefix: "OSMO".to_string(), new_prefix: None, }], }; let info = mock_info(CREATOR_ADDRESS, &[]); - contract::execute(deps.as_mut(), mock_env(), info, msg).unwrap(); + contract::execute(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); + + assert_eq!( + CHAIN_TO_BECH32_PREFIX_MAP + .load(&deps.storage, "osmosis") + .unwrap(), + ("osmo", true).into() + ); + assert_eq!( + CHAIN_TO_BECH32_PREFIX_REVERSE_MAP + .load(&deps.storage, "osmo") + .unwrap(), + vec!["osmosis"] + ); + + // Set another chain with the same prefix + let msg = ExecuteMsg::ModifyBech32Prefixes { + operations: vec![ChainToBech32PrefixInput { + operation: FullOperation::Set, + chain_name: "ISMISIS".to_string(), + prefix: "OSMO".to_string(), + new_prefix: None, + }], + }; + contract::execute(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); + + assert_eq!( + CHAIN_TO_BECH32_PREFIX_MAP + .load(&deps.storage, "ismisis") + .unwrap(), + ("osmo", true).into() + ); + assert_eq!( + CHAIN_TO_BECH32_PREFIX_REVERSE_MAP + .load(&deps.storage, "osmo") + .unwrap(), + vec!["osmosis", "ismisis"] + ); + + // Set another chain with the same prefix + let msg = ExecuteMsg::ModifyBech32Prefixes { + operations: vec![ChainToBech32PrefixInput { + operation: FullOperation::Disable, + chain_name: "OSMOSIS".to_string(), + prefix: "OSMO".to_string(), + new_prefix: None, + }], + }; + contract::execute(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); + assert_eq!( + CHAIN_TO_BECH32_PREFIX_MAP + .load(&deps.storage, "osmosis") + .unwrap(), + ("osmo", false).into() + ); + assert_eq!( + CHAIN_TO_BECH32_PREFIX_REVERSE_MAP + .load(&deps.storage, "osmo") + .unwrap(), + vec!["ismisis"] + ); + // Set another chain with the same prefix + let msg = ExecuteMsg::ModifyBech32Prefixes { + operations: vec![ChainToBech32PrefixInput { + operation: FullOperation::Enable, + chain_name: "OSMOSIS".to_string(), + prefix: "OSMO".to_string(), + new_prefix: None, + }], + }; + contract::execute(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); assert_eq!( CHAIN_TO_BECH32_PREFIX_MAP .load(&deps.storage, "osmosis") .unwrap(), ("osmo", true).into() ); + assert_eq!( + CHAIN_TO_BECH32_PREFIX_REVERSE_MAP + .load(&deps.storage, "osmo") + .unwrap(), + vec!["ismisis", "osmosis"] + ); + + // Set another chain with the same prefix + let msg = ExecuteMsg::ModifyBech32Prefixes { + operations: vec![ChainToBech32PrefixInput { + operation: FullOperation::Remove, + chain_name: "OSMOSIS".to_string(), + prefix: "OSMO".to_string(), + new_prefix: None, + }], + }; + contract::execute(deps.as_mut(), mock_env(), info, msg).unwrap(); + assert_eq!( + CHAIN_TO_BECH32_PREFIX_MAP + .load(&deps.storage, "ismisis") + .unwrap(), + ("osmo", true).into() + ); + assert_eq!( + CHAIN_TO_BECH32_PREFIX_REVERSE_MAP + .load(&deps.storage, "osmo") + .unwrap(), + vec!["ismisis"] + ); + + CHAIN_TO_BECH32_PREFIX_MAP + .load(&deps.storage, "osmosis") + .unwrap_err(); } } diff --git a/cosmwasm/contracts/crosschain-registry/src/exports.rs b/cosmwasm/contracts/crosschain-registry/src/exports.rs index d040c31a619..8b137891791 100644 --- a/cosmwasm/contracts/crosschain-registry/src/exports.rs +++ b/cosmwasm/contracts/crosschain-registry/src/exports.rs @@ -1,439 +1 @@ -use cosmwasm_schema::cw_serde; -use cosmwasm_std::{Coin, Deps, Timestamp}; -use crosschain_swaps::ibc::MsgTransfer; -use itertools::Itertools; -pub use crate::error::RegistryError; -use crate::{ - helpers::{hash_denom_trace, DenomTrace, QueryDenomTraceRequest}, - msg::QueryMsg, -}; -use std::convert::AsRef; - -// IBC transfer port -const TRANSFER_PORT: &str = "transfer"; -// IBC timeout -pub const PACKET_LIFETIME: u64 = 604_800u64; // One week in seconds - -#[cw_serde] -pub struct Chain(String); -#[cw_serde] -pub struct ChannelId(String); - -impl ChannelId { - pub fn new(channel_id: &str) -> Result { - if !ChannelId::validate(channel_id) { - return Err(RegistryError::InvalidChannelId(channel_id.to_string())); - } - Ok(Self(channel_id.to_string())) - } - - pub fn validate(channel_id: &str) -> bool { - if !channel_id.starts_with("channel-") { - return false; - } - // Check that what comes after "channel-" is a valid int - let channel_num = &channel_id[8..]; - if channel_num.parse::().is_err() { - return false; - } - true - } -} - -impl AsRef for ChannelId { - fn as_ref(&self) -> &str { - &self.0 - } -} - -impl AsRef for Chain { - fn as_ref(&self) -> &str { - &self.0 - } -} - -#[cw_serde] -pub struct ForwardingMemo { - pub receiver: String, - pub port: String, - pub channel: ChannelId, - #[serde(skip_serializing_if = "Option::is_none")] - pub next: Option>, -} - -#[cw_serde] -pub struct Memo { - forward: ForwardingMemo, -} - -// We will assume here that chains use the standard ibc-go formats. This is ok -// because we will be checking the channels in the registry and failing if they -// are not valid. We also need to enforce that all ports are explicitly "transfer" -#[cw_serde] -pub struct MultiHopDenom { - pub local_denom: String, - pub on: Chain, - pub via: Option, // This is optional because native tokens have no channel -} - -pub struct Registries<'a> { - pub deps: Deps<'a>, - pub registry_contract: String, -} - -impl<'a> Registries<'a> { - pub fn new(deps: Deps<'a>, registry_contract: String) -> Result { - deps.api.addr_validate(®istry_contract)?; - Ok(Self { - deps, - registry_contract, - }) - } - - #[allow(dead_code)] - fn default(deps: Deps<'a>) -> Self { - Self { - deps, - registry_contract: "todo: hard code the addr here".to_string(), - } - } - - /// Get a contract address by its alias - /// Example: get_contract("registries") -> "osmo1..." - pub fn get_contract(self, alias: String) -> Result { - self.deps - .querier - .query_wasm_smart( - &self.registry_contract, - &QueryMsg::GetAddressFromAlias { - contract_alias: alias.clone(), - }, - ) - .map_err(|_e| RegistryError::AliasDoesNotExist { alias }) - } - - /// Get a the name of the chain connected via channel `via_channel` on chain `on_chain`. - /// Example: get_connected_chain("osmosis", "channel-42") -> "juno" - pub fn get_connected_chain( - &self, - on_chain: &str, - via_channel: &str, - ) -> Result { - self.deps - .querier - .query_wasm_smart( - &self.registry_contract, - &QueryMsg::GetDestinationChainFromSourceChainViaChannel { - on_chain: on_chain.to_string(), - via_channel: via_channel.to_string(), - }, - ) - .map_err(|_e| RegistryError::ChannelToChainChainLinkDoesNotExist { - channel_id: via_channel.to_string(), - source_chain: on_chain.to_string(), - }) - } - - /// Get the channel id for the channel connecting chain `on_chain` to chain `for_chain`. - /// Example: get_channel("osmosis", "juno") -> "channel-42" - /// Example: get_channel("juno", "osmosis") -> "channel-0" - pub fn get_channel(&self, for_chain: &str, on_chain: &str) -> Result { - self.deps - .querier - .query_wasm_smart( - &self.registry_contract, - &QueryMsg::GetChannelFromChainPair { - source_chain: on_chain.to_string(), - destination_chain: for_chain.to_string(), - }, - ) - .map_err(|_e| RegistryError::ChainChannelLinkDoesNotExist { - source_chain: on_chain.to_string(), - destination_chain: for_chain.to_string(), - }) - } - - /// Re-encodes the bech32 address for the receiving chain - /// Example: encode_addr_for_chain("osmo1...", "juno") -> "juno1..." - pub fn encode_addr_for_chain(&self, addr: &str, chain: &str) -> Result { - let (_, data, variant) = bech32::decode(addr).map_err(|e| RegistryError::Bech32Error { - action: "decoding".into(), - addr: addr.into(), - source: e, - })?; - - let response: String = self.deps.querier.query_wasm_smart( - &self.registry_contract, - &QueryMsg::GetBech32PrefixFromChainName { - chain_name: chain.to_string(), - }, - )?; - - let receiver = - bech32::encode(&response, data, variant).map_err(|e| RegistryError::Bech32Error { - action: "encoding".into(), - addr: addr.into(), - source: e, - })?; - - Ok(receiver) - } - - /// Get the bech32 prefix for the given chain - /// Example: get_bech32_prefix("osmosis") -> "osmo" - pub fn get_bech32_prefix(&self, chain: &str) -> Result { - self.deps - .api - .debug(&format!("Getting prefix for chain: {chain}")); - let prefix: String = self - .deps - .querier - .query_wasm_smart( - &self.registry_contract, - &QueryMsg::GetBech32PrefixFromChainName { - chain_name: chain.to_string(), - }, - ) - .map_err(|e| { - self.deps.api.debug(&format!("Got error: {e}")); - RegistryError::Bech32PrefixDoesNotExist { - chain: chain.into(), - } - })?; - if prefix.is_empty() { - return Err(RegistryError::Bech32PrefixDoesNotExist { - chain: chain.into(), - }); - } - Ok(prefix) - } - - /// Returns the IBC path the denom has taken to get to the current chain - /// Example: unwrap_denom_path("ibc/0A...") -> [{"local_denom":"ibc/0A","on":"osmosis","via":"channel-17"},{"local_denom":"ibc/1B","on":"middle_chain","via":"channel-75"},{"local_denom":"token0","on":"source_chain","via":null} - pub fn unwrap_denom_path(&self, denom: &str) -> Result, RegistryError> { - self.deps.api.debug(&format!("Unwrapping denom {denom}")); - // Check that the denom is an IBC denom - if !denom.starts_with("ibc/") { - return Err(RegistryError::InvalidIBCDenom { - denom: denom.into(), - }); - } - - // Get the denom trace - let res = QueryDenomTraceRequest { - hash: denom.to_string(), - } - .query(&self.deps.querier)?; - - let DenomTrace { path, base_denom } = match res.denom_trace { - Some(denom_trace) => Ok(denom_trace), - None => Err(RegistryError::NoDenomTrace { - denom: denom.into(), - }), - }?; - - self.deps - .api - .debug(&format!("procesing denom trace {path}")); - // Let's iterate over the parts of the denom trace and extract the - // chain/channels into a more useful structure: MultiHopDenom - let mut hops: Vec = vec![]; - let mut current_chain = "osmosis".to_string(); // The initial chain is always osmosis - let mut rest: &str = &path; - let parts = path.split('/'); - - for chunk in &parts.chunks(2) { - let Some((port, channel)) = chunk.take(2).collect_tuple() else { - return Err(RegistryError::InvalidDenomTracePath{ path: path.clone(), denom: denom.into() }); - }; - - // Check that the port is "transfer" - if port != TRANSFER_PORT { - return Err(RegistryError::InvalidTransferPort { port: port.into() }); - } - - // Check that the channel is valid - let full_trace = rest.to_owned() + "/" + &base_denom; - hops.push(MultiHopDenom { - local_denom: hash_denom_trace(&full_trace), - on: Chain(current_chain.clone().to_string()), - via: Some(ChannelId::new(channel)?), - }); - - current_chain = self.get_connected_chain(¤t_chain, channel)?; - rest = rest - .trim_start_matches(&format!("{port}/{channel}")) - .trim_start_matches('/'); // hops other than first and last will have this slash - } - - hops.push(MultiHopDenom { - local_denom: base_denom, - on: Chain(current_chain), - via: None, - }); - - Ok(hops) - } - - /// Returns an IBC MsgTransfer that with a packet forward middleware memo - /// that will send the coin back to its original chain and then to the - /// receiver in `into_chain`. - /// - /// If the receiver `into_chain` is not specified, we assume the receiver is - /// the current chain (where the the registries are hosted and the denom - /// original denom exists) - /// - /// `own_addr` must the the address of the contract that is calling this - /// function. - /// - /// `block_time` is the current block time. This is needed to calculate the - /// timeout timestamp. - pub fn unwrap_coin_into( - &self, - coin: Coin, - receiver: String, - into_chain: Option<&str>, - own_addr: String, - block_time: Timestamp, - ) -> Result { - let path = self.unwrap_denom_path(&coin.denom)?; - self.deps - .api - .debug(&format!("Generating unwrap transfer message for: {path:?}")); - if path.len() < 2 { - return Err(RegistryError::InvalidMultiHopLengthMin { - length: path.len(), - min: 2, - }); - } - - let MultiHopDenom { - local_denom: _, - on: first_chain, - via: first_channel, - } = path - .first() - .ok_or_else(|| RegistryError::InvalidDenomTracePath { - path: format!("{:?}", path.clone()), - denom: coin.denom.clone(), - })?; - - let first_channel = match first_channel { - Some(channel) => Ok(channel), - None => Err(RegistryError::InvalidDenomTrace { - error: "First hop must contain a channel".to_string(), - }), - }?; - - // default the receiver chain to the first chain if it isn't provided - let receiver_chain = match into_chain { - Some(chain) => chain, - None => first_chain.as_ref(), - }; - let receiver_chain: &str = &receiver_chain.to_lowercase(); - - // validate the receiver matches the chain - let receiver_prefix = self.get_bech32_prefix(receiver_chain)?; - if receiver[..receiver_prefix.len()] != receiver_prefix { - return Err(RegistryError::InvalidReceiverPrefix { - receiver, - chain: receiver_chain.into(), - }); - } - - let ts = block_time.plus_seconds(PACKET_LIFETIME); - let path_iter = path.iter().skip(1); - - let mut next: Option> = None; - let mut prev_chain: &str = receiver_chain; - - for hop in path_iter.rev() { - // If the last hop is the same as the receiver chain, we don't need - // to forward anymore - if hop.via.is_none() && hop.on.as_ref() == receiver_chain { - continue; - } - - // To unwrap we use the channel through which the token came, but once on the native - // chain, we need to get the channel that connects that chain to the receiver. - let channel = match &hop.via { - Some(channel) => channel.to_owned(), - None => ChannelId(self.get_channel(prev_chain, hop.on.as_ref())?), - }; - - next = Some(Box::new(Memo { - forward: ForwardingMemo { - receiver: self.encode_addr_for_chain(&receiver, prev_chain)?, - port: TRANSFER_PORT.to_string(), - channel, - next, - }, - })); - prev_chain = hop.on.as_ref(); - } - - let memo = - serde_json_wasm::to_string(&next).map_err(|e| RegistryError::SerialiaztionError { - error: e.to_string(), - })?; - - // encode the receiver address for the first chain - let first_receiver = self.encode_addr_for_chain(&receiver, first_chain.as_ref())?; - - Ok(MsgTransfer { - source_port: TRANSFER_PORT.to_string(), - source_channel: first_channel.to_owned().as_ref().to_string(), - token: Some(coin.into()), - sender: own_addr, - receiver: first_receiver, - timeout_height: None, - timeout_timestamp: Some(ts.nanos()), - memo, - }) - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn test_channel_id() { - assert!(ChannelId::validate("channel-0")); - assert!(ChannelId::validate("channel-1")); - assert!(ChannelId::validate("channel-1234567890")); - assert!(!ChannelId::validate("channel-")); - assert!(!ChannelId::validate("channel-abc")); - assert!(!ChannelId::validate("channel-1234567890a")); - assert!(!ChannelId::validate("channel-1234567890-")); - assert!(!ChannelId::validate("channel-1234567890-abc")); - assert!(!ChannelId::validate("channel-1234567890-1234567890")); - } - - #[test] - fn test_forwarding_memo() { - let memo = Memo { - forward: ForwardingMemo { - receiver: "receiver".to_string(), - port: "port".to_string(), - channel: ChannelId::new("channel-0").unwrap(), - next: Some(Box::new(Memo { - forward: ForwardingMemo { - receiver: "receiver2".to_string(), - port: "port2".to_string(), - channel: ChannelId::new("channel-1").unwrap(), - next: None, - }, - })), - }, - }; - let encoded = serde_json_wasm::to_string(&memo).unwrap(); - let decoded: Memo = serde_json_wasm::from_str(&encoded).unwrap(); - assert_eq!(memo, decoded); - assert_eq!( - encoded, - r#"{"forward":{"receiver":"receiver","port":"port","channel":"channel-0","next":{"forward":{"receiver":"receiver2","port":"port2","channel":"channel-1"}}}}"# - ) - } -} diff --git a/cosmwasm/contracts/crosschain-registry/src/helpers.rs b/cosmwasm/contracts/crosschain-registry/src/helpers.rs index dbaff4f7331..9b3a6052583 100644 --- a/cosmwasm/contracts/crosschain-registry/src/helpers.rs +++ b/cosmwasm/contracts/crosschain-registry/src/helpers.rs @@ -1,6 +1,5 @@ use cosmwasm_std::{Addr, Deps}; -use osmosis_std_derive::CosmwasmExt; -use sha2::{Digest, Sha256}; +use cw_storage_plus::Map; use crate::execute::{FullOperation, Permission}; use crate::state::{CHAIN_ADMIN_MAP, CHAIN_MAINTAINER_MAP, CONFIG, GLOBAL_ADMIN_MAP}; @@ -128,6 +127,51 @@ pub fn check_is_chain_maintainer( Err(ContractError::Unauthorized {}) } +// Helper functions to deal with Vec values in cosmwasm maps +pub fn push_to_map_value<'a, K, T>( + storage: &mut dyn cosmwasm_std::Storage, + map: &Map<'a, K, Vec>, + key: K, + value: T, +) -> Result<(), ContractError> +where + T: serde::Serialize + serde::de::DeserializeOwned + Clone, + K: cw_storage_plus::PrimaryKey<'a>, +{ + map.update(storage, key, |existing| -> Result<_, ContractError> { + match existing { + Some(mut v) => { + v.push(value); + Ok(v) + } + None => Ok(vec![value]), + } + })?; + Ok(()) +} + +pub fn remove_from_map_value<'a, K, T>( + storage: &mut dyn cosmwasm_std::Storage, + map: &Map<'a, K, Vec>, + key: K, + value: T, +) -> Result<(), ContractError> +where + T: serde::Serialize + serde::de::DeserializeOwned + Clone + PartialEq, + K: cw_storage_plus::PrimaryKey<'a>, +{ + map.update(storage, key, |existing| -> Result<_, ContractError> { + match existing { + Some(mut v) => { + v.retain(|val| *val != value); + Ok(v) + } + None => Ok(vec![value]), + } + })?; + Ok(()) +} + #[cfg(test)] pub mod test { use crate::execute; @@ -193,7 +237,7 @@ pub mod test { ], }; let chain_admin_info = mock_info(CHAIN_ADMIN, &[]); - contract::execute(deps.branch(), mock_env(), chain_admin_info.clone(), msg).unwrap(); + contract::execute(deps.branch(), mock_env(), chain_admin_info, msg).unwrap(); // Set the CHAIN_ADMIN address as the juno chain maintainer // This is used to ensure that permissions don't bleed over from one chain to another @@ -270,70 +314,8 @@ pub mod test { new_channel_id: None, }, ]; - execute::connection_operations(deps.as_mut(), info.sender.clone(), operations)?; + execute::connection_operations(deps.as_mut(), info.sender, operations)?; Ok(deps) } } - -// takes a transfer message and returns ibc/ -pub fn hash_denom_trace(unwrapped: &str) -> String { - let mut hasher = Sha256::new(); - hasher.update(unwrapped.as_bytes()); - let result = hasher.finalize(); - let hash = hex::encode(result); - format!("ibc/{}", hash.to_uppercase()) -} - -// DenomTrace query message definition. -#[derive( - Clone, - PartialEq, - Eq, - ::prost::Message, - serde::Serialize, - serde::Deserialize, - schemars::JsonSchema, - CosmwasmExt, -)] -#[proto_message(type_url = "/ibc.applications.transfer.v1.QueryDenomTraceRequest")] -#[proto_query( - path = "/ibc.applications.transfer.v1.Query/DenomTrace", - response_type = QueryDenomTraceResponse -)] -pub struct QueryDenomTraceRequest { - #[prost(string, tag = "1")] - pub hash: ::prost::alloc::string::String, -} - -#[derive( - Clone, - PartialEq, - Eq, - ::prost::Message, - serde::Serialize, - serde::Deserialize, - schemars::JsonSchema, - CosmwasmExt, -)] -#[proto_message(type_url = "/ibc.applications.transfer.v1.QueryDenomTraceResponse")] -pub struct QueryDenomTraceResponse { - #[prost(message, optional, tag = "1")] - pub denom_trace: Option, -} - -#[derive( - Clone, - PartialEq, - Eq, - ::prost::Message, - serde::Serialize, - serde::Deserialize, - schemars::JsonSchema, -)] -pub struct DenomTrace { - #[prost(string, tag = "1")] - pub path: ::prost::alloc::string::String, - #[prost(string, tag = "2")] - pub base_denom: ::prost::alloc::string::String, -} diff --git a/cosmwasm/contracts/crosschain-registry/src/lib.rs b/cosmwasm/contracts/crosschain-registry/src/lib.rs index 0eedaa750c7..ac94946c4d1 100644 --- a/cosmwasm/contracts/crosschain-registry/src/lib.rs +++ b/cosmwasm/contracts/crosschain-registry/src/lib.rs @@ -8,4 +8,3 @@ pub mod query; pub mod state; pub use crate::error::ContractError; -pub use crate::exports::Registries; diff --git a/cosmwasm/contracts/crosschain-registry/src/msg.rs b/cosmwasm/contracts/crosschain-registry/src/msg.rs index 22b2b70400e..c7de423f2ee 100644 --- a/cosmwasm/contracts/crosschain-registry/src/msg.rs +++ b/cosmwasm/contracts/crosschain-registry/src/msg.rs @@ -1,7 +1,6 @@ -use cosmwasm_schema::{cw_serde, QueryResponses}; +use cosmwasm_schema::cw_serde; use crate::execute; -use crate::exports::MultiHopDenom; #[cw_serde] pub struct InstantiateMsg { @@ -33,60 +32,15 @@ pub enum ExecuteMsg { UnwrapCoin { receiver: String, into_chain: Option, + #[serde(default = "String::new")] + with_memo: String, }, } -#[cw_serde] -#[derive(QueryResponses)] -pub enum QueryMsg { - #[returns(GetAddressFromAliasResponse)] - GetAddressFromAlias { contract_alias: String }, - - #[returns(GetChannelFromChainPairResponse)] - GetChannelFromChainPair { - source_chain: String, - destination_chain: String, - }, - - #[returns(GetDestinationChainFromSourceChainViaChannelResponse)] - GetDestinationChainFromSourceChainViaChannel { - on_chain: String, - via_channel: String, - }, - - #[returns(QueryGetBech32PrefixFromChainNameResponse)] - GetBech32PrefixFromChainName { chain_name: String }, - - #[returns(crate::helpers::QueryDenomTraceResponse)] - GetDenomTrace { ibc_denom: String }, -} - -// Response for GetAddressFromAlias query -#[cw_serde] -pub struct GetAddressFromAliasResponse { - pub address: String, -} - -// Response for GetChannelFromChainPair query -#[cw_serde] -pub struct GetChannelFromChainPairResponse { - pub channel_id: String, -} - -// Response for GetDestinationChainFromSourceChainViaChannel query -#[cw_serde] -pub struct GetDestinationChainFromSourceChainViaChannelResponse { - pub destination_chain: String, -} - -// Response for GetBech32PrefixFromChainName query -#[cw_serde] -pub struct QueryGetBech32PrefixFromChainNameResponse { - pub bech32_prefix: String, -} - -// Response for UnwrapDenom query -#[cw_serde] -pub struct UnwrapDenomResponse { - pub hops: MultiHopDenom, -} +// Import the queries from the package to avoid cyclic dependencies +pub use registry::msg::QueryMsg; +pub use registry::msg::{ + GetAddressFromAliasResponse, GetChannelFromChainPairResponse, + GetDestinationChainFromSourceChainViaChannelResponse, + QueryGetBech32PrefixFromChainNameResponse, +}; diff --git a/cosmwasm/contracts/crosschain-registry/src/query.rs b/cosmwasm/contracts/crosschain-registry/src/query.rs index 6c0448e33f2..d507d62837c 100644 --- a/cosmwasm/contracts/crosschain-registry/src/query.rs +++ b/cosmwasm/contracts/crosschain-registry/src/query.rs @@ -1,9 +1,10 @@ -use crate::helpers::*; use crate::state::{ - CHAIN_TO_BECH32_PREFIX_MAP, CHAIN_TO_CHAIN_CHANNEL_MAP, CHANNEL_ON_CHAIN_CHAIN_MAP, + CHAIN_TO_BECH32_PREFIX_MAP, CHAIN_TO_BECH32_PREFIX_REVERSE_MAP, CHAIN_TO_CHAIN_CHANNEL_MAP, + CHANNEL_ON_CHAIN_CHAIN_MAP, }; use cosmwasm_std::{Deps, StdError}; +use registry::proto::{DenomTrace, QueryDenomTraceRequest}; pub fn query_denom_trace_from_ibc_denom( deps: Deps, @@ -25,14 +26,29 @@ pub fn query_bech32_prefix_from_chain_name( if !chain_to_bech32_prefix_map.enabled { return Err(StdError::generic_err(format!( - "Chain {} to bech32 prefix mapping is disabled", - chain_name + "Chain {chain_name} to bech32 prefix mapping is disabled" ))); } Ok(chain_to_bech32_prefix_map.value) } +pub fn query_chain_name_from_bech32_prefix(deps: Deps, prefix: String) -> Result { + let chains = CHAIN_TO_BECH32_PREFIX_REVERSE_MAP.load(deps.storage, &prefix)?; + if chains.len() > 1 { + return Err(StdError::generic_err(format!( + "Bech32 prefix {prefix} is not unique" + ))); + } + + match chains.first() { + Some(chain) => Ok(chain.to_string()), + None => Err(StdError::generic_err(format!( + "Bech32 prefix {prefix} is not found" + ))), + } +} + pub fn query_channel_from_chain_pair( deps: Deps, source_chain: String, @@ -48,8 +64,7 @@ pub fn query_channel_from_chain_pair( if !channel.enabled { return Err(StdError::generic_err(format!( - "Channel from {} to {} mapping is disabled", - source_chain, destination_chain + "Channel from {source_chain} to {destination_chain} mapping is disabled" ))); } @@ -68,8 +83,7 @@ pub fn query_chain_from_channel_chain_pair( if !chain.enabled { return Err(StdError::generic_err(format!( - "Destination chain from channel {} on source chain {} mapping is disabled", - on_chain, via_channel + "Destination chain from channel {on_chain} on source chain {via_channel} mapping is disabled" ))); } diff --git a/cosmwasm/contracts/crosschain-registry/src/state.rs b/cosmwasm/contracts/crosschain-registry/src/state.rs index 503217c077b..1fafa24192c 100644 --- a/cosmwasm/contracts/crosschain-registry/src/state.rs +++ b/cosmwasm/contracts/crosschain-registry/src/state.rs @@ -8,6 +8,7 @@ enum StorageKey { ChainToChainChannelMap, ChannelOnChainChainMap, ChainToBech32PrefixMap, + ChainToBech32PrefixReverseMap, Config, GlobalAdminMap, ChainAdminMap, @@ -22,6 +23,7 @@ impl StorageKey { StorageKey::ChainToChainChannelMap => "ctccm", StorageKey::ChannelOnChainChainMap => "cotccm", StorageKey::ChainToBech32PrefixMap => "ctbpm", + StorageKey::ChainToBech32PrefixReverseMap => "ctbprm", StorageKey::Config => "cfg", StorageKey::GlobalAdminMap => "gam", StorageKey::ChainAdminMap => "cam", @@ -67,6 +69,12 @@ pub const CHANNEL_ON_CHAIN_CHAIN_MAP: Map<(&str, &str), RegistryValue> = pub const CHAIN_TO_BECH32_PREFIX_MAP: Map<&str, RegistryValue> = Map::new(StorageKey::ChainToBech32PrefixMap.to_string()); +// CHAIN_TO_BECH32_PREFIX_MAP is a map from a chain id to its respective bech32 prefix. +// The boolean value indicates whether the mapping is enabled or not. +// CHAIN_ID -> (BECH32_PREFIX, ENABLED) +pub const CHAIN_TO_BECH32_PREFIX_REVERSE_MAP: Map<&str, Vec> = + Map::new(StorageKey::ChainToBech32PrefixReverseMap.to_string()); + // CONFIG stores the contract owner pub const CONFIG: Item = Item::new(StorageKey::Config.to_string()); diff --git a/cosmwasm/contracts/crosschain-swaps/Cargo.toml b/cosmwasm/contracts/crosschain-swaps/Cargo.toml index a2107db20d9..ea5f572463c 100644 --- a/cosmwasm/contracts/crosschain-swaps/Cargo.toml +++ b/cosmwasm/contracts/crosschain-swaps/Cargo.toml @@ -57,10 +57,11 @@ serde-json-wasm = { workspace = true } serde-cw-value = { workspace = true } bech32 = { workspace = true } cw-utils = { workspace = true } +itertools = {workspace = true} swaprouter = { path = "../swaprouter", features = ["imported"]} +registry = { path = "../../packages/registry"} prost = {version = "0.11.2", default-features = false, features = ["prost-derive"]} -osmosis-std-derive = "0.13.2" enum-repr = "0.2.6" [dev-dependencies] diff --git a/cosmwasm/contracts/crosschain-swaps/src/checks.rs b/cosmwasm/contracts/crosschain-swaps/src/checks.rs index dcc3eebeff4..785f50dd16a 100644 --- a/cosmwasm/contracts/crosschain-swaps/src/checks.rs +++ b/cosmwasm/contracts/crosschain-swaps/src/checks.rs @@ -1,9 +1,9 @@ use cosmwasm_std::{Addr, Deps}; +use itertools::{self, Itertools}; +use registry::Registry; -use crate::{ - state::{CHANNEL_MAP, CONFIG, DISABLED_PREFIXES}, - ContractError, -}; +use crate::state::CONFIG; +use crate::ContractError; pub fn check_is_contract_governor(deps: Deps, sender: Addr) -> Result<(), ContractError> { let config = CONFIG.load(deps.storage).unwrap(); @@ -16,7 +16,7 @@ pub fn check_is_contract_governor(deps: Deps, sender: Addr) -> Result<(), Contra /// If the specified receiver is an explicit channel+addr, extract the parts /// and use the strings as provided -fn validate_explicit_receiver(receiver: &str) -> Result<(String, Addr), ContractError> { +fn validate_explicit_receiver(deps: Deps, receiver: &str) -> Result<(String, Addr), ContractError> { let (channel, address) = receiver .strip_prefix("ibc:") .and_then(|s| s.split_once('/')) @@ -31,46 +31,45 @@ fn validate_explicit_receiver(receiver: &str) -> Result<(String, Addr), Contract receiver: receiver.to_string(), }); } - let channel_id = &channel[8..]; - if channel_id.is_empty() || channel_id.parse::().is_err() { - return Err(ContractError::InvalidReceiver { - receiver: receiver.to_string(), - }); - }; let Ok(_) = bech32::decode(&address) else { return Err(ContractError::InvalidReceiver { receiver: receiver.to_string() }) }; - Ok((channel.to_string(), Addr::unchecked(address))) + let registry = Registry::default(deps); + let chain = registry.get_connected_chain("osmosis", &channel)?; + // TODO: validate that the prefix of the receiver matches the chain + + Ok((chain, Addr::unchecked(address))) } /// If the specified receiver is not explicit, validate that the receiver /// address is a valid address for the destination chain. This will prevent IBC /// transfers from failing after forwarding -fn validate_simplified_receiver( - deps: Deps, - receiver: &str, -) -> Result<(String, Addr), ContractError> { +fn validate_bech32_receiver(deps: Deps, receiver: &str) -> Result<(String, Addr), ContractError> { let Ok((prefix, _, _)) = bech32::decode(receiver) else { return Err(ContractError::InvalidReceiver { receiver: receiver.to_string() }) }; - // Check if the prefix has been disabled - if DISABLED_PREFIXES.has(deps.storage, &prefix) { - return Err(ContractError::InvalidReceiver { - receiver: receiver.to_string(), - }); + let registry = Registry::default(deps); + let chain = registry.get_chain_for_bech32_prefix(&prefix)?; + + Ok((chain, Addr::unchecked(receiver))) +} + +fn validate_chain_receiver(deps: Deps, receiver: &str) -> Result<(String, Addr), ContractError> { + let Some((chain, addr)) = receiver.split('/').collect_tuple() else { + return Err(ContractError::InvalidReceiver { receiver: receiver.to_string() }) }; - let channel = - CHANNEL_MAP - .load(deps.storage, &prefix) - .map_err(|_| ContractError::InvalidReceiver { - receiver: receiver.to_string(), - })?; + // TODO: validate that the prefix of the receiver matches the chain + let _registry = Registry::default(deps); + + let Ok(_) = bech32::decode(addr) else { + return Err(ContractError::InvalidReceiver { receiver: receiver.to_string() }) + }; - Ok((channel, Addr::unchecked(receiver))) + Ok((chain.to_string(), Addr::unchecked(addr))) } /// The receiver can be specified explicitly (ibc:channel-n/osmo1...) or in a @@ -84,24 +83,20 @@ fn validate_simplified_receiver( /// appropriate channel for the addr pub fn validate_receiver(deps: Deps, receiver: &str) -> Result<(String, Addr), ContractError> { if receiver.starts_with("ibc:channel-") { - validate_explicit_receiver(receiver) + validate_explicit_receiver(deps, receiver) + } else if receiver.contains('/') { + validate_chain_receiver(deps, receiver) } else { - validate_simplified_receiver(deps, receiver) + validate_bech32_receiver(deps, receiver) } } -fn stringify(json: &serde_cw_value::Value) -> Result { - serde_json_wasm::to_string(&json).map_err(|_| ContractError::CustomError { - msg: "invalid value".to_string(), // This shouldn't happen. - }) -} - pub fn ensure_map(json: &serde_cw_value::Value) -> Result<(), ContractError> { match json { serde_cw_value::Value::Map(_) => Ok(()), _ => Err(ContractError::InvalidJson { error: format!("invalid json: expected an object"), - json: stringify(json)?, + json: registry::utils::stringify(json)?, }), } } @@ -120,7 +115,7 @@ pub fn ensure_key_missing( { Err(ContractError::InvalidJson { error: format!("invalid json: {key} key not allowed"), - json: stringify(json_object)?, + json: registry::utils::stringify(json_object)?, }) } else { Ok(()) diff --git a/cosmwasm/contracts/crosschain-swaps/src/consts.rs b/cosmwasm/contracts/crosschain-swaps/src/consts.rs index b4938b11f28..ba7ecfb5728 100644 --- a/cosmwasm/contracts/crosschain-swaps/src/consts.rs +++ b/cosmwasm/contracts/crosschain-swaps/src/consts.rs @@ -7,8 +7,5 @@ pub enum MsgReplyID { Forward = 2, } -// IBC timeout -pub const PACKET_LIFETIME: u64 = 604_800u64; // One week in seconds - // Callback key pub const CALLBACK_KEY: &str = "ibc_callback"; diff --git a/cosmwasm/contracts/crosschain-swaps/src/contract.rs b/cosmwasm/contracts/crosschain-swaps/src/contract.rs index dbefb18764f..016bb49ea17 100644 --- a/cosmwasm/contracts/crosschain-swaps/src/contract.rs +++ b/cosmwasm/contracts/crosschain-swaps/src/contract.rs @@ -8,7 +8,7 @@ use cw2::set_contract_version; use crate::consts::MsgReplyID; use crate::error::ContractError; use crate::msg::{ExecuteMsg, IBCLifecycleComplete, InstantiateMsg, MigrateMsg, QueryMsg, SudoMsg}; -use crate::state::{Config, CHANNEL_MAP, CONFIG, RECOVERY_STATES}; +use crate::state::{Config, CONFIG, RECOVERY_STATES}; use crate::{execute, ibc_lifecycle}; // version info for migration info @@ -33,9 +33,6 @@ pub fn instantiate( governor, }; CONFIG.save(deps.storage, &state)?; - for (prefix, channel) in msg.channels.into_iter() { - CHANNEL_MAP.save(deps.storage, &prefix, &channel)?; - } Ok(Response::new().add_attribute("method", "instantiate")) } @@ -76,13 +73,6 @@ pub fn execute( ) } ExecuteMsg::Recover {} => execute::recover(deps, info.sender), - ExecuteMsg::SetChannel { prefix, channel } => { - execute::set_channel(deps, info.sender, prefix, channel) - } - ExecuteMsg::DisablePrefix { prefix } => execute::disable_prefix(deps, info.sender, prefix), - ExecuteMsg::ReEnablePrefix { prefix } => { - execute::re_enable_prefix(deps, info.sender, prefix) - } ExecuteMsg::TransferOwnership { new_governor } => { execute::transfer_ownership(deps, info.sender, new_governor) } @@ -120,11 +110,11 @@ pub fn sudo(deps: DepsMut, _env: Env, msg: SudoMsg) -> Result Result { +pub fn reply(deps: DepsMut, env: Env, reply: Reply) -> Result { deps.api .debug(&format!("executing crosschain reply: {reply:?}")); match MsgReplyID::from_repr(reply.id) { - Some(MsgReplyID::Swap) => execute::handle_swap_reply(deps, reply), + Some(MsgReplyID::Swap) => execute::handle_swap_reply(deps, env, reply), Some(MsgReplyID::Forward) => execute::handle_forward_reply(deps, reply), None => Err(ContractError::InvalidReplyID { id: reply.id }), } diff --git a/cosmwasm/contracts/crosschain-swaps/src/error.rs b/cosmwasm/contracts/crosschain-swaps/src/error.rs index 921677f503a..b0b8f3e2ae0 100644 --- a/cosmwasm/contracts/crosschain-swaps/src/error.rs +++ b/cosmwasm/contracts/crosschain-swaps/src/error.rs @@ -1,4 +1,5 @@ use cosmwasm_std::StdError; +use registry::RegistryError; use thiserror::Error; #[derive(Error, Debug)] @@ -6,6 +7,9 @@ pub enum ContractError { #[error("{0}")] Std(#[from] StdError), + #[error("{0}")] + RegistryError(#[from] RegistryError), + #[error("{0}")] Payment(#[from] cw_utils::PaymentError), diff --git a/cosmwasm/contracts/crosschain-swaps/src/execute.rs b/cosmwasm/contracts/crosschain-swaps/src/execute.rs index a31054987f2..8d75f841fa2 100644 --- a/cosmwasm/contracts/crosschain-swaps/src/execute.rs +++ b/cosmwasm/contracts/crosschain-swaps/src/execute.rs @@ -1,15 +1,16 @@ -use cosmwasm_std::{coins, to_binary, wasm_execute, BankMsg, Empty, Timestamp}; +use cosmwasm_std::{coins, to_binary, wasm_execute, BankMsg, Env, Timestamp}; use cosmwasm_std::{Addr, Coin, DepsMut, Response, SubMsg, SubMsgResponse, SubMsgResult}; +use registry::Registry; use swaprouter::msg::ExecuteMsg as SwapRouterExecute; use crate::checks::{check_is_contract_governor, ensure_key_missing, validate_receiver}; -use crate::consts::{MsgReplyID, CALLBACK_KEY, PACKET_LIFETIME}; -use crate::ibc::{MsgTransfer, MsgTransferResponse}; +use crate::consts::{MsgReplyID, CALLBACK_KEY}; use crate::msg::{CrosschainSwapResponse, FailedDeliveryAction, SerializableJson}; +use registry::proto::MsgTransferResponse; -use crate::state::{self, Config, CHANNEL_MAP, DISABLED_PREFIXES}; +use crate::state; use crate::state::{ - ForwardMsgReplyState, ForwardTo, SwapMsgReplyState, CONFIG, FORWARD_REPLY_STATE, + Config, ForwardMsgReplyState, ForwardTo, SwapMsgReplyState, CONFIG, FORWARD_REPLY_STATE, INFLIGHT_PACKETS, RECOVERY_STATES, SWAP_REPLY_STATE, }; use crate::utils::{build_memo, parse_swaprouter_reply}; @@ -43,11 +44,12 @@ pub fn swap_and_forward( let msg = wasm_execute(config.swap_contract, &swap_msg, vec![swap_coin])?; // Check that the received is valid and retrieve its channel - let (valid_channel, valid_receiver) = validate_receiver(deps.as_ref(), receiver)?; + let (valid_chain, valid_receiver) = validate_receiver(deps.as_ref(), receiver)?; // If there is a memo, check that it is valid (i.e. a valud json object that // doesn't contain the key that we will insert later) if let Some(memo) = &next_memo { // Ensure the json is an object ({...}) and that it does not contain the CALLBACK_KEY + deps.api.debug(&format!("checking memo: {memo:?}")); ensure_key_missing(memo.as_value(), CALLBACK_KEY)?; } @@ -62,6 +64,8 @@ pub fn swap_and_forward( }); } + // TODO: Unwrap before swap + // Store information about the original message to be used in the reply SWAP_REPLY_STATE.save( deps.storage, @@ -70,7 +74,7 @@ pub fn swap_and_forward( block_time, contract_addr, forward_to: ForwardTo { - channel: valid_channel, + chain: valid_chain, receiver: valid_receiver, next_memo, on_failed_delivery: failed_delivery_action, @@ -84,6 +88,7 @@ pub fn swap_and_forward( // The swap has succeeded and we need to generate the forward IBC transfer pub fn handle_swap_reply( deps: DepsMut, + env: Env, msg: cosmwasm_std::Reply, ) -> Result { deps.api.debug(&format!("handle_swap_reply")); @@ -95,32 +100,25 @@ pub fn handle_swap_reply( // Build an IBC packet to forward the swap. let contract_addr = &swap_msg_state.contract_addr; - let ts = swap_msg_state.block_time.plus_seconds(PACKET_LIFETIME); // If the memo is provided we want to include it in the IBC message. If not, // we default to an empty object. The resulting memo will always include the // callback so this contract can track the IBC send let memo = build_memo(swap_msg_state.forward_to.next_memo, contract_addr.as_str())?; - // Cosmwasm's IBCMsg::Transfer does not support memo. - // To build and send the packet properly, we need to send it using stargate messages. - // See https://github.com/CosmWasm/cosmwasm/issues/1477 - let ibc_transfer = MsgTransfer { - source_port: "transfer".to_string(), - source_channel: swap_msg_state.forward_to.channel.clone(), - token: Some( - Coin::new( - swap_response.amount.into(), - swap_response.token_out_denom.clone(), - ) - .into(), + let registry = Registry::default(deps.as_ref()); + let ibc_transfer = registry.unwrap_coin_into( + Coin::new( + swap_response.amount.into(), + swap_response.token_out_denom.clone(), ), - sender: contract_addr.to_string(), - receiver: swap_msg_state.forward_to.receiver.clone().into(), - timeout_height: None, - timeout_timestamp: Some(ts.nanos()), + swap_msg_state.forward_to.receiver.clone().to_string(), + Some(&swap_msg_state.forward_to.chain), + env.contract.address.to_string(), + env.block.time, memo, - }; + )?; + deps.api.debug(&format!("IBC transfer: {ibc_transfer:?}")); // Base response let response = Response::new() @@ -142,7 +140,7 @@ pub fn handle_swap_reply( FORWARD_REPLY_STATE.save( deps.storage, &ForwardMsgReplyState { - channel_id: swap_msg_state.forward_to.channel, + channel_id: ibc_transfer.source_channel.clone(), to_address: swap_msg_state.forward_to.receiver.into(), amount: swap_response.amount.into(), denom: swap_response.token_out_denom, @@ -223,6 +221,8 @@ pub fn handle_forward_reply( /// Transfers any tokens stored in RECOVERY_STATES[sender] to the sender. pub fn recover(deps: DepsMut, sender: Addr) -> Result { let recoveries = RECOVERY_STATES.load(deps.storage, &sender)?; + // Remove the recoveries from the store. If the sends fail, the whole tx should be reverted. + RECOVERY_STATES.remove(deps.storage, &sender); let msgs = recoveries.into_iter().map(|r| BankMsg::Send { to_address: r.recovery_addr.into(), amount: coins(r.amount, r.denom), @@ -230,49 +230,6 @@ pub fn recover(deps: DepsMut, sender: Addr) -> Result { Ok(Response::new().add_messages(msgs)) } -/// Set a prefix->channel map in the registry -pub fn set_channel( - deps: DepsMut, - sender: Addr, - prefix: String, - channel: String, -) -> Result { - check_is_contract_governor(deps.as_ref(), sender)?; - if CHANNEL_MAP.has(deps.storage, &prefix) { - return Err(ContractError::PrefixAlreadyExists { prefix }); - } - CHANNEL_MAP.save(deps.storage, &prefix, &channel)?; - Ok(Response::new().add_attribute("method", "set_channel")) -} - -/// Disable a prefix -pub fn disable_prefix( - deps: DepsMut, - sender: Addr, - prefix: String, -) -> Result { - check_is_contract_governor(deps.as_ref(), sender)?; - if !CHANNEL_MAP.has(deps.storage, &prefix) { - return Err(ContractError::PrefixDoesNotExist { prefix }); - } - DISABLED_PREFIXES.save(deps.storage, &prefix, &Empty {})?; - Ok(Response::new().add_attribute("method", "disable_prefix")) -} - -/// Re-enable a prefix -pub fn re_enable_prefix( - deps: DepsMut, - sender: Addr, - prefix: String, -) -> Result { - check_is_contract_governor(deps.as_ref(), sender)?; - if !DISABLED_PREFIXES.has(deps.storage, &prefix) { - return Err(ContractError::PrefixNotDisabled { prefix }); - } - DISABLED_PREFIXES.remove(deps.storage, &prefix); - Ok(Response::new().add_attribute("method", "re_enable_prefix")) -} - // Transfer ownership of this contract pub fn transfer_ownership( deps: DepsMut, @@ -324,16 +281,12 @@ mod tests { static CREATOR_ADDRESS: &str = "creator"; static SWAPCONTRACT_ADDRESS: &str = "swapcontract"; - static RECEIVER_ADDRESS1: &str = "prefix12smx2wdlyttvyzvzg54y2vnqwq2qjatel8rck9"; - static RECEIVER_ADDRESS2: &str = "other12smx2wdlyttvyzvzg54y2vnqwq2qjatere840z"; - // test helper #[allow(unused_assignments)] fn initialize_contract(deps: DepsMut) -> Addr { let msg = InstantiateMsg { governor: String::from(CREATOR_ADDRESS), swap_contract: String::from(SWAPCONTRACT_ADDRESS), - channels: vec![("prefix".to_string(), "channel1".to_string())], }; let info = mock_info(CREATOR_ADDRESS, &[]); @@ -349,10 +302,6 @@ mod tests { let governor = initialize_contract(deps.as_mut()); let config = CONFIG.load(&deps.storage).unwrap(); assert_eq!(config.governor, governor); - assert_eq!( - CHANNEL_MAP.load(&deps.storage, "prefix").unwrap(), - "channel1" - ); } #[test] @@ -391,92 +340,6 @@ mod tests { assert_eq!(governor, config.governor); } - #[test] - fn modify_channel_registry() { - let mut deps = mock_dependencies(); - - let governor = initialize_contract(deps.as_mut()); - let governor_info = mock_info(governor.as_str(), &vec![] as &Vec); - validate_receiver(deps.as_ref(), RECEIVER_ADDRESS1).unwrap(); - - // and new channel - let msg = ExecuteMsg::SetChannel { - prefix: "other".to_string(), - channel: "channel2".to_string(), - }; - contract::execute(deps.as_mut(), mock_env(), governor_info.clone(), msg).unwrap(); - - assert_eq!( - CHANNEL_MAP.load(&deps.storage, "prefix").unwrap(), - "channel1" - ); - assert_eq!( - CHANNEL_MAP.load(&deps.storage, "other").unwrap(), - "channel2" - ); - validate_receiver(deps.as_ref(), RECEIVER_ADDRESS1).unwrap(); - validate_receiver(deps.as_ref(), RECEIVER_ADDRESS2).unwrap(); - - // Can't override an existing channel - let msg = ExecuteMsg::SetChannel { - prefix: "prefix".to_string(), - channel: "new_channel".to_string(), - }; - contract::execute(deps.as_mut(), mock_env(), governor_info.clone(), msg).unwrap_err(); - - assert_eq!( - CHANNEL_MAP.load(&deps.storage, "prefix").unwrap(), - "channel1" - ); - - // remove channel - let msg = ExecuteMsg::DisablePrefix { - prefix: "prefix".to_string(), - }; - contract::execute(deps.as_mut(), mock_env(), governor_info.clone(), msg).unwrap(); - - assert!(DISABLED_PREFIXES.load(&deps.storage, "prefix").is_ok()); - // The prefix no longer validates - validate_receiver(deps.as_ref(), RECEIVER_ADDRESS1).unwrap_err(); - - // Re enable the prefix - let msg = ExecuteMsg::ReEnablePrefix { - prefix: "prefix".to_string(), - }; - contract::execute(deps.as_mut(), mock_env(), governor_info, msg).unwrap(); - assert!(DISABLED_PREFIXES.load(&deps.storage, "prefix").is_err()); - - // The prefix is allowed again - validate_receiver(deps.as_ref(), RECEIVER_ADDRESS1).unwrap(); - } - - #[test] - fn modify_channel_registry_unauthorized() { - let mut deps = mock_dependencies(); - initialize_contract(deps.as_mut()); - - // A user other than the owner cannot modify the channel registry - let other_info = mock_info("other_sender", &vec![] as &Vec); - let msg = ExecuteMsg::SetChannel { - prefix: "other".to_string(), - channel: "something_else".to_string(), - }; - contract::execute(deps.as_mut(), mock_env(), other_info.clone(), msg).unwrap_err(); - assert_eq!( - CHANNEL_MAP.load(&deps.storage, "prefix").unwrap(), - "channel1" - ); - - let msg = ExecuteMsg::DisablePrefix { - prefix: "prefix".to_string(), - }; - contract::execute(deps.as_mut(), mock_env(), other_info, msg).unwrap_err(); - assert_eq!( - CHANNEL_MAP.load(&deps.storage, "prefix").unwrap(), - "channel1" - ); - } - #[test] fn set_swap_contract() { let mut deps = mock_dependencies(); diff --git a/cosmwasm/contracts/crosschain-swaps/src/lib.rs b/cosmwasm/contracts/crosschain-swaps/src/lib.rs index 09a2d82276f..3db805673ac 100644 --- a/cosmwasm/contracts/crosschain-swaps/src/lib.rs +++ b/cosmwasm/contracts/crosschain-swaps/src/lib.rs @@ -5,7 +5,6 @@ pub mod consts; pub mod contract; mod error; mod execute; -pub mod ibc; mod ibc_lifecycle; pub mod msg; pub mod state; diff --git a/cosmwasm/contracts/crosschain-swaps/src/msg.rs b/cosmwasm/contracts/crosschain-swaps/src/msg.rs index d1f3c8cb394..7d3a1d12f49 100644 --- a/cosmwasm/contracts/crosschain-swaps/src/msg.rs +++ b/cosmwasm/contracts/crosschain-swaps/src/msg.rs @@ -11,11 +11,6 @@ pub struct InstantiateMsg { /// This should be an instance of the Osmosis swaprouter contract pub swap_contract: String, - - /// These are the channels that will be accepted by the contract. This is - /// needed to avoid sending packets to addresses not supported by the - /// receiving chain. The channels are specified as (bech32_prefix, channel_id) - pub channels: Vec<(String, String)>, } /// An enum specifying what resolution the user expects in the case of a bad IBC @@ -90,16 +85,6 @@ pub enum ExecuteMsg { Recover {}, // Contract Management - SetChannel { - prefix: String, - channel: String, - }, - DisablePrefix { - prefix: String, - }, - ReEnablePrefix { - prefix: String, - }, TransferOwnership { new_governor: String, }, diff --git a/cosmwasm/contracts/crosschain-swaps/src/state.rs b/cosmwasm/contracts/crosschain-swaps/src/state.rs index 16bfb20336c..1514be24fee 100644 --- a/cosmwasm/contracts/crosschain-swaps/src/state.rs +++ b/cosmwasm/contracts/crosschain-swaps/src/state.rs @@ -1,5 +1,5 @@ use cosmwasm_schema::cw_serde; -use cosmwasm_std::{Addr, Empty, Timestamp}; +use cosmwasm_std::{Addr, Timestamp}; use cw_storage_plus::{Item, Map}; use swaprouter::msg::ExecuteMsg as SwapRouterExecute; @@ -13,7 +13,7 @@ pub struct Config { #[cw_serde] pub struct ForwardTo { - pub channel: String, + pub chain: String, pub receiver: Addr, pub next_memo: Option, pub on_failed_delivery: FailedDeliveryAction, @@ -69,7 +69,3 @@ pub const INFLIGHT_PACKETS: Map<(&str, u64), ibc::IBCTransfer> = Map::new("infli /// Recovery. This tracks any recovery that an addr can execute. pub const RECOVERY_STATES: Map<&Addr, Vec> = Map::new("recovery"); - -/// A mapping of knwon IBC channels accepted by the contract. bech32_prefix => channel -pub const CHANNEL_MAP: Map<&str, String> = Map::new("chain_map"); -pub const DISABLED_PREFIXES: Map<&str, Empty> = Map::new("disabled_prefixes"); diff --git a/cosmwasm/contracts/crosschain-swaps/tests/test_env.rs b/cosmwasm/contracts/crosschain-swaps/tests/test_env.rs index 0784d57362d..e37d6b1e919 100644 --- a/cosmwasm/contracts/crosschain-swaps/tests/test_env.rs +++ b/cosmwasm/contracts/crosschain-swaps/tests/test_env.rs @@ -71,7 +71,6 @@ impl TestEnv { get_crosschain_swaps_wasm(), &CrosschainInstantiate { swap_contract: swaprouter_address.clone(), - channels: vec![("osmo".to_string(), "channel-0".to_string())], governor: owner.address(), }, ); diff --git a/cosmwasm/contracts/outpost/Cargo.toml b/cosmwasm/contracts/outpost/Cargo.toml index b427e8b97d7..fb00b8c439c 100644 --- a/cosmwasm/contracts/outpost/Cargo.toml +++ b/cosmwasm/contracts/outpost/Cargo.toml @@ -53,6 +53,7 @@ cw-utils = { workspace = true } swaprouter = { path = "../swaprouter", features = ["imported"]} crosschain-swaps = { path = "../crosschain-swaps", features = ["imported"]} +registry = { path = "../../packages/registry"} [dev-dependencies] cw-multi-test = { workspace = true } diff --git a/cosmwasm/contracts/outpost/src/execute.rs b/cosmwasm/contracts/outpost/src/execute.rs index db5e387234c..0fbdd615fc9 100644 --- a/cosmwasm/contracts/outpost/src/execute.rs +++ b/cosmwasm/contracts/outpost/src/execute.rs @@ -63,7 +63,7 @@ pub fn execute_swap( error: e.to_string(), })?; - let ibc_transfer_msg = crosschain_swaps::ibc::MsgTransfer { + let ibc_transfer_msg = registry::proto::MsgTransfer { source_port: "transfer".to_string(), source_channel: "channel-0".to_string(), token: Some(Coin::new(coin.amount.into(), coin.denom).into()), diff --git a/cosmwasm/packages/registry/Cargo.toml b/cosmwasm/packages/registry/Cargo.toml new file mode 100644 index 00000000000..f0c461411f7 --- /dev/null +++ b/cosmwasm/packages/registry/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "registry" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +cosmwasm-schema = { workspace = true } +cosmwasm-std = { workspace = true } +serde = { workspace = true } +thiserror = { workspace = true } +bech32 = { workspace = true } +serde-json-wasm = { workspace = true } +serde-cw-value = { workspace = true } +sha2 = "0.10.6" +hex = "0.4.3" +schemars = { workspace = true } +osmosis-std = { workspace = true } +osmosis-std-derive = "0.13.2" +prost = {version = "0.11.2", default-features = false, features = ["prost-derive"]} +itertools = {workspace = true} diff --git a/cosmwasm/packages/registry/src/error.rs b/cosmwasm/packages/registry/src/error.rs new file mode 100644 index 00000000000..6e3ed5765a9 --- /dev/null +++ b/cosmwasm/packages/registry/src/error.rs @@ -0,0 +1,98 @@ +use cosmwasm_std::StdError; +use thiserror::Error; + +#[derive(Error, Debug, PartialEq)] +pub enum RegistryError { + #[error("{0}")] + Std(#[from] StdError), + + #[error("{0}")] + Json(#[from] serde_json_wasm::de::Error), + + // Validation errors + #[error("Invalid channel id: {0}")] + InvalidChannelId(String), + + #[error("error {action} {addr}")] + Bech32Error { + action: String, + addr: String, + #[source] + source: bech32::Error, + }, + + #[error("serialization error: {error}")] + SerialiaztionError { error: String }, + + #[error("denom {denom:?} is not an IBC denom")] + InvalidIBCDenom { denom: String }, + + #[error("No deom trace found for: {denom:?}")] + NoDenomTrace { denom: String }, + + #[error("Invalid denom trace: {error}")] + InvalidDenomTrace { error: String }, + + #[error("Invalid path {path:?} for denom {denom:?}")] + InvalidDenomTracePath { path: String, denom: String }, + + #[error("Invalid transfer port {port:?}")] + InvalidTransferPort { port: String }, + + #[error("Invalid multihop length {length:?}. Must be >={min}")] + InvalidMultiHopLengthMin { length: usize, min: usize }, + + #[error("Invalid multihop length {length:?}. Must be <={max}")] + InvalidMultiHopLengthMax { length: usize, max: usize }, + + #[error( + "receiver prefix for {receiver} must match the bech32 prefix of the destination chain {chain}" + )] + InvalidReceiverPrefix { receiver: String, chain: String }, + + #[error("trying to transfer from chain {chain} to itself. This is not allowed.")] + InvalidHopSameChain { chain: String }, + + #[error("invalid json: {error}. Got: {json}")] + InvalidJson { error: String, json: String }, + + // Registry loading errors + #[error("contract alias does not exist: {alias:?}")] + AliasDoesNotExist { alias: String }, + + #[error("no authorized address found for source chain: {source_chain:?}")] + ChainAuthorizedAddressDoesNotExist { source_chain: String }, + + #[error("chain channel link does not exist: {source_chain:?} -> {destination_chain:?}")] + ChainChannelLinkDoesNotExist { + source_chain: String, + destination_chain: String, + }, + + #[error("channel chain link does not exist: {channel_id:?} on {source_chain:?} -> chain")] + ChannelChainLinkDoesNotExist { + channel_id: String, + source_chain: String, + }, + + #[error("channel chain link does not exist: {channel_id:?} on {source_chain:?} -> chain")] + ChannelToChainChainLinkDoesNotExist { + channel_id: String, + source_chain: String, + }, + + #[error("native denom link does not exist: {native_denom:?}")] + NativeDenomLinkDoesNotExist { native_denom: String }, + + #[error("bech32 prefix does not exist for chain: {chain}")] + Bech32PrefixDoesNotExist { chain: String }, +} + +impl From for StdError { + fn from(e: RegistryError) -> Self { + match e { + RegistryError::Std(e) => e, + _ => StdError::generic_err(e.to_string()), + } + } +} diff --git a/cosmwasm/packages/registry/src/lib.rs b/cosmwasm/packages/registry/src/lib.rs new file mode 100644 index 00000000000..35d6aba584c --- /dev/null +++ b/cosmwasm/packages/registry/src/lib.rs @@ -0,0 +1,9 @@ +mod error; +mod registry; + +pub use crate::registry::Registry; +pub use error::RegistryError; + +pub mod msg; +pub mod proto; +pub mod utils; diff --git a/cosmwasm/packages/registry/src/msg.rs b/cosmwasm/packages/registry/src/msg.rs new file mode 100644 index 00000000000..a503740c5fa --- /dev/null +++ b/cosmwasm/packages/registry/src/msg.rs @@ -0,0 +1,59 @@ +use cosmwasm_schema::{cw_serde, QueryResponses}; + +#[cw_serde] +#[derive(QueryResponses)] +pub enum QueryMsg { + #[returns(GetAddressFromAliasResponse)] + GetAddressFromAlias { contract_alias: String }, + + #[returns(GetChannelFromChainPairResponse)] + GetChannelFromChainPair { + source_chain: String, + destination_chain: String, + }, + + #[returns(GetDestinationChainFromSourceChainViaChannelResponse)] + GetDestinationChainFromSourceChainViaChannel { + on_chain: String, + via_channel: String, + }, + + #[returns(QueryGetBech32PrefixFromChainNameResponse)] + GetBech32PrefixFromChainName { chain_name: String }, + + #[returns(QueryGetChainNameFromBech32PrefixResponse)] + GetChainNameFromBech32Prefix { prefix: String }, + + #[returns(crate::proto::QueryDenomTraceResponse)] + GetDenomTrace { ibc_denom: String }, +} + +// Response for GetAddressFromAlias query +#[cw_serde] +pub struct GetAddressFromAliasResponse { + pub address: String, +} + +// Response for GetChannelFromChainPair query +#[cw_serde] +pub struct GetChannelFromChainPairResponse { + pub channel_id: String, +} + +// Response for GetDestinationChainFromSourceChainViaChannel query +#[cw_serde] +pub struct GetDestinationChainFromSourceChainViaChannelResponse { + pub destination_chain: String, +} + +// Response for GetBech32PrefixFromChainName query +#[cw_serde] +pub struct QueryGetBech32PrefixFromChainNameResponse { + pub bech32_prefix: String, +} + +// Response for GetChainNameFromBech32Prefix query +#[cw_serde] +pub struct QueryGetChainNameFromBech32PrefixResponse { + pub chain_name: String, +} diff --git a/cosmwasm/contracts/crosschain-swaps/src/ibc.rs b/cosmwasm/packages/registry/src/proto.rs similarity index 57% rename from cosmwasm/contracts/crosschain-swaps/src/ibc.rs rename to cosmwasm/packages/registry/src/proto.rs index 817e0801e57..16ed2d61c2a 100644 --- a/cosmwasm/contracts/crosschain-swaps/src/ibc.rs +++ b/cosmwasm/packages/registry/src/proto.rs @@ -54,3 +54,56 @@ pub struct MsgTransferResponse { #[prost(uint64, tag = "1")] pub sequence: u64, } + +// DenomTrace query message definition. +#[derive( + Clone, + PartialEq, + Eq, + ::prost::Message, + serde::Serialize, + serde::Deserialize, + schemars::JsonSchema, + CosmwasmExt, +)] +#[proto_message(type_url = "/ibc.applications.transfer.v1.QueryDenomTraceRequest")] +#[proto_query( + path = "/ibc.applications.transfer.v1.Query/DenomTrace", + response_type = QueryDenomTraceResponse +)] +pub struct QueryDenomTraceRequest { + #[prost(string, tag = "1")] + pub hash: ::prost::alloc::string::String, +} + +#[derive( + Clone, + PartialEq, + Eq, + ::prost::Message, + serde::Serialize, + serde::Deserialize, + schemars::JsonSchema, + CosmwasmExt, +)] +#[proto_message(type_url = "/ibc.applications.transfer.v1.QueryDenomTraceResponse")] +pub struct QueryDenomTraceResponse { + #[prost(message, optional, tag = "1")] + pub denom_trace: Option, +} + +#[derive( + Clone, + PartialEq, + Eq, + ::prost::Message, + serde::Serialize, + serde::Deserialize, + schemars::JsonSchema, +)] +pub struct DenomTrace { + #[prost(string, tag = "1")] + pub path: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub base_denom: ::prost::alloc::string::String, +} diff --git a/cosmwasm/packages/registry/src/registry.rs b/cosmwasm/packages/registry/src/registry.rs new file mode 100644 index 00000000000..4505fa28cba --- /dev/null +++ b/cosmwasm/packages/registry/src/registry.rs @@ -0,0 +1,487 @@ +use cosmwasm_schema::cw_serde; +use cosmwasm_std::{Coin, Deps, Timestamp}; +use itertools::Itertools; +use sha2::Digest; +use sha2::Sha256; + +use crate::proto; +use crate::utils::merge_json; +use crate::{error::RegistryError, msg::QueryMsg}; +use std::convert::AsRef; + +// takes a transfer message and returns ibc/ +pub fn hash_denom_trace(unwrapped: &str) -> String { + let mut hasher = Sha256::new(); + hasher.update(unwrapped.as_bytes()); + let result = hasher.finalize(); + let hash = hex::encode(result); + format!("ibc/{}", hash.to_uppercase()) +} + +// IBC transfer port +const TRANSFER_PORT: &str = "transfer"; +// IBC timeout +pub const PACKET_LIFETIME: u64 = 604_800u64; // One week in seconds + +#[cw_serde] +pub struct Chain(String); +#[cw_serde] +pub struct ChannelId(String); + +impl ChannelId { + pub fn new(channel_id: &str) -> Result { + if !ChannelId::validate(channel_id) { + return Err(RegistryError::InvalidChannelId(channel_id.to_string())); + } + Ok(Self(channel_id.to_string())) + } + + pub fn validate(channel_id: &str) -> bool { + if !channel_id.starts_with("channel-") { + return false; + } + // Check that what comes after "channel-" is a valid int + let channel_num = &channel_id[8..]; + if channel_num.parse::().is_err() { + return false; + } + true + } +} + +impl AsRef for ChannelId { + fn as_ref(&self) -> &str { + &self.0 + } +} + +impl AsRef for Chain { + fn as_ref(&self) -> &str { + &self.0 + } +} + +#[cw_serde] +pub struct ForwardingMemo { + pub receiver: String, + pub port: String, + pub channel: ChannelId, + #[serde(skip_serializing_if = "Option::is_none")] + pub next: Option>, +} + +#[cw_serde] +pub struct Memo { + forward: ForwardingMemo, +} + +// We will assume here that chains use the standard ibc-go formats. This is ok +// because we will be checking the channels in the registry and failing if they +// are not valid. We also need to enforce that all ports are explicitly "transfer" +#[cw_serde] +pub struct MultiHopDenom { + pub local_denom: String, + pub on: Chain, + pub via: Option, // This is optional because native tokens have no channel +} + +pub struct Registry<'a> { + pub deps: Deps<'a>, + pub registry_contract: String, +} + +impl<'a> Registry<'a> { + pub fn new(deps: Deps<'a>, registry_contract: String) -> Result { + deps.api.addr_validate(®istry_contract)?; + Ok(Self { + deps, + registry_contract, + }) + } + + #[allow(dead_code)] + pub fn default(deps: Deps<'a>) -> Self { + Self { + deps, + registry_contract: match option_env!("REGISTRY_CONTRACT") { + Some(registry_contract) => registry_contract.to_string(), + None => { + "REGISTRY_CONTRACT not set at compile time. Use Registry::new(contract_addr)." + .to_string() + } + }, + } + } + + /// Get a contract address by its alias + /// Example: get_contract("registries") -> "osmo1..." + pub fn get_contract(self, alias: String) -> Result { + self.deps + .querier + .query_wasm_smart( + &self.registry_contract, + &QueryMsg::GetAddressFromAlias { + contract_alias: alias.clone(), + }, + ) + .map_err(|_e| RegistryError::AliasDoesNotExist { alias }) + } + + /// Get a the name of the chain connected via channel `via_channel` on chain `on_chain`. + /// Example: get_connected_chain("osmosis", "channel-42") -> "juno" + pub fn get_connected_chain( + &self, + on_chain: &str, + via_channel: &str, + ) -> Result { + self.deps + .querier + .query_wasm_smart( + &self.registry_contract, + &QueryMsg::GetDestinationChainFromSourceChainViaChannel { + on_chain: on_chain.to_string(), + via_channel: via_channel.to_string(), + }, + ) + .map_err(|_e| RegistryError::ChannelToChainChainLinkDoesNotExist { + channel_id: via_channel.to_string(), + source_chain: on_chain.to_string(), + }) + } + + /// Get the channel id for the channel connecting chain `on_chain` to chain `for_chain`. + /// Example: get_channel("osmosis", "juno") -> "channel-0" + /// Example: get_channel("juno", "osmosis") -> "channel-42" + pub fn get_channel(&self, for_chain: &str, on_chain: &str) -> Result { + self.deps + .querier + .query_wasm_smart( + &self.registry_contract, + &QueryMsg::GetChannelFromChainPair { + source_chain: on_chain.to_string(), + destination_chain: for_chain.to_string(), + }, + ) + .map_err(|_e| RegistryError::ChainChannelLinkDoesNotExist { + source_chain: on_chain.to_string(), + destination_chain: for_chain.to_string(), + }) + } + + /// Re-encodes the bech32 address for the receiving chain + /// Example: encode_addr_for_chain("osmo1...", "juno") -> "juno1..." + pub fn encode_addr_for_chain(&self, addr: &str, chain: &str) -> Result { + let (_, data, variant) = bech32::decode(addr).map_err(|e| RegistryError::Bech32Error { + action: "decoding".into(), + addr: addr.into(), + source: e, + })?; + + let response: String = self.deps.querier.query_wasm_smart( + &self.registry_contract, + &QueryMsg::GetBech32PrefixFromChainName { + chain_name: chain.to_string(), + }, + )?; + + let receiver = + bech32::encode(&response, data, variant).map_err(|e| RegistryError::Bech32Error { + action: "encoding".into(), + addr: addr.into(), + source: e, + })?; + + Ok(receiver) + } + + /// Get the bech32 prefix for the given chain + /// Example: get_bech32_prefix("osmosis") -> "osmo" + pub fn get_bech32_prefix(&self, chain: &str) -> Result { + self.deps + .api + .debug(&format!("Getting prefix for chain: {chain}")); + let prefix: String = self + .deps + .querier + .query_wasm_smart( + &self.registry_contract, + &QueryMsg::GetBech32PrefixFromChainName { + chain_name: chain.to_string(), + }, + ) + .map_err(|e| { + self.deps.api.debug(&format!("Got error: {e}")); + RegistryError::Bech32PrefixDoesNotExist { + chain: chain.into(), + } + })?; + if prefix.is_empty() { + return Err(RegistryError::Bech32PrefixDoesNotExist { + chain: chain.into(), + }); + } + Ok(prefix) + } + + /// Get the chain that uses a bech32 prefix. If more than one chain uses the + /// same prefix, return an error + /// + /// Example: get_chain_for_bech32_prefix("osmo") -> "osmosis" + pub fn get_chain_for_bech32_prefix(&self, prefix: &str) -> Result { + self.deps + .querier + .query_wasm_smart( + &self.registry_contract, + &QueryMsg::GetChainNameFromBech32Prefix { + prefix: prefix.to_lowercase(), + }, + ) + .map_err(RegistryError::Std) + } + + /// Returns the IBC path the denom has taken to get to the current chain + /// Example: unwrap_denom_path("ibc/0A...") -> [{"local_denom":"ibc/0A","on":"osmosis","via":"channel-17"},{"local_denom":"ibc/1B","on":"middle_chain","via":"channel-75"},{"local_denom":"token0","on":"source_chain","via":null} + pub fn unwrap_denom_path(&self, denom: &str) -> Result, RegistryError> { + self.deps.api.debug(&format!("Unwrapping denom {denom}")); + + let mut current_chain = "osmosis".to_string(); // The initial chain is always osmosis + + // Check that the denom is an IBC denom + if !denom.starts_with("ibc/") { + return Ok(vec![MultiHopDenom { + local_denom: denom.to_string(), + on: Chain(current_chain), + via: None, + }]); + } + + // Get the denom trace + let res = proto::QueryDenomTraceRequest { + hash: denom.to_string(), + } + .query(&self.deps.querier)?; + + let proto::DenomTrace { path, base_denom } = match res.denom_trace { + Some(denom_trace) => Ok(denom_trace), + None => Err(RegistryError::NoDenomTrace { + denom: denom.into(), + }), + }?; + + self.deps + .api + .debug(&format!("procesing denom trace {path}")); + // Let's iterate over the parts of the denom trace and extract the + // chain/channels into a more useful structure: MultiHopDenom + let mut hops: Vec = vec![]; + let mut rest: &str = &path; + let parts = path.split('/'); + + for chunk in &parts.chunks(2) { + let Some((port, channel)) = chunk.take(2).collect_tuple() else { + return Err(RegistryError::InvalidDenomTracePath{ path: path.clone(), denom: denom.into() }); + }; + + // Check that the port is "transfer" + if port != TRANSFER_PORT { + return Err(RegistryError::InvalidTransferPort { port: port.into() }); + } + + // Check that the channel is valid + let full_trace = rest.to_owned() + "/" + &base_denom; + hops.push(MultiHopDenom { + local_denom: hash_denom_trace(&full_trace), + on: Chain(current_chain.clone().to_string()), + via: Some(ChannelId::new(channel)?), + }); + + current_chain = self.get_connected_chain(¤t_chain, channel)?; + rest = rest + .trim_start_matches(&format!("{port}/{channel}")) + .trim_start_matches('/'); // hops other than first and last will have this slash + } + + hops.push(MultiHopDenom { + local_denom: base_denom, + on: Chain(current_chain), + via: None, + }); + + Ok(hops) + } + + /// Returns an IBC MsgTransfer that with a packet forward middleware memo + /// that will send the coin back to its original chain and then to the + /// receiver in `into_chain`. + /// + /// If the receiver `into_chain` is not specified, we assume the receiver is + /// the current chain (where the the registries are hosted and the denom + /// original denom exists) + /// + /// `own_addr` must the the address of the contract that is calling this + /// function. + /// + /// `block_time` is the current block time. This is needed to calculate the + /// timeout timestamp. + pub fn unwrap_coin_into( + &self, + coin: Coin, + receiver: String, + into_chain: Option<&str>, + own_addr: String, + block_time: Timestamp, + with_memo: String, + ) -> Result { + let path = self.unwrap_denom_path(&coin.denom)?; + self.deps + .api + .debug(&format!("Generating unwrap transfer message for: {path:?}")); + + let MultiHopDenom { + local_denom: _, + on: first_chain, + via: first_channel, + } = path + .first() + .ok_or_else(|| RegistryError::InvalidDenomTracePath { + path: format!("{:?}", path.clone()), + denom: coin.denom.clone(), + })?; + + // default the receiver chain to the first chain if it isn't provided + let receiver_chain = match into_chain { + Some(chain) => chain, + None => first_chain.as_ref(), + }; + let receiver_chain: &str = &receiver_chain.to_lowercase(); + + // If the token we're sending is native, we need the receiver to be + // different than the origin chain. Otherwise, we will try to make an + // ibc transfer to the same chain and it will fail. This may be possible + // in the future when we have IBC localhost channels + if first_channel.is_none() && first_chain.as_ref() == receiver_chain { + return Err(RegistryError::InvalidHopSameChain { + chain: receiver_chain.into(), + }); + } + + // validate the receiver matches the chain + let receiver_prefix = self.get_bech32_prefix(receiver_chain)?; + if receiver[..receiver_prefix.len()] != receiver_prefix { + return Err(RegistryError::InvalidReceiverPrefix { + receiver, + chain: receiver_chain.into(), + }); + } + + let ts = block_time.plus_seconds(PACKET_LIFETIME); + let path_iter = path.iter().skip(1); + + let mut next: Option> = None; + let mut prev_chain: &str = receiver_chain; + + for hop in path_iter.rev() { + // If the last hop is the same as the receiver chain, we don't need + // to forward anymore + if hop.via.is_none() && hop.on.as_ref() == receiver_chain { + continue; + } + + // To unwrap we use the channel through which the token came, but once on the native + // chain, we need to get the channel that connects that chain to the receiver. + let channel = match &hop.via { + Some(channel) => channel.to_owned(), + None => ChannelId(self.get_channel(prev_chain, hop.on.as_ref())?), + }; + + next = Some(Box::new(Memo { + forward: ForwardingMemo { + receiver: self.encode_addr_for_chain(&receiver, prev_chain)?, + port: TRANSFER_PORT.to_string(), + channel, + next, + }, + })); + prev_chain = hop.on.as_ref(); + } + + let forward = + serde_json_wasm::to_string(&next).map_err(|e| RegistryError::SerialiaztionError { + error: e.to_string(), + })?; + // Use the provided memo as a base. Only the forward key would be overwritten + self.deps.api.debug(&format!("Forward memo: {forward}")); + self.deps.api.debug(&format!("With memo: {with_memo}")); + let memo = merge_json(&with_memo, &forward)?; + self.deps.api.debug(&format!("merge: {memo:?}")); + + // encode the receiver address for the first chain + let first_receiver = self.encode_addr_for_chain(&receiver, first_chain.as_ref())?; + // If the + let first_channel = match first_channel { + Some(channel) => Ok::(channel.as_ref().to_string()), + None => { + let channel = self.get_channel(receiver_chain, first_chain.as_ref())?; + Ok(channel) + } + }?; + + // Cosmwasm's IBCMsg::Transfer does not support memo. + // To build and send the packet properly, we need to send it using stargate messages. + // See https://github.com/CosmWasm/cosmwasm/issues/1477 + Ok(proto::MsgTransfer { + source_port: TRANSFER_PORT.to_string(), + source_channel: first_channel, + token: Some(coin.into()), + sender: own_addr, + receiver: first_receiver, + timeout_height: None, + timeout_timestamp: Some(ts.nanos()), + memo, + }) + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_channel_id() { + assert!(ChannelId::validate("channel-0")); + assert!(ChannelId::validate("channel-1")); + assert!(ChannelId::validate("channel-1234567890")); + assert!(!ChannelId::validate("channel-")); + assert!(!ChannelId::validate("channel-abc")); + assert!(!ChannelId::validate("channel-1234567890a")); + assert!(!ChannelId::validate("channel-1234567890-")); + assert!(!ChannelId::validate("channel-1234567890-abc")); + assert!(!ChannelId::validate("channel-1234567890-1234567890")); + } + + #[test] + fn test_forwarding_memo() { + let memo = Memo { + forward: ForwardingMemo { + receiver: "receiver".to_string(), + port: "port".to_string(), + channel: ChannelId::new("channel-0").unwrap(), + next: Some(Box::new(Memo { + forward: ForwardingMemo { + receiver: "receiver2".to_string(), + port: "port2".to_string(), + channel: ChannelId::new("channel-1").unwrap(), + next: None, + }, + })), + }, + }; + let encoded = serde_json_wasm::to_string(&memo).unwrap(); + let decoded: Memo = serde_json_wasm::from_str(&encoded).unwrap(); + assert_eq!(memo, decoded); + assert_eq!( + encoded, + r#"{"forward":{"receiver":"receiver","port":"port","channel":"channel-0","next":{"forward":{"receiver":"receiver2","port":"port2","channel":"channel-1"}}}}"# + ) + } +} diff --git a/cosmwasm/packages/registry/src/utils.rs b/cosmwasm/packages/registry/src/utils.rs new file mode 100644 index 00000000000..6ee78561268 --- /dev/null +++ b/cosmwasm/packages/registry/src/utils.rs @@ -0,0 +1,87 @@ +use std::collections::BTreeMap; + +use cosmwasm_std::StdError; +use serde_cw_value::Value; + +use crate::RegistryError; + +pub fn stringify(json: &serde_cw_value::Value) -> Result { + serde_json_wasm::to_string(&json).map_err(|_| { + RegistryError::Std(StdError::generic_err( + "invalid value".to_string(), // This shouldn't happen. + )) + }) +} + +pub fn extract_map(json: Value) -> Result, RegistryError> { + match json { + serde_cw_value::Value::Map(m) => Ok(m), + _ => Err(RegistryError::InvalidJson { + error: "invalid json: expected an object".to_string(), + json: stringify(&json)?, + }), + } +} + +pub fn merge_json(first: &str, second: &str) -> Result { + // replacing some potential empty values we want to accept with an empty object + let first = match first { + "" => "{}", + "null" => "{}", + _ => first, + }; + let second = match second { + "" => "{}", + "null" => "{}", + _ => second, + }; + + let first_val: Value = serde_json_wasm::from_str(first)?; + let second_val: Value = serde_json_wasm::from_str(second)?; + + // checking potential "empty" values we want to accept + + let mut first_map = extract_map(first_val)?; + let second_map = extract_map(second_val)?; + + first_map.extend(second_map); + + stringify(&Value::Map(first_map)) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_merge_json() { + // some examples + assert_eq!( + merge_json(r#"{"a": 1}"#, r#"{"b": 2}"#).unwrap(), + r#"{"a":1,"b":2}"# + ); + assert_eq!( + merge_json(r#"{"a": 1}"#, r#"{"a": 2}"#).unwrap(), + r#"{"a":2}"# + ); + assert_eq!( + merge_json(r#"{"a": 1}"#, r#"{"a": {"b": 2}}"#).unwrap(), + r#"{"a":{"b":2}}"# + ); + assert_eq!( + merge_json(r#"{"a": {"b": 2}}"#, r#"{"a": 1}"#).unwrap(), + r#"{"a":1}"# + ); + assert_eq!( + merge_json(r#"{"a": {"b": 2}}"#, r#"{"a": {"c": 3}}"#).unwrap(), + r#"{"a":{"c":3}}"# + ); + // Empties + assert_eq!(merge_json(r#"{"a": 1}"#, r#""#).unwrap(), r#"{"a":1}"#); + assert_eq!(merge_json(r#""#, r#"{"a": 1}"#).unwrap(), r#"{"a":1}"#); + assert_eq!(merge_json(r#"{"a": 1}"#, r#"null"#).unwrap(), r#"{"a":1}"#); + assert_eq!(merge_json(r#"null"#, r#"{"a": 1}"#).unwrap(), r#"{"a":1}"#); + assert_eq!(merge_json(r#"{"a": 1}"#, r#"{}"#).unwrap(), r#"{"a":1}"#); + assert_eq!(merge_json(r#"{}"#, r#"{"a": 1}"#).unwrap(), r#"{"a":1}"#); + } +} diff --git a/go.mod b/go.mod index 53ed4872268..69bf5873ba4 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.19 require ( github.com/CosmWasm/wasmd v0.30.0 - github.com/Jeffail/gabs/v2 v2.7.0 github.com/cosmos/cosmos-proto v1.0.0-alpha8 github.com/cosmos/cosmos-sdk v0.47.0 github.com/cosmos/go-bip39 v1.0.0 @@ -36,6 +35,7 @@ require ( github.com/tendermint/tendermint v0.34.24 github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b github.com/tidwall/btree v1.6.0 + github.com/tidwall/gjson v1.14.0 go.uber.org/multierr v1.10.0 golang.org/x/exp v0.0.0-20221212164502-fae10dda9338 google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef @@ -67,6 +67,8 @@ require ( github.com/sashamelentyev/usestdlibvars v1.23.0 // indirect github.com/sivchari/nosnakecase v1.7.0 // indirect github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.0 // indirect github.com/timonwong/loggercheck v0.9.4 // indirect github.com/zimmski/go-mutesting v0.0.0-20210610104036-6d9217011a00 // indirect github.com/zondax/ledger-go v0.14.1 // indirect diff --git a/go.sum b/go.sum index 68532c4cdc9..675c9edb5f0 100644 --- a/go.sum +++ b/go.sum @@ -77,8 +77,6 @@ github.com/Djarvur/go-err113 v0.1.0 h1:uCRZZOdMQ0TZPHYTdYpoC0bLYJKPEHPUJ8MeAa51l github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= -github.com/Jeffail/gabs/v2 v2.7.0 h1:Y2edYaTcE8ZpRsR2AtmPu5xQdFDIthFG0jYhu5PY8kg= -github.com/Jeffail/gabs/v2 v2.7.0/go.mod h1:dp5ocw1FvBBQYssgHsG7I1WYsiLRtkUaB1FEtSwvNUw= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= @@ -1184,8 +1182,11 @@ github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaE github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.14.0 h1:6aeJ0bzojgWLa82gDQHcx3S0Lr/O51I9bJ5nv6JFx5w= github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e h1:MV6KaVu/hzByHP0UvJ4HcMGE/8a6A4Rggc/0wx2AvJo= diff --git a/go.work b/go.work index ff647e81ee3..9745e53f6d7 100644 --- a/go.work +++ b/go.work @@ -9,4 +9,5 @@ use ./x/ibc-hooks use ./tests/cl-go-client use . -use ./x/epochs \ No newline at end of file + +use ./x/epochs diff --git a/tests/ibc-hooks/bytecode/crosschain_registry.wasm b/tests/ibc-hooks/bytecode/crosschain_registry.wasm index cac70d276072b83c2f4b8c859abb42db9103d0b4..ec14799923a862a2561a840f1fbc8ab01e8db90d 100644 GIT binary patch literal 374836 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�ni`MEROb?f^>5&W$ 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≥ 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 diff --git a/tests/ibc-hooks/bytecode/crosschain_swaps.wasm b/tests/ibc-hooks/bytecode/crosschain_swaps.wasm index 46b1e65d134a910fba36bc9bdd372f41d6e15fd5..9dd387a85741abaf24a0120db1cb9b6d67650f5a 100644 GIT binary patch literal 417285 zcmeFad!Qv%edk-XYQN57pR@Z#KhfIT1D@7C(i-hXKoe%t{L!N?gfONz-dHi zTL$iUE_g=rXD!J^{uS}C9N$*deaA`PjAU$wtcHqE)M86aJ zNlA?o?o#{9eO>q5H0-}H$ z0w7)DN{2MVk3_G$VE_j1$I5QGayvP2tDmt(dLaB-n9TNE^V<4luXxqI{YhQF zn^(Nzl6`wFyCP}muEpKI+jrIeJxS2*h&_Det6saO|MIIZzwDYME300!=lcC#wSCzY zSM0mwwU=Fe)fJaf-u1lLCft*R6C(@g4g5Yk%Nrd{jxkOY3Iky=O9LTI(9mhdBO2nIbK`fp_DuDSt!L9;&4 zdy`gmL#s5cCc>&TH0rfxx_YcuOUGA_j{`}=+Ya@50!jn|fAtGMM(wXKk|z9(1-t|b zsVP8{kvhFM=yyXsjHzlfY50HE4$tgAUJ6OZ8-j@6G?r;(NtQ5{TH1C@H?u~THZ~@k z^Z+Ebn;8w%)@c+CiNQ%3^bEjSJ(Y5*cbh7cvJ+FM#zSo6h?5b;Cz5lXn_Fp9`KhS*TRX@E?zYeC& zJ=gEK{5AZ1V_G-LO5T*#Uj3RYUX|RC*7xnX_UhLqZ%$j6U48YdE?0&3gwZSZRCm7~ zI{Wrq_nNEr?RoVjG{5(%YkoR;e^@nGw(qA^ZLknNrSDhmqj1et*KqT1FS~q?$oO8+SRssHt5KY9L(zZpJ~-5OqU;d{exgd^d7;RE4=;Xj6>;pXt6@Zs>0 za7#Gzws6raF8Md#%r5&sFa6*DF1+-wv-97T-V`qQsaw| z(+e;At@O9k_opArZcdM;A4or#{>St~=||EJr+=J&F1_%@7hZTvdf`j|GQBr_@!zCh zNxz!@dHUBh@a6P)`d8`K(l4Zck$y2fk$yD&yY&2jOfPs>`p)o{@RPS>|CD|&eJK5Y zdg0r{VSxEW`rlG|x*`01`mOZE-%fucyD$Ag`mylO>BH&4@TTy?^o`+`^uMIvO&_F( z?;!iXnf}-G>*+tF52W8nFZg)4@WmJWmvF&_4}^aR_od$t7hZNEd?#G=EpEOY{y97x zeh~h9xbWAqcV@qu{bl+q*)M1B&yHokn|&htWcHicm$M6R%YHxmgX}+N-^%_lyDR%6 zgvyC*^!xv?_M6$a;RFQxlaeCe+iOiFc{&}EZX@i<)0w1J+m$z_L#x{yPsi+6Z$y{c z^YtJf>2&<@2oLj-BAx3scZ8P8l6+*Y*mhQujOA&OoR!q_Mp2vVsqwt&wVP$_rZr9Z zT+yQjO*N~gGJ_{??)?etv6*L`Ro-X6Rvsw*Ubcyf8I433=*~LZTcj`cxwEE(&(n}2xAM)O$|P#jHGj)wjM z42V@lbEUc(P^21F{Cjllgf5 zv{tgiuDL!tG&M=i4o$H`L-^G%*nx|&L(|y79>WgYX;K@aD9RSIL$hLshS;H*H(&>= z-LR%%gUAj%s+x-I&@gu3fw9AaS`|CMEHn~fi0sga?4U-)4h!m*>|l>0J8Yi=x_ak6 zm;p4v4%VnNnZzZ9u?!EM*-P_!?Lb~H>iZ$GM)AY+y4~GIhO8*k>!<|#w|Wg- z3}vYeT7_K(%^l+u!c0mqe3u`s0tn!R&Km2y9r7A;)vXn2m+?z%W$k3FNa}fGOg$FK z3p#%mjBj~2akkCGe_O=1=ZLr~rhVqlu-18cnTL;q-FNMU-QOJ2w9g<$w(w5qeBIFr z;hJ>GM8az|czzWdgxa%`aerL|T>QqH=98k16zG^(OL>QJbS71=1B;3u_=h*Y^+w(V z$(=3sEV4OB&a;_hymMz52N|$4600wsz!PFCbD;)yBnTey9hl&e-Wj7!6BPd;D;aD1 z-d?lRGj%8`GFIKlKy#sAy_POUCH1@oYuMu!51GP}u_#0KmUI&JOnsQKpo+3KG-fqQ z#^O=c)DUCwz!=N=?ANLot3JS3>P}#kjHO1!SPSZwjAf6F$eZ9LuXWxL&~{8+U96bH zKwPHLJi1PaWjYUqF|fq#0yWfRvZ*_uhMIX(YG`Dk8XD=(GqMGCf-XNh%6tUr{o~2r zUcH=%u3=)qgk;r(#M-s8cFmej@>-O1 z8Jt}p>HwI!IM5wBbEJJD*G^$&Ms}HL|(l&-(XPsRS&}5)GO)pl6z; z1r3(7WRGo@>cu^Y_@ZQ3(8J80FQ(%9GNfF+xHl2I3QWfstfODdC6_qnv>db0=?cG( zvD7hUv|mg?3&od{QcBhH`quEWonebj#N$F`twd#g@yJ2tcl)SI>8JQ7?oABA6dr#6iOhPkBCndC)LJl2alnf9gT;T%daQO=ZrJc+j? z&K|KXlS^j`7^52*H_=v>X#ny|;u&BV=|-EEVTM`0f|=Hu$g)D!Ne)-EO4=A%f;Jk( zL(sz3B-u%y4e6MJ;BkO9Mj~yLO#7&K%n4(I6NYhHqzs?9AUTCW{`Ud#%9v7lF!a{iPS8WWV20<757rN*vb8wNR(gX_XGUX zxgE#nfkA)yUuQbbw7lgtk8YwL$x5+_K12ZXfcwa@jsmk-Bwf=RIGIJdcSp#1Y_HJ0 zDfUD(WtP2^~Kzk8+6*ACld%JZX@?%CuUC5{#OjzVQ2!LpWc}ucWgO_J7&4mNJ zf36pb+ko3061|()V>mD(?!>P~#Qkm_#tzhEuinNK#aM$VWAIO&Zq4%9>}Prtvmxj2 z%QhcnNE0DVjJXe{^j`esL8heE`G&Fo!4x0SoUa?0xM}??4yEpXZR5A9WX1Gc@i(e9 ziaAbjVmeSwZ&pw5*VA#vw`(tm=87r84|mTFrct#|%VC{KwlTvos)j?OU%jA1Hwtx*Kma! z%~>Be60kn{pOd>Ox}H|AT(=L7{N($I%~hCuW^B&<^$L+~k;o&CTW*Q97m8mKc&i`f zxXrDJ^ebxf3-)4EDx=@11#!wFU{IbM>5Jkgyi&axOQCtuBcgPl9iDo0JqO^4 zy)zBxX#x+W^niwIA@eoi>TBf~TMrRD9A$IoQa+D@+n~?+ov3!QGn}JLIt@7%hkJkBtWG{e@FSBTEM9>|$rP^&jqyr=Jhj>(xn(!aM#3tBTTLk~2) z3tB6u*B-~|Wl-1WnXJTXeU=crS#bhBE=@(I5>wGcJM7Kqm}lOd4%bI(aX({LSq#eX z^HL`fmxXdbzap71iFz|Unjs9j`eH#8B1C6JC8s4}T$G)R3L=lOhT6Jfr#5Vbfwa&SyE9OCa!^ zarBH(up9ya+5_UoKP->^GgwQi-VUj^Rgp5WNK&|SdJaJ^Tp(^@)8bQwgQHb}#NlqR zVZ_y0{dTF|*({QBv*ppZ^#cJpNXJVKU9=}5ioGeQ755>Q9Yrk=n{+gRreCNeE>U}hV_NU1+{yN)g`9ZEP<)C_(&f!X)!rh ze3JVrq|0>vR{yy`TT|+JwVqaJb0u%{Af0LtSvB$1UD24Y?xMzU8C?rt$%}8HE$Q@9 z3E*KImJ>)|p(a(|gfx2-CO`CRa`xcC!@u{*FW!2h-T6nnGG59>y}i!PY`bo^W*d5| zc4pH&z}Z=qcLpjvqzaQfv5@D_Tv#>SP&^H*!q{+}2zAEb2m&H@E z39t{CmO#|8H(G4iUu<|yZ@fs(qp|Vgxz~jQ`54~p!sokQ!t>GMiPuRURPSZWy*F9C zM{6~I3-`Ea?B6$5{X_Q$58j!uF0Qrpk-f640d=(4t|Hb8a~6deF&a5RBe!?svy3oU zL}D=yvWP1gu8W6s^Mw;Ju!Qv}m%Kzw8^BeIQAf+Xco^$~Ddi=wABHBfPYqg)u<5kP z5IHapn$*spX0kSGP&Xm8JO!$(kd?z~7L%ZV@~BI;(6`ELhWK%*?oYxfshe4$s+c2k zSsHF(E$DyZoruG%Z?q+h|zpYnqba9va?`LyDXV zolnZxM?BR#pC%+o?^w^%xMxgtQR~*tV3H9(KHHKEHwUpnFK}+X>}f;nNrAzZ=a10NMw6)Nb%>9w_(cL?BRm{c z9Z5ix9q9~szT1EZmHOAn9O7m`hiFuAu?dj)3k`=4#Hv@p*XfUocWY*h%_OU2p;()0 zie}bO-&{Mbx->dZ$g?w&pHlq`i_ZRi8spaNqV9T?yo|shBR(H2Aoj_PurgdOoZ#5Sf@ zK6X}e4*Xm@JHdv?TS`d73zfd>yjDPmyv?E>mx&$WnOr7!gza29JHj?Ds}vdx`RW~E zipv^V5Fsa9V+)sco`1DrXV&3vy&NBGEs1Hcb4Ggp*~xS0>bZ0IDPV}ML=|w7EN}@r z$VPTTIddaW1PCV1a-Df_aRL5}q)_pXm-8}{?9zm64bSVYm(y?K#;k`IC^cWdGr(#^Ih0zANiG^n-fE|YzCM(<19JpTc5+}qu*m;J2yr6e+7i_- z&>f1^V&w%io1h$_pY=OEH!%|hUL;AqBfN|Ygedj->0g>pinDw+I=S?wSpj2j-4NCt zs4J>|P{tK@K`>OLQAqk^4gQ;Bft?R^3O6&!1-PVu1n(gtgISO!BYE^9?%_(D_49f) zmxilUWml9J&Wym4GpRb1Je$P|^;`AR z69s!e-o6?G#Q~zL+S%T3M=;P9EzsK23spzkXuXHG4U4jcYMna(U^-mEk^z@Xg`Mee zF^YoAMZFBhX`?9erYsf18~VA?d5Z;c{hk~??sHq|X*zQwU{w{20N)wOYXri-GnrB! zf5I60AmgIK{dlk}oYd>JjP(7nd^JUZEjGkUeRi0ZaiU>V zT3o(KlprW;`(kFEdKGmGEwoa0s->QYESuzunT(BP<%1t&h>ZbwO*YLW7k69Zo5%9W z-DuIJy4UP)$UDsb_y#9i4Z}#rscarhMS}8TEF|Mrs8oc|w~$y%WSCtekFC84F+S}~ zI028chN{QC2rzBDR@H&8YX1dolFQ=Uqu=&UKw1g1)zH)VogqMq%m!xEDC`YAZa2nH zU8-7pz0Jbn_tyzWL(H`VaDB)JaPororWIiR#A28?jrCz0eB7@0VH+x6E7%+bL*=W- zX=>s8PmNFT@)^nhA>3Z#jJsgoH4CTW3WLAZB8;|}Q1ll`erg;AzVT>V$N7Jm!w-UO9s5iqdr@L@Bu_RabZFa5?9`riYVEl z-HimI(RF)`VrK6|t)3()%jS*Z>3dCJkGv2uE_sOz(3Aq^hS>xwXic2rMzMYGt+PK& z-_%`?0VIou_da9qsa-R~+iUc5BlgGk7orHB{S*5ri3B2LI-AUnb_muWL|WLtTspJK zPhxzp=MR;XHaXxtOdR!5`-W^kzo?jOaR2+u;BFJ$vVv9b(&A%|Psb#;X6~LyjuE$$4fF~7c zBGW@Wm2$yT)Lm+KfC-474iuSyPnG?GX96qA;gD6P+=7C2)jF4&{3b4LXtD%h!F?vL zdW6H2jI-lmWrB*FfF7+W%r#;5NP9Ov=9m^uJa5xHnkhFr8HAD4@ksrRC%Z4;q?nLrLOZACQgZix_L|--jC^L=y!ktL{r_mBRQab|%&E4QsYD3BOY} zY#Qpku*mi+_!0Lgk^EzOlyFT~*rr5S2w46_wkbUnH(l+*g`7$%m2UZD_~R}yl9%)v zTC&p$*e|fUzguRq2amp&L8LXU9S}_=`kFy-$}_BUnZMBj;BvM)#{$--6G-Kn5sVk1 zSpc7E=-8bBIxH+BDlz?p0K*#OJzig_6nJHguJs_5`3%5Z|%L=20`qp@r|iocV(&4>0i zFC#0|PLR)%756K(Dn`d1ut-mFT&YuJ&!xSQ*tp|eT^ujF2uhUePG|xs{%Q)EC+NMq zi8hb3{Dw2gHkRUq|5O}k-hXaHRGFOhSXnux16Q0xsBtKQ_5-t7HxZd1A+UmdG*KLU z!*yKK1UvXrB(+9sH=;ct=k5 zJp=XcDTiE(L)IHJ$>(DI39l17W{`A@3kU-54oGUQcLk8c_0HfSv-v!=)e;>@KV_(XUk6!b)NVdH z)003CHdXQ=p^$y}AHw}A`DAI%wrM%4nodf)69p(9Z?oVdF^K`}MDtb+RBj?ToDXuK zHAQ!OY9wLD;x7Mb(MgazHa@NwL~q&}!I-F89A;+hRq-)mK+6=_eAt;C3etl1K2s+f zz&nCKY?89#VXNvLN+#F}$DLtkc#wIPd^q8(CTgdNC#n7k0DXQNHBt8bP|#{))$_ao(q@x+rxa%%8>)4?P_mTSaAtOpQ^x z*`s|W$0$q$K{6Yf!BJ^Z2;M?Q7V}6|5()k;MUkWYAZ)D25iOtBYsyp!iXitRM+tEu z1yPuAN($csZfiIYjO3I5RuuFDwJdp%{ELfu*yM> zOwqx@)H5vCrppB)L;_6RTZG7^!n38fz3qC@BgjI{x>|21n~F7K459(lcyP8c5+k>U zk!wUqq^NAKA1P|vAoYA8PGl7#6e5#m6cP`Iu7$lHLZAwB4@RMJf)!M!Kf>^ICYBu( z5~D10PSn$ka}5}Ft?&&prHB|cFN?+a;=#}V_D32R?}&&|A*f~?e9zDQ$v3|F7azYb ziilAc5u>p3fQT6GqCVV(+NuwCpn0t?(R>sTqi#XgO+eVhn7c6Qb2iq)ir9zmDDeP> zHM8}JOkpgI{Ru~9I=McHLxriG%@oIkm%-qvyvobnftP6wH&ZW3x>R3w`ZN~q&V zC`Lup0W@g<5~y)#Q+bO3g`Rau)Yj^jjU1{zt(+ATD>f@noK3r36Cx|&fEF;M?vXII z`7TnCK-ug(qO!7}iqH;Y?s;Y(63{Ot}g( z1UkVQ;jTU_QI?@xEg?{=Xn$Z=TRi(ir)eSfVYHC30KXp!y^;~Qdoc8tWCsz2)aKUg z-q7uW8>j00eJIGftuR%W6~7r^>z*P)8gbXL)WSvNS?Mq* z3FVxba&4AAI-T_CA4AirJ;}Eyq+lAm;)F%if4V?)>X-EziE?S`mja&-4+LV$T-j>E zY)`{gU1Lc4D#br`sfI*+RPMM<&?609WS7a+z1!ww2Zkc|ILS6=ED_BkP{((Jp?z9B za^Lik5ej_sSezP}*%q{kAUmwKPdO{OQCCoMNY~M`lV7x}(ZkzfVyVw0VrF2qMx$m{ z8zuMMG+-d#gmQ`Y0?X<|A>dz7@vAAxEs_F*rg8CI#r(6*r|7n9QQ8S_CC`s`*GZ&c zF~!!cn5GU7_aK=ylf1p})~H(wV@GTQsZ5d^@yTgWS)TNFC^fr8wGWm}YN1f{HIuwi z3%q8NtfS-2L$*jn1!jTtQ|gOUr3JFiEf50f@=qF=^jJO(79Q|XG|BcHMCf^k=Sce~ z9v;GaDkK;^Va1Z4QmW1y|J%nLo9-nfiYK_Z^pl8PLHFG zVs}%*@@7e56N<64=TJ-M8?`ZzsKtG_r6Pr{<9hane4{1KC;0}+k&Tsm53j(NgJynn z(99Pj7YGpkUBWa#_sZfm3F!i?k4`tf3C>q!aAh@Xt8LbB-r5}NV+1JLxGE~MT9PQf z-dAQXHQT&VDl?vJx5#_9X1a?dD*E^g?v1nOrABUvn!JoAw<~aw7H1KqmpR#btqeS) zj@qrWqi^Uv;V6vs1R`xQuaQXXYVi%(i&am=XkLu)v+6vJ4ZusaA{ir3#7yjbwc=OZ zP^8_>CIRIbqdV1LR1Pe{4!x?FbBSN9s6it|4%~5J*Mzc7^Klnb?V9hRQgpjyv6qXY zXOfE;y5KCiM!eMu(AHXnqOjjqG`#!(r_^Zygi(1qp{$lQ)+`soC)AQ6+q+3i4Q;2#dr= z+7I%WNr1FO(O8hjq$Wb8%^V=L+Q`AWq^0~fXs8X{H6<-;#fK#=n^9V}U0T{>iG})t z$Ba_a()}m*bKxrtlD0`pPgxVH2mL6Mo1F836RZFOC^NYkJ0`%eyFDt~ajcDHX2LT* z>Nz1reQ&`m%kW~H{Wyy$YnOXV@?}4;k`4w|V)SbzY0Ij>ptMZ~rL76mm87lW6(()f z>mWmD_&#}N1ET2`jcM?8Gf0mNP|5p5-4NgrQH#txmpn_gBZ{*vJY5p*h-%5ikb`Lw zfzg>nKr)y_zyXy+V3A5GAaANCT!f=(P;L!AVmc z>A!pu%Cgp(M%ofoq{VTVO{Ua2vl7Q7Ww-}QkByx=JI#vcD4vW~K2OO{J<3WO>#M3< z#*9+QubCuq#27a#x```Bc*lf8ao7~(5`=nRSoZcXQ+ zgK?;ej?m}Z0$!3l4cW3=v2?rUo!uCSIj(28W;mm9MC=V4ygQ@)Mm=}zN6;wTJV(&U zQxjRnvb8wH547L~ez$P}z0+JsKV-qHK(Qd(!}B-$!dG`^rWLRCT5U-bh|t0p=6j0^ z*1HzDaOM&lfE0^O9Ok@D9BXL(iCaugxDx9jFPgOwOhj13pYXE~dC<(EV4g(&gs6}v z7I+XLdJs$j>6mZR8p`M1hEP+$AN+Q53ebCKxvV&tX|d`LQa@Mg1g96-s)qC;j-s3r z8E{iES3a91d_gv8am%l3(*ypOa_G15qOyU7E&XcoYnm%>oSA1@;MvZdQXaW%ul9y; zgC~yo=IFh0%>|2s?26%xbI=PCw)>tpAsX=Qc&#(5$cj?k7{eY)$_nwQzwTa+Z}nHn-iasG(gqk>{=a(Kz;tO8y}c7-Au0c>Qx;^ivWWwN zaz_-}=hsNLjsfW2M6KBNeDn@k#QV75O6((d!E*qsn(~6E7CBi9#yVfg*x5ZlM)Q% zxUj~%vJuhF4NaOP*#>JEdQi4^%bh{D7?~+EV;Yv&t+OYvaPiTaW=6WvZ1h%|orVtx zPhOf_1!Z*OuDWN#T<{40&V?jHi>^g3Z`)#EXCy?`W|AjcFla=gd>aGdGOcigWwm?d z7?02}R6gR5-EBfw$)_~@qBZLIh~|>h%XV;F9fz~+NZ6{ElQy8$T4GIM5LDsNDZb*c>EYDQ(c#A&p-l5Z2@mRTJ(W&%%}W_9Z3rMwD%Sux_$_)dZ# zv3#j2qg9i3zRd?&$hy&5ggT0JrA3G;eN}T@C9u|IGExD`_vg>WcdXJDMtXeWn4P3JT?* zf=GoBnzB{#>se}0%g^6Tby&>&9{eTctr{1w!cdN3yBeY=`BUZdffWX;5WCm3)MF+p zdHi6+^7xI{m_ExwoyZ%zNkg@q1j`7gVUADLn2K~C@p!?hH7TFvdKr52nN|~$FNH!F z?0yih`u-obR^dczcCUrRC6YAhEzNEs2g|SybWajcmkJgTLGc;M9^vSxjmklnb`u!a zUg=zW1y+>O+RD8kdU>lS!Ayf0%&|WDlnp~XBq=P(MY(s8QavXH6j*#x<&Tj*3BIuU zDoV9}jI975Sw=)!;!TxtBl5?df)%DYD%n##28kcxuv|kpoN-hbmWGxXX$w z?h>!b8eOgf1e8Gq?i=n};h9_BK;&xXD#=r~Z0ZsoYyy|?NL+XzF*V<2332G9Hfab@ zLVAxy`G4TO|9@2epAUh&OjZI87yDXACRv7|X+L551 z%M5Gc4ilxh>qhb3HgQ%r<(KW15W#c6WY10u3evh*PMs??qjp!*UCzNn1ZJc!HJ!@+ zTCdC537KZf3G1jF^4l7w+}5$oDC^25&*sqULbM(EIR@7@-#X*i4tYuKZ?7{9c$GKoRIM5#jB!jY@1-LbwCT2@D;9`DQ3!TTi#WAK zBw_7b^$p9i71>DFERKgc;uuX)CQ(ApqJgBl0R;jUyLI^DNHdyNvrxbxS?a7s9n+Pn z_+VyhZS$Fxsd79-YcZ%z=4DVxK_u2fs zn?9e$_5QjQ=}ftYY4a(1i@jM-RVz=-pQ_ijKj&`RKZENDTHwjqeWI;?Rnf4jWEX~c z+I?ziaP-UF4uFiSOb2=N76Zg+P(XhKZKy3DQqn3g3&e`XeC6@ph-YE<-Vm{?NCdSg z`VyEWC>4konLQG0S%CJiMPe6ZMrrR1xgoJBUZ&7==0%_6=^B{TC zIb^!X?>V`L`#dNvW_zwx_x`%-0+!P0mC?nX17Lli-s{@tg&J8Clx&48XX_XAY&VNH z$G@y8+>_Xu^iM6b)bi6@*xI}oCw_k3_s*(;B14V++5;uZv}Se(N@NVdGXo`BHefLQ5@GIG#$L5?SRXLCYe=rQ#pyZ0 zNW_bcUSWDn4ffZZ#9QpPas0B|=ATL&4L1pn!z{$0T*CzHJAd`nCnSlkam4eNJiOZyxC8X77eb z(oFK9Aj7I%LUR+MqfE-YsqXV@Tbe&m7pqQ(BX!Sto(}KkvCA6-x%}bI&qsNqdu8DN zJPKFx#&>p7`9!7`wZ#mEcodjpZXu*xTdy9W7QQ7Uf-@y+`n$E0=x1S#+-T^*jFUIC ze=7?q)9?tr4)mB$cGnNmRo=i-GN}w|i{BLMS(4>+xJfIin(OHRa*4$ma@mP4)M{0` z)7_}egt_hM%L>*1hYv>92iYl)AEM{XShWHIM81^c~^Lx+3%M)pa9j zYPxPGT}oGi#dqsUIQXtcUL5U>m{EWpIW6CrpB0bVdrE#r6rVfU^p8Dw7MB^@*`7ZI z)R0(y2ABBGQ)KgvQ^J8aI!Z3#9S$fPr3A~pEXg@ij*?u;Pv$OzcI`KlpwXDMtbt8DzmGM5H>&RKj{aj^sAyhrX$i*}X zwjzj6G5Rx--?tvf>1}iil>&*;&BJvl^*LI)@UVAr$TYLam!OF6g?EgtvS^zujm~q( z9^Ic~+d=nw?{LEpw8@HhSnYn^LeYKB_~|D_Nk+Sn(evBDB}1|E9OZ-rCd_4Hqmr6Hg0azh^2MR>YDbABP(Y`nN=mgI8KMvYb#d%G>M~C@yXNRGj?%0Up-Bs>(S~a z=a7k#zp(f^ijVcypPk$xZ|XD1zx5tvVW4R1J1G?h&FcyW-L5MfbS(3XW%~XnRm4L7 zo*peTFS6PZc1z%{Hogw|w_LqN7%L_eDWxS*GDd~kL@c};k^G>3W6+++w4e`V!3 z&qY-Yqn=$>N%FH@ihrP9$()l0rRvS3vGn-}+YABhgvTIxz6>@NjVe;)iEKczpo*f& zOO%pUAI@C=J(T&1`GXlTe%yg22P%)HRH!9bj6XUuF*C)4f$2mH7F!lZwODZGSxJGU`U zB?8|UhVueV><#AydPCR|h1QUXs+2f`5Y&y?9%m%)lU8_tUAn}A#@OuB;g-7P5y|{O z@vv53k4-F`T#ac-n>L~dk?gfaeBRokE-^8fQU$mc&A_tF%Pl5f@ln+gD9klR>(-0` znMQpNqn}CM%jXX`>ZjYRBIlF1cIg!^SwWv;B5%`T zE;GqZnl+_KEgIVL-hjeE(HF6Fc-b%y0;jRLuIy_xoeo_Q6yPIg3`l;s4&!VW(TSUi zPMk@asPu;3Z%tP;2aNKRW>9)x z*0usol9^J1Wj+al##YDGo)(emPf;egCiX}4j-PjcO9Xh$!$nww$X%9Mb$tlTx*~b7 zhVce%G>Q=k*-+f_Ml*80Png_xXc14uw`&ydxRLU-^8>B@`>9gB8TL3P7TYhbmA? z$oCjNhlQg&sTDAe8Eja1)Wb+Msq!iIpppZbDpS~`0Y7o`qfe!{WQ4Hiqmxf%a+)z= z*7e8uAP1n)uGVYC-?PMJ4vF6p-!hr=(X)tq=~`^SbyR4MpRL#SFuA{}8@O-2AqPYT zw{hC41qL?n$h6ipe5zqklapaa_H$K+kr>mi_+2XrA>WP|$C9pdVk!Y{TI zW@%w)tMvoV1Wp^&`ecFV(dXt4Q8l8wiVqMe?iF>=gxzNpOc zG(U`|V~!^z6CmChX?;G@#qH1o6|pQWv;?1OlHgrkv~q$xmuRrm*v0c|0a>FtoTw)u z$=9*E=}CM_mXhdl9eyZOEbh`vTrrcpWgr>`XWIw*qWC&!_5BpS8!RHGUC0{4!7#MX zSnWKdK$j$l$G}D_Y3AL0Uuk$23zI+_)m-Y$uxlyNR;mfVR?&th;I{%5hYV49FqSaP;E+T`d3SE z!x5$|TM=Z3?UVcobVcaK`i(t2fzDVUKw1pQ2^MV+GKDg`9;QjjuZMI!H)8C0J2ML% zk$7sMqfrYTW%+CjMeRZgHu7mTJ)S?aKb-0OnX%g~`4h@tdTUh2s@v}7EdsH@M$qz> zuu%uVeZiM8Y(ZA{T9nxF%f2Cc*X)Kj=d+}l-f$E$?7X&z!D`xy9c!kj0NfNCfLUy4 zRsy}3M)fv(v==qr5;`oVP@SX>!wz|JJ{^JIoNtN0o~%IzJ7`G|Z+6U#mhWlIY-Fu& z8FM4=RJRPc!>pg;|^ znW7rjj+x(Hs?Eb9IJnr==8d|8><+PJ>}u0Camcobw2hvLJk9EB37Ye?BDc;5k^lQ_ zVy%d;2brvr1d-VquCrW6D_mh>ufMq;VHY(ti@J=Ls9v)lPe5ni$fx3L-2)wcBI;LVfhTz?L{<=T((MJzeb{YR2TM641lV3e(my&y5W7To}Z6 z6X}GHzCCk~aTVgf^v2xK;EWG<7;y&~`k*~?m(_QB=5D3Tf?|rm;azEOgBeQE;($@- z%jOe10YNKweBaC3bmE#x?qKxzq&R6cd&=1=T*nt#G%+`E*s2L~YVg$tH`r(u*_QTg zHD3#LLH@KA(K2ToVTV}JhPW;d_ySy#rP|p8KFkZZojpPRtalX5KH;WJ7eH#qSBskm z8oF5{M?%qNe=m(4cM*FP!EflhaklnqVg%y=P|PR*xh7T`DClzFbUmt*2oqTz_2TE` z(b-`rny8MQBWdMdBVq-fLLH9MQI@6K-{cw=55JXWG917$GvREw)=ioq zcp3vOYAM(JJ+8>_+iP;*8+|y~)hwr?VP8M;{*Z`O6^=uu%82YL0H!XUQ;^}2GwRl$ z?G#6bw3MGK+sV)ZdTe!V*mhc7?E;$MNF?F?5$rFECej9+=&06?O4D?-k zq10o!)x1&orEeRU-Ow7e8({Njkzi?$HFd$}58Ll@?OB8tjoABlwSGgSVm2EduEF*;~#Y|%2-$gn+P28&FqsD-qN z9Ft0xRasJ5J0{4?G_2m{`PhW1C5mCw|)_QJdb}e1O)u{NU*0Xels6b7Pdpv4PIvqx; zxdOkvhIB-PiN|U^;&JhNj3$BKP|D%*Iv_TX=UNxAu-s&H_KG6|O5sSU4r|>>h;dEM zegzvgivwwOjz1edyf|tK9XYTeMnK=4c5PAgrnGxHEy(?00s1!J*HQjAbG0)BPDh;; z>|*5=04mQB@Dn@UE)!;x6z(&MmZkm2#Q%jMg1@#68pIdGV9#I=C9OR}*4pW=HU|Cx=72wgC1eFD1MX^ui za-AM=@p=hi?Mf2LukW3zF>9wEwXbD(?$j!kXxyScoB+VU$pg90@X}ahVYrH2cGK>p z1%;J>XqLga_6uOMWLny?XVI`g1E1;$Qc{_q5=2)DB8fjXviD=cip6_1ctzd!wFVluLOX{&NK~9_ zIf$o}J@yoDA21Li*gfZ3@hmK4ik-CvGYo!AR~ZVBWquBsCnhWIkvN3-K=$b|a12sm zddp~#ze1=aKZMtF?riIjoE|lr{}`go1QJYTfiRyfxjlNLKQCMJXT^1J^Ld_yMy{5^ zk+Fj=&#Ase*j*mHEyZ55L-=u3>@_++WDOE)Arw<1C>sYpmH*i8c87AC^K*|@hYuMQ zRnly$`uLxtW@X7;GRIG)Z)u*D zd_|%QQFcF9?Pff#dwR2=&vBgRd6p>jaqO)43b55XAIX#h!-ilB0d5WV)yBZ~rczhT zrc4lVrB<<)l>^eM0>-)2(^^R-K{R-KFW?MOp!H$ep*? zI5r%{E30aTV~mRu$L4;6UxHR1k{IRMV$blVoY2HLE4ls6mp3)%7H+moC@r*?n zP=!22pjexeSaF@p^GOaVr7lWR~l5*lJarN7&?z9Di}WB#nLcN*USO zec;EMP7>2&!vW*Gx#o%7x7C#UMxM65wAu>_K60(T$~_n3pZ%{ z{OnPXd@g*z65*{8Nvy(yabbtC>Fc=NKsqnBgRspL_I{LKec7NdMDq2N_?>g7CSI`v zAu2*6_bu97N{1UF$Kr+?#wu~WL7O(CYz93pwJlU?LZS5QDl`f30boUX0IN@(pGEE8F`C0kD5OGJ zI*-m`fC~ASF+eh+S;S!h4ulwA5Osf4q=vRDk2v6v?TOuaH%1NpNbg(+s^!~aS<4)% zlW@kDj3o9~f(xv%*?RX}tr*oW0CZWC!cafG#Wr+wUOtwygNdAEThE!%PqN6eBtMfu zf>1oy=$p=XK};*-jTxjhZyX$WgG51#-&a*~6&$YK$nqZX6{aMA67dyX*Abo2RnZAu zwXlLUk*_71q5HKq72h_625ii?uk+&!E;W;w1U8d6@I%pDoKDORJGagcta+>`7X2)a z^DbDZhT@cnAcLDItzv50bi$D8)pigeVw^(oz==6RLyZfB$j%k*bN6v4GDlBi`r742 zpDGv0>{KQBXs3wVse@TZ{=^IqQl57hk2Jcc=}LwL4yp)9%!_5b$>fQR!CsuV%w@}+ zW-CRxfkk_M1TorB5TB-Pg$^-;JPjrtQ~uO*D_hkeupWu&dpeGmWMIPFwWS7 z?m1(Vv?CU|ja5n2G-@YR)7CD=29oMX2uDU?+#tjupZf3X}` z{b98mac18HKr&fk5cFeq9{m$nUG-AR&G;qn9QTv)qE*W;1Lz|_@&ILoU=Q-W0N##f zi1O;G>G||F4&gK=-LvixQ{cg^O+Q(~103-j9V^pTvT#XQ&I&P~SOeImfe5_@tw*0u zQ$(sv`Jq`bsU_MO7HkayCRcT7G|?}A#$cBp68gw%7_dq##tCX9)T>QqY&w0SJU z}{Sep+80 zoMx>WEgVu-BC!fpVq2gDH`2K&`?h&T@^yB>&Ln>az&guL-x|I@kd{f=eLDKFNtdCw zPUQ!)UV%#RjkH=vYYv^up$wTRW3&TY?AQ>R!obrwEzP=&%- z&oyncoku!%qaJ~+0Sv(I;sUJGTmW^73y|hq0Q59nfU{RWD|zxDpq#%{0V>zxWB|<# zPKhP!5M^dPa-J3t>O3uVcD7BFb$S-Fl_$mTy&X6ADc-qGCsIf}mps-!>Ftcv2B*(F zpj!uqo#@z!nvZo8Pf;0+BB7d*cA~M;e4>Aal! z@37Nt&@>5~OFUUHDITzoi>WYvXUxbk(HR>~{O|d`w;hpF-?Gbq`wG zPVq@`gWXjWKlawO;gkcJHi+L=eQfnit%=}c`o~tuEmeY(o67yPQq-y`E}c12EsI(S zgwnGO;yRiMIDA=jTURPW76~WS^cvC|X?K-cE&qta^BB`B6IPiDO1nsXMMJF#V#nH3 zjruAG0(VEs>R}h;#&=gSwwnF2m40~y7B#$L`WKr~7p8wv6u;IAS!gH%(vAosR;c7J zZD2Kp=piKERP9+@G*+&XdhQn+S}fPKY)84SINoXp^_ThwxoB-T?=|+XaC0LDHs6uT z+!g@|PdZBknZcEFZf&J-9CCJx$$JS3q-e(c&#Mc~o$ZfprFK5kZ2?ZG{N4hJSsS({VO3=XaI#@fnP$v5rH&f~&& zjLz2~jyaDdIy3ktMorIyCNT{)fG;F-&jJku6SsyJk&<7BwO#YdCGwL2Nas z+YC$@GuA$qpMBDBB_PUb9Q?i72BCHNP8-54=n~p~s*|wh7~B$_<4bY6Lglu@!>F9? zZ&*njUu5SO*=I75E(+lSfqgmz43~2~C6ja`ma=UajNM?wh*MxZTes|TiUi?U7M5o9 z0X>_Fdu);h2HYPhFzW<#fL1?|I;Rv?pV0T!{S9pcq;mDJ$C z_A<>#^#bDbyk2(|L(NYgry8CCO0>yL_I@j4wGsqE@px&E<9>A|uqseI#!9 zmWXV4xaSB02fL)tTsIF-;t?Z$jh6^->O$@2)B`*p;G;@%zW%4cggP0IfhXWHF$r8` z@UxXH<&h1^x$b``u7GRORwE5xCUk*|NSwi?R9IM@ucQlY%#qm+Xh!Ls;bitw{cF8W z>$7I%yNqPfTp9!o$pU!Yvw}HVn0TC8H44?V5J86DU8DJVs2e4wGktmdMa}_|-2^yZ ztc#i1FO_c;#FVy4mVcudhJwvBJEi&voWzTN1#azbpurR^{W?E|(?e8nzx#C_qcZV{ zl<4u1yEhBO^Lm?EM!NwxDLI60*i0-L;1x*T=pVZikoG$Fhi=diWWp9-m%Tf~fRQS8 z8YcrcX>^+%$o1JY8MK!Gk8e*+q@h-;CH&QY8SY~x9@OIIEV zwg+G<@(>h-OFLJ2OJ<2=Y)wj$GgMrw`PM6)-$9{6faTFxY68@QOGXfzN|d0x)S*~L z$yz-3&U#trDmBk3Tasc1I$dER+w)B67S%(EsZdPJ^&pO!WW9V8o}Q7cJ3D2`C05f> zn3#VYEQPbm3umO`exMss_i+l4r;^cj8l=Mu__#dqAG2!b$7!u8c7J+U0NkQuw}5n- z)2!$+&q~h%SfCjt2lC5J8ANeQ$^-e`)>N^n^yqaa53#aT!B!HD#Kp*z<;+2BsLM1d};VX4j#^1g;(X^(&3gaIfw- z2kScR%itI!ep80vs4@8ZBcc2*g32R|9~kvwpo3?$G>=B-#v|x;<*~6xbiHMDKEmlF-3}0bYoEj{Cql~^R1rD zzSVst*Ytk-Ee24-hTPzF{rkJs zzx`aS>f~YnfWj)0(XfYwGudEHaRES;T8u0TD`sC1(7?>bmk9f7YbQp7T z>3RxOz%d+BOI=WJXEK5sn+N+!Wk~h4`9|^H8|IUu;a^J_O1o+lAJij#c4kr9RoMcf zHeI5Hm~WL1wV?HWBR$WzTII+c19XtH4{4=T`_%KT(wJ{$h25sbf>;(@-EA|LiC$Co zfH~V`=RF^H83%c{2R+!ot=N|0A2=w6Ap4F|t6x8kaY6l92{N)uILJk8((FUrr0X#Z z@uc>1>F8tQ_F)BZtN;C z6}yp-BI}5%6*3rdWiT|A@zS)UfSTONpzl(UXDsE8IfvB_#VE|lzYI>kG7`sP7>DuN zuGWXu$K7K!;#~esnfiH)JbcAqY=ooL(jDU)cf!kbHZ{*3Ym#mj&v*xY-5}4GOpt@o zBRpsn{Uo9Kpkc>WeH;Lss6kK<8mQ)GTnP*^akdJ;p?mcmpIGt0JU>9B~QBCB4 z9?KUZxtA}{O2gG_f3DpB_qnnq5974{963#}y7Tzwib-Mwnk2G0EI4j!r+o346;W3W z(v|*;b5bES=@0Z4pTUvFfZ7n&h3+i3wLc*ToFgO&JT=NC$LT7DUbt;YJnXM2H?RaIiH4!B3y zuc5BF;+mL7hb?fCGv%>c%*;IaBWX{mv+={|t^5?TMB4fKql8mWIm$w!8Zm#{;(0_M zED`~m1)q2r%+BRULe!@c(*U8$iQ~|7$wy8%BPUMzYh-&}1d5V^d>iK#F#OnD5 zeF3DduY3qh;#*9R!qL30>_8_J@l`p2g8>maPR0s1u!I`>Y}xX-u@Vz*tYnXn>h{RL zg4IHE*%x#jP|V~~svDVQi1@tD2fpBUjk&>7vUc@#|Tjm1e4djc?m7d2oXg!E(-ODe^ZTK{8oYneS=wxa`$aAH!xWR^<- z6Iw0>OlsNLG*=t0;8N!e(|a?CtkQmdgSj{oDOjPBBa;6EA_X}o6@sODwIn|DRblc` z4ug3&NCZE1^{W%b^6 zHRM_O6=*h<*n~_3Ru~l$#y9p|jXu-WLY{`Efg!Yt`-~CDB{mWe57^KzR^VsVQ4BCP zR7qGlsgwZqDA~2wtH;GH(6}{RyfZsfK`6ceE*8WDvYMcI9#^rCQxSLZF!(P4kPwJ1 zV0k0!u)L*fj9jVyB-OoEqK}A1>>HU9SB6wGyOzGqC8DEM=UWdlS=6;v)?`X@PT2Q0 zWF${WEnqN66gU8Md$ClNqA=xHr?}(sd4r?5+J-`cRRl(-IG1>^ml;Ca3eJ@AW|pkA z8Rx*3c0#^d=t3>;29O--E&qBEH~5X=M^>J>m`s+cirTYzH4k?it=7l+jc zLi|R?C|Of{7HzKcMX^l^eb#mnr9U3kh933E9&Zt}=2DY2i0JH~Y$%i%9mTppo=cvl za|+uk*E}av>Yo*lrqg>cO~;D&zXeSdI``0v{}EE}u{GWmn_t}SS%b~iI^=sj?c8386{i=Z0N>lZ`gVnf53W@z?U4{c06D4e)o9Mv`j z*^O`SVq8SvEHqGlUk75O|Fs;f0QXlPrI^Sq3O%9Eq$TP#6jS}Wl|cFep6M1BMWAjQ zLYdt~mJ|1D%@=ze&gfa?BkI?h{pKJ4zwdhI z17G@2-%WPL>g=obak?#^H})23*+N*{Lh&095;*ssgH5|nwDwZnXLH=2U)a|WFV>g_ zKMKGEtWV%;VyYiXubzW)n-<}9dMT}jc}sNYHjz)Jt>weCea5)hjA4<26%~pYxrJM{B2VR#a%|XfH}=>Ao!|t%0O)tg_PJ# zvR}A17%HM7BvldB(8T#%!N`%Qn8ZF&k!MEtPEEbV+Dj6bPlq+0RC1)z0L3N$xUhe3;dinW*Nl-#Lt^vkj&y$Gel z6Lp(FZA8t}XWqv!O%ZvuBB`{F;)0>L8(a-pcg~e}rmiV&AJ7y-O#SgxUudX?{RPAI zy=mu8oAG&4CXDI5KAkX?RsB2B7Sv}>9xGx#B*ZlP6x@7lq#I0_v!M*=#9JXvOg~EE z)`~wtK#(0+(eRd&B9uQ@t#(PiT*rsVm_`Q3_-p0MM#L5vstA7g%}9R=4|O*5Nuip6 zL1NFxbjU-=ir-!^jLj!CjC4((&5viFF}#veD8fxIoE0hbd_TVEA=*Y@$T@ucwKpV6j0qgbvccq@t# zKQAHsz(6?-pHjCQ``toGCn1(AT3E8%WyRkn?Ilun=wrqI&k6t8H1+vGPlnj3(fj*b6IoCR9Xp-j?d~ zkt=yP7N2!0KBRH=bsnP#g?i}A$+A&U<1P{&3}5i7kap()(&qa}!yYRRTjLOcnSoq~ zOopnjC5QWQHRYpGZ;{#6>P>1@^02SqA6-+o3B~Lrr-vE#f1)UKdt2H*)x0UDkRAs} z>;-MJrX4ZM0P8mY3UecSeB~C{3AW-36+T#9UtU64&g}|tRITvI#h^4$h@RzYa`;4w z7Jed!q9j*BKSrX&hAsT0^oo*py~5riQ}{^_Y6Ogo$OmfuH~RwUz$qE_NXs|z_&H;EK9pK1keAe7WzC)$CAN-YC6nF zR(o`R#3<8E7|ZFTj2Ja5>qw<&`>-D-@>91X(Wn@c=D}qU(COEsmO(!%ny8gDQC~c> zy)|aiOecxxLI)!izlbi4AxX_QsSy_7e2jGBI}9TYbiOt?&v_?bjV`fmr6MPv?7o8< zl#5e*)Kok8wL{fQk#AumQH#H{go@Qlbre);W@RmE>D>M1ep`K-RFkTuZ~Me{<>C^u zE?rz{CTScQxVGMTGcZMYExaXBQfo~EN;0$8ikn)~NR*VZy!e21mwyOzEdLOaTlS&I z3RylMgKJBWdBsk{RnoDd|=GR?FxhOH!Z}DrsB0_p;{8C!FbXj zPy^-50cE+7Cj%5Il#dA1a-B4N&LvU?N8TT?lKPkPd4AL*wy%ON9&sO-m1wO5X1S3L zL}Hg7Ddf0d@y}G)962ZD;zra}F6n)t2F#V@qJ`*>6O*;2m`UX{xve^>G#LF{x4hXJ zyV5dHx#(yzD@dpAf5dvrF6Ok##hj7F%P%bE{4siJYhp`)EeOB(Joiy@YUy+2F)!wr zhRxS`YJ|j6ZAfy~FnzyLDo5npq!y;>_z@RR{-y8~*Gk#ZxEN2f|MidW_}gFk_FsJB zTXC&a`yPka%uarlYuNO#aN3aRQ7ayh?a&x9J!-`VRajS{ux47JR(xHB!=^{AI9|SK zj1Wza6&4jOt%PI^BK1jJcDR&m9j(f;-=;`dvz^rMe3j=92Bmjsm6g0K(vUiTX6EiL zHXD}8N{M6c;&HW<#Lnvm%%J5Lz5#_qLGcrd^_(wezt|r{+LGzfeciuoLmh3GM6>1rtJJ2sc93PJSl63h5UbTKEE6454 zvk0^4_mUyIheg(8IcPc>uA?h!M!98f`W#^xjYxZqC1`IY6WolSg|wl|ZJhN0HS0Lo+FqM>AYKuD4xV#YWjefwbm} zhU~-RvaJMSRG&|tQdSzTtko-QowhXeQ9Gb0!m8KwNu)eaiobswy#G}y&}HZ8-Z>d} zd^k~!I{5Z}N8l&aV3P|D0>3=(%D1)%=Iu&N;$Tn3BKYn4>}Zr zoZP|cb4;wm)t>5=1R>XoZU^fVH9dS6xW-4;(QUkrJ^Y5w7W)js#h$}Q`XLGe~-@WB$2VdPdQyq zNwvw|UPitxlP4T71W~vhI7Z){UkXqL1lcLtG8}lXI=&!I8G=uZS|8rN@N>2700MUYU2bebC(d)C!xMczHTJ z69Bkux1kG?>^vn|+qS_>=TsSE@qp2G$VkrOrtUALX{~?CN2Dz*aZ~4U9(n+|Ujmmu zHTH>tY$4oEQMc2!(|C3|N!N9a30Qzp`^1orOpy}LVSKPm&UBO}woeQKL4*Xsbh${a zCgYXY6!HO9(+SXm6CJY`Tom+@{ys661&9DKyPusNY3ZI3Xo*?m`~sNUzpbtTF8#;A zD^6j;3n82RaEdc?eoIE$VY4;Dmu=e<7INM;r#XW)G-t|JdiMu4XAD*+o8VX()_u&- z%`^o8>Q$ALUmNB+e`?N2>PWatcs#mKntBPCk-2IonR!WOs2=PWDV z+cf>6DG>%ZFn>1qq|GmGy|WaK@XcsQj|QjD%-56Z=eEbykEIhX!tvq7Z9d}sTHs(& zOAmhd(c>85U*Z#rT0C!GuG(bxiso%uCO}K9*wXDM-4Z_RiY>kSq+61diPW;>=pO!1 ziLpl-ovfynTKe+IwnRH_3BRL;UJAyt3C2krKXFI#_@ zB)qLsCar=3OvO@J3ngr6RciKyK`hnauj)m!3d{zKeo6fBj9$@3JcLv<7x-YX*3jb} zH^_>rqn1uKh<8hN(0rs9>_e$ldwyO_IgFaJ{i|o%`Pjc3Mov0}6m49wbGdBbpiDPD zcK>Cb*hfOblr2dYdOMk5*l8Gxdd#NYJTZMiSqL0L#0W*TIXTl6yzEO-k=cilW@MF8 zG&rh;7Yz;#`%!Q8Cx1!IicmUp1LI!uEg7=B)hCW6-x9y^R-ahpun34T@F3G@?BfAf zr{IVb{x+P_&0fh0{2OgD#`0>(zroj`Gs2npclb9%#^{j%>q~mdr{Te6Gdu5Nze0dW?yZ7PrnibL`&nWt+N-ARe|$W7IbywujKxMF`QW@VpuVF$7F zH5Yy51!Ib>ma>SXkGM###v>x+vp{LFk$BoN--y;elZ4UZ_^13+-B0U&x_^%Y<11#B z?<5q+oU&2s$6q~8E0HZjhMVtv^)pR7PM~il+HnFh6M4snESmivX(#@-Q>$~0LV4cT zVT*bB!OeYncrw4_ARb2Waw-?5FgI^!e;a35?B&C^5~BX!NW6~Ob=2>K@mkT_J2Bpf zA4%iVG%1P824~ulPYciSA|WJtqQ?n7m3zRia7+5qu9OGpJcJsyGcjb%uw$3gZ$BNx z0|JplQFRoNOz(pMf1m7SN?(oxh%tN}M=7_u+UWbYEHSh*4XbWjv0J{)yQQ-&6in^H zL`-vLXJj<=Nrf?Yk#Rq)Kec+k_r)0r_68*v=x|DFu{tE9VIbJIlE*q{3ogrV;C#2Q zrVhwV0;jX<-Zo|5uV61P-Isbo*74N$fPR_rSxZ*0UDn~3iG3Ct5dT;tLZZ)sEb36^g>5Yo{F3NnxjIX+P-84+8X*Wv_** zL(}6x#+nv&?-qd1<7S|R@>;g6X_9reQ%|zP_o^p~u23i*+G7IG0$JMDVyKFRKt{d3 z8@@*`m{Pm=W2L|ufe>U7e=hjZ-Ja&>G|eQUI|K?SrSHa;&k#@!c^m&!v43_0h@dqm ztve`?<@vuVs@AxpY7sgC@BCM4l8LNUt-o6f2f;)LkrkiNaJB~z z|IsX~Pqfgh@c+-NjYI(GDH!+_sSYfxj6<=#lzX>8pu+DI4D%}EUKwGXI};dwR~>At zNle|q|B>S1{|_!qXu6k;Tyq6TWn??W8WBFt=pD-mFs~J)(}I+s5nW5iEX%zgO=fm8 z!J)XpLW>5P5teV5EYUIkv~@W|Lv%W>v7R8SepC~a961S`>%h>61XBpF9%MXX{-7l* z!}ZyMpVd}w(|90W$KG{A_HMnxR*h54EF+PNJzZiHi$&dQ3|aWr4;iIaD)(6>2Ag-a z4i{*ZwXkU0GgB%)B9(&E&kDgvJ>@`7_7tW5M54?V*t8~*R?kOBE|xFTDflWH6qXyL zkez6(|9Y_v4!7SW%JzAK9O%6ws0ZOWe}YbULR9Lr%+-1v5}|GpSy8S>9d<*GZ`L|p zccGm@_3xlE#W5gnolOQc14;NCMK#qEz4Mv;hWsh&mxJ~RRGG)Q2ofd%#a~0ZTxh3g ztXx;uQ}%AiK7qeJ*ci8(cxDzg2h7-Go{Q_Vqk1xPj}#^S;eIGo2OMPx#G9Jd0q-e+ z7dY_uDC06^@)vyUf3qOAP{aiV30N8%VL2L9{|ACvTn!4>NE89u>mm)&ApQ=Dfz$+56$<0j)<4^?V5K|;B2ig+Fo6K9NQYA88c%6y` zEW%qtf#zru*x+0~2OvnQgiV&KY>K8^qv0u2zasu2A6*#T*nx;Rxfvy3K~YsU7yL$OQ`h$KaE;HsZZiexgyI^ z77patX~OKI#u->Q*i_qrp~QVQ7d0=2Tr32XKnT*Apfi!T#BWo%4cnkU*&-@LlTnvm zEub&~Z3%>XeMUu~@eSFB{dBKBs!!1?0uhb$N=wM03-xN@(s~64qgSA5S^%T1;LQO6 z#g*__G1>7%(u?Ojrt^$7{C)yhvw|v19dHZ24#)^*A!MEyq9ebE&X&t&(Ji#%jk$00 zChwa61wyV0YY`X(T^)2E@!o(E06~vLK;Zcqf1)@Vk6tr`G zqTr(n&)+|?{Y)Y`G|(#9ivE4 zz3|~B$hiM+SKu8h%vVkgy6AUBQ>WEbYgJQPe!gPDQ`n*vO?`2#rdTguhNfnchFpS( zH+UE1*w&U@fTLSwB4!P85aQjD8H0P1uu$BPkA)r~Wnobsvlao-C-1+(+5@4>B9}JR z7*0VLv4`sOWXHz_J-OwN1!;Az#rp05=@>WyMQE7h_z3cUEFa|J3gU35#X?Ctisbb= zMEyuz)|1~BXy~C7^au^lj0I$if2>l=XrWn-m9_8d?FTqf-`!j zhWwR9l-+EK9B|xp#Sv?K&2eoT7CSD7*3&*BuC39578X$b*OyW#phn>0GnR9>hqfe) zD+0kajlqr77;Vy+q_nz;Rh?5mU~14;Q5`FEw*K2+;l^G)ri+9LT*}V3v2Qz0Ak5x^ z&e!hz=hIU449|a%35Ng54Eb%Q-);WOyE^C*=K)A`RQDVtRoe=69gt0WN~yJY)k&G~ z`Sr~Q2|~&=lO)qAczHLf-SuZ0pSnw@2vRTa!5FkqX z-{PMA75C7oW%WS<@B#w%>(!rjHNh!s+1{BwzCBrN>-sn5D zw;uG_qS3i2B=2sRO7Q)l;&HaQIzUUiw`zm=te>tV%Xx#!r4i(SPjk&NuvQ5AiEA4hex<^@#G9FX*MBVc1cbpw zAytINn!3k55KQZ^S41=u@YAfUt0uKG2q1U*A0+;g&_DpRy&A)v7FZVY*@~fD2KkBu<>Z^D*ApF7J4u@9D6ADv>2s-oy3o&zGiq(ZY2n97 zP&+_tuvKA}=$^aTuKtWYmXnyq?R0Hd_C9qFYn5_W_9N<^cVPm`VA9YQrC14}NRM@j z3M?|9g;bc(#;x0#pk6tB#bAP6EWI0-(q+8{z&H%E>2IA@XgXs8`WVeS_aJMAiBqL{ zpNYwwsV8$rXu>TNc`1BG6D;&HD(j96S{E6K5NM8@r^lJ+b^H>{Zeg0oqbb6Fm=gCznlgY1cjqN`CtXnT#R6&(Q*;X53H5aLx zmD>nq?$i@hT}TUBGa%Y5%DVNgCXsB@mRrcB8D~D>*vzHaM7IpwR-fvL#yBB^f3SDi z|5ok!O4+necb>j8MjdD z1gpVpQGI_ot~hFHyzK6;&QN8CDwD4&wIXdCSWz*nykZ0SQ?dF}yZMx_`jm>SstN&+ z0~U7{swUDc;Oz^{3O#BpoD2--QdD%#Typqi zIF0Ex@8Mh~v3X=J*J&=}aLRMJ{s27|>{R9IxfGbwT-FuWbE!{hE{C6DF7+wRW%EgM zN&1RD%A}gPw5$Nir@0hU(OLzDHOwZ~v!SS^HIE~UQAXo+Ec~8W$B<98j*T@ntX{`L zh)gV3>sZ+Z4pVFyTHrR0EZjof@y5(6rdQKl&B7^Jj}D+oAFi(~A0&i4$whdn>Jr(q zbvqvE+4P?thcV##5 zyjTrN7j^_ZjRbs=z=#=x;qFsPaKrPnKQ;@Oy-9(5&4i0;;?1mV(sGG4M@{_DaVMu; z;-84@+qG`xIti;EoIf!)zd#lu}`chR(*c|`O_U19M99e~x^MWfbEZ>Y7Cs(VBQJ~XUv8$PEy`Is9mQ8bisJr8eVEEq|_ z!GpN@S}o(vn|TCmuOr+&+Vr_Q)5?lmS`w8DD1PAYA5etm>yf6>?T{ZA=SBdJ*`?c_6`fFKe<80?LzGktRspnS#`!d+yw% z`XDNSC%a!X3x|L{Nw4MF4yv8AET@t~aJ?&wfr}tiAw`)Jw>4*sS7*j$9=C#PJ1O3q zR1_|c@U+5+?SF73j1r|fE&yKnFSb7sS<0JsvetpGMpDc zHQ=mQ0Z?uC*DX!a{7AdHB$O_ptPFy*A`2wt*`p90_A#-bPy==O0}W86Va*Z%(AX$a z9fT6sR;eTifhywwf0{w*w`P5fL9umpdsw<%+So9fid!z~ZZdg!Dy#)lQ%8HK_SX_Or~{QfPqvd}vNSGc~=w&u{^#zUTeV6*@<1em+|$NSS|L zlNbH}3*UtFQ_98P^%YP4%CRKg*|y@Wt2*VqYg6{O3b9ZBRN3E-n}?KHWq+rTZ6o;G z?k^W9=sN>n=_Pj3;U=g;j^P+%D0@9c&Ix(6WNIdug{rfSFROeKxHE}QbJ9-eRyg`W z;3j^`?VkWwKRGI!vreF;5(hF{Z-uqQC$@c zL!A~WpmHtFY>$M?RR$?es>N^z)k#E4{t*1#;hm5V4{@)+^=;7G)!GM{nJ3Z~{Ao*ltc>N$|AG72P>?iGWsd~F3bu>|@cSV1V<^F#Lx#Q`VR zSB8+T9CUU!4_5r^^y@}BYp~2;8=vOl(>5L?mej!ki{R9MMLid|Ein@`w8<0T8t))K zt=>siS&R7|CEusTEAET^dF9`Sic+gAe^j56rT{dLv499$=__Stz$K{yIa7fD?NbJk zol+?tN8ck4Rwmx!_#IDbqZbW|C%{Oogza2bu)=NMfLo$`9z(fdQO;C z)G4axSIjNy6xH*qW*Bvf^8AMRMxBya2l9}J2?t>v1L|Y{KbUvKwvt)WIYTfHt$BNK znkONcN3Z{zQ0!c>S2JLpme>aty8#Ejyb3nL z379!kqHJ#^4+r-kWn|9O1+f;mhgt@?<5ULjAqRW7M=Wa0IXpy;N?5!L%&@q zZ3_H$cU<)XL_9N5VNg%AJnYd;!j2qvFmB;4nepJCGM5~pm!CnPf1g= z6w%a5;?vu1W}b7HJ$9G}!`K_J*D;SVxI8rn8w)Q_&3#M_71Mz^af!33!y;g+yElj!EVDdJ$I#-ZSafklJy zU9Edp@WSyS-;3U}=4uGkK2mUp3T{1LK@FM>C(Q5R@nR~N-?esitTtg!fhN_v2)%os zQ~1VUI40iV?fG|e+RIhjbWn2+dL;vPJV4ei%yI?G<{)D2!qm!6Y%nvw`v=OI`MDpM zr+)rh`ity=gCuNC3CnMIfL~+r>-4K0IH-?fhm`y5I(^!z_ZNFEG{^gwTT0!1=-|PF z+Mojel7qobcY-p!vw+6c-5eN!So*^{c;L-UjK*1Co+r;i*fwkdi+#4eZw3!iln?fw zthD3ofw`*~w@A(|+4#yWa!jr8q58w8Kk&D2L72DZF{f&1*T<}ImQBgr9V`Y9Rvn9v zm*R~>w@A1W*~|+?Inf6ZW#%JMI;{C`58Wc!^&wTT>(c~|x>TOp zn~^B}V1STg>mI3g?=N-WAPe8xV_`@d3&MoPGFi1^yR}9E z4uX~4^+W|hXgOjiU;4u@tOq_u&b36zhqNiPr}=_T%}KbX8Per+-roznROJv zBXJKJt)6&4yFO`85-I|8>sStxUd>i7{!qOsROY9Y`D0}MVke)H1;<{_YPP{bg!-Fm zF5}yc8y02uQVe+$(<(A)F)5-9QIAAA!`lM@^CdDj(`RllQS2T0XPLOl zE2Q^B)5wKx3F&?PTw4b^u^iM$4>xX*zCC0_Kwu@(k6jAV zqr8i;{Ix=Qh8IW=zPBW4pg|3!PjE~~-v)={8fNeYQ^pabzg9>jd=k=!@fG-TB|k8H zgi2bFr4(~Rq!&yt8R?a|LHZM8#mxO}g*#cq9Vu*Xo<|?7RVisK*-`mzS^TeEVZGY_ zJ3JA+ND#Vn@&Pv#A!fNC11d7;wnuI|i#0R4ECA;t6V!WhmrZw%XN)Y^#rA9m|>z z798WYzp*${5Ym)BJcRp^o`+?z&hx<{j(hR7@ogsu3rLOh1^M9cd{Gy=@;sZf=+MaN zoRh>DgSDl7?sew#axP2h=-$!ujcO5EZe~N{T47u?n9!N3exTYPaOrmZU?-iHb9H{nH<8heM))RV=R5eta(o{T z7{ft*T%SZ|L^$S-T|M=Rmp#Nsg)l9rAD=IOpxkhfGtzbPl6oAe>R|MR%{;5ahHrLX zSTQ)q2!*-&rc;!>oT{-5q-GB_(fr(vKVvyOb0I9nSPYS}OeM|{n7mbQ5Yl|8akS9x z1tDpLIf4eu@k~i>$WgpmV?Zaa6Op8pmoQ)VER$lXHZ-t@TN?`iDZNoVv+&{Cf7Vf3l@CvGK=GBKjLg(2Xn=y!lSN_w2zI!mOW$#ttv4om8 zFSGd%A#0y**$!7|D=SkYa$a4wzk2LPn&6b$Hdh}T{Y|jS503u+XU&heQa&)xw-xUd z8>ZGx)VAC9qd+WKxq+IIahm{0R0iq&cFe ze8!cPvU;bed>ugxDw{?1FHgtT5ESV^WfU|>lJd$zJQFL)<$mTpDv6<;ug0knt*!3` zrt8cJPHs*rqG!x--HWZM7aZcL483>-o{;dRPZm@mQz@ z5dcLl^{lV`+B#C_rk3GCynY%0B>P34b{yn+FrW1XX@R&-y8aa=2Yh1atW9GFX1W!&{c>%a5!f0BLsbgskpcJ;_(Ak}pL|K-#MYm~SS+N+?_i~gHX z0;$5fI$7T4s88~h)xCYXD|_2~SRLXC*R$%HzgDG-|In&%je19o&giU&DtmF4ZA+ZC zdRXm^^#>Z~g1A1Y+mcoRnx3U&9?B)x+bkjL#T zc-k?B7*1fecR>gkIBoH=B=@Ku`f@5mff}6>Br3T zyfpeK5;$h0iK)jMid~?oG>s)_roEq zaSNo-9I%t^n(TiQ$$YQY$;nwuR`=@ApF1LFC)7i|>0n5wl_PipEiD-|&re8r-l-VY!js!={*>B&`sZNs>y*b^>Ex7IE8G-jH!om zq=lvk5V#!KXvQ4X<8KNm)1i@Gdq$(z(N*`_OG)ZA_!yvJ*2U>)lBpr|nusG}v1!XB z297nmRw*m0qRw?D1J@~U2O;1M*>^M2&x0p$QQT#f2s++|ssa2RyAjH|n>mhO#*&#E zA+R#t4IkSA0~eMtNYv;l5DU?cI?gdfM!qCmKEEsrh~T;#UWlgl#2gr=m;-`^m;
YtBvX$Ktv9(#DSwDVQB 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 z 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

msl@>?miH8gb>^3Q#AN~-6bgNb$vBHvD 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

Glz^^> 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

c%4)+u4u$9>kvolwgf_gNpz**KW9A`_zd zr-kU*udf$CY95a=yhWHsng}%4!@H4j)()(2b~D4=_oldgO(fR$ruyDge^pa#^oFLK zF|6MllOl`(mioRL+wTMMDQ@9jZm~JP-r z9agbV11~{;z@!k(utTT~e}lVCg)i=a7|n{fwRJC=R1<1kBthyLm~$iF3g!WOlMXXI z!&+lUGa<=HcxL#~p(04KO8ZUnaR5WaZ8I)V$nCle&@P^pGlnSWT7Zf<5UwoVy;C@o zvJ>kQb?v)>!L@VcFt~SMIZYf^K;#+jnJ(7nt#y_PAs8 z-fwc78RIsJ&CA}Hb5>(Hu$p0E`SBq;2;&mZ?CaD{Kd>C=*Q#r?`z)3-?QMnw^qYvSNbAmR;5yUR zp196*;5yu+p~GL73K#NcsvJH+AS5*~f)R7YTjs zVvBWcvv}TCcWBwFV(?iKgc}&}YlNF&u|2F6#@n_FkigqC8Abyrfrnbcz5eboQUhxm z12dxo>ugbLWd-0+_f)g)DH|uNQkiV}#nuv2Oz_2UDxwOi#LTRpVl@}2nw8rK%D7Wk zShYf0(5ep6W>&=3I~qi?;eCMILN1LsuW)R}Qf#7AIBg52IM6r-CGd|vUIcHQ*%U#< z7bnLfo&F0c%KI!%HV}eo5n6GK0N4s~0zh6c0yA`?7wjK*O$Th3`OVZiU^N(J<$H_1 zf`O~?qO-4jPL5er8A2{mE7HdPiHcd}b>hfAWvf56s!!>vPoc=Fst^F%1ws(OGONp6 zn+o#YR;VYN=n&H8;v!?+T@BD*i>^TXmU`f3kVXvmTa7j%g>N;w2~^H?sTw*2!;2L3 zy$3VbKx&EY!eBLoK^k@N!f3`c8^J9m3W!BOy3EXPV?L@cW35qfEH#VPj3ru`;i*?_ zX^v$On;T=fNn@#vhcK3#_XDwTrz%&ErO+J4GFBYNQlG+D)}MSV^(l;H^+{t%`UH&H zi(o8GR;b5POhs!I6jm`C6m)n+Eoy1aliyB*(bziX;X7EzkWaOa^{N_HuVXGm29~RJ ztmuG;X;cPjxCCU-ie|*`>`$xdwbjC@g%to=ERPX}AQHMf$%SH}>H^s^znz>CH<53h z&x>mYMT&gln!1BbMaaF7n&d8wp%ru`*caJlV?ve5(ToSYyjlZMc>q_+@oBLde3Z}# zcp4G#MFJzby5YSY=DCfJS?sgo;y3BuU1P#oIe0TGoA#f@n!P4|NF>3mBmRlVzDw&? zDsL*|&Hq%qx##nsWWgV2p^rVADJHmkr%k{-iT_EURC>u-Kbn&AVqDLOP`CdjiVx|l z3Ae(LE*Lm{Y4yiJPi=mtHUQu(Xfq?uMh6v0Y!!S4%Rn!T6j%-O=_YNM4Pd&N4q~RuN2^?4`H_{Rd~Lb(QHp(OqFDLE2l;eW`6Q3`e>n)y zu|my}vI|QggMHE0bNx>#hAAA9EahOD*cKn+2}FvXQU*Le@nfN@0%sbsckm22oheC0 zvG7NOi)NXv%oWn3jLF_FW=?^;kL-v#V=IDygG6Iou_Y;#{>rnmNV$p=WJ$FX9}MOK zD~}<>&TnC}g>ccfsZO=I%0PBf@pUe4O zXJV`*1c6y$KYyxD>9d5B5RtdgBz?K|-To zXb%-*Rdb7Rwglr>q$CC0C@p{R{?8?IN$?&aipCG|nsR+v+o}R{bVmxh&~j_ zL?0Y-$W~VUeSDO{V;%`q0DR8qzW=}pkitMXlD3ooNZTr0Z106}3s+rfSYWJ1z zmMe?j5^W5{b=7wIc9# zIVhj2#!(xqnlTYFbkO$%N^zc2-NV8bk5@!jL}yMU123n|{0 zmgj>r=hlEpesftO`7R5|8bGN3F(@kAi-~BbJg-0UyOH zDpWEshRUv^lC`L6{)-Z=&iv&{QeN)xNF0*kj@2E0*F+}nCuWK_v?4{83k&Zxybf36 zbs>w0{VMA6D$LG+SslY#gV||u#|g};Gy+IHlW^*1Bm$?=pfn~D)*KQdr?HWtyb_#J zv1?6^&2XKufrn{qI^`pcv1$9*7`F*ygO&XGkBzgd4UA1_zBx7qkBtq2yz#Gg#lHgY zx;}+J1m4Bia7YR+4phkRD z9_MKxPm`%-HiwOiRS-0I8v5ZRrL394(@rK+<>L)9LD_?L;ADYDm}SqGMpXJ-lQ%5% zHhDwCO#(4Uj6fvc!n4H~M}3II5BNbO++}UNRW$`V(W5sny0HK5Lz(R36+Z5Lpy+)M zukpjeeQ&>vy{WCf{AGKQEVW=FgJ2{Z%nugEz4^g=zvqz2JcuR;h=@6+o_1Dny(pg)Ue!H*NorN%TiMV{N3bh4wh{j)8Dkn4 zBO_2TMv04+5CyPoC;47gB}9=stT76FBz0-|uU3+BV{EYa^L%jNYfAkUmS_gntU}(7TV! z81L=N`AN@|!yJmubab_T-6$^>K3(OX=6GOL+R1~&f;#Yy5dMdk#PP+SOCeR|$Dx6> zjPK+@t9Ov~gdv>WZ;U(kN;t>ijmm#3Q$yiSLw!n`W&nAhd@+DUXLoWrC?jD9l9@~) z4CId)>O0!pqTnfWQuZT;Hj=k#ByT$BNNT3qfY+nzc>_(z=)?@XP##ed#y?zx4!t(( zyGnWh?tw}wN=Y=(yAyLaXZxy$V9Dd0aePf+6orQ4OwrQ7w`nj;iJl zk+2(&9ok|8XEG|vC4t+kwK@+fwL_XGJOC=;gVYY~V1%V^hBVhYDQK&+bX94cCY4L; zEKDlLl(TJERh*^K$ulHSlZG+kqB- z)sF70sPM~FHvAgX$EuIAfq3(-F)Ccp?57R4Bnr3E#R6_!>rJE9OG!g;_$sZpl125c zA^u3~tz}Vtti({$db3LFB|d{}WN}a!iZCenpR67f4EP!pxEPnDYyXM~&o-C~lu%Yd z3{^9v!Sj4jB5tZdVbWqS4j6$K2JROIMZDi_30c`LPgjGYd#{*u7A}A#q07{44v1EY z#(-oM!HdyY8xsS<;-djU>z2k7weGG&|S5_@E(@+e;V(Y2EFhb<3>X z5KpCb%b4d{w>~xoNLsf(y1GD(_F4&<(z^9IXx;kUlu+reeGXc;KCjlgRXS?j`o2c% zwhTe*whT=H6((T~L=n{hY)GgH^P8!Yy4KBFEv*|;k{KhC668>kk}2KI`5j1!I*gPc zn5ciVyHU|mT4a+vY=d+Z^h|?rP@b*m2$h{}qTXo6rBWvM1ReQAfW#*oU7v9>KdOm+ zu>{*hdvH;(ZJS_AS7zo1?{}&6vRZmo>Oa85x;4sACa1rdMbzdLLM<5<#+$0L#EY6g zmE2NDD%v!fkr)f|wR}GkUcX|j+@*kc zK<^^%<8(^cMl&`iv{E)QRxKzhP|e|0qU_T9qlhX|)_$2N8&|TL(@qS=1}1gAieYE1 z2E%MF5d3|{XtBBUWpl~C3;G0SW^)m9R2&L6$eQb%+gwOArL0}ga@kxspzJmmaZ~Af z6E>Gr{6YWNv5z(vAtuD5bejtjWO*l}H z3^ca=@4|tB-wS5<(U-5va?{u7PFJh!j17*)mL-T}H=APg0nWY;E+4A04Ni{L$MQHQ zXZ>n&a?C#VF>vx&L%rZ)_kmYd^g$@{VE1X#huM8n>^_GZ^kH_NOsi}~ABg0WQdGY& z*`pLy&2kf_ToMz54OLA_QDL(8o#*u{DawYySRX6Jxh8w&3%1cmfW1i{))}J@owm~o z-mS#e3EJ2I=S6i1B2~?K)gei(jHs{Pq7B)dWI3-4tuhq4-AVHvnt(8ZoyOwEf4sj28u{Wp^Su+MVK$3Od9seGjJeP)Th|H@j0>Q7U#;nU0%eYIY}9{qkso zOwI0;iUT_jgIOS>H5Mcs1j2%ZaNAgrOqvV=zqAD{NUDcS=Fv+E4p!$P&<(9dO#%&2 zHwo0bVFZfN%0z?N7g;ojHm}v9!MteF{<{xX)LGfQWvV0*J}?@Ha?6)LIhU0RlpX*`7)8*Zcw5@qj#@dXLP*JD@R znoK9tfYu{fNeO5P6B35|OCpZH;4y7uvzRcJ8SolKI9%vTG?p3DNo%H)N&B1T$Q9Ed zl`PM57@i9)y{PMNxRbA_v4l+FSLZ!d0s*f`n648DUqZr`_pqy8o>38YF+G-FT}xHy zq-9uL=S-Q)>ey`8Yo*;4uhQ@GD=-gnhw2nt5*8rJ{B!kgzARd5wT^-VNde3tq;b2X zq^-^OFcCO>7cy4cV`OJh<~9=@#nZ>($IMu$4CX{3w3>RwI@jTl7EDBKP>8U+51W-| zubHUixs2UnB&En&!QAt$m;~DxmE_cb@Y%aDxEA`^LN};rkhJ`e6O$poOeT;p?2;uZ z$kw&Va4&)!mOC>U?v+uNRcHhvu!A7^yN_d;w2K}hscyY-bK%u8GS!!in2Cu?My|NP zR~VBFE|=o)V^}wj3cXiYr-$$;Q#55+NI_wFWZ`p3@S92@*Ya@lH#}jv`FpspJlOor zqIRJ9d#V1R6>t8CI0W}#Bt~f<4^`rv&~bKdoK;0M{{Z%D3#ATaMnZzJjTBas+r#00 zN+&G&i!})go2q&$5=$@R5MYzaWJLT{iHdu$Om+gzjoa5HH@KzpcDGyJ$^$dZE&64a zP%IN~^G`SVC+J6(P0^}ZLig@BODNS3?bszR+eRr|*Rm}^{6gIWngj}C-cgL6j=B1E z$_Mb%F-zz@wIx*bxh0e$qI9`d>1_`a0fXobl6(z0(!bpvYUnabU9|H#8Y-hy;(T90 zW&oIzRkK6D3I41@&LNXEG^ZVVYk8H01o92{EzzL#a;@HWxr^INBx`9zWWT41Fx524 z6EmNQVRhh2PaHjtY-l#OXRXe@kZwY<}w9<|mu(*rY7V=TI;N>d#9*$|%mFt*S_E>Nn!9X0zFC zsT_;-Xprq~{Ih#p3JxnU?XXFCTow-2U~G2~hzlu|V%r^P%vj=xn#OV15^2P z3H3NdrL@NBE;cAMBRR_>NVdsmyT`53|Ay!#Xev?Q5~eqW)$! zYU}~rjB9=@5zGo}NDtl@x}?5HX`wIpAF;$T zqt+?Fwt}X-)gxqV3tC^w4i8_3^%vNy`2nONPz465%G^+WVN1bqS;(uGV`Or=i=8lx zqHz>>{%9YVbu-soMyl66Tr4$U20X%8hlIX{yCRV4EH%_%kzf)?l<~`P7ACu;cN3DBx108>B!GtxpfC*@}6_k0imaqfdb z?p*n5a{nR;J3_+AH{8#!p8q=Yiu)J!vA3k$XE*874!wV+YlY@`|EpZ7dzKa#7v)zB zLJESLF&Wsc2RS~Y*s;(HXUxTIee+Zu8ns;hW?v)Qn~6~1o!HagEKcT9h{PX^I@+cv z`kc<@$SD-2)7i|KJJ>+z)nu*B-jv}085U+nbQO-`itDX8o!u`a?9`{Tp;NMn??Kwa zn_$qgl96J*0VR3a=Gme%x^)}frY7?I7$yA zC8_(>Kla6)+qBkl8=4H<#!k#s+(z~n_FkE7+KP>=#!q7l)AY?*%|NVX5Lu0UD(K)9 zJf1uxRx^iC#ry?Su^M}5@~~|ZSdHXRSWU-4Ygep>i@GaT)2_#ab|+a49`D*VS zAlKH5S{JJsoQrcbSq;`0@5|Q}s{v`wYG884Z;&LM)dV~SR?}wiJ2k7>p=BYknxe^S zJmiSx4+Z?T9xTOB)$^}ytX=1CCY^8&Y<*e1I<8XyoEyW=Z2oHE#;RBy zrT>IAFq86Ot7E3su@NjGE92^zX~W&xXLW=Q&#^kT&#^iNJU-9W(a9Q;J^$+1-Z;r> z>iic?vT%C|bpPqUk?j93N%q&dV8;bIh27~Q(XsR*Iozz{*FD@$cqAiT+_D$xdAO{V zP@Xb!A?RSPk#L|qx*Mm9{HhhYd?rTvlL>rRcFVQ-Rm$_N$}^YkwY8;djy!FXf7EDq zSANyC`P(RsA>u!O7$J1KH#Pi56&m8SJfm>;mWzao`v zEfW34nr;a0bF7!m-q(6BBIGig(JfHQA#jvbEhqt0+&S&-q-2;@c@n+-O*}CGkU)bR z7?;M3Y-AR$&8-A1lQP76n)dJp!O-9;6=!n*6qr#FhX-UIr8dBPId8<^ra5mA8@NEC$L~Qg^mFn~nx*-K7y6`c;a)}!OeE|j>15+h=c@(%44bX$V6*Cbub zwf~k3Ds+6{A~x<=#a25#Sz=-s4|JSeL%AeP)GlP;2fk-PBp2{2sjk!o4AXCJ=fQ=# z@8AKGy_W|P?V>&+CSbs^L+*?nhbgI7MEal-4>D*okIfe!EVe9iJbjbyN_h;;XwhN8 z{S9Sui>_j8g@6oxR#CrofHf_qBb8~+a-6&R$@Jus=jtaBu6o`@%IZRy>yvMRw%#D3 z`FIt5zQqi)oqfFRVo`OLld%Q4_n;RCD&aUH%0$S6Unr=le#q2P{m{Iven9lq8A@hI z(T`u$2opVFM$d@ct07yLGMCN30IdW3;RfL%HJ%jCsf-W^P(R=C*(?tnSV_uV`oZKY zc+wH00Gc0faa_}#80=ykNP$jSNC)Mz>yxeK+ZDN7*q~=t)*|&<5tE$#qGb!(P9|9i z&EU07dYUs2Xk46R)_7wJ&LI=i)0?8UEnh%aw*fOPAAAJhF$fxC&=j8hC-rX6ct+yo zE26zvtaJY3XozRHVX+5J(Ij<(2@@voCC(#%{DUjCwHPLRs`(ph@H5TdPgg$_Y0$%@ zvE!qb_lgZk6MzfZO+x(IonRW)T{OtMEja;`@{QH?d!FLdtD9v^JF$yH$R-^S>Y?H} zY_ME5Ls}6kgV~5INEu-Q5{pQO(2)^>Pn9MB%4?j`YTbdZD^_pXns$UD@`jBoe z+cs=w1bVEuvPHs)l_a+YwsflUq2cw*W9y0KIO<_lDfXi{^gDULq2IxSi+674!4x4# zpcpiE{2OPsQ&!%`M(snc^P~K&*j={Ujf`{IZ7g9Vy@M5y$L%b5vii8r!R2c2LE9m= z%tf{=>CT8Qp6gVG%drC`#>ZsjWQUz3r)>`7ZnX+@3&8numN-O`0Yk~H3J2eWlLfSf z(}<)2AYX2i5>~+pfZH5EWFqVOy*#j6-NS<=ia``w?q>4DyZ@LGwlpeOq@A*dtB9$K zv6utAU1MZ?(5zSNB{=Jm4CNiuTFXLMlbTFak!DaN?}lp4re*9Apx>?gZ0u%0qIiC{ zrp*7Mb#h9xVOM^S;w|h>?j8-at)@4f1J>d62AwdMe$-IIoM8-|%6yK^31eJXWQIYe zSih8XLfT@=ipet;$u89{lVO`3u1NB)F8VWAn~^dUWpuJ8uVrc^l4e15%=ySdf(*VL zC@?%3+HbRZw2f`_4f&~|FhyRikf1hctTPzgE7;x`rvqPNcMOsv=;3 zlLw<&1FKUJ*+qcYC;y0^{vIFUqIUP2k>hRbOhCWA8<|;m>1eV2GAfz9kqK60 zH{Nv@i>#Z@4Y`u{!fdo55DSs*#y$TvjWj11)`6AukPpc+PKi2YXHk*etiJ!hP3!^Y7swotip=?4ok51D=-!L2Rr%HzGYhd-4$ z^Y*_If!{3-hqN)5-7Q|lo8;BqIum|JC}xsLAPzMyax&xakjPNf03(g@kY=#vSO$zN86F#1)pdJ)z9Zna-ExumPglQ36U+L>Bg$^J5FGO(}cTAR){5d!7 zO7sGSmyb*d+6fylnbGnQ);?M!hs=+$0}f8O^AdaNt2o|AkNnQ*-e=)6-?sI zf+@&P%dadzkE?H#XZ3B_KG2W7kFQ%AH_Fc?N%`eJ`M~{M%y57d0_n#4>fy}YGC+H+7jR9&*=5;Dhq6?DybJ(#2<1S({Nh;j=l~W6e+3l%O`&7{ttcn#Ls>SA@y8jx%dDD^Wg+EMwYXh zxlicp=HXI4^-nCsHS>0qxg%Br<5ia5Tp>$q_(0Atcset$d`d}eUZzo}%P06XJOj4q z(lk!y)8()0JG&?G)9|ctDJSKr@9-Gb`2T40@V{sq&kElUf8i@D9JvBg+iG-%UZJJd|rFc=<$p`N@3h5-&AY zIe@cefGj_hPrYqj5Xq(mCM_=v;L0ihg<8iceKuGD6rr;G`A^f=?LuwnXjcB8O421@ zpcYB|h@;lgC)EB&|6Y9(YBR^fX0KZfwCKr?4KjxrmJ+sGqI@>PBWyyCbBz z!02iBC~az-c%z_MM;`(|vL+xY%kt6moR<)+zAAw7g&~pvV!WH-eq<r6BU^FDkUTh9ha?;8j1W5Vc>U~0fVN8my$tN zpxgXFJ!+Rsxwg3@fJ+R>xVR+>tiY6jZ=Gdfr0T2 zEo;h=jG63p@q|QXM<(=hsKflCmv}y6?KuU(Z;V$DbLz(uf>XZ|6^BlC5qIjh_7!^T zI*+1LcjOsuxzvV-kO$7naXB?;#Nn zS;VM|FS0VV6m+vlnRC@WR_;kIJF1XszS+Zr9-Rh3C4}$PRWwt!OoDeeUSroZ(`RB8 zi0I>vnk=4}n#8LcX_k!?3rsrocYwCs;f~toE3S95fC9Aq+|v2hwbBfcSl!!75;3KX zC&-YMPW|mh9p-gg)scA}nb*Nwk?O)|`QV!ZkWGE49nFw?@y$hV+FMAYEZ_gJm886Q z_|NP%_<8P&7x$d}2OK(kj9%47l^9rh9b7k@qOa@cfRYZ{m z=OGiK2orMu2pF=xFwlt-hW3z=-7(yetpen){4yETtPsF==jGtO=~gwskM8{n+=6@V ze4C^)i2><~-XR0Louu82ohZV)0ZEzjXiX9DAa~;>7Ve!gI)dLH>qG5y#CIK;k3?`9D* zLS6nI4eIdS3aOW}b7>67Z1- z;SzQr)N)Do0-c3xv?j8UTY8aC{php>VPy!V^Wddz;>lPWK9gkE{G}5tz<5Q1#LPJY z?R8Qkhd`-O!N=15d}9849bR)-ml4GW%8S=Fn|ibn_LgXuWK8m!y#;K-v7m*5O4Snk zy2+i7jk*E^{Hu00t+*rze&UjsRe{$}s3I@3SXvviDm~x*V9{MNufgAq<-c)t`QGaC{YLqIEKkfO$3F)Z zCdaS8y8M9IAOa$iU@YB7KeW>>92-zLxb(64ucr6UzrpL$G_kFL#8wG$prrhaX6Eeh zpZRj5wTAgrK0~nO@-^i%KhBi0;~DE^)Gdse?Os8)DHBB8x=R3RHk?K&w42$K5sf47 zh~jS+35&=Hcx}07ajQ?2@7txhSiX=EjZ+!(ka2sRQU2trFjm9QrL9 zx_8u7d>OmFJi^*u4XZ;SyIT!u-vQ{Xg>(=B@GgM_HQrqdsZ6dB&Vm8KZ{>=FAYnEt z?9Di|ID@3}QpmqC>5u#K>EC1EIPJj~<$Dl#bKD&16c2Hy1(vB4@bKN}lS zxI|zsq73;i7+2X;9k)5lVEcGlT{(3Ps*g+ma^ho)j~pru2XziMKF&wH;{Gi!i;(5; zdRaI_r3Ei!Il5k!9$6r{kmXpFh2B|1tgU-K$S{I{!XjHwP;uyUk=kq!Z5S^DpV~sJ z*MvytkXvHH5%`1JTT?%lb3`M3FRA(6Wp>v%d2H0n_VV+qi2^3F*7QauW%(OO<*0BQ z@qrb7;l8_cT#c&aVfrSHdL-=essW@@<)2~|z>yDG$Tsv@xN%TJ37}73{c7^}cyyOW zc3O-&R5R7so_eE>5ps{!iTo7n!T*(g&E5^v1o2y(5If;*z;$Zi%*)mmF#*>SZ~)}M z*?zRa2)v0^nFHqJy}mCT(ZqVHg0jrb6HC;B>+QuE@l~m&A5QsIByT zLeLFjyM2eH^`?F|tH(wI!;)AH4AMgw7=L39GcYas-t~bI2La*r!0^-huKbAE)xby& zk)DIY9Hiv~gJicf>beSTHHTg|>(Id1Z)|EN`jTgirVj=g7(h*#zqim~d?9QbCQ?os zDaQn?0AOw$F9Mk0$KY_<;8^`N^`s7D3Xo%Fn1Kmrt?7q~SJx!L&XR>$(Sd_G^`#U6 zKX?ha@89tUBrWO?4C@<*U^GwU(1car7Q9@iD~7h<`R)eWD9b9cgG@M`UQH1>=4o$1 zZ@OQ5kG*MM>nc*ndlQCnJbj@Cb1&60#-ZrNAAkofs*rR?E_z3%eweiKT9WWXSao+h z-gv`-k@<6;OPg(eZ8J}I zO;ubRf`MB1{h}+dGD_i`OOoc>@R~ZRDR0zd1I4VV zYI;Ef)nOXY*UL3aS@!)ff=O~3Z_VFwMJ=sAP$)pK1uSZ=Mqo z9+-~~M_4RU>%;J0*k&jTOgj7**bopUWl(h~7Mkv}kNG~Ntremyiw{isK^yCpeK-lb zv4uR|e=S0ByeU6~)|NwoI z36-W|tB|fA&&sVVPYPgwKeS$hSKd+U=D|!S01${;@MN!=DkD$Mk(y zejpo9t@)^P5%bA+2r9e8bd0pUD?ggv%PE(cTkewS*Z`JeBgf<|-gc;bJ{kU|zH-AO zs|GKC&x=I6@Ru#4XsN1!6+f!vo^VEoc|0mRn38D4jgz`zuNu4d(}=>3O_&=W!cns-?48 z2UF$zV4eku73wl31mO=UJAWz}O}j7cGK4JpK9x9ObCg8RI~wndP>qCtSMAH3G~)6! zswS`+Zo>5GW^;2VGzeb?O7`-c=AnEsAWN$*f1oO_Flko7&?`VDvI>;$HL$H5Yv|QA zEYvkDEdJF`|IQaTTP=mxB7bUuu@JtgCRUH+W^o#cYq7>5S4)IGy_*ue_vgRx{-68f z-~CuRnxZ(<{LC+Y{sZ?JddlPfekCbKWcigEFy@{8*^m41e$T=G%aqx*WkhUv-+r9UWVNSQ; zW~`sLkL28~m1-x%4dIB2qhDPQl9va{5Z{@ z;h)P=yJo13X@TBi7GeEfjnd4 z4?FKRYN^@y0e>~OYYq$6j2u!uA0Ib|c;n>S^LZY;9E*n5ia;+27fpU^$4J`6lo6mE z@-!Z{@z(JyZCS+c zs+0YaITG>mDY@-ag_z2>*)GT&v-Wnq$=ki9<&pD@(lO(x6~9se|F$S0E^ z+DUw45^0%0lh))+FSxAuUM?&*WmD-mJjLctiDQt51J}>b-GvZA$=X{YePNaNb)M@a@3cq zEG8WP`mmsq8!+09aG#bxqZCuy)b-F7wm9Wy-KBdg-jlVi=l5rBBAFlnZA2OUcmxj! zK(e+7z-BiiyUz5HUBl->MG*ZB5X5@aaOTCN2BE*646K)HiQ=J`)PMr%wPiqY+sRXp zGnS$`?oij>Z(ja}QjE^J_2^F8POJ({CvG-rR1wT3brlVAvnpO}v&l&TyS_FqdUd_l zb~PnWohNtZ%IS%hKpTH=t&MXr*&1zJvmGw3sm7fUc*AF2`u81DsHD)8Z08PBWDp$DMxFa(me~P9F%CqnDux-Otcs~3!xl5^Yc;Ze^9Z}h5%!4A8DC_)qe9pdN;?O_ ztXQjDT}%k8iv3L>?4_9G-(FAhZ~xkn!tejhv#;{e_cP)NQ$z)@9J<+i$FWMq{?!t(pU>UzuQm_1XpzFyD1RopR0;WY3IbEqz~H9xt-0$P|5Ib zlT>YjKibZyZQM-Ch`vcr%q`9y@)fS~f*oH3!Y_Mes05=N^;)qTsD*y&YAYV*w26uZ zc9f`o@(Y9r4o64CtV5M@V%DJ1Dy{RVw_caLMQ;EhY1?y|T2lTjcqz?{jd>nKF&uvA z^=+(9&5TDsL`HW1+#{N&IRl5h)@!r{O4RX=Xi)KvvKw^p+?6g)S_q!Eg!8d`X6Od} zmy0ujTsrc}F4>&M2TfiY7Ajg$?=Z<*J7wl5C%pt|s&fBB$d!&yLx>|S`?@|HkgN`@ zt_x*2Olx1MA3R7fus+>73Bv})DUihhP^r8ivqc-YW0Qy6;tEJVu7Do`(JkaHaTFs-s6=eqtr&vw6Bs0U*dP_kIniR7*({CE( zcjA^OmN{ov3%y20-oBw@Y|)z9jXRy{tAz%RX|4bQBVrib?nFzW#dx)lE_xCr%caOz zFym0&HWI2}%A}NCeYFtR$!U6YoVeu~v;0@^hf(?9;^(6C4z5}DOWuxQM8bZ6$k!<+HZ^2K zWFfc0gwi@?pIN6A=`_v)5zv}->V-|H&2d6)Sxf&+sLvtdy0MEf#xnNn{00`P1?xb@-OT z&g;qwM(iQ6x)6mz(L$gNo62$B)3zT)N6ZbS%e-bsl@Q0mGA>^OCIvDXwyCtdREwiU z)vnDu{AMs!cQAd*RLAcsHXlYj`%;vjUu1f}mT$$ra`6MaKlw;BkI&-N4P5}QAGDK< z=%KfRuMfZdIHkO2z{Ka*h|-GokpTwaa*KpWRNYeKWr+srpgTg0Oj1z;>NOkdZojr5 z^K{p2~t!*Ojur-i9T$>F`)yNw%jUDrxhoOZPvOLT4{42N5^T@9I^3; z4OwiTFP085#@i2x7f=l#_J*%e>+BC&zZN*L!K^0wa_4RhspCRa=53BHssLiF(8v_k z5XsW7=3w3;@)TIRbUQJIe%(t<nsm7_-g7(PYQ#oF zT(kH?##b${pYh0xtoMY7Qs7G*pzNq;+k&WpA9I|r9D;X&#r~beG(Fs``CM$_&0_@3 z-Z;}Owvx#4T=r`TgT_2JOc8fT9bq6WkRj6wT}6G$6|GEOeAcJj`(y#lt{~C+lzX3Y z?^Eu5%Dqo{vrl4+V2?o!gJ&l6NHxG;rbJkWE;PN4GlN>U%Y>|xQuREfMa6*Mipo@-4Dm`>_ESi5}G=oWt-Y8G?1S%zB(GrengK*Vt%`dMv;yAU&;_#`CzZA%;sy8#Q1n zVVY{bmp?{Kgz`EnWV#T=h=M-l?YxhTp0Je?O?04-kED{>)nO&W>L+5`b{;Ew3O~9y z+FoAj{;`pa*I^a!6g?hJD@Ktrx-bciZdNk*C<*dtCE`{*zdP{N%?N+M0sst@7@(u_ z7E}w`J3-2=YSkGxI8UP1_l(%DNle{=RvvHqLk79;a2~w*28C|>r{pbZNo*HP)jZ% zI!yoee#&Dy@-gAL$HpeK#4e3=*>QsXt@1G^9z9iYrmbr(9W~fzjIq z3{pC3wAv)aeK#`p>AcyP(O`~=0#i^P%vtb!lZ5e;Fs+?W(#NbSFA%H}`XH->gH)B` zEYg>My0S`etJ%KtFZdmmC>08|g)?tO7L0wWP*#am6-KLseU?=s+Z+FBG21_zBfp}P zn?WcokNIxPCqkq*MycBHA&uUJd|}&%G>{q6!d}iNvf$NVG}oyVWch27wV@!JJ!;!n zE*Px9Q9)+a)~sSRf?2C_Dab|_VV9qw)1L1%b~nYk;2ZJ5YaOMqiI{ss5^k|GT`&(i z;sx`V-TDG;A;4U)9B-w~W6-X!*CvKx+Jc`Zwvp;lay>J$mRRTo1gXcY46EfX{aS7*f}eGc z30P=$Zz1pFrlpTA5eTG@ln#F=ANBMxuZR8hQq}TEYjhb&c$~6Y^81ASJ(+rRV`NQm zb&y7OCkyf>MBQxJs*;#TXL(eRm51xTs!>vw8!0qLN&`a?AIoBGEcObdtiu>f>I|-2 zV@6wYRpU5@Fpv!I&t}A-A2bBJOO<38Sm-VaU#oEAR^gJK6dAr=KCQt1z7!h=<5kXb z*vmHT)#1cr9pflS-5<72-b=wVvO&*f_l*0B=$Vc#R}Jr`^GrFNe`8HeBrB16C%=ft zEO-}kd4r8M=aHqL>Rk9A90e(j)4&$0xf4P)+re`S)y#e{5MRawaA|IY6hVAtOX@rL zxbWfm=VSEF03~CjLO}SP7C1PQJfMaWkJg-2(VFpaAumR7XrNKi?R7=g-OI$rsO}%d zkj<%hU4Y;igVPToo1botScZ`4IApEoQ!-@mJf_2ugrDtGPhzUNFow#3UDE0@3^LF4 zTVaS3#za~JWfyXljd5^4z;N$QKEzT-#L{H?QiWMgc_?);M+Ae9XITpK**Y2&#ANc; z05S%Y-RS@c9K`bSX`c>Ku#fxeAVNNcot7mNm}g_`X4TV-y?m^SsvGKgStu;;?NA@6 zLOj$Ck(OxH@N*^zc=TtlL9`#T1C$|7)59x8_c0fEg0h;&JgyD$mM>m*P4=XotPU%B z5_0$nJqOohkL$_gI-)11rC@^u*a5im5t}|wYR1c=kcDu}!?O3Dadv(35lx;SCQpV6 zI7a!>1WPU3!+c_{(Z+b^wTk0U&DSNk`C5ybeQMEWAJdp>m}Mb?^pVWR5UgC8{2Vat zPCiQm8bZz9quB^Xw>x<}!#2+3=cK_uo_@Kg@(HU5%t%*@ll>TBBh*20k0aUi#T(41 zNYfX2q-g?Ew~To@@%|{48IevyXvWuZ@v~{g=o4_5owhI|k`XsZi1qJ!p*Uh{Goa7Rog%;=W0j#l~GfHEjv4u42SFPEy;#hn>I0+-vn-zrz7dz)SH zOr(}@3a?XDQO#C95hUI$iw0Lh56QTv;td9-<=LHlGq`XLTcw7Uud3PW)nX22iJZ%> z8e8Ce6juOl*(9U#IqNWNfTs?^#`Ild9c?!**|x4K9P$hVFzT5I>%6e2m#dGB*Z64cU{|JN=RBzbNVAOOBV!MXsOuUocu!Z10=;a;@@n>)*Dqm}Sz+!5#bBD6 z^MX0?G==0odR$M<)|Lk*<PBN{oP{cA!d=^oz{b~K+Ufp!Hmav7|^4ghoGjN7{bQ9brHWU6O}xN z!PuwZ8K!RG`eQZGQmZJ5!QxR z(}Xi8#Eq#N?ea@_qHgcc!;1!xJVxJ&fWs!LH%dp9J0Ir}#X< zq#qaQL5h#+341=QCkw(OdIFM3T{V05!1>OeZ8$f;o+VoSD}}7c*aEYv<-Cic;FOObQnFTA zh6ALrBUSxg<~Q9dA8q70Oq!PW$8+h(P60d~1OlyL41Jj*LK2ECr|pH~^m+7|4wb88dtd_~x>QQ*}stJSLnANyVU%lWZ29UMD2Vl^+Bd#N-Ei9(Dd! zr1Kbc9&JM;!Co6u`quK#g}512eH+_h1}C4jGbOXFIB3cq7dr;l3zpOB#01mNI`K}K z3@QJP5&fLYZf9RhwdnwpfMq55`K+cqe=C4TYmGT}iALp-BI^rnkEeMvS15!LOChx5 zSeFs0-dmAI)RhWUmeZD0D0K=1s%7C@VkA|nKDKFCb=0f6l9cw1g4msno%XOkhT7Q4 zF>~9y33?ceB6NBDDq&mU8+9fGl}Uypc)#Aj5nuHNfm!)PdII)TvqBXET)kOkz^%}V zJ{xROwh>u3m=D!pRZXlqG(y9+M~oWD5wQvcyX1rOfQ{xtz$=g~WYDCx&u!~l;VDT| z*h~ilnp)d&ti-@U1hQRV_EkdgJ4R`3s~JJVOq#OO5*3WS>0fG}u_0!mD)FcXKpO zM`soA;C9~eD_{?YY-0UOIy==V|J@Rgsi6Tr2|q1}?}!PQ&4u6F!fzvNetR6w;r|Gdp=2mEDt^RC*B=kS23MR3jSRv!eR!$7uE3ZVpR{iC&^}H} zU@wq5D76K|BPpNAMz5p=Hx0W^#q6)mTO|qgmOkAN#(AKyp1hk7knNSo2mt^{0kZ_Gq z4MQ_?M8our!2wP6x*5#Sp?gaWjfSohHDJ>6O^M<4C})bmA?(PiZ=}rIQz7M8mGT5e zG203_sw6X{YN6vg3$rH*LanBPP^tvck-+PFSU}A-bRP2@JX9JYWiZjnb|T$=gtj1c z-mUQJTYvbYnbu0BVW5y?jt~Nf&m?0+Nh8Xf6ZyGXA1Y11@4I33~ z_0!f0)|Qrek;=>hziN%n$xt`OuW0!>^GY=`#Kx*2mZ216wBeCGS>=iuT|zcR({69- z%icsuh(cCbWNm%`V=y(j{mS+kRP~DmYOwQk8)z$6Fhtq9?E`05*|MidY6EbmOdP2o zF&S?xCa{cJpcE3a%i);ayOR`*@<`m=q#Y%JMnnV$Ypf>Awwkb!3Of(W35!&<=3$wjD~m*j_>5Mi(qPrpWOD=)i-j^dkS4Bh z+ER+6c=ImYbXU^63-|2|z9s$M@eh3Y_aA%c=fAA$aUshPl>oZ+C@(Y^!G(j5NAM1<))w(A}CQF(*Vq~T}nj=PLdMh4!d+=4}vDdvX z^m>oGS@5<<<7`*x{0z@K^yi%{TXKm(vGT$Q1q$X#v_Qk3I-~M-Gi~1K_gF*u#~z zIV+D_3Rb*8Kp@jn4%R6Grz+CMhTD6g6=xtf{c?)ohT#R?{as$8Ji_!656mX@otjId2+;&@i zRz77dI3E#KvL{pdYZ=sZ#`%biHKQwPayCLuJ*x%EGA1Gw737MC@Xgg+P^LJcunOF2(YLRn=ZusZc`gbwz?Y2LbXid#MUp|1+NtNWJ#2~OJkuND zM_wN2S_hW%vAI|s&fV4O00#lw)#`9pBd0CU@)3W1HLuJ5TJZX?ze-s<=&!F)I}di{ z;8h-wO-jFyBP7a|%Z+<>I>7@Re(cAe-d zYj?|a$?*==Vhs-4_^64&S%J=A&(Q*7%H-~37aSi4{yXsrL6`4pd)GYkPIvZ6c`N^z z=OyKq(Z%!m=yf@p;w%^)zi#0|Gs3?Y<_tE@+*=?sU#@mBEgcG0Y#V^j0B!MFR6;#3 zcIbyuyC?-^TgexrkLSu*{asZbJ`V0|YF)hX`@5bF&$oXBieXvcA54Q{2uS8IIO zEtqg*kY67j3|fkDxpp{Cc9iL(HrUU0T-`g}aZ&qJM>n>J3{G|eN%7O%{ zF0nBLh5XE}F4!K#xi-q03tg4e9u7?}cE<#E;|k3_R3yE{Y#_`Zng5scMC)7BlNqsK z?j9TM_4H0vx6#}pq!NXD1Ep}?gPByrIsM8DwzIm#_<|)G_2UZ%&YS;=!MN>OBx4n? zzBRsjvJ)^{KHD*l`EmxG2_WVP3C?8&kdQ z_G2}m0v+E9cx@x?G-(?RG=GW%x*Fk>GR=*DL3mGT)TP*SGlIqt{e(6w!bzTSE9#E@CNY$mp zo;t9%1u@@=HB4B0#<<+9q?@+NP4M%foLH zJKhl0sj`J`x%rLe(g}+jUNil&sbahC>CxyxN-)pe>YdM{mR@0_)Q|WR*s0iP(Z7)y zQFMbf#6)@wSleZByqF1P_N$F@FIq+pDUXVX`@>gPbEL3&`W+IrH_Qn`U13&D)D`J}jvFO!u&(g{>dLM<#6FSAcaJJT|C+B}{3e2$J*)7Oh16LGIzPN!dC zzF_)vj#}0f30(|aukIqAuk7$ai_f>F(_%r>4a7qe>(SG>05o)p{l$@6r=Ji9@)j!; z{e9j52KH8UwW`bjJz_I&0d8Y^H*pY;l5Bf7F=53Lsw2}7oh4MKs_C*N%+-W&!V;>p z*-(%r?5T1DR&iLfnMt8}Iz~hPnC9lk$?IymcmZ?%Vda7s9MqG!FG*WGVOhD^Hjl!m zJ9%csYjxrmIq$WH#9?+Pmq=)1HUzoz2vmxEEy)}MNkzPeNltJ#s1lYfq0y^@meA<; z0ZV9LX2}v7Gh)FK8Z*LK);hYNA10mwZV5!hZPy^>ba~k<3CK zTrFA8)|njg(O$pgI=M|faNWSTq7jF)w0g71B|q&XaPDOn5`{L4w)kd|OANNeY`9V2 zFxjq_8qH^Rjt+(GhYeR%Pr6krrq*XCCc|Et{9&iKgeBirXuR*)v+CF}EG?U_RZA?J zUVJqnltDpUhrzp;8cT~%y*6vkl)=y>UOf!HA!5VTYtohG%Cu%~od=}d3F|)R%p{4b zV^=0$GN$wgIAm!94(Y@eM);Yg^iv=n6;hlJe)uaa4JEQsgC8<$>IFlz-A9~acMm+< zh%xr2-mzu~4>HNh&w35W=T=nFiK3b;WgD++_l;(y02=sa#Uanasm&l$rJS)8Y$P#7 z9Y4T4GkBulS@l|J`JIuPrWRW<_O1(B(uqDCqi{9ccM|1b#-dW5&Tg#W59n$>O0po2dAh*0m0fv$tm!s5YwqSR@1Dc}-1%9ER=gQD7SS-HzAXFGY1g?~lC78M+?CE^dQP|8;ePlEmvLOOYtV4y&!riHDT{MqOng&+ zm^#OM6QeRPqvUbi5<#$E>_!@Nx_07RZ^35)i?WS&Ca9w+ z+t4DaOhsS=cZ4|#5eG*YN8L)T%ZvND-mZv?P{orSac69^*dXGs16c9J6~z2K3ztrR~NDwR=UqegrKV39?#0nAL&uKo{#r+jLMFLOjG2 zWEAtpML8@?P=Q(NS(y0ZP@_z??#=J3S+(ikkHv6X0uE?=NTTvR=7;MArMH zvtIMR09Wg=-lMT{u+m_?zaXT&6s%Xf;!W1ews`D(WWApOwvDphkVD{8n9k^G{JfghiNHd zI&8!=!FoSA!FszdBJ1T;e9e0Cq;*YT(C|U5)ykKO^&V_Y+{k(#5*GnklJ~y;S+De4 zh2?3m-UBwuYoy+ftj~IvtgOdm;JzG5y$d9+M*u`U$Cbc@68e z0{ya4V1o5F3NVx}RO$__d@WcnI~p&E)Em0=HDJB;XoB_PXHrSMXN;I8Snr>u4b$X& z=S5__I1ALQ*IYxt{-oZMjfops?-%7P&dfV0WPROBy<5e4@f~Wg-V-&;z*c#t^&U^xF*qEHl~1zXUl!6{3aJ;@v24xf7- ztoKN$P6TkIQPl+N{mg%3y|%Oe!VC`W|LRyTJ(^&>xF}Yv_oxxm1nd2U3D(+4_aAgy$?I< zJwOtymzc_%%z*4BT5+QTv1-m#88?!^wVUuw7(~`*yfGqKd`{SYQ8s0OC3vNF)Ql4G zsxjj(`z9EGu=jQ?o{;h>0af=e%e3qeF)T?j z8Q$c#8Pkqs#4^=V?IJL zMF+&6ku93gCMWd7Lin_v;LU8*imViD)wc7*0Vwl3!nP@&Uz~i*P(8x`WtEkC!kQhO zccN2IuxsmdvuzHs8N^(kbmoD&H*DW#2fKe`wVh^&uDS?-Zo!tFn`rBJCEB)da2;bz z*2x-O&g`Vg5!={e3+yF!me`o_9h^?Ag$sdCYCbO*vzS;5-`89V8O5&)4~hBK^H`Ii zQQHK7xYz_}vk71aHNzGFo|pBCYzv1Ni-ImxjKvh_$SLr_c!G&(8%4oBZW~4BnxIXH z$&DhNI)TC(R{6H=d&@wt!#siY)m-BLWAAOF?YPc5&#F4-+uII)*5XfEzGaiS3C3 zCMb-1`a+vVWZaE1?bR4!;L-?CgFAg8B8X|z%G-AWrs6 zm@?s6V0WGrl_?lhe6`V<>xChghGX9}91Sv2eFggR*2@`^!TyRno;En+OmRY206(oy z%NMAFbL_QU`T40!N5Vg0*d)LfKVG(?+82FJrGyHrdES{@XRmgTK-Z4U~#cD%36 z!b+W4Zrj7@-RYNuou~IG$S+S3e#y`HYTYZ|{>`qQMxuRJ!>L2mk;97wq%GG9B}vKD z_LbVT@=jo*9aVtq?$Klb2o5z)xrqIb;0RhDW-+B?UK~xGlQb16LILesC1jMD44Fhp zJJhDyyKCIRv>4uwv&v0QCGYcJD~BOmpEz`Mes588k8stig}11Mxk-g5>F1rQH(7rQ z-yXN0;!|vanM9I`*z$Ty2yfI|LKvO4gp4K~coMOieDtv&M5M?NDdhNdsU*3&RLLvJ zcp*MPaz{ndi&3kk!%YA4@;Blsd}xwP{kq2|xvUCJ42^ayu8#B&XL1aPJ$J-}M5e@f z_L7R5dN)kX{uoeNLp1UuM%+)4JcIn5ZsgEpxc}Ja!ZSIBadQd*)R=kc?tKlS>^2lV z#Z}wb#C8Y=op}W+f}(M=DtdJ4?aWM%VLPSaN>4HaT%qQY)hU-8X_YLyWU*E9tV<5H zN=~?hsJW({<1RVSDp_*L!nj2K=Et?9KhG1z1&-J<33vt0Gbnw>cqZrX6S^Y19Mu(J z<1t;~2S;=zYS8;}BxC?DsT+N`enCd72`@Y1`E{~M z)b|2`19hT4vj*xvJKiEKL6#CWj5X8z@YG)AjMS=J_RtK=QQGQfO5vO@*TAhXTkEKAi=8tO8E3Tkph#lkbVBz39I+^}iRZT}}eB z`OZHZUHb^>GpmeH)`{=+R+$M@rcSp9k-1RYIx<~IJWU25ak`5MR-jlw>XsKf|H->} zbc|3aXACfp^i%EMI(#HG-ktv? z(jG11(mX?EE6vtvt`$Uh#fgC#KN#yrQ%x zDG}WZk%D?s(DAJ*obD>Umy$0XB+Z=klLNZ)dqLMa4U_t#D3_HkVnk0fT26L%gB9dE znkEmAdp4Si#7Lwc%ijak;W6dpTer~z@&!~~?uzO_?leW!pZ)&7nY^>=yhn_;?9u7z zij=Bb%4y_T>fAu))oC9hMe? z*bKulaXT}HLj+m5HK^Y3wcME?q8DxjgM_uy-1!_9sOr`@Rs&4l3jXkv>vq@5xig_8 zGN{XaN)oi7oRQiIBBT$@2BQc6g#=S^rV$wr$Z4psot@=t2P;(Lgb&)-N@1eJeSSF5 za;uWcZQ&P0aw8WYsRVSmJ+(Bdr6%bQV^6(>yf%SoYxrj#1w4lQPZ z6$gkfV^66>lF}_yVE42#WNAt!0izOnf*Q&Iw~nYh&U^9ct>gj|nLZOJ z9=GK>P8=#HG+9*L$B$|^LYk0|iRhJEp_1v?SoKs=9v^atbM0y7hs#O8H!hC^b1sLD z)a4m{qAQV|jfZih6bFN{ch^~h`b-&MI@B|XXDoeYi2@j_Xub;w%&oJ;M}&xP2(sN_X5Z#zH3|snbsoEq>ByW6_nXHJ@_z7m&NPVHcH0~#q$l=Ywt{N zkWR^@8i?#D_-0C(*-&vvoOfUH^fb9$vO2$6&gE46_wN6IN z<}HFawNO04oR*g9t#bXIxse-UF10JBp1O(EQ`cuMJ!i!$nKSmEeiL)n!0cjaGBID% z?0v203(ECU^JSjZ%vZy_TJuE>f%YhLTy4KaZ5~s$U#>?(6u{*{7K=qb7tG$rF~zsF z4yvcX#BQ~}N%1D)21?urkJRc*WK~$gJ+u&_o-*VfBP)q>EFtfXKszf|Rtk1J?UwET5?5#-fTfTT$SkC1H|A|e7% z6Nh)H<_lVhT+bvZKpQ4>5=V^@I@-;N{Se;0ia7^Q%bn$`RSaUBXBC49Ud1BA0>>*| z#c3!UbE)W#m=MmO)4W+^iJs>Irq^)$49E2D%fJaYEeR-^cB2w-0xTr0FoD}3(1{jM zJ*AKmseV=K`Vp<`0qc6gnQcv3A>U*A8%sGYV3soEFfC<-H!tN_{Sa@{_23%YHQ^67 zxexlvTMEj;HHySnMEWZPx2C{Ym`MM`T(r#be4-Ur;9E38Nh|{+AoQZ^Q-Kld10zh{ zwLMi-UF2PBMUQ4f0WpmykGYw%X+487mXMA2TY@E;${wNXB&y-7DgAMhSfSV768@-M z7bdB%3hZXJIt;{DYnz?V92>fECoc)&{ zga}*!5tyF4$Sj?`v^Dkp|JNE5sJQrV)mkIY(`#)cZn}E4vC6EsYSD;ny z=9hHs%f#w#We*~kU1U@0N>`gigOlE6p$e;0d1FWF>C;vMhb6Zd^Mela+FRI~Y0Q#o zA^xG#ID7NDBA2d}OXpI4bdetIt8EI3_@nW-JWKR?vgO8K3g1O+C;Es+2Xx>bi<&=|*kLIyP&<2c`ysgjS0jdf)?J_2Fk z1H1PbR%AohwBMv7uW>%P?0{?7K+$<$Rfb83oo?)PN_Az`uu%fc_A4p?`8RA72>Xz3>;QZoQ6R?juLJ&kV9pywPy$tPE-Ye`K@)Br6i-fG6k zaFkY5I+ToC)t3$~Wz{x*@X^qVWVMxEBofPPX;8;`Lw$set7ckzcmp;&&{rxN2WEoZ5J!d?>ZPdTbR~J4dlVJ&Dr}^Aji13L5Qk z#h^O}L0K^_Ox#`X4Ad1_s5ZKcHnS&}R{=E^L~bAzkPJ&&1}~=>NscuF`cx#WbpA0P zHa**hwd;aZJx*1wiO`%JBm{f`l#|};-l3|DrT{`r6?-jAnpk9`iMmu%b-K}t!F`Uu z2|Jmm_moQ($0hpCA&A+sdj1?wnZ4B2XZYpBJ)U=xC{b=K0Xcn7wWYlb2`dk=ux7=KDTBG;*&M3tx z$2{n$lMTAujqWld3k0xbflzXfSMQ8y#)X*F-jaGo4_Q2;Oc$*6L1Dudr)F@dAZu{< zPF+KW;nzmmv@Xs-vz*(fS8qC}+1(6~(UXEmgH1eRjPQ9`{Cx{%>0jFyE{P|+$|*lmld3&^^#{{M$Df9aiXVkcar5b<{*Pl3h*J%*>iIfw6wg&B@_fzbAhy_xHeLxx9;$SX_UT4`Z>hQWC_Bbbq7ujOe!4 zCK)@UtLQodS6ZVPUKJMK!-Z<^;zD50JGp?*chfAaRFJ4PaSux#@PzNbNz*eOQ@o>i z16^$9Y7lgHM(1>)aIk^IsuKd%w1T z1cG{*gfZJ--Y7w>{^t5-ff!FN0PnyV?5F^FeQSXT%05!_@wvQATm+e+>@%DPQiPi5GecV@k&Osf32ikBmUCxpPPA4Ev6ADyL-+3RnRp2Xguc^Z*Sh~YGFDD%a#F*Zu zWju`~-qWM=aKK-^WtTjy>>JHe6Y833&PGi#>@ks>s5!ltb6oJ>E2c%w_y{xA@{L+R zkX1EifnVRv7eGea?*Ji$l=p-kJ_Ajp#qSwg=~~WE*ZH}~D+8*lwyCViLEug-2BVQF z3@cF7_U=+A-o(ngg{22q5eeb~3DSZc)Qm!hQQXOQ<{)VEb^7d`-$TiUYU)mWjdRy! z{pw%e|M%u{07Yf~e+E`E_(&%cp5W0S0QiC+k??~lZNd*q#_0znzaw$?fI|}DDRNp$hJ}>wSV)i|m3g&zJ=GL5789i6 zZk;C2r#2G!q^o2yg)GNlI?Z4>0H7%?#-)YAl+MTKx--eS+gkQ7&KFDJTV#%BaRYDl z23%{nDh$FDlw{BTs`x6>Ld{p}uJCeg*P4-Rzug+5CMFP!Rqvb7Ns`GNwNqq6NB_v0 zSnDDe+69i=)H10a+5;k|Jqxd^K(-CyFQKk(0%zANQX^yW;LV<`n2lL3pZnP*$XY*8 zjmmgSM;GjbrmW}Xs%+S5URo9V{LeI;)2i4b?cb2DpKSmB)cD7&nEC~SkBA!2>KNXM z@CVG|GFRUVx)S>OoSwg7I3#P*L{$!Z{O|lklzu16mCIXH8$JcQ)a6zvKbM<^ zWR~T97Vj5}VJ30_2fRd7LCb5C*40KXLn-O-Spfm|Clli)(f2MFn+iKK)$FRl3s6XA z7NOK@0Z?!xCM53k`Wq`y@eS4e45g<8 zr#x_!LOwKN6>^0afPAoTsE+`=iNP0iN+9P<)p>G6>lN#*lr1nZs6M%50TH?CtKvPR zMzwznUvD-;JvB18fn1GRbs}&oK%={X8@Si@QrOVndqYu1!JEq2c}}<2h!%_^yIiBB z22&{6FB?4Pi6BpoV7@VCV2k?gsa7F!TRqV`pa3!3BQsLIcXjawRH9Bvub>nz-6ZWt zQ^R~|YM3ES4RgZORI>3#-_L2yv_`R$Xt1bZC=BTXSSA<}AM5Pa$7ov|Jbes}OH-c8 z>4e|h6tN;Y63>}?S?gX3<_AIxuhLmbhYD~>u{1b6;Z*2S#2;T;eNp(bp*A!$E@{&2 zXcx$QZ+M+pde|fEu3DNH47C6y9dHf1PAE%6(INkO=_mah^_w!jT}Ku$UaK<1C7?Vr zMN+|fqwD5-%2Am-nhI1vb~7KP2<5xZZHixyUv)N9ECKvVR;OrJ&dQ@H(&(Fbkv+ZF zFpoAGg^g~v?4nzBVl=(*>0nZ}7GYy(5JSV(1* z*`OKZ0!7V0D(&ze4^p`T8UR?AbbJc~CPle$ZZ*=E8OA`RE6icg)!*%6t_5MbbFFptjfAw=2m_|ZlB{eG|%c;ZiV}l zp5WFNv<3oKqK-<xR+w5Atw4KS4 z6U_Cc$3=XO#Gx?uh!%wb$gS~;+XjmP&kua-8Xt`zEAaO#7-0iy#}SSD<34WLQF2E@!V zalYmy**e`$hAs)`D-=Xnz~*Lnr#|&d26R^%07hP*UG(v=+9gx=9ugGGmQ6Jh6jzGk zH0_o-)U^B6;(+{F$-1a>N$7=Fr`Fyvj7g`vT0Q-W)38?qS+WJ?aL;i>kLUq{Z4dY4 z_~hlLr>2g4D`+D&M^Snodv2Ny6$oxu8($&LDue4$PyIRC72CrA+Xtp166!$B>5|z| zWnzMLXQj_+Wg1pvm+3k{9WihTKLrFr>IVOiJu(E|ca^pE3Fw7XT+L-E3ssq8%1C4b zq1mLO*jtSt6?)Xrka%HVHThlf4s*33h|Tz|`LBQNLl6ArqhI~fA4kY7ud@{`NKjx= zS?sIwx`pE07OI~*&32afa)B_@r`Mv5LFMz>pq)r$dPK;7b@0GaIxJe$mYgsXaoV;* zg2bGkgk`=M!D9gDuOLwXyEs|U3JCK~fCvn*W{M8;On1;>E~djh(_ue`4)d#lA!Q96 z9?wT_^?V>8G9P}Oj`@{(J|sKVG`*gWDM3>Yrh(>JZ($4n%okUaQkIQSf!=T!Gu%b&~X^!Q^Pq~3PLNEEJ$CtdORrlO??c7;p~`6`+1g|rL<=|C0+ z-Ejl}mn1xFsHp%9D97pmFrkM@c-WAH2a^#zNOa*`e+H*b2Aw(IVtdIJyc*B<2@B?s zG9Wf4WllD9mIRbmTOws%h8~geiP+?R5F!pesR@zfrg)2`qm1=!X=aJvh+sh&d8vj^ zS~@hCDBFaWPJp^;uwFWn%S_pVlpODou%C&EDa{8zl}?sUn82#a2XC5bFR0e!Yt~mh z>t}j{4>8MLbf$Ob1K`Vpu>FWapFo}zVtJyAx@>-%yqH$`XLnC|57(*zm~mc z$gkDWe*sUph6VvF9MA+oO5{q^okT2!R5ZVl zcyzXW^BY+xm&2m2k3m5jc$(kXMeWa|v8yn#l&_I2iP@wMJv@NRNZ+9y9M8?ki&6n{ zi~fqw#1$A=_!=1F-=ZjZRgM(b>g(6a)lb6&_Mrc4nrn;#L?>9G3q&1AUsbB zPBa1gro;47@X)6fJhYB5y{Qzd3trXp`K~}4PbY@$gxA)LlJ*8hrMN>TQ-VA%*D+Hj zHd6^k*bW6F`Oq{cuU6Nnft)_p-aim?VrLLr7Yw=-j`VkJm=nYeq-F0(Cf%uP&jF+92IoWdE&{`z7|8itHWJp3^1MFIr{` z!2XXdWdlw+2ST)=)7Lj@BxscIFO49EC{n_U4F_}eboBZY+T(YP@cn5>x?~w3^-u&swBpkH0-R8#W=kO@s6XHQ7kyaDw2l4O;h#*NJpF>alOy! z*vY9K;~m-@GU09BoVLJzgh=q;N-wZYk`9|MTM3%S2c9t6ae{xXC?Px3fIrUcb#f23 zZ}}4y+&%+VIF_;F6S+2gH|2b8!iI_sK6#nfIb~TQYwW&RzlY;)p!s!axV+i^{OS@w zv*2I$7HX;4+0ZAi@s>;iPA~&)(a60~Syv&AuG-t|tCLv&8n;4&>aXJP)`UzPuDjh)M<(0h3GvEffWNKv5s* zY#ilmgL80{;}2r>@V2n+_2p}T{$?ZO<=kB!=Q)?K>0#D6pB)HJjjP;tAeeDhmTp7r zYvj8tRk+=^;JsG?*Q0U5YP}M;E;c1v4VhPi@N!{VzBp#1IqVoq?pa5bvH*AQ<0R?p z%Z+%Qf+cOl{X=;~i-uc+HG6gOCYfAz@kFUAV%f^PayKQ*^$D%CA_}%Kj%VEnX`(=# z;z7j6Z44hFd3QEC;$ow`b7}rIdQZ?sxgeSneQaZLfoP7^mCkNHTc6JAuUGp&w3JmV z{26=$9`;r2Yxj3_0PAwmIx(4{rW2F-0vZBGt)?@98T<%$yu^tsYGwRlYbVxyEkrExV>AAoXXjz!u9!lIIZhKG4$EG`wMc(^Ui^S zjp`gv>&P;m-!;O?&tb?uomms*vraiBxjvke&0OxBZ9k+=Y;G#r|mS4F&C#{ ztK9*oJEJb=IJJ~!gNz)xEVS{>o^pRg<=*Ow8YRLtl=DZaQ8!>YjczaJ`0OZsPT~~; zS0Qg-PuWB0)UGCbNG=&oA{V8vYtozKDoI~Pg6-)XQ7T+VD@Zc5x?_~i4n+jpnU$%z z3}RXgJCbK99S%E`54(IJE7+&s+1;K`mWOh*O+=2iiF7VUSA`CR=t7ots%OW>>XfIA zKu;GBqS&Y8XcHEgq-4@V_r~W`QL!79=*iY0J&NyjV-i%g+Z@Wl24?DF4K6I-Cm;

10ouU&kx(jnoHCgb(-xI49i^l9l8`pPS7T5H0BmB46;E=j=xl$CzMG zH*Jx30Vk@5o?uC}4&+GnyRG{4AnFr;*{)A1;Sfi8+}Gld zl}{gz<|F#x^Efyb{1B2@)}k2bajrT^T*DC=Y1n8X0uNbwpb(N34i+zT2u5O?yhm^|UU+p+Uiw8{ zd52?urf1~G;rTJs4@|}&GX>@P8#^A=#LbyU#hmE1vU^MRGrn4ScqC_Pb^fBX#gOxW z*kYbYTXaTPBLo6f8U%V61QLXTppm97W(bO?tOo&gFQVmK^AdDT>E`$#3|cFZ!pG7| zJCZ8VDrnMqyzD+cUw(N1(4l(RbXnoW?gH5C%vfOW7L*j)7Kilc(5OlDUi2+UIq1M% z4{CTcQoQQ#wJ5XUuMo`DyTRpBTdT3d*q0`uCgot%xVhx|rZ%3Q-aMPd;AuJ!6tLypr~t&@DOW zyQm&)d}DwFuP8%1Cg5O$st)d7vS?IP*q@rTI)wu5o3uJ6P}C>jv<8tx1xgThnvz9q zQ(&YRzqCN0PC?uXp!bpjM>B_`?Rj01vrp;Dqq{Lb={9l~5YFN~T|{2uQ>TI&A?laa zOM|jNxp}>K4D-(sJpm0yGa^J<5ku@D!-@HbwNlu3$2u@Xi$$dFg_NgO5bKkM2yM|L zq(1OjmScz%x(i}ghkP}W!i^FMG^mgWG$<|JLK;COl-wK1YUUvAK))l_Pok?G#rp=A z79Y?}DWjw~SSNyZqnhMJom!sYXa!)Gge`Q=9WzKJyty6z%jG@7kg&$^OBmu9j)JvW z|0|nM(DjHqa8HO))d4vb>f^T2)Zk$#)FTLN6BUee8zWZtAP(voi+q@|+B=ex{dGn> z)xDprEhJx=hGM}P@?qB5%{CcR1N(j^-luokW<6Ai8Is&UWhY7%l%KhiCF*6{%hHQ}J&-cdKA zyg@%T$fTMqbwM5OUAnzh>J&RJ-PM#brA+lGBlZ|Ek{Du;kSa!PKnEW2i%YaD^Ix>w zuOkflF|*X7NY)eq93sF%hYj6l{52ndlX}SoQEsjLLWF%$R40s64?DkPQ9UU_J|+-r za1ikx%U2MfgOJjtaU+OZZg-W;@e&LJA^epv3^Q&m{ji@f$a6UZqzO|rB$&kg#mLvE z9Rpz20iQxc(<93exPE{En-J{r(jwGq)d(zI_?7D4d=wNc20uorL_rHmucYytWn)^^ z_6qAWB--wMgFhAAfD?b=ZTiN&(e3x8Prio%2Qqwf-~a2g24|g1e337PjIPDQ=&nY* zxDgKd(iO~!LAi0CEg!=Bg}1vjh=p8oUEtK3^1u@b>BOk{{EIPaQvVeIfEJGzNd#CH zn)0E#+h&E9h!88PgP&l!o>7Yc6_*%qa)LoP#3(c9L3G|vyjlZ)f?XIlcJAUOHy$lh z;#Sqp{v-uTLJd(lMAC42)B>tKCVcSWU{thLuq-j3Sd!;2B3UCdoHG2DS|$2+AxBJI zM|}P$%Z#He{v)zVbuEwSO&Cy)et0PiD7DRqX9zCOe2j`mKc1dF`?g~9{aqPXPV`#F zl>-t_!lWWeC0SPv;w_{1oHevr*Mr5H_LY~JN6&!o)>ap0nZ6%ttbZZU@ONCI!5+l= zC-F@8N4P)YMYq_MT?Mcz9~@Vb?bu-PWS0%s)LiP47?1_!;7pz$Dn=Kn-eM7!mlHym zq^h52WoQ>+*HNWN^k2!(HNKE}o#&X1k&gr!ePFP_as@O>je~w(pxZ|^HRB#kgcU|_ zOi;Tp?nZsdKhf4iQbbd^mkK)xJq~iDDls0K>x4UJIesE_Kh7PQV|Y8WUtg=w@k)IC z{o}6kX?2yS%0aQJkE?5`;fK0Jwy)LEH}l~+1dy4zzflv@)#NR820hCQ{Q%GInjlZ?;CcIv(T#w#Tkpev7JZ>?~2v`&O%B!qD)3v zn2geys(5K@lTojdx#$Wcv}7*o0Uud*C`x9UusVhjY@9;ZHR#vdu@k8a=|epmdT330 zVb0Lm&rECEg%sHRe1J1=jqQFN)!}PG4=jH#!%kGIw16UvD7s<^w4G?0b{xKMFqQbV z2L}^<1#G3PItMvRxTRIH%zJtlRgq3!pM8vWcV<6Kzp?N1$mnJJ%gB@PU=O(`-?y&Q zDRPVx(4dBP)}qL=YV8%0I<1=CGvM%QTC8BbGM+VZIwXYp*tk zVNv)DDG+eFy7qq6_Nn0G+H(cxu{Okwg;gcMTtzwSaZ*N3wsv6f7WGqw1o^8VBJ_33 zBe=n86ljl_?VJG#%)x2I#;qMJWF{R;iFQy_=!&t1HR`KD#hv@sb$eNsGuBS^x_w@l zY%Y_LTZyner1^ZfWu81lGK(7^Nbvg}pZ}Zuf#KE;@Iz&w{L_W%sohfFBpD^Q!%>HP znY->}k-qV*_feJriW;zWKAWE&d>*7>izt~`xbT(lfzWN`U-OCgkG8%8p3^2{=X_|?&;I2{vDe0jzHj;gum{&vklU=tdZ}Euyo?#j3-<*AdCd!T29Cc*~ zpXlC_Kj{15wj^w>seYK%5}VU3lW&`v@Ye2-L5N2|l%=YKXqt0p*A~c3BR`~3piD@?_!pDUJ#J4akeOKwmO;p<-+cSr0KuZtNs?~=* zbHga6i;3-ggXk%Dr|HZom(ZnlhYrx8({w`9c!oU~%R!&zT9GOFApj%u8);~5Vm_cN zbMv5-IT&?M6Y;XhM&LzFBedjA#8Z-S+(jXTXY87_&897&^T7kXXh1|g=Y#>?KA^R4 zBA&<=F)D4cb)YA*g)ITo5C&SYe@$O6rtx5JIIZ6#-Rhs+w{KnVpushC*6iKtj+uzl zG29F87`}!=&}b8rHB9ao%*=A~h-Gg69vM%t#9~SoTP0YyDQStLns^DH=!1o{W6iWI z=bGtiC8;QqK1~VhC73vvrnRfm=kz`kmPq zFod(#+9Fn4ygEy;0w?Tv!?v*M#H7`tRaa-atQM_Yl!a`J>eR^NKI1Cbf~(M@&(b4t znE23|qE%F_4z(IOG#2c;RVD`&O?^7AC9AG|Nn;NwTf3QR`+QjU_P|Z+3h@SfEuW8b zLKK!ZVFi=*nMu>N)N{0h4oH%eY2s+-zy9T4ee^e<{^}S0F!RQ;kjAEYZ$&OLotret z$QWDQlHv--EpZ&YIo;}}#E9&pGcs~`(t|xLaL8xg<1sbty2Y1}$QV>DBzcjXEs@cu zt>=}=XuvGalrHp(Hj_xc7cg39zR0~Qju8$R^9<78Za1@#RNUXA)qP$$i~7V=iO7RX z=dBtQ7QF&$_OU2z2>$UId24W%ms@;HI@d?&mevhqr^nPm8gZ9m*yWR>_$1=*OcV^G zK-5ysMRNko_~ry~26F<8VsHXNLEjs$MpNhZq?`WXWc38X6dz>T*#@6M((Ki+Fpi6H zEn!@zsE9cAq~q@7RrCru>2)i6gC~FMDq$=ei=WfAFm^C473m#%xj9FT{4ODmNr&LU zCvw)dWU)?`btQK;vX~OYtc%=y)zL4x3xy&p}TwYV*848l3unk_oyIk{m<>P9WX4suT zr#7D_*NYZY@cEbGq(+TZ?A;M7V(-knqAeV@W1f&Ofw&9J&b=%c`5eR<>@fdb3rYx3 zjp#&PE8a(dYKu;%JGbP|CDCaa(doE|)$V;}V1ZG)o2968PqY#f)B3jMNo`Ho7E#YHdyNf*BiAAVxA;tP&KrlpSjoo|`%8 zqN^UW)_DxDAqo7oj4Ki$Qo+tU#`QAafr`kIAz~KI*sf6>5G1kfbw*n(omU4bkcd1A zX}vmw$U)w>Wa7M@vEP#Y8IUOZhSb+}i%@Y|SI$UU(G|QQcoWy*=-XP?2`LG~~nLvzA*tlh`^UVl%-o!?`5KH|`>g^$#k{g6n}C#-HuX9?M~|J<-Cfx`A1*KA+b# zK<=?}qHe`%VI&r$#gdJEkLS1KZ_sVn#&43>izp?vPB6!Xx)RJm=VYsgiE}-i50NEM zUULkaTpuFok*){P)M<(F0x^yEJzN-X0vz1}Y=bv5b}ADOg}Nt^8gH2K8)`tPG9iH-I>ppLC&y&egmZco z;pALy+4I&QoRcq;a0(F^=$eGHQxnerGodMHw3=`-m>`_fG$XXD38$Kc9Mo&TxW>T< z_3uEbG2t``gK#phCY*B>Nzv5CT7?Tc9Q#MryLn za8{A+b@~n29_R|$-k>XF8|q=QO~$jc$TrYkMMc&i+tV*bwqKlL!%o(w*mH?ugS)FJ zHk5f0G?%bqijDAMij81mijAORiVbBq#U{?{Wm0Tmkyc%26~z{P`dg;hg25V8AUMe? zO3+a3xm6S!v)P|8>kY;J!|{(-M6o{x#XfOfiaq^59L1il3G|CoY&HXWC7A9(#+Tr; zVynT+Qmleify5;eQ&1&ng@P9#Ja<7Vwc|5rDUncCZ{btk;BIOwz3y-QBPdJXFVo`R zEmirGBTHFz(O@@2w7B5BAuqyioZZNvWbui^z;0>|V|J5hDEeO|M0Q(@O71XxKjLsw z4F{~e3v9n}R=wE0_44Aiq&p~H3ta;Jq^Mp%D=Ly6a>yn7(a7o&ZN?)$rd4vpB@Z=ziJbnE`$Pn+~+pR+uR)U(-jn`|@~wTLQ>zHJ-#jq^m+H%tVL3$fF< z5YcMn{*mj4E}qwr%2WHcZJ$NsQ}#JqVCC^#WrA#4YC-6{HZ-WvL*A#u`q8#Y_DUK` z5&k`Gz)hr+nrq07!6Q$NAcbK^P7{v}n`JhTu%1X03zWabz9ch{(Fd4?|(T0dkEa>#$Ot z6{~aHcRHP{KuKKX)gfA>4zIvn#G=xUE3tT}N*5n?UdL9*nKXXN zV)WD1?x45ZB3b5qalc|=x`Q{;MAIbxA-&Z6#@*1J`B0G;_hYgeI0g`u$g7Wko_A*k z56WVg5eI!kA&<RgW-p=-JQdnKblM+|;iT z_oZk5dOyzyrt)8`zjdb7p3;BLR==u8vZ5V0I{p+Ym7e|F|G_g< z_WDzUGg=h`&}HW2f69xS@9!xbQhOsdZO;bB3Vs~q_~4E=N?;x>9T`SV4#sAFrD%*nSGFrRdjj8}Oas zxA6i@Sb=&3>&s-S+a0=vVsTq?yAroob9*c*?CLZNsa{acb+rdNe(^WChiAeMJtNNo zVE;BkGN%;4yuDiZz`KWe)saLvpqxzP7sm({i&_t5sStEnl8oV(83U$zQG4RuMmXbm zQCmNWC%?G5aAug7+ernC19ZFU487?~9(#t-YVw$ybf6PP4qi}=o!OU)+7+FvB=tq2 z(#3K`1L0?S_{;?99%g2)Pb)@)>v0a#QLyP|20f#h1nhziC-N5i*7Y(-PR@wC*JmVp zKc2st1CBi}6&<1fU;n6<-r#75y)I&Q>Fx3RMFDjnANT6_Rg?E;R=sae2JBIMg0X#D zfEfaI-^eh*sN2yr%&aSVMLxqf?yyrirvH?BQV@FQLB$44aGCMmHd78UY1CL!f0LTk zNr-u;dL{%#h^7__pn;t^FsiNqKhUa56-Ykn3Is^FO<*iPT!Lnbw&_$a0DZTeSY^}p zX~>wk)QaP6jIlIvrQTn0yp0oBMAy!&{_;wE85we@WcV@^#v~IG7?bI}q#Eqe7S{^@ZGcY&+Fr>K`-ByF0VRx{vgavWB5+PjA=tF{8vc%2GIt3 zO?V_JrJ)X8r~`=q20%BUoS2-gK_L_#ul}h62i&)y5Fc$(h%A;fFP4fge)HTmA~H5A zq7n+&dVirFTbGH|xKv|j_Q8f6_?`4&VanDqIoK>%u{>b7CI@&|Jl_d{C*@1=H$m;m zpbTA81`gFBTsQAz(1mr?b2SC1G82a`qpnDZz{ymQjFZ3em480*9oy_KXF}Wn?WHD) z3OUM zUFECZToGg-^?Eh6FqOo4Yp@uhL2Q)HPD!Rygh^bR7}Rvd;I>~^R8>?-CG5}2YqpJK zcS9W8Gj|E|6bq9umH?|GFj)D9^_;GdWRjftW4&?czmDE5C(k(Ydj1E2Lw9f$$H0^qvElt?oraWdfb!wZ!AfELQ@wP1)B6S9h1q{h;+xJq9WYRg)2krFG}$zr~=E94ud_5PS1 z1)FPj6<)4jT2=`^jmxZsVb)oN%j|62HzEfjBWrNE@(~EH_^mD*lPl;!j61v7ovhH> zMGDso3^(xjnr#p=aSSt*m{d--5)V$i{&eEQK_4TeMp%3Hzl5>rL?kqkgku7QhJVU< z2EErIHjWRX@IU9(SG{e6!(%vkoii?U^6-^NZe#RA2?Y~_k)4F6qYC81>u3fNt$A34 z#K;YgT>$Z$%GX8IWJZi;h-$?H)b4WWOxhjD=Y`R6<34IO7v{F*6(yn_JzM>YJT}^a|FS;7VU$MQ&%~rHVOBeFY7>f-#`lxLgRE>>A)ZlFm zE3w~SABUVa#p(NaNNFKJf@4&I4*p1iW+@+yg1fUacV@@NK-XSc4%nf2Owm005>Z;{ zqQK(Y(~};MI9tYV#hQwbe|s(C_Zu#58UNcQ+Gw)!Wx(Bxte-J5E4X~(&B3EnDwN48+^+iZK8Z&h>7O0i62<~Mj z4@pZ*onurSBwB86Gjv>a`_@fL)DK}l7u!Ak=fC{u#F(QORSql{e+XhTZE;@+-s0$~ z4aEHr_&1;3MiTiquWG~eCs}@&qi+W=$WACj=d3-Hjr&Fh8;AN?4cNS{=%5CauQ6%f zFzPovraG){DrbyYL(&CI%`IgEmzwc97Fb7CFb9CL?%W!0T08=>m#a})5RU20O44Ox zB}^3MO45XivS72dlus^}m7exjTo~9EGbq9g&B=@oO7?D2>wZ>$PZcr(A?ZK7u)=MK?>z3i=Yy%&^Zj1M38Mz zCOq`!T9CNj54O&Fh6SO~8e+$evXmPFv0;b4RPv`$m7sdZ zgM>=W2g5ya$1Ox*XNZrJI4~>gUWVa=0+URjP6y_su5j&8E1_;;ZRlRmUwkW!xJH-e zkzSb*F=S2_yQBl-de|8lFuc&4IRZBPXh<7Q1LS3Ps5|0>Do1X>m2?tMCIrFDEc`&4 zE52ciXt+m_m25lpe1 z@UCIXIyw(bJ)teQPMgewu-&2OcWVeQ5ua+LCx0tXuy^4MfolmudN4PJMT=TXLCy`CE5dkoMKYdk zQ=ygQuEJD%jR_4+&CmGi0NEBH^Qr(DfmYncVt5x{PL{O)MJic*B5_1sqd;o%25($| zI$;}ay?wXdw)oNYh*V)`_CMGB)JL|YkBZt{Rr6DJ6ADD2_cmQY?<;gY&O(n^>nngH zvj#n6*jMNiMKYhEo1i3THlA&(eqIcz1K&(avMifbQRR&M*hhHOTg!r$ny~%siZz-@ z9QBG-O#n=(A6FzJ+O`0+;{2Ju`|uPBX|D)H`HG|{yO3SQQY|2umkl#bC_7_og&8|) z8o~A$|CptA6GOBlYETi@uTu?$`=yzQ$+W0DvvQ&)(-r}3!c72ZT2{~rK!&!wURQws zT3rD?$0>OiZTEZ)vsHO+U>(^4zuCuCWA4*T-L7&+;y%07HL;+E`=HhzOWX$=GWcLB zcdX_<9+uM9W@cIpYpEU<_hMb}I(ufnuf z)Lj$y=q_vJJl!>+BlIxM;!=0Wwqqg?AuF$K$=?>#RPj}==?k3(spFIEc$@5R2 zq#iqPrKSqsCrTeX`;l%+R-;9K60oHK9nsbb(W_=&5YRj2Yl$#`1S;b78C~JhCv;`% zp4OH5KhA>D5$$2L*f|#4U|!M_gpmk=x~d6VaV{?8H|$r6bkx!2^3v*9lwEkKFfuUD}56E?sB2q z8NEmSBUUsm)RfRZTsU5tJb%kO;Ru4tYvGWIjIFCBIVt;O8BMC z$Fvh8BwtM=99y~B!wJ7lPIytunDf!#lR(YF)v7rM#H&R0bxzCot?FZ%gUfX?sQRfD z8n`6n#~Ipao_EGTvF>InH>p?ESm*W#qm@+J{EK-ii6hLeIsYPn~jf*rYw6SaL-JD7vovZJj# zx&wPD_R~A&`v-=%38E)u%A8;>F4g~~8>-eR6NI!FlAZwrNxGQAStz$61TWO#EP5n~8h%96vV4afYYls z2Kk+ru{lD|wJnat)dUXQMmm2Pg$c52c4U$CpI;{*SOOXJ4#9QJjx0XsnIkBnZbJur zQfnMI({ZGd1&R@X*Q)uDi`aq)rHsQFdz$a1TTw0fjBpAC2O{~at9vBWw4U(f%S^Zx~k-k6H0 z7L-O3UQDE&RZNEtf+B3HLUTXNm5(2x0>2Ka6avZdu>~=Pq!{D(Gmi>zic#VR1BaXH z?g)CFH~Z_bSt5`ggNo>SBxgdnvcHMEoMgFXHxRg+oC?)aXYX*DFM_4RD;nkN1I-=M zd+XmS6?|Oo4QZoW=R5yw{saF&3q$+CUZaZ+TfTKZe>;U_0lZ`gRoqc*8D6T(#^JTP z42IivnPp29mp+Dg4!qJ)mu$%(b`5J(_2)mkl z4W<wFx|kmBO+3MXK=NH39Ms-3*Z!kgyL^YDslXd=DWFNsS#Z)wBO%DI?0jr{A&R zr8>dy^gTu4R>#}F>EBZOH~l--{;i{r(#yp>fupCGp83xaBEHBEr3&;npvTcIGBv`jz%%7iZj)ih;CDWe(XcdN@3QKl_}!mX?6 z%;>f_`Ig3vK`R6YrbA&PJ3}3E?2K>C(k51x>h+Q+N*4NYzN9t}F|H#VgfRwtvkUFo zJtOu=@40Vu5nxBS)HGW*CIDt{^%tLA%CPn74AZ>&^X5mjaX8^EgDb49`AH`Ok`Q@@ z@X8X3bz0YJF^_Wfo-pG6I7H#UYT(R2dI<1)7pTYOp5X*5ao4`lhV2^6i91TY*eGJ)kSMh& z3X##TOIU8B0TR1=h%7o)4t8d!{_h^K^>$tJ^SvW_xIT?sU#CC4iqumi{8i_#FDEPo z@{7~EZ&2e?y1aoFrm8sz&P~2s&)qIcIJoJ5DyMV?_IL8@01fH}ESq-O=<$Z5A6y0p6%E!-1sK$?GyjBL7YH?#G9>0wkG>vbTXUIoV&B69D%e z?lOHZ`-B0BLp-hzx(IV9<>RRhktxmfZo_@Ebyi5Az{H9b(0$$S=dpBK6 zsR3N;l2l6`fTk8Zp1RcpCG@Q+oKWFp6l$8?H!|ZRWJV$TwWF}F!l@|4~nOEqiYT6Fpv#f*bXBaL#xiYxQ?P4Ivnw-ghqOv@GElLZf8Bq9$k0E8{Yo zOm`urOle1`5`2$Lb@aS57$HoRtY3!d(v3)0>bVzmjDwEC&mmLRyQXAQg;;LbQItc7 zs6>NFUAD;PS#H>w?Z87PKMB9IfhEV1jz*XXU(`%6!pnjxUMA_ZUtT6pNtX-s$4!&1 zozpXsDUz16q1w#p;MKL-ZagCEKb6W2*JoFcdbi{oRdGAbUshcR0oB9Hw2NW`7gCZ9 zqS;w4tH0&(@~Sh#r*FYDz{u?xs1#Eqif+s&mVXhKo3JGqHcTn)v{0Y9N3!%@j5fPg z!Y7M@DAW&$*(JG;^M=M^;o|2sxk)VK2%;nw(m%R&lZ=*`or7Ac%2K*q7uuQY^Hkl5cbNa5I+Ryr3q34km-sd`lxgIqMm*4l z#zu0O7CWeg3TeOF^}jSObmU>y*$s{~@k%X!0z*FdUopmdC(pQ1BREEi;vDs8;qc3E6zY8Y zBRF7mkal%|7pskf|Ba7Pe(NKS1wbxETnZTpaNnFU#zJ9KhQh6PiGvi?6C@XfWM|xR zLGuzo-9@x6-Lv}Q2o(uST95PW__EBu{Nt_eqQfN^0FAR@P;Xir&lBX(D&Fxp6-Bc& zyiIZd^Y^so&*}C=l0_CY!=l?Wk>&$6o`7?eNdB7v9fy6ySdI^y+@2Mpy9COE{9(!R zz9w|m{5^CF13=k*>o(xRU8Or5KJUSPf+ucaVTnwL1(DsfAbSd|-sn2On2gnD3k77c zdJiUO*?W+DDC6ozIS_B};2#sKiTa4J#e0G;W@*6|eh^B&IJD9cX)t;9K|c9D3D67| z>sq3;L3bx1LU5TG>6##rtaO6#MwMXmrW-(6YWFPTQ1(l$%)BDIg$DK^7ci+>4S|9h zxfe-wG8^2hzzviHi3~N&^;0VqQ)oheR^*GI|Cu(mScU#ESs*_!?0J|Pn~u^JNE-Hs zy-Njvh)R*rKy+LkCc_9lg^cIyzc4K}Z%G8u^f+m1B0dmg(?Am?&_!j5N{N`ux(g0N zVAfTiqSMvJb5v=p3|6IgwsblGRqUOAocTF{MySPc65Mt3EFmL$UR}vnv>$F1dfZEG4pL0Dmfq+LjdT`FcINZu+7i=fj`6ARg#0&@k9EWJ) zhtaSF280zcA60zJ*~}!YfbPOgiA@qp8<26zV$2mCsSX|lXRnS=My7qCtBxO1mkvQz ziVAB+S{(FEXGLkxoxb%1v5C4KRjwX=TcI;p=cg+ow_D;)T0^W@i5142k)#{wiz$_s zDM8rxSij#5#VYz35sN-fO}nu*DiqWCCPg{C|}c@ zg^bz6R6o#w)hCVML~#K^8zd%CP+QeaLGhPRCQ4Ti+aY)_qX*F~cK|@(8`OBXo(NZi(7xIG`UFFF ze~;>+@WB;hxjpOU2G)A9deI893e+)8;QqLY#9)OsQkIwD?UfQvQQ=;jUAo2YbN?k5 zWvIF^^-y&Y6X*aE0Gcvd{X{uKSJBtrCIMm~&MSqOO&2UzVwaf>YGHkIemcJD5D5(C zw!jU_IoLS$c^6TvTdv3PO?~xrp+nG|m$@*qzCFz?gi9oi`K@ok-k6`@Jf13(TN664 z(%KT!bOzKHIeuPO=5bk92%in>$Me1ODdz!k!|7J>UrY3-No6Kls9a{IftVi~Du>>c z4}OLQp>KV{2Yq)Knd2b*g8nY{Bm31u5-bl{OFIZt`#B|I)s!K%4K7JD*h|= z4nD`W&|*L)dW}t(T5%9He;;18vWvs4?EQVGy7hs(RM+6y*WMre%lJ^=srXMbxgcY6 z8ZOUZyBwJNd`E8!*G#>HPQDSIBzktfFI#yyUj?x2{CziCnT4JFV5)hK~WeL|W)2@YPOD}lExx}Qg9h?_;zJI~0fLDWpFH3-r@TGMy$ z#fd|e0I(K5U^F$;m-_^Gu)>=XoF|mD1Op|irv!q~)LC)~o|C#nFh{2k;RB(b`UpDA z%GZCE$(pGCN|y^sD`gRQk%fvn+=wbtuIhXV#qRj0J|I)&gTI!VM-#PkOg@7y&an?R z&Z>#(Yy8-e*@eO~46QAvg+=s9$&}LdBDY3PjF6z}=ml;_n~$-D_@LhWhY{JAVR0ho z=4$5Eyoab%k5dP-Q$n;+Q*zuTM_VN)Tykt&!Y8DFDNSZ|OtX<*1`PHap@{Xu6v70x z)(Eng%?p+dcoz}5{q)3y2yaD9sm-)9+!{3h77Dqu_8W>^HlTSjgffAKevG7K1!$h2 zR|zyvVhS_nJt3vgp;Pl8k~U+|5G|k;%t*qBqpSo7uKY!=X<%~1CBUjFIqDK%)s!4_ z39w2f-NqQyg^#0fMxu}ffeW$;Pd>SfB9pN{^-B^ouB*j zOj#KrfCiYyO9QR(KJPW>HF6pu%82khhFl}Ugtl#RG~@gMhK-$#r7|G_0_UJ6&jN}( z*I}@qu67777>))aI-1CFt3cGc0w}3QJ>jP(s7yN^nBVl00-kkK!oTGSwaOy?=IHRl zNy;=~6{8{so&}K{m8dLuZiYEV!yL5*0PIB)>q%|tS#2RbQc8WYDO3}uCNiNCZ}zhE zO{0crN`h?%S$E&#>s8KHyrv6$D1&0<`d_+}Ig(Q*XD%M>bpn<3}O&P8x*KtXw!;D zs!{F^00KO}LrI16Oy5u6$sKf0WBN|Cug0zvNLeLyJ0M$%*bgXem+Oz#rs|me3F%Jh z`{LLe6tfS|34F|TCBV-!O%^7awl8Etp?ZDVQJ#wcbeXX{?y?$Y(VI~Y?otFf_D3V5 zTIyp$ZL;V8xMkp<#4$n4V9p_1>^PXv$zF8sa34D@M_CnxQfADdP)#O#yh0kP6R>$w z&TfzHs527eQz9xIvka#O&BJ0rzZsz1)a!=y|jpqi)F~rzH^f zwnwaAs2|Pix-=tYwfj#YF7MgWbH(@0_t1}hvdwZfWSX~`8LXN|whuOs*G zVFG%4Kz=yb2)MFHM;-|?aN8sG`A%Rvb4QwpfHd)bG7ICmOTqaAVZ~)(jtTBT`((_w zB#Dq#59O*^&9g&?HVpo0fY|D7jBu6~>H(IszB|;Ly&Oj@BzXun_=uD{=5uWExTD}Z zoG>6Eu!i+j%Its_lf&^`oF-ETS^=s%LK-Auva?7y(w@08s__>(p>ReGui1u)l-Jw) z?MyYC>S|16tY}g5pnm{+6u=&7MD!uG66bnEL7y)h#;s z2(*tMGWsSdk}xDfl&n;QNGXuXr=*u84=Ug;x#N-*Fg=tkl7*2PO+D3;FGgiy6nrXi zv8Aw;gwW9hC|NwHtO9{SVg zI-LIn)-$gDUCgrqcDo&|?;qV--Y(~xEQP#vD~Mg4_%eiISRMX@rEKtrV#Z6qPQfMB zV|78YIWO5N7WCqnlWT|yEhuniLkPyQ+-B7>UgjztSBYf;UUif3@pyr71ymJ$W>NBo zp(6bJ3id1mYSsY80qH%KXN8tKC|BSYkJu*8cW=&QYgffX{Ts7S z`@VY4-9&-lXYyFmuXL<}T$T~ztJkuB=d@|=#xto`pQ4kbm?=chwHgLDXvYGzy$(qZ zl)1Mu{FWTP=f0DeFS;SBv<#V5+n?&*nEkQ&hF(4pqol-beJ~ArS=RI(UeyD>2lPKr>g9x9Ig_Zt> zZ@QW`;ItNCcW;yJ_)=uk2*TMj2lUCTxN7`P=D zwL)>L2Y-4AU<4+LBLqJanp9bD_IpI+z! z*`Z#54z7@ciIgn%SkTVBqIr{(|agDZ#uo6O0jcI`mO;iW|Z@`Ru>>{A^*VwhHMGC4Lsc;j~ z!@7UsX=;2!@mUuk)ba^=g~(ZD&z-u9G4Jl&+71R2|wvz^%bt$S?Ms+0yMpj+X>W6dE9k(9d{*7D}H+LQJDc0p)_|D z^#MCv9H9>o4Fd3@1*>73U>W4V$nAAITCYP23h6}xuGERAx_cY7ScHn>SNPi^2M+N! z0ppe6{ij?<5zKX95KPcz@YH&KtNoT=SXy<76z!!%o<(4uPWN({vH?KU)jXGgf8VpX ziWj(70Di0|RyemwBEe84t3REVneaf+fzDB0Ah^};KuJ8cGXNUUat18(fyNmiER-|A z&=SF1zlQlwnbsi&>W%1%2?HH*bcn{HCqaJfreJzOWUvN;Q=uEA07IFkCZT$dG*mCI z9^^;ECmypQ4Y6wis09~7Vk~=M{(H>XC!h>)RAd{>f7$#$7u}%;-7*Wv0FZFcjZHal zpJwvHl!LXjDG5`~u~tc#aZp1jbTt6z#!^tSq;2wY6FT0D_<6V3!pC=h=5GH zMLJh-6%tB|=nbwVtqylM`DIR^F=U0?oia(E1Ka5q`xnXsj|^D}_S%EWwHIF=lMszo z3N{u}jfQd45!Y$SWl?1NNk3;&gZYf0&FzOSW)|523062d^ub^ps5>z;KHrrwf$p<%X zp&|!5uO0Q&M4JU27e>_#iDn!l>xCRD;|e&RMkXDt$m6=un8c%-iw56$>v z=v@n7i9VOyhWmvy!8lP5tFfz((K?F2E2m}mgA9WL_=K*b+ z1@AXP^GGCM{JF6UQsYr#Y2ey4BP?&~>RT_U65vv$52Y4CPFRmEy$FuYw4lsBhTHI= zN$o6zM5+P~Nk+Rf+h4m4528h{Q~W7oMJW(unAJsH(Kw}CNC`dM#}m!A!rVJY&S!E! z%8__R8%KId`bBrI&b|We5B=pV?PhItMmU4UVs=57t=33|5S7`PjfGi@Qxd}xPa6`DfpK$96Ke@0fWPD%+oElKYiQt6~L*qSOa--cER#lEQxt!5ZuaXl}r zZRtGUWGJ}sye-((dcGFyYCT^Cn`6YHnDujYh{HXpwW3*RIE!J3Rj1m>^H6e>>PRo4 zn2z)^4fN6}vsPVCm*YBF`jrC6>{JDF!>MXB$sAjAHFoF+ua5Z-4IjoB!xOr!C$EX% z6uub|JVjDkqZ7ExBVsA&d=#Fn3xm8z;ff1GY<~g16-(md_4IUB)e4M zVS)!IUdtkMo#b6`9qcL8Y?&vL@2X|O5F*Q9VZlT^m-*=KMGHiCytukLxCXqI(-o>6 zNUKCkg5L_9-vTYKUO3taAtdnITb*wIhL1eo{te|i+5Y|9_(zDD1HP`=iLdhmYmu$q z7qVt$1z(4lOzi3`V)CpO@SvPUX7BWi-GFd_SPs~<>kM%`zwZaC%l}C=bx-x{98)v# zUgQoY@S?pV4v^s-cTUWxp7Oz5qdDr6Q)$imb24SQJ|F0n7veiAFT8Uu(+A^UIoMIW zg{VT*gKT)AEW?B9IX7%`JBdEo@;Fdh1@%o>nj_4u`L)zHwniz;qK`81BGoQXm#B7u zI+UwJwD}UP7MLj*gVH|eC1RoJ6&Z8XtMxXlU&xx1rDXlupDov?{>k7$OZueX5iOmL zmL^xVgez!GsG?bT7Wi1*pSNOK8iagSydC-N{wia_vFm2ru-9}l$6#~QpU?OI?~hb> zte#nI*5~2iF29FJW6r#0RU(sw2uLVrbq%F!FLo0>%0vgF9u4^>>YVN0Y+Y4P=B5dYA;-Q5m`Q=wxp)zKks~* z754-Gu}Vv^+EN{28C6$Mh4uHO?w{sQFpYx}04}NaKTLrQgQ?)uPt*mu@OKv~u7sVz zeRv^cBT(V3#Al^KAc29KZ?cb<&T^TRj-jVyvdsq@{A5TbCLZ;f+Y9zq7mG&B>M`SE zrE2x^|3%}qU?hJLpg`^~5|YD5>g81Ls9Y0>d}LkJ_q?ssLT9yeNN|}wjy)l(7IJ=c zI3(xAyYJo)$u*^Qg`i(8+<)I$qwto9?C)zc#DU@Mc8t~y-hVDU+#png7HRL+1|T9_ zeMgj6=gg2c)Aeh>JKSB;I=(;dY<H368PvyaJEuQjGbZKn&(GgUw%VO1q-cll3xgiiu*Z`hwc~2w|*2IidB1Y$}5c zXg-Tk2vVt)HyHdQernHwgp@Ra&wjpMQFTGR#7fH|^PfdYIv5f1$_i~ODeD=DL|hLs z1Y#_nD*%PH*+Q~do%AsQx&X$6A8@n zJx6Ltn^#gbH)v0%DVk=y$!>zHKlbNoBco?MoWg>Km7_!bv5R^`oY;M+Z%=8GZfPEo z+6+XmByHwUL>lD72w4Ec{jh{A_GACU;Xda=Swcog{JZbms*d5d#_H3LjTm%HN()^g zfI=WffpjQ8!YYvg5NgFwu;t5JhA<>(?P}OGfDK5lcxAAbuwP!NWm%wSL9hX*-!6idn1dX5kEHrqn)eSiVn7Fz`$m>KRa zkTO~Kuh_wQsq%7{TL2s>`Lzl_wC(D`g^7BEUoDiEwC`^>? zj&e5uOtd0QO)?$Sv;uTMBKHJ%OUsx-1^F_8l9w;3XAc=}dR83_TS(fUlBgO$lbIdZ zs^h%pO-LZwLV=%EFs&Bwtl>sW4Pqana;^P6)-)5^-xbh19`n5`kiQIzE3ou8MLTNn zOo=5yfDV5Q1i6u~C^G07{W$t@xYIY}r*NKs{yvS1rm$U}tT3p3*EheG`L((Eb&6kC z@+pxPCBZ44BGmYJ&oqfNM@t>sT1mNcs)N6V&@ffp1nLz#xO9|xhWHUgcs_=$d6Rrx zvMBmDHATyDfscP<7PR=T`g)G(5S>q>rDdT6NrJ#_PFi72)gxGN$#boeGxXbssnm7U zcMfXltSIddZ5<#zkaWiduF8uuQidTs{Ix@dUn{f`C;BlG%*AXF(FkIQ8VFr6?KW^! zUB~$WmD37><{H|)?oM)~-^IFd>@?f0wd2~~Rdh`{6z3{Rz|Lot?-Z=LBgMQ#b~&9H zqXy#q9f{u^v=I{3o8U1BcGEX8P&t&YnzKKU@~b(uW#_(i-A-O1QJ%vPE zt;1r5lZNxB46Tcvk4WKAow#;YWLs05%{A)h({?TpkfGmp)pOxDS6FTpZIh%KV zRLr`Vb|y){O6T@mrNpms-p*~pl#U%v>m(d@%I+=M?`vNF04_zQ>-R<}u;rK@TrFH|MlSy`aY}J)1h7;DS(ych&1el zL)UQUFfg52;JrOsr`rD76u`B}gr+`m`Uu+~1W?LA_$UJ*h7dzs9J2JU%3s!HvRZr1 zhUdv&R+yM#M5kR+h~-WprfAGzc@ZfZCb3m0Z_|2Q6FQ@jQ*YKNhE@*M#W{E{0zoOD zp}mqW&U;{;O3o?e*e0!IR&G=tI2{a8UbBazCPd+p=1sOt8U=)xbN+*vLD=`0mIGbS zU`*ga9m7cBgI#jUaorDWjWw&&#+^Ic3B{a*PX0-69}2WWO0Ut%rx20p!g=tFU`8cG z4o#ER$2`na_y{YmPxG1*BJa$w;w1UQPzO&4`5?d?578<);X2FX5-kZG&UQSJ zuQOalzD&*_vL;_ppceT$Zu0ejw~d>C>ByC{2^e&;rtZS|!RyJ)qj*(!r`#GK(9u%f zcR}a5b;wso_Uq@E)gh62n$J~eN$|-q11(!&yshMf=cLuck_0v+q$J0YQNtgTNTc|v z;W&+-07ah#UA%9EZO#y31<``?^glem@ZZT;@Ic8?DIeaye|U$`lCGZ=8s4E(xVS>V zl{l_C4sZGhdAry(npgnhR6Re-t=x2Ckkn|E#QczGkN!!rFts~w)<{i0(3&5fiZ`q= zGgwt${=}3wu}W?20b>hG$>Hd zc@RF!O;}~<7mII`HYf6z*y;q)P2R@1Nruy=L?7FvXz99yu5@VH(4+(&lREbpfOIxLnPk9})*g190PtXgH6 zl5)lIo5y~h&rgxz8~kXV*2iypBS$sKQ;hQJUtayP>R+JxY9_Uo4)cUy(vwraK#jAG z=ER8KojKC(vq3t6Q*Qx&dJJ?5W-~A z>0T3NO=dN%O7|e4Q8H_#Q4xeKzz{h6|w*aVX?9TA+wOuHKy1T7L13vh@5K?`C) zfC3_Mh(jEh-+%9O?z^u(B-w~StL%5b&c{Cc?6dbi`|PvNLRDT*q+=@+e*Wi$Qup46 z^JeeQ%!kzBiqPe~517Egf0wdQz7D_o{aS|89)VUklpbKpz4sT>Y-dtQ?5Z*6Bo;NW zeHH{6!|1kHV1?)Vy9)(7QH^kX&77{oZIZhMf`W`+#~TT!=W^tQt%S2&BiLCs;>#u5 zX>2PZVSozGOI0Q3$Ts`&#S%CRTF5AAj3P3xx4%K6)13pe1Pu#FNdHh z+?WC}Z1KI2M8%_nX9=FocDIf@+`xFZL9TsfzFJ<={wGk9WSmM8S#x)%#gC)X1l z#kXNtx6;e6u=`uE-aRE@WPRv?GKhhxDYiD#brsjbNTzfPw4+E$F#{uP*cCSX->h;; zsTY#WM$NZ8{3NGgQpY7bEO{)errwZqsh4t46sPA)^4auno%w#L|DqkO0G>x{hG zVTw0(a{1puo?-1SxWcJyhu|pdoI8PNaq+N@*ER4F)&(ITpF5q+m&BtKT`6vDZe3i2 z&t?l@qxf(U?z7wJf)P{BD=K78`>emqoCSh>>Dyd~Skhu9rK;oJ_a4f&KLd02YlhceAuil>964Dw3{7RaZ4R@L@!vyJ6_`*MCx4MUqo7e` zY82uZ;lN7svSvw?s9B7DAX2l6CC!3Y0h*ds3d5K%mNd(zAPNkwqQH$eOZ`l8TswDG-2HZ2;CYCSo zt#AC1*toK`E=y9JIZ1iuB&{URvsEwqsi zYzrh|7CI?RhDj^5wt2cYI+-SmgSv7$-D(z=Z^h%oGwc8anU@sZ#WbxoL#+UN{iAQxfv(a*Z~MLS5XN(j=v#u<*=^O5D0U%foy3JZBn<)=aU-DMsIoe% z#+?TW*}SE*BMa3~T454=@J{p=3_d7w0hU}%Z@MabTBR8hWAa+`Tbdz9TvQV63RWj+ zmyTBb!OvE|T+W4Yy;+8s97aJy>AAjJZ9kn|KTWNGAQ_}>M;j4$)I2SQ)-rMAZ>zDL z3PcOY+X0J(DM7{#X%wn44fbiV{I*c_G%lOBv&opvq%dF9;tA(djz0}Wmkf6BsMBAyu=kJ>>E;?NLX6J;tV>|HYQe@ zGj{uvA{Z#{_Kr0Cq*3J%GOwYO40bgwwTTP+c17SAxVO_B8*_|5J@yL`Vxm18U2C+< zw-B?Jc10(d_Q*Nj*|n55g&GH13e@hU-{<5-)dCa3O`T42-qCVmx;1q=N^5y4B$ISY zMos*odZ~)cX}c0mj4Q~MwzYb9N>8zmnn6*em>-iSkeTvi4AR~^lujt2D-^;rqkj!A zT!a_MBX8gZJG>qZFS+4kEtRXqA_QvkMgoN?z)lES0+%YS7?=&P= zQ8WDx%8Gu*2TY}y^V{Or~G;upF31r^zKG6mXZ!{vlljH;tgzt!T)2KtshPR zpE;FIMOrn_u<%BNlzu>OF&Fj#S-!hsZrcos=mCiCI_WtwpUJ*Lxv_B7mPy zVX`^58#ZU^b(=G9X-3=Z-Tw*s?JGUj0*w%*=NNJLFE(ZnbS8;p9)c5@cJ+w9#qIr!8QcR|TxcbZ5>Q#5*wA>Bj#Bc3KT z)Ty09Y*}oi49m=?@xdf4Nt)Ma34*Qxm2vGeK{eTcYBC13Z$brCG3_*s1J6=x+k%c@ zaKNydL5-JfA|OQ_*D5)Su4VY z(t+|Fn|S-zx4rKV3x8YKi*LSr@89MAqGc~W{l$G>j`_yz#k)W7k)tt7Z^tI;jP0+R zA%sJ=rd^|GeD=U+ifx-jYLN~w-&~b#s5of^0+j(Zlfgs{r_qzPXeL_;>O@MZl@~Y} zpWR<;-P<*a%@L1c>r}=fMpGfcWHi*^V8o6wose#mRTL-)SSZDTU2DoyT#WWn62!nE zeozZ?Wir<23WvlpiQ$k~CjDc!gMF>MW0u7V`%`6R8j-i^)Hul(uArPaM=qddq#eh| z7P-crPv$j8(R(I_8g)V>Kb;*KO3=TanMh;oV85f(6v(9|atR$*>FtZYuJ%8Suh04fRcb@ISsJ81BCVu=3gkJgkm|MiGW9~#|uFo z<*FD2dnSJ{&q!VlEW`7Rx;q-a8tHQLtxCsH2_B1GIM;gSk zBZEnsRv*4IWFQz))GTy#Dfeojhf`6Xm;!)q-?7l-g(BhhnZ(jHW-YVNYih*pONjfq zJb#%Pe)kac;Z~TuHJwbekO_ZMZ-cq_z zu6H2a{B_a&A*d1TuT&^m-k4I}o^F1(>^^JtEI*thrdF%!e>q(Xq{(^-~qYK|+CA|K*EO#_Y zxicnVw$X&;=0=iRViLT6ny|dCk>sWbi&OHgjYlYQ;EA%PNGhqryp>?ohZ9W;?EzYXdAEtjauUY;a*ie z^jCo8h=%U8w<9gD0s8DXD>sF_B93CJ#VB3#09oFC@AvPsQOq7~>OgYN7O-=eJO>9A zl9s|J2j@wKX|bD&c)pi`MyngtuSzJU0N9UocV6pIu~KQD=}-9A>FH8ET`i+NDYp8j zit5njOQc}$EtILPN16D#l)k)-#a-(KJco3+h4foAh+rRCI`)m%0(nb@Kubek-ri%v z8&?jA0x-Be))cXTmP~_oFdBrWNVHlHM09QlZxl+Tj5JV!OcFt6_2O9;j{n|$G+}d< z`QjO-fd5x7PzC@b+{r`lxD1?D=G#_4vsp78#aVdf_VDOClpj=raUJ&~eImcC*q~tR zT;+bprH4@C{g$lKTnU}>StT%3?2fHGJx)qeNSu3YMawpLPQagN`)tNhcIvaO;qz2S zGr51Jcf0$TNP;yI=MH~NJc1KVEDOOuhNQL8Dqjhzv+yWIpPrOAQKP4@u~MFO(Z*s< zcViN4>J#f24#cp?epIg5{4}9P=T&sz180Jgdx5O zfxM_O7g4qj7-9-)!P?^>U0yG0EhC5%O@cTzBnV9gz!{bka1H*AUMF-Y5#)w9uRwj8k!GfMR%X>;^Wc(} zfKrh*`fNCOmq-)B1F~=r4^G;6m}@fE{ecYo6zGv`6%2W}9czDR_a1iTHM~WSEgrjP z&_PZVQEho^;*D=AyT9a1YA)oho`C?NzP|CFtWUSXaBpUn(DYoWT70o7n!hRjjq;U& zt$LDF^!`z4%%^KAvyv(14P|%Xan(qXoR*W9bJW|QgymH;1N?eJCan(0~W zagd5S7lip0Cmok9yz#r7ft=&YagbSoZWpS8y~Av^B5!srQ%UVHi}g%xo1Ve-y)Er6 zzQXQ06V~tw)q8eW{hDjoq!lZ*v1yg*d!#n1b&w<>xwr2Dr26-z!VebI5Pm$ZBK(+@ z&;|tOi(SOMhznMRf1{@)Du3QTJ>Nee1Vw4rmOl6)z*=-}7}yYuJOoLJNDXXhHVz`p z$d_Kn^NBs1)b%ua+4DIk)Bl)?QjoVhWOPnSLi7-+8O`xIDfLh`eb8aQ0lBULBAofbl2uJ!MwBwz zz#75<^YAVvtO?A>gblMi?XnB`5I{_~T`ymW1{A9c3-o|p<*JPD=BVYQiV0ydrvJg5 z&<$0t3+buF(@%9nIV>N;>O@Shxj1QbA-y$0OoRvbGo8~D>3xiFvN8SB9e!O%Z>ogg8OH=L zOy9X?T2T(cKYVEjzt%Kk`5g?5!}R0VaLTEtZ^HkxtQAH08T#E}`UytH7^}H$KdP1IIQ(UY<5;cUsn4_MR?4G z9^NQBus?*8hYv*;YIFFg+Td3vcC&j{MfYc$3cgDWYmDL^ z@q^s&*AIb%7*6)0_c~2vOnB|cin-xm&4JrC$CVBmKB~-P%&Rm+!Uy#9O$X|gKvNw|i&?=TR}&jm(G?ecSpzB%T;Q=l>+ zm8HZP<69^0h5$ghlkKYv+?j`q^g=N$Iqtx&So+WYVULacCjUG5yeORH;$a=ju2ir8vgyoY7{g_*YX zBjw1BOXXgYZ*sM0+GwMgtihFnZ_AHt%%H=00OKyJ%|zkTvhX-N@PJDv2~C7`z(xdp zBjO0uO-CY73Cd#$%Jkx~^dh0703Bl1x%qZ`IV9C-Gy zBrZI&PA=nL6bG~zKi=nQU0f~2XOv6TSqSDA$epkKi9Bcu7qoh zTPPAe!ADHh(!!DLrA9=HT5WrZpThsMh$Wj)~bfg@0urS2e7Q{@IM8l6G3L&J@mmt;x5&s zPjx245e9*$hVLHLh&awHeh*B02{t8LN3ba(5m_=7fj2oSZH5<78Sf31@!n7w?+ulH zuT>1xE;kX&+|qqE_2ceuhi=Jz)9$sr2g+?}DVu*eQ72f>G=)uVqbOT4Zguf%{mRX+ z|D$g_^zPq%Bk~RmWhNaTOPRHEx3-0pproRIci8t+P%)=K?@hI6RV^1F5_Z1#z^{CbBaF-r0 z(4$O6VW0Azr$@#z$BpXiIz4J;O*4`_f8@)2m<->tOC`NH>?3XOwOR;peEod0Pt*&5 zDg&7-22;^ee6K2Ohx>GieIvw&_v;0#j4Jsk_YKA1Kde%)?07WX#)a;5?)nssxbtr) zYJE8IH7@E+Hdq|et8b+j(1X1=s<&SzhUQr}HBe?R8qK@0aBXUmXGMKK)@*ZR1wJ+((~z4Dul-vtah1dP?rZDe zxAJI*G$cuk07eI+T zTQl6)Lrn{#lXJtucoObtqNft|YS)W#$0Vq;H~<idN(-W=H(t5&cxA2(w1>$V5H0V2Cs)OX!N zDe;z0&;Wj>58x}20K{LGlzfO`>xnt-EJ)=iFOPbg+8fJ(D}z z=H+Ci6`RJ&<%uF`iAx1i8Y=~X$Yfy;C*cgHr^I;m#$}K%eDZ;!yEIV5P#Sdnzxp^~ z#w~nUPPI!hqESesyp}=*MoOvH>Dkp<*2Iio-49dcj&i^3b<&UtDT{gUBYF3Yt-K`( z;tPe~$6(Enp_DAGXQ1_}82sPU0ZPD~ufP<^Vjx~-cWIqWjeQmQ1N<0YLUlu7d5YwLX8Ba*E0cvQPLs|~ncnL26m+a?n9DG##~ zO(p&Xm{{sM-};@_sf9e6qGcu{JlrpZQ~KKPK)+g3QKdRUlv9M?jkR(S`=b47BBZG% z-g3Go$^oXZMM6;ME-jkI)Bm)yUlRVK z=x7KTqkcTSAzOZWgO#p{(`FHXO?pR5u-Je8YD$H6Zy(F2qZZO(Rza_C$({oK)%pDi zJu`yUU79yp?mz@P~_e+0S4az20K&-!>TA zB=ru!uzS)#3Ft*{$FdSr|nYbM%C*Nael10CKTSeDdthV))3nm$!1;^w4_d zSFf=h!|GKmk+7FZHutL4hnkm}NGRW&C|^?+uW86j zr^GX4By{*LR?NVcD6(F{K&n0Z>MTK!*e)ip(@rh#J|USdCXXY_tti93+JD+SM@(mq zd5)$$dq${&hOt^$&K1jufpg)3n^x;*9fL9wgT;=a)#(H{R_+TEkTO$tx)jub&S;+K zO0?malIh=w;fryVLd)28;7&zYIGvwEc%`1qlMK3<)?wuP3@+ zhy|;o09g1f>v?1;os#9UaL-W@qLOmV+Nk;VsC4q)DuBDq2F#@rewno8C{6t>qdwvwKmGax9QBED~ z$kM518Pv}hm9Wtr?+^h4$-QDOMX9iH4?Fv5sSOHD)7Ew_qy}q$a>dbbC8y@U>Jmnh zL1cGAvI z0QQ*)^TVE5?M@w{GpvQzfF?YH%MQbk)raU-hSb-ea8as4dODseBws-04jgxqnnl|Fqm~xBEBHc}XHir#Q5?@x(<*48#Ts`^R;JXhU6D&Ry%N788A~1=Mnc!C2!kAcE*@|w;)bv#kaVC^tzy} zDu|l2$18o`l0AbV#>*Mc5UW?Wz?ZFC_Mx5&8GFr}z`74vA^*xT1x>fe9;Vb&Fxt4< zL`btPeGDjaxbj|ZN2wDjKt%|l7C{pC8V%Ng@q3H`*ay|SFEK9}mjbN$qY|5eL|6wp zs2r$XG?3sj|Meft{!bz4-};&D`uNK}ZeQ%<_Lm@YP^3v-jg!kHq&x<*EgmNPX(Jok za#-6GYd2zYQuQ;wBdOY9Y)_Ct zU|ZY+4<2z3q`7&{yJe7tF$QJg9)->u!#MFtRtT49G*MsCh%0P_ieLFyosjs*(cdbx|h!o_8JKj2IFd2wuK6#9a<~>18i7tMa98l`nuwvUNA)= zX{N`S;hJ1oGE)%zm<+$1(@dCm&tts;W3AqZhyV$WSbDqERRG{qiJ!8mgw#>;%aDy% zGU{mY9G*_uTJE)$VvfzJKhHaCCYn^h90!F?QpQNX6BK+};)$sOiP>)gqPc7Z9qLu) z64%QA*#h)KfC5mcy?xBq=))^;O|!Q84Pf zb%fJf^mPqiwO0!I$iv6=<~*er0Yy5B@lqjET5wV+#(MuFZ$g8T-0Hr*JpGtVXn^cs zwdZVfs#qW|2$7#nOysad6rC)5?cAmt2a~)ho znSh~y{rENrA0xFM(Z-nF%xC?zBqUE+%$0y<9G^w3arFi0mhn*P?6Hr=rG;?lL(t|$ z;eNgNyl^@hHsV@)J(G84W*F559jncvVXh;j`_G`+GcN!i!}sUwJvAVA6y}e?suVFs zn&rHpPEj;c#Fki!^>vD}k)qY8Wka390{F#RtoehMm2qC3qTMKCtWm~nonow!qSHvx zt5bAh3JyG$7xek_&%B{pH-FU)d#elPpU&_4`OW-pm>=+a-uy-U&dy(O!`{Jc)tm2e z?agl>^u7Ka|H)VIO@Z+Fcj}T?>?OtcK0Q53SbWmy{;`g|-^~5DO1-^u-`>4@p9S#= znRe)KY^HYumI&TYG(aDAgVxtlH%vBC47-8YLUoF6BgL>Ax{VZ5jTFOfm};b$ZloA? z!*nCXOe4jx8)h0Q)-+NKyMb|PkWK{RyL`_&fw3fX_ZlFo8(sj_>-}uw{jeKm1v+ZK zQmk#H7Aq`07wV%QBAG*YZ@q)<1! z0H#rLAUU-#Pm!*dIs{epd)*-$8o)L?p~dDh^|R4^IyF>XW3q?=kmoMK7^;uv$+#F5&)V=6+2};VI845(>(69#9+oY?u zfovstiB_b>#}q5c%W~_<;}{hT+dSuej(C1}@E6qL-Q5DA|J};wMtpCvDbD0S1^D>gvX4Jq*6#{<} z${Yf33>5tnYJ4tRX!Us+v1%)BAl9-*-6S+Q%qT{Ws?k{O7m!&Sc=eqzTvZ>ZMpW$LKS%z}6bEqqLj0Bi|+%NWHFYr3nZ zXC`_XQ__q`T3HtdS|*qo3pR3Mk+G0F84EEXgqt4FI=DW`LxIpN;rL&;n~~nRw{jLv z@XoxA=EngdXM#G_o$vWAkJ>mtzhU@D5Efok%@_1`&Sq3zZ(jbIPaTw-`K>E|;&ZO~ zjrjImLfz+Vyz+EXW5b>#v~SWkxzL4-zu`c_VXpBM``{Q;VULU&wUm>oQxpPb(rikG z%(d0*4LXzx>SVrNO-Yp~ZJG~2)3U2VGMHX4zG%9RAet|r9E<_6;75f#QypyNPE>1| z>^<8?4+;Tmqml_)#KC$;GoD9b$O_JNpWhmjF@7NEm68=owmBw4HGtQylnk$*wG42t z6#W1Px0RB?Qr0p(^<*dsn6p+&MjY?8^Szi%3;;{Xj}#bju(n7%VNlp)aZi~X%hYu02LdPI2BP#va{G$e*dQcv!yxiV$`6zH)N8$Ft8)v^OJnPBf_v~(3khz^(6 z26h*@(8vr#uXGzOG`G4A*xU{MZb+Z$iBL-;;2LHi%a>Ap7@jWJm3us ztOEm+8I(yz+|tXUc=;a&tf5*A)T+FuuSOKa{9$AwzkhiF%8?;Wo7f3}u(QwX9H#&Q z#`gP=zZBRaJ;+m36A1G=Ha8cz&V&s~*)L^X=Oa!nI`YfIg>w)WM-gFUhb1#_`F(~# zE*VzJBp3Nd)nX^$tN_u ziiLOrIrlJXnVD*F@zA%kS76PWf9Afo*WsAKxJ0_xxZLeSKz2%1eG zosohtQ#=6#ooBh0A&A4OS3=MQdi@zI5AHBf!t$?rp1P_ za3FCnv0m7nW)I~{22(_M(JY>coU2%N-oQaIxPCaA7+f(2i)=H?M2l}L9n(kWm6{ie z&5KtuDHpHQ+l7kT@qDee^2oq&$ z0&a4UsX)TeftylaV)+RN)U!61SH~Z$pG;(qJndILOR0QE>u<_;yndoN;Z*%ZgTi9U zH^@b*qT5iul;1&{NARRL-oldH1Zhim8@-`8MB&FJcTqVMod~*Ba07HGyg-;c$oWJy zKlm!3`kd4y(eklWS9qBB;a`OPA_rRuwM}Pi$m)H~x13RThY7Z z!;^9dJA)Z9{1_?}+NRI|w^6~kt=mF8`F$ZCrIuML_D9;~U7y^w;G+y(^|3h;$Z|6V zG$|Mqj^(>8pp$U8dnf)-rkJzVEcF>uV<*QRTFu-x?c|^izTjTZ9G5`seDIwdw28Kf z?ks1yfF+S$U=D`c0@I7eE*26RDVJ81b|M0YPLh0#bL#+P*UqZF^NP&70Ua3YD#L7O z!FlM@aUP!L87Ch|FOK>`#gUZ4sZ?kZm42|SW019LKZrC3p&#*95N8Gk7DOb^gpEPR z4&cI}7{*t_xl{KMcYNBtbLW6X40>CQCL4ai6%NEz2R<@}tp~#h9i*^S$(nE?!3eV1 z(5lr9_NXeQB$*xS%6#Of2^nd8yO2k|b+jl+fwX)NP2P7WFZVZ$ECN?wQ7*BypjmU{ z_B&I$)Vt$$iY}BSCpQerZB37j7qsh05N)5zw!3F<2icPu$5S~NFJI44gOP3DavN+R?4EA zx8(I9nsClyu3~cOWUH;@x})K+8QvDgZ8Xm_lxjn=qcpEknmbDK;9CH-qZyPAw*a0t zk8c5tdFm~If0U;~*_m1!h^e_PV1hquNZN%HpslquqSX^>)DnYGOa*qC+3Z-Jk&2zE z=Fl0@Dbi>E@^}JfZ(+UFn>VLv>S|!uJG~$w>qy{DpxgdSKoIP95v!BEGbNypWvMfA zw~M+`Fe+V-PXbh1U5&u3KTaEK!?8Nfv5J4dEzGn1uI|U1ZS^O~PJ>sbX_s+u0VW{-q@gxGDXbBz_t`I#0r(d$0|OS^9Q8*uzwWILx=#I zZnu+^561xevMiH(O#xpE4>q3}O7}OP57!UAlfr6&v{);EsL)*4)Fc9tYpzJglmfp? zHOsgO$oLgY?rMk_J8o-;VBZmefqq%wbL%yRg0z)Od4vQi9=SZbvT=VoPmckTm>i#t z@m-Ih;bR}P83SjcSxytlM|<8 zlpRsG*pa~UF$!3~5o*@*=2l`YD|I?WFYR&(Ch)g}--JV%cQDe6^UG@rr4Qy0;fM@Z za{P1C>#(K=DkC#uC^VT7%u@V_o>B%;#;|{&qf1BV=nlx}(28_a5isoYhqBFCCMCn@ z>NcL6bahMf8M?Zu`MkG&5LMu5ZB&6uami*Q$@k53NigAK|xeV`G|f3iUzg|Zht+)^aD5{W=X zXC{$mKLNrM?Wc#&Z9l={jZ~J6UPH)8KQS^N_wfDGq871m?1b2Hn@+ISp>b*#mYR%r zr4(>DMunt|G({6O=%X;glz?%}0F-t~eqBJR?Jo2FZvLuh80`eUwO!URwT#KX4vY!5 z>O)xD(rn*oi0Z02b6aq%_(Cq%THrmcnsLV$G=`#fbQce%H^L$$-+WhySi9D3&@^?& z*oE-8V+^YwOyL>#9&rt4C>8&6nOI@cvYM1_g4HoPBEu8HOjTS7qfJyn-mtqU%O?lp z@{AsoGo3sGZ<#iOW@Zf_szF0k2`}TMW2>%nA|x-pA`0iC#$+5}B3@}-C?EQ>N8`Oi zG+OWjL!JSFaB>8?fr2MANYy6&f*O`+h=z#BW=^9jo;$7hk?$YcXVcwxoAw|6VuSWi z^5C?8+K%4W%(K7F6L$tbu~G8ZrE?q|gapfh4s3a*?0p@5hs{y4smTt&azy0v#*9q- z8>0|MU~>nrjAcNouPFT^#T`TouDXWoXp6tDWr1f_| zWhc~MTdJ>>wwadu&BY^fmE?M=WX29GRziW7%~Mq8tw1rU&C-0iRS8UD7?P-8)(Ixs*m$L6?+j0zS(r7og0|jtPo2Bov zgpM{#QhCX%u3WxWYO3^2&eR@LV=WfK)zcSI4}2pv+Bf`PEFdma*F1R?UiMPguwFA= zk@t~OGcEkgTH%!6T9T6`fia9%$=xPs-U^&p^vv3%DSMh*ViwihvSU`!j%;%rUEu(c z4O4%8bTW6d+9WMoqL%!7#3#ewv#6ubiyd(4J3i zu8BsG045dAffO%PCu>`)dgS?ou}HPosthpBVKKOCD&ci9O^K9eNPkahTm9FTaOze5 zU=mIoEO%Onhw-@Qe?~?V+;)kjF?CrNPc8PyBVEk1$G%Z5hwcd8F(>l51@3$_K?AhS zAP+j5%|mgF`>4@TJyy%~(+C35o_d*F-5EyDT3OrM$VeY7ww#J z6zdoR))IFPbb`+gI)#9UR6bL*N(#4^xJ7~*k^OXEu_3xR-WA0n2Gq;S#a4dw*QMEuw&noT(2F>;EaqmTqEC}y& zhUI%Kngf2D3CcsIJj!Y)?{O$w(u7Ww5_ecNDOpHjdwL>@&*U`w$(pcqtvBP>xF49W zsencsj@RAnQCUvY^g8<`)UR2H@cVQDjW#I0By4z82^UM3i4j11#y7`(_>0L5J8SCd z>8D#+DyM#J?3zzo{L>byu)%4xz~Ch4sL@SVv(6PdqvL}W?_fuLR;`tuoCwyt1#NV+ zEB>m{70}UXyF$_XN;$~`$lZs^m3<@VdrKYY(qc`t=10$PwLqarHnJ3FBEu zjPVWmj;ZD&W|4#QK-N|RPt6ZiPqbA)*P0rAZo@jnZZd5}%TA?N=byNmYIiCK zl1u(Hqo})4C26uT=_Tnl_B0Jeh@nx(hC;eyTJaWG5Ba#w{OJ=mVT05oLpo|XoFP3} zxK7P0NakoUn64R;3OX{x+lR#R^=LuS;KmY)f_@l_tfx9R?bR%BtX5Z7SQgNxNi?C-GLnK|sho zjk50XvaGM(Bd&w~6|2-BnvPnt&x}nkLn*8$)QlNAsO^!mtb;%@zAI{tMar_8jX&C$ zoF2}{C!9-}yapzSfUfhdN1~rZ8M@!jH}b(a9hE59n=%@YIoN2%yM%ktaZt@Mce2#x zLaNd-jv#A+sC}s%j+$r8bSE`vh^XW{9Z^r#{X2Yw;AKeXNC>Ib>c&*w1eO5vW8(!A z4rtRR97dQ-IM^+z`NE8tZ%YHod6MZG;XtfZ&yzZGI~b6g;sT7^g!d7IpvSRywQ0o%Ey2sD$LDb$)8ZFzV83aS_fjwT2 zxE?l&TTD&U+P#_v$%Cht*Fw~`imxn0O?VjJlz+aVHQ>Yr7Jn5=jV3(KhFf z<^X(Kn&&YEv~va1XUWltC7;b0fwy5pl!|aBe7y6u7NsIf6Qy~z;q4xYzUKL{%Fk#& z8DEFfx%iVF@ZuGoR8umU=|M12P4a8ywJcuw>KP=lx)nAWmA7aL;cw;f2Yo@v-J7ra9c8YpNsTdr$UI!Wc zD8~Wd&*mq4e_;53DDSUVKOAS@@(bYi>-noI`nAFOpNCb+28N#fVKQvV z9&oE9jq=XZJE+q1M&WC{O&4WVtES{ai=qF=vagdh{4K9==Gg6TG5(({&#X|G)^HS{ z6PG*ct*lhnpG8889i#kT!ktXl6Do651+Y$n z@l9RCs-Yr&xxAkyvX8h}`<91LMZnudiVv89lW_2Ut5 zEnT!F`%vDPn~*xH0*5S%^VY*yEGgw4UNLkI<;&(K_gHzxW1Dl6_u#hZJodXjH#ykA z|3Pn^^})LUA?g9Aotxa*$bV;Q4O+ReRiB%@BmZvCO+I_%=GS*tnVY0_1xrk zNq~ROxd}F*6&UjO-`pf3<_XPBWN!(#+Nev$rdvgb($=Sn-ts0LMc0lEhGA0vw|2%UO6U>DEG~Syy(taPa7YMwYn;ePMks}fP zncHYBF%}yXzZH(O&pDFvE~c@IIv6#*my3HzQ$|GWf9=p@!iq#v{(cn@ zqQ&I@8O~jn8U1I?=x=d<*(+P;eu;9!VUyKg3ASWA5=&|;4DQOB-dR}vXQk;axB9oT z@^ohZJh0e~+uQu#{ON~Z@%JD8)O$Xk{mja?|5jF<&iJo_)+{f`i2FNO0U*ThcVh+M zE^)u{5z7n;eOfR0XI=q-GoIZFz^wBGqbpZHS2nen#)`Ycue8f_R_;?8~r0IpiE02mKFZYzz6E5C@5=uG*4H$8C)Pe!S$ZT%H?{)^qt zPeJwTv;=UGe?k|8i7{P9W3lP-_sbH1^wZUs02F3A@wR{GR)`ma8stj724E`>7eG@z>4H9KF(aNLK{M<%mdxYGb#~iUXG>ui z@t7Fn;CM9<%8=(zHW8k_no(PoSMRh)>s@=-(C^(&ySjSM{Neix8q*$RHk<7ELeq&d z9U+n|T+%$2I7Qf`f~Bi82OF=+zzrZy1_fJVAw&+A!e&Ivu_nvO$nIqUR3BkKgiuFj z@jRcz;3OTu^#`j4F$cY6bw$#uFdZ7b6>@^K;s~ZnO}J686OY-0y`x$y#|-}%sK)vn zNnxg+YD}jExTVdVc7D?aa>RjH#fq?%iL3#tH`9TzF}P?IdxVfD)q;^XGNC2XR(w5H z+wlAZ_(-ronpGQgkX9y3^ExifFMC{=TTXF-T*tXUs`BgXiH^_Lxh?C2N@DWiW`Qo@ z(?_ZT`bJYm{cTn-pMYOOyzG2*7rllXkji7FLz7ZmZfFs4Y_5RiaYbev)fM;J`*p>o zmUa1k=yBTBp};f#5dA+7-;ea&7f+OFX?5@rxmXh{@8K$A>p;?&1?c(^9-lhoz1KlQ zYRx^7)3TPy^N&zKe?wutM8)fL8YGF1nu8!W_shLa0E5!w5x`@*g3X6i^}d(0Re)e8 z%~k|(d_?d(9{64%__FE(-_S?>fvPS|_K&w55a4AGO&SVs=i1(C!hAeHL&@ zu)k&QcIlufBg`eI4t-+W{Vjd}>~K%qkS^0*#YQ#iS-@~>Uf7-SiAfHmWmIa9p4DGy zS(a_K;nA;ZRaQsMeVi+30%UE?vvXIqO#xSFcIOIah8XTv3WtNlUZJRCby0tL_C>*q zRw(M;x+tC7dzMgPPFJDx~U=oEH#`9svsKor`{(j)9Bd_RY@>PRXf@Ug#62vlMR zRR_^7L!f+KwT)>MmEx7ld*x_d=;LTV9A$-~?tUUg!IYXsrKX-tO?@0t!SoH4@c`x# zREp3Vs64(x`HusYh?TRg>7MVbCOBdfJ#i@AQWyG(ni9@9l;Bk>6t!3v^~tj@3bt)U zMVj?f;TgbbsGsCgzeK4cP(s#Liasw=bwa55QuTzsF+*+w>tj>N$Sxl9Hejg`XNqm2*3F?E(&os z#Xd7$^fRd~Xn7B?OovcSXR& zR2nH?rIh2r9Rx-jE1nTkjyB;N!pwO1mM)}G6NI4U)zJj8gB1%orrcBE#Mu<0ksb?C zryutEo1K0?uhi)p$c>bDdL_-2cgK_(r;U`0O1XA~JZ|-rq@(i~pZ~5&xt3WmFih5@ zPS%;?g76fS1!4S?E*zT+xrTjz!~L!LiM?(pJCI&XZSVbth|OyH*`+n5@I2R5>h zX#9HJ?RjaqWOu(sHk}ZIS<-`$z-A=hRUZ;eT74nik@XmD2Bl-bX75cfKE;LrZqjKL zH1Q|uwN2wjG!E_{3sOvfRh|(XmZvRuS;M)ma2__H=ILw_i(z7iNOjXboHOf%OF5mv zFFkQxQ%{_pS<{QP|XK5|I2=9%LPjg-K#`t)p7JG~Ez(086 zE474Pgtx}Wr)xd72(OBd8*CyPzWJypUZcrj5xyE9r!+M!!pGv{CK;-Va8Lbc+QgUs z-t#`-$4`cL#^+~y&piTJ3Ohe)6hPM)JxObp-cP4@`_dlS1m{XO7I1ABH_E@fDv|^| zX~l@s6}Ycn!A^1)TB0>*2m-N4H!iCcm?mh~B-Er*yX*A=FvfX-G_K!Y#;{WlGf#)! zjrvGG&hGzH|8z*<2Os)2V@)Boevzmb6%tVbdwf8#Q0<`5*({Ra{j!`3Yel;XOBE*A z#uL_GA0YEx;q{A)tsR(4ij4pYSlb5)5R2jx&e!p3-TMnpu3kobRvE)Zm6dg6gwHAF zXnzbTO?5MuW?8Gne@p*0UyZ>Jgeo8a2SR0O5C}DP&YAZB9`CrQUX>{dik+e!ABba4|jBd z=WupEmglVoHoeo9;jtC*=#jhI=MImq@HOyg{#$2>$JCZ(t^L0gT*)W`J}io01-oh! zThqhx^gE#1c7i+mQ}+=mNGute1jj^kCwh{49`{Hce3mPwmpT+PZM!ck5}Xz0ff^%{ z{E*~=ljPYTQ0V)ivmnD!5-s5&rzgr~$XuNSk-A0(%TV{e*}S`lSRL?xh02}NpSP*) zs2r;Y7bxu)VA3M$K)OyG9b1*c;p3PY*W{xpFr3AKz)m%Z1upPjW`0HI58B+s%a_Ka z-8ATksjL`jabGE8E0-~AJOUNN=o3f{{zl|fM4g@73RrkjRP6;tMkB()2AqB*#kI5f zB6*Tz^XGGMjjpW_ZsaEZh~=@^{nqGMi;9GoQ65e>Kuuf3p40xVPTIdUCL@}vrV*tx z(2@P^{!*ua!_(GTK_0_9=N>jyO+r*SnN*;cH#$MeAsGHj*U&N`-o`mDRL5|z1{!v} zWSH8GTS`Y(Q$QPX0KVG1K$2F7ie8&#N}Gb2K- z)V5cA9m)(8;*QW%#xPSw=43>#!KcD!)8q4|*Yo(7*#e8Q#CoPQK_q49pjTTh(xt%%=CuB~2M`T}Ht8YMR>hH>vTMi=9Klx&N@fuiY6jYC|5|I9gp zkdty?csYw4=DkFp!A7J$oJEewMjdDvXOUyNkpm^HQVH0K{K$M}CGRupI z_l7;iwl^9{Xh3d4B;hzJK@7qeo<+ZlHqn81BkQ3WbCnDtQC_!(bfclzYSN7uvFOH( z-Yu1+V9Y3sR$MO@=jSFrj^fPy&5Dx+Jr%bh7MB|lKaS!Qq7*=ZPMkriEXUs}+~*X* z=p4A#E<7E<09NpweP@@f9-Jz7gvEoUZ>uy_yZ0{HY!iZ8$YCyZQka%E`2D*IF7a8p*Ws2|^2GVz3fqwr;S}X_=T+Hx_B5u5%l=}my_g!lU=uaz z*Y4(!JiH6Z0t>Xk7=!#tthRc0!@DC*amCF|Ba*w`74RQc-jrxN*d>s*;HY3onoliS z1Wv9!(M}Vv8jjid%(j2lJ!NN9?0Ek20g#{Xja1r7f8XI9sxH8zx z*7&B-hB?h(3o3b&+a96!KCS=?)O1 zNuWt^mQ3NEf%`>u!#oqc#p-7yOaW|C3l{2JsFHOmNI<37&UKZeuSisZGQ~yWlnY9X z6nzVALSWSc-#V0qez=K?2g$W{hp1g3NX=t0n(_HJX1&)+RNZeF&gFtbcAm%2l1HXm8T8lXk%|uIWK~DJdj~KT}Amv8%Ei zgmFA;*8O3d?~K&O1jLWyr2i4?XrEorK%ZWxJU?l`B!^8dj!O+-uU5o=PxGSpHr7@IMAaqYS|XfFzI3wU8AwYP_X*#4O6nF3k1;stoy z(ZwwKDAN(?J(r`EwAriSX$pXEYq$MmZA+fX-%=1)6FwZSnS?BRIEe$4DH;cLE9|evt%xq$L zs?#3ptne=v4N7COW{8EL$V3ST-8;rwHO8cA3*VT#j(Mxk2>cye05j@YKfTNx$fvM3~Pw0>+1eepqI^8Qnqf~{rNTW6k+(^iZ9tp_Dl1Ofj;SFGdT7y3 zL2h=@8tWqTB2$W{Qir7;oUs=TJ&J=C#dDiQ)M-q|Syse!D7&!Mb|igMTfjRWEvPM$ z7*Y-*n?nxZSaK_m|@-j`kGfjV=voN#CJ899HT`Ai_sTbs|UAnb2G?;AeI2rz$8+7eMW zv+nD2Oq$~@yN%*a@{%@Q$h%)aSvyZwO? zR&C6AMA%_vM8orZ_-8k)!(_z7Bayn0G$`Y!Ax2?6Y8d}EYVdedD0bB{W&@`l2&A@w z(6VI~opU+e5f94blO+H{I0(m z194rMcww(}NbgNW_xaqb9Zn0Ql;C=18h%UEO^p?;3s`l3*;lSM;Xhk{i~N|YQgq!l{M9hcGgEW zwxO<|<$)1rSP^51>n*`pf=f(W!O!`*$d(61`7mX|0IwU2iNI}gWp7c(+}^1TOPi71CP^sWY(64&+F0h;)zOo{hhyS8S%Zv9{9&Xp8 zfx+xF55K9$StZ5@m4}ztkIb6$@W?CqY87F1%flDzM<$_pIHt$0@}e8lB0a9xqozUO zkM!8nqev;-uE(`{)TjX|g}r*TiZt7yUy`@RNd|ISo_<7wy0L(K0X+&)4Se-j zRAfuX7yC$pB4IfkW5ID?jn%cEi(DJ-O1+}2V$P3UkO=_CNq3&H@buUrloL`HB`qy# zO&3Fgl8fQq(qeAv#{3b|5riz05!tCI^U(u94hSx60$L3gDZbWTWKMs%MyH5b#7-jx zKwh2c0FWcJHCXc{6?6ayYz-ec%U(oOY_5vrS@ekEhWKl0qx%SINwCym8JO~^x1SYr zB?zi0Vx5AWla5;!L6?`d_!hOump;wk5MEC@hM3k&qc7UNn5YP^?_aL1efGZ-59KE<|4F&yQIlZ+f#Ec0)nUx;cB&t#bQb6;iJsUKI4$5 zs8$F?XcjWUS@d1XcTKuk!J1S-s&U3%G<9ct(Xc_{i)L7EfLUjX%Cu@|7z|CB&LPOS zDj!>5>H#2vs@Wm@5o&o{MMI#5NvU2@CrBXJ(~b$is3b3AX_YYG_hrvZZb=UIJ`Bn!X=C^E{bG%4yIAeUeQgy4{he&s z3G=X<)CDVJo){3zF;DZ=YN1`jA3Rw%w!&REzF$c+eVwRNcRg$ee$aUN${i#t7X9YGX>?D*W^5Wg0wFAQN8m`%- z51Zil9M?@PRVHO!ep6-Nm_Z?>onnJ5x4rjrEU>qB$AAXITY86z7mot1V>wGe6rEVF zay*$(C)&-g+cBUvD4I^?CMU@Q#lR|sI2kbPD|oe`bC5lkG(za}b{Mm3IWZKycNfK6 zq7*xWj>3CKM09!YL*gilg-kbkyc?^lbc|o!ftCeU`z8Hyr?&uuD|8pi-Ma?1+YH;4 zR;ui?pxY@%&*UEJlLW*#tjiSTq8aFd;IPdhRLQ96{da0AAVfRfhH6(InDR|?8qx0% z9vWZn9^||6D=TeK*2vJI?VJ~zkT2ZxVj1oW4N_4cfC#OvIdz1;6!!TmuOF0#ce;cd z^-=5qpa+i(I5-YCt}%Q);jJQup)xRB_YkY`cytVrn{iyK^&Ih^ZSN*nYhcLISRq<*A8q{DCgt^nF!8^`z&-8^wyt4kX zWhbLgu)+=`4Fc?3om3bjU+v^{#ME3PcB+#+U0N9RWl^?|l0N=Ak+$d3wK1e~7WKlt zX?(*?S%!0ID6!*Ac__2cLXeXXLvQz7)@M_dv`>yi2sB#^T8wkgwn4s0B1LbJp1UeN zlGZv>9GT{_*p>)030ROt*BCtdWLk2fYgP`$gY2D9EON@6oR}HGku*qr6bSK7^*&D! z-NAyCMhwX_p^gB~IH8=5s7ttKR$%u4Y2J5PxL+0O$H|_yRE3=YW*p+Me*k$$x$9>o zMA7>wm1)PV$iq0Oc+SJIi0o=g;2dUl_Ay_}dPfUMhu%jJ59Xg{)r45?0LL6T-%t`x zu4C7uhjewevI-lPDEfkd8+xHJyelF!0uhKTzped5h@=25sayVBsn$mRI=As{wXA?N z$eWr*H)=j(tsbn2lrorE2l;AIl?KlUIsUJE}_Kb;;qy|hR zH2_xavV6*5qoLv+gGn!9a)G#Pf5xM_TExrPWO6oDO>n9tVa&GUYax=GWN|-dI3e1- zG>l!T*jWCw5>Zw)O?DK)h3zOot#Dj;#$YO9GAN1srjAB6?Q>KkwS|ZLQI1u1kRuaP zK_d6E@SyG(yP0Kjl2m$IK^CbnPo+-$D5-29&81p{;vjsEZ9|S|RiglphTlIcdVi|4 zE<=TJWGEDz4VhMxRh0p%Fjkd`RmlugGiHD??vi)=5RL|jR>8SUQIl~jisz+KCm@(t8k!2bhR4gUbIMs zO;!Zs*Pu2mn|jzlbPWJQn_Uwm6O*7ThWIyi-{5yhz;^=@b*B0*R-J~y3fi_3i6o_! z7Ap<|P4Z2ESv!p#>j#LM_z|y_%H_H)EFEB>Ua8&UB)oun8!1{tBF1$(brii#N+aU- z3i8$!!86I*R0}-#gnIMam#BkIKS=LI2Ah6keW?d&Kzh)%{&K$_4#h9J*2x~!!;$z! z*E-oTJsgc+bgh#;tcQo<7hUUQC-rbVe$ll~_J|%%#4ozm$sW_gsrW_LI@zPmFMId# zMQ_x&#pc6Jde9qv+1GryMGtzTFZ-Jhx9LG|^ySv(!yS6i8+|#@e7H*wdZRCQHXrWR zgWl-N!REugde9qvIjo0!;)AaBm;3c_D1OnkPWGT4j>Ipz*2#|P;b{D#Yn|+2Jv`IDNAz$ae$ll~_Lv?{#V@+n$@VhK43EYyy4J~V(w9Yk)NEbrWVh&H zU;LtLo$NL}?2lh`t&`oMhg;(pUF&3b>ES^9qHCS(Zav%?zvx;gJJ|dZ=5q~(=q1i?91dhvX8|jY(dEJD16QZ19J~F@oVRzoRS{3hbPXy(Id^QRps4> zT5KqYY}C&RDI~fMo0=zCTH13m%7~?ty6oLAQ5uzDi!~XAA3HA^8m$V3q5Wwg+X`Zs zTHPA3np}kO#>rFLoPRXiAcnNW;~C^)(R+X4lXa^Qm9dyh!lx=!SkZvjWr7jrh)iG( znfeZyz*?Zhm&qgR=~}ck(k1!WEZxeq((6e97${65fIwu~L8eF5D5?gsKdOscl4L$> zHK-E`r1qR%HIOjWq+ux}CZ#!5S+kvnMZ;dy1`SsAM&ww-prJE!QqAf{Q^pDzG+giE z9c`5*!*nvh0MzauYvYg9f(>q_;4=?XWr-AnA z3E`aL!s0T~B!F<+CdM<_s@$!xrf%vfGYd*GqiFKZnM$Ui8KpzDg!G^Y^W-$x+3K#M z*d>@uY1m#U3dn1HN1wa57d9eUM;8S2iW1f4Ke-P_^B)#(zR3JnxcRTB&41uZD-T7q z0csHYUxFCdZlKyVFg-97!9J!DnR(D*>1h1kQA1>?(-5?7HxpJSl~4KmEp-7X ztBrw!babk;Ck%m5Glo_#QO=m6r2$>2K8@5fLN;KBZyUfOO1wIZequ@jHuWgIUs<~^ z%BS|&T*mr5&1c7e24bKJ+QCKJFGXNLforyC3@2Z-eGGQnMK{oeYgxSc_9ganz0dl) zZ|E5HV!R$ur3P*xeKmJ9uF4@npEex<^D+)8cr-m2a!7iKvPBopA(i>N$03V3>WMtk zt7J?^s)$ND-EO02$k$inlf_x`$ws=Re3B_V)CEkMCSk>w^r@L*9+_h7HkcxmZcM^K zOiYmxRkNnVzDDOu;CBgAjPgm?*X&>gUfs2sG~^;j$+c2q2z;zRmriZAoB4RvER(LSz=tcu+iXHT}>ZaIr``(aF5 zGA(Y{`G?M^wMLA%2)DfTJ}V{n^XIM1%PBf%%}xA7cb9Wlam6ljFUiv>e75ZRncNrS zS@6p)&FGUms7)<~|9-ne1Hws1fhiAUDQvO^&U)NmN4?=VKS{$0m} zG^=n257y3`YHu#~_~33}6^T*8rc8!Xse}RyNgn0ur4WXEPa-Xci1XpW{a{0f&I7``XZy zt7#e=c;swIp-L?Ll){#H^eGj%L1r#>uQ^q!9=gG>A$x|=OW}*`?~J|O#D&R@Auf=2 z!bR(JxRBzJ+DpL`0jZ^$dY$o8`3@AT}JhZ^jTGu%V=hlpU9tA1D%U0Nuqt0*Ro1e zU@x}y#H+FmvdxHA5Vu52NF!xXkP>#L0YjrGL+secK^!-Ovb84-7AXU2Z*MkNx$Vn1 zlL|^SPc5{Ub-Yd`Qx9$(3u-URAFPvBEkV$&wKEjax&{i;d%fvCN$F6+SNS~E_}rBf6KRv7j!3(rZJMmHD&Stms+N)b zvNRpby1nby1-mj};&q{Wp*#p_U~eF;G^ZaJ$q;Hcwr`4+x8dz>!vUYIh1kj!vOiY_ z@xFuH^iCDw6JCN0)8S!%hr$Nrg-sK`7CSh*{~7kmFG&a1k*GhQ;v)5ivl`<0LBgCY^_S=y_ z<@5N2oqgEp1myn{d;8!*UpIg*K+gt~tGoN0D`%hE=u9daarU`hBf{`0!Z6uxunpXK z8Q7#{Er%DPb+=_Qn{N{Rz7aB@V{d_pI-R|Se4Ai~S$D2>S3-M%n$lU^=m!8bq8~hB zFXEtjO!Rl0@%^tMDMD)&MoH}2ry{oxQ6Z;H7DbM%&O-+$fxzxNHZN*{BV_Th-Is4(y%cVbHX0JbbRYQ zp5Ypwo$zc;ytGqMdvo2*rJS?qJL-Z3bvvUcUN^*R6|bA)b!)s{X;<8({GTa8a|>1h z{)1yOC=}t@3) zUxRG4Dk3G|K|^N`SiwU7#;3(C7pNfG;K%%05+8RLRvp;?Sk`Cp`DP83s5-=<=yA=R zo84jaYu21xPpS2mw)?ZyIvlPVrnl&+MSfvr2s)XB~cJzl6Y5hmZRj}Oq}hN7S1aqHRTS1QCo!}4AOln%bEGq_ch1l%5Z!kUQ5Zf5X-5V8i)znsZ_56PB$b6az=cr#+l5!! zioIF+eCM#cj~L`MKyZtJQpJm|+sW@suCvJA_*J67)%%%KEfGRN&aL@L1KCc6ULe2% zOxZ>m4s1vli%Y{0gZaxLLiO4cj%(YgHq61|V0GfiS}ZcJISn^%cu#;G=T;0!4gnOa zus8{HPVbeH7^IPPn4f%Gkq#lLAX@sO;w@$PH9rZ{-XNJ6MS|hId;TS};mc`B zx+C6Nd{^2XWeAhj?f3_DOm-36A{#Bll0hkWeM(1dTQZQZo#MEqBJ|V<{RQ~JmaJk< zPj7D91lS@$RER7$1d-ZdMxg1$WG>9ccK5YeTC~XMcWs<1*>)ls3JHlJ^)oYnsWj)J znkLF}Kby&5!aR@_91ub_?=E=?fKR2-^uicoNxSe)V_hP600VE-Xi0)(fyS-r%4SL3 zwnHHS7AGs>v6#PB{@T5^*2s*rG1kO6p~xsEh_vBm4P$y20TZ8%ebHu1_?h^KB~3pOZ+j0HHX-?uA`3YZ`z>YnaN)+YMLMQ6)bLCX7(mxH z-zq{ShumzKkF`Pe`GCKy|NnD$CV+KRW#6BX zxk+x@v`KEr(nVQPs2CIl6gBRk2mwWKgQ%$RiW)b-mAKL>XnaLPMUA5L`~9DpNp8|s z6!iVR_Y2(4{mq;?%X7|o&U2n~X0DTDsG?@5E8cj*TTjY)w+xB$C~=fWiP>$uQ_p}! zs214=$x-L>Pi%KFen^>S?V3&}_sf0D2*#-N5e9muPl}CeG|9-Wq8B41DD&tT2`>6i zq^IUX7LreqqoSY5P#T78I&qofc}~IMn47P;WH=ZmPYPC}=tq@~-mAf0FE%&I6=JQ$ zqcQo7Mu(!{33OX>$=3`wFb}lrmtH_WDMtKyPDj)F0ZZH0|6HaPsDWUTQX)GSOTja7 zNuA7yoD_7U@X2HwSp$b9UC>@Eg%zws>=_)r_rWxUuc7?)PW4m*#9NCc3O^S-8)Add z5t(p@WCGPWm^pnp~TTv}NkAJ^AZ1P(?( zX{QJZH=(_^xjXqmW}B%c-){?Jg~&$YVHcDu)oq(w$8f+}DIyZv6Q32S6_la{k>b^{ zNcrhZDYGEbL=Y*HC|khqO%AJDwlu(g}Mem|QY%u=>_pP>D!`A&Ni^KB`BZy03ri9oK*P zTm5VGz_&dOCmkY<>6E#s1S-o>qon^2s)dNuLd?`c%+!L~Q89g-ljsD^!baf<^t&3a zMkxmC4nz83mY%TaeLdkwPaqKMlm%aiWIw7C!8&1_Ex{GNl0tDn-BDwVVZ1aug!xh!FCimXHaSd}uKAA3gk` zeDvKLs3+3LpklW#0`m*vQV0#A_Lfd9=ktn1l})PDtbu_Bh}DA3wN|G|o4mvYuTPj& ziX|iAQ1v+y88TTj*uqmoG;O-q{IIs?eNuw6IzoK+9g!(DSc444hs+qL2*4 zWzV5CbCL%`(<7Q3fn_WisJT(6QC_ZNG3b$5nycO6=Yad3LmR|h$8j_QSEx2~IXrl@_f-9HT^ofF>)(8FR*v)L>gp z=COTU_J#DSy*G+)sAF3VRc~>E0?DK{&qYw_){#{SunM6lZ3=4<1#U33p;K^EG{Spv zuR^^pC7Z0Y@PmKU7nYXXKOEwkks+=U4Gc7L-$@NjNWN2k=y&svmp3^XNisxCW~9pU zo74Oika9BTxg~MSSH9f)uFe&l*5CJNO|%d$~&rRMr3|q zr0XdLf{ud8ZdXh2*H<+o`9@G^C;0&` zOd(zk&MLox%XViUPhh)`raAZqlty1!&X@VF`@p3X4yp|P{-8>ctPyCD!FTzfGui&6 z_7rmPNVkl@2&WlggCSK5Lw<6DBfiqS@TJpyS;@7#z6kvmP1TtQk+g>YA?tuh9S@H6 zhd7?w!QGos3M4QC@2giAuw_j@AEHgdH_BroB6Pc&)`XaZ)t z^6NA4C0o+9OjGDn@uFwVv&LN29BeYMoMMy)zevv_RCH;Q3c^32K`0-e!6eE>`@}?( z4ad+*Q1qZiU;p`El4nHK>_&FO3MIKltF6?u9|`x7f+p3B>;8<2FpTT$b<*Z1ZD`7o ziD>p-M1w>=sgpon@+Nf`o`DMWg;Z?LPWmag>?$tgsT01eVj+-MRniT1`MHjJBY0sR zCBkjQvn*a=7y;7^B|2bFUP1FP4OdK|(Qu?0m=vBiy1AaKbvbMAI2g&vD_NH-p_6N3 zVuL0Nb5Cf)L#S}gprpdcg?_Nh>Ka8Rv&;YP=R!6&YYvtVvIhpr_k&WtaVcMhmdT7- zLzJ&xC5cfZDe@#damF?Kvb%5d71EF!%uZ11j2lWZ@O((CMzgi5O*7PJ*#==+RUQ>z zt8zv^EyjUKjY0%km2ZJoje5D#syOrfZs6-EUhG6(?M2K%c2xt6(gUiK?}6&1j^%4%uU3fn~Ofx_0m|9I)HkO9sDRb!AEJvZtK(l05$9B~NZ^@=tg( zc9uE3ZeODxPtWBpyXjG<{TSDCb^W0OXB_K#zOJ|b*Ar#!cP5{5nvP7M&;s<_d+W)^ z3Ng|`+7(EQjPy0i;O2!jW$*xG6Ehwi!#uj za_U)<#CD(xnbL5_(5jKHca)$_+s{)a%s|f#@2UK@N>f z?buS`;a^MH4>~lEQjFRKrs6-hM41%&iN?vIpJ>cPq<`zR+^c8khBPTnBh0|f_SZtNa~WJta?6}$fB1Os!|!|F=f3f_tBdZ%MARCpPJjE*-9P-zonL+ZpB(@6 z;|?oLM+v@kmz^FSoVPoZC!(7X92e_|^HEKy{qVMWoL{p zJfb6&h*Bwu4WvW9CC_2WI9_CUGUPAF+a^ot7g;H}eo9`{f5lvyL^0ZKkaoq}D;E?N zmSw6$wMg!FCa2?8kS|BotW7lg6K>AcTAXJ5ot4xAfj>UwvZaZK!I`9}A4yt7#8f9a zhf^B;3T&np%*e2{A9Lv+IkG%f;Aex1#2{X3)X0~^Pe>u*W>3;ca;>_OfwIIa%d!2dx%59@FVbau?3^M zvc5-#$qog}C5!$@P7Hdj#9V^8sKHXt=DTMF4wbdT>GGDIuH((-` zB;@AOpyeTV{G9%B51GLC=|-5DyJRL9#Eza)O!I#2{Ydx%VotxCdpOvlkh~0jk-|kG zUN{gqbpxB-i7Z77O4Ht;!K@Jj`-nv$WkYq2%}t0zR#8DY=D5Yyh+J~Re2FOK`M_(3 zjUHrSSj?6tTT#~dIY+oLsurDL{x4)w%x*a=KO?>uX1jz~0)g|p8lk|+GV-*N4lfSf zE$=AB@pH`;%e6zH`TYV?@%R~@m@RFw8b%pZHnOHr1wVHO=DfCPLY=6PTeLY!Jp-?& zG_LI(^N;_w7dm0|X`9^zNPg&~T3dw&Ce{893${Dc(UQ+F*z;}3j32!S6D*t*oHe_b5k}>RxllqvGXMcF)B! zh}l+TOcmKO_L?J>bo`ZZSGNS7d!55UO#9K>WOmwey60 z84I@daIA~|!#u~h(;r-pb`d$rCM&`7>9292%~&L%c((pU58a(Sy#H@GypY~M?&O#C zV)eZF1rIz{kTz=QXDMh?eA7JLilv=R4wEat9K0+tEC&fO@*r#65^~AuwHHSOQg#sY zV5r=qhAQB!Wp9dJIAgiY&K=6x9$}D=nUV8y?Y87gU@ypuaMci9gpZ9iU?=b`XoP$V z8X@0;Mo36CLh`Ogh#5i74^Zn`l78vcp4?ZaI~08t|n#e%CSLMT5Y_On=+O3DbUIf^PQvEIaLFKHpP&YLn}mglS{ z?~!1?7RhSA76ndj)$eohfN87eH2Xe8EebOA!wr=UxCT+G*OVidZ zd*@p``4l$0yy7$gew$(N`*-NBC-vhxjtoJ-*)LEuVatYLQ=;AZw8xFFbPa zIniSHDu;TNeUl&fBKxK-o*V3&Ji@EBCdRMW4F7Ek%W5;d(6{?gj@DKv5Y4}xmc_FH z(l707z2z%D5J5XjlLZve+Jzj@lAm5j>StYV&f)7bS%n*3=-UGUsL&q@9NlrhsC_S4 z)E!nV71b~F48Hk=K8bIBp|#O*wceOZL!%!ic!rgXnq=AgsO$}weNZQQMX4m-O9%MJ z68Do-HvA-&jn!%g@;iLwQ@BEYp_NQkKQ3b4m-6~3e(QsGFcF&t>6a#TQB$1YBFSnp zZEpLCjz*HB?5P^IR1wXM{xdA1>yx< zSq1vuV1f7@(PLN3NWVZM{Q`~j3pDbW1)|7>-U$E4xhWni7v4w}&($G(!ib?ZSjn(v z_R8vM%7`|i(iM-FUupHNbeEFr7@+uKKAs+5dm5e7?^63D)?F2Pz^@hA^3 zgXY#;$YGqsQnh^~*w)$%jr~ZMGgl?u(DpMUMt?tZBx^r&yczQ|C#en8ikh&tqnY1x zv7bs}zm*@G{e%(=95y;yv{`$a^CU}tamns###QQ%P!S@=dgHZ&<-GLo8murGg}x!e zG5F7mjXW`zHer8}nCnJE$UeqVz%j-Fb{+Ah=&ejecw;`#18!%6kj!b3+vR!owCMPI z9r^LcXLV$vEOPFm{wHTPs0B0uv8VCY65vgc>Dh^+EaR@n>W#vKYQr{CYX!OJ(ft7QB_AO3f3-pPrx zVF)2b2=oGhB)BNw|ETYrXYtrlqhyu@%{Pw4rPL^iCLxmFfZ4&o zn{_fV+BR6ZAtSB3wd*ZnyWVJh+W){@fu1~B(>`)6*+e~S{g{gqiTRYgJgi194_kT^ zYrxd2BuHH_j(6S5IIe-)9G4W|1U|H$Xgy&)$uy_hf*K&$Kn*ZC^b=HPR1R#0phS2j zW|+udwU>^Opn$i8Bt1qqPgSG-7+IRsw8Py^Kc$4c#^k^^Szlt*BQXB&*ed24{6H}C zR#zL)*hQ$8;s3trVcVj~-S|Bv045U{-dNZ{VS_8yPI;ZHH9^gLNh)djwG!E{WMc z{K~OE^)GfLZ_`GuXYVUgUJg9!Z%|`J&eJA68F>-zP4;|;syY;!T!={za!?bv9!cI! zdRZaJYO?d;Fg!)Lyr9>0Xv_}3Ups;?))rCwj_h8}s_|Jr)mPih;3U6(N8zsIr+zeR z4cFiIe8H~d&kERgAPf1>6VUr7=)woy%h!>?dA6Fp?>Y7~C=C144t_IV?M>|``N7XJ z7@V5?vknir$p=2i@&0JhyVyQY3+9omXY+UQfM1v!{jlY8*S4;)iDvS^{e+&8{H_kS zMv~8WbG$ba++0xLU<1>jwa?{yQ9S%fc6L!#4MNPhSOf@1prVo-S|;O{DOP?V_o&L1 z!PO~oM$UL?4eRPpYL?ga`D)e))GPzvFf|(q)T|!)lbW@SgF1w2*5ws5x9CYo|0Hn^ zM4^Wcsb?v;7z$46*e!N^1;-C+(2CTy!~eL`S8%yWwg4QV;9|alBR>Czpc4&MaIq`} z7t2y`8c*nYp@MTgIwH+8RB>pO>7Hcl>o7X27nw|7_qXyBFwkMH=`i}MZZ;i8Fj}z+ zDaCGaU~>2>C29{FR5(b4TIOMcx46SL3Nx6ZO`Ku}=}1=v8-*7U`~TEFVfltxx(l=T zlZf9C^CaW}zX7Y9`bAMH=tY)1b9Wc3>B#CBLB?H~6q+PpXSw{)6COzVHASPR(=1r| zVVf|cTaG8olWyj(LJ>Wtx0D*&c=Xa1q=zCTLX10KzEWhwLkd!n-UulUq?IS#qThIY zYG5|Ul7de^m!cU+%lEvQ(}6jQs*P;xp<9w6ed<}RBi8A1^ZA$7}@zV#)MX`VnE@<-U< z27U(Dcj3`rS@6!+`nN^G!z=M*-nqE861>%9nR5Z-0pIkVJDhM-I}h`)sLk-U$(|Rn zHmRLteoC}Waup476h@}8(+_wL$>m>lMW8wY*ClO?O{e(&Y_MUb?r-c$>KjVLtVr#; zArjlTmath!!S&Hd^eTJefpq>8A}ZEmT7uR6;yg;ER0oBX2=@>S5naxJ=q4aKFV7bo z@+YWx6+a zB4MjeU*tLD!LLC-a;~%8V0Z=CLrHSgt12*U{`sn~Cr=)ZMB@IhZ>Y-gQB1c%+|jP0 zO=_>j+TTugX!HLBggLrP2q7y_2HM>g?qZbvbCHJFfTU@}W`zueOQU=Sjo8iZK!RMlIa z+1m2`S5`8b#6MB6MgQ~Vn&SBGp@*2wBsBjJ9wt z8p5h8c+3n_hfyXp8G_o9$zT;`cK?y-1zqw#k(>?Y?b#NMntPUk6Eq<&Qcy@H5g3B` zRixlu60ZLk1Up4=dD^@vilpfnex-awl@c3TDJZa{I+M+DSu(&E;|K0KO5lN)Y4EO8 zxnw8mV6WEDIHFAy$u9hY@?2uc&T%FbyOE{Z<~oLr@X7_<6NTy0Vf37lT}7i}t}67z zAx=v_7e{wl5{3MkNApq_H69*g_1GyXG$QU?#R7b`WEa@bl;HSi}q@&g;XwXMEGTOg*G)Kl0 ziDd6rL&tR0>i z8CTkm3{NdyV%cHddGbwhGb`riV2db8R@(i|C|bE0NJhVuR!~rIOPo2ksebj&T4CZW3+ZdY9{SGYirCQ)z*}hW_)=;TVw7wq^-r()>s4!3vSU;!6qiG zv7v1(J2Z19wKcM7-Y9ec<)anhJF?8(xPgSSSx70v8Ln9Xu)lsUBBs)wJ3-Wv69-QmWsBDN@x&Ky2G z>RQ^J8-9&n#l|49*HMyl6<4S+eb2q>iV{v<$0mK{fmY-tHr=DC`BkJG+jI}t?5+b> zuuI>IUUdaIE?ACf6+s@fBcvgom;~TWTPEg{yc$%>0R{X0)CSCD#ej} z$njsU!c=0J1D|#IJtZ*`O#-__9S1Z(d9my0^RkxwFxM4Fmmx}|?Te3cD{H@wM-sl* z$YV7R!*8jQ3IFq=8&r=Q^gqpO)8);04DxAb50TiuJK2~n2Vc?0qRU*bKxtoxTI1KS zByU=Az7BDUj3T&F4hb)DrM_>v=SrRza4sfp9wDbAlC|sEh^wyT>;Xd9@6HkiGyY{&W$7+lyM-$!A4Oa-Zn5S`0TEZx;L9H*DcY7E#d0?KI#1bQ zEn0cWwQ}D?@gqh1z=E&Cp)w5qI;d4NiIWFMpR?R4LCPB9PTLr6P z4`@78vW!TUx@AxzRsBTTSZKiS%xYHZn-Zr+;N)0l2<*-_WjnBL<9 z>AZ{dj^lU*$2^Xg1o_A`*KMzBOx2U=#@cjqYi3v43bxf^_lx#8VMlS#lfm&>jtN+Q zsn*tXLsP5Qn()$B^Q)}~rht#u7)ZVe09n%PP+&FPjFBH83$tFF(~>{7Uv z)>K2&;Q3`b-<;lE*HV{h+>x%^zN2+HlC^?4WBlwpF2}Ka#_<`?X9Az>YZKu~d?xdm z!e=U^@&)99rdy{Z+>%~js+RDByw$SL9D@yX?LBA>FhmgX`Fo2oCX zNi}cJlr^Wf*R`}Z?<;F*t|{A2m9$lt)?^yyRHSQa7S3I=q_%oVx@Pg*d1W=3mWDm4 zmWDYkt+jJ1O6QiA+b!w6O_}D_meS@H=axv3b17-u%x46jknbACEyMWXVf^ec?hW{C zWwfrkO#-7)sQuJ7r}ohN>eJg(t(oSn&FMX<=32^LM|;RLs}l@_3S_vPVq{vleS2oN zic?ozLtAL({&efUru5df=6aJ|ZB}9g*j3lKy{4_DHPcX?YTUIdvzr)pXK1F)nWjt& zeWI>*85cNP-PYWwhIt{8gEjT(R5J|`B@kA!HOsapvY7TS*wu!*?aiD~N36-zrirkj zh3-b$jjeTD2u{|gswu9o2{!uqB9-QJAcQp4xOG4PwJoiKKtu8cH4t_S1z6uCaW-a5 zP+NDWTQjL@(yZguzH|#+ytz5k>^NVH6*&>=;Y%Fj9MikeQY{g>IFs(FazY>6T>pZC839?Yb$0 z1Ybc*-9sDAG^0c3G}X7Y&{)e$E3C0LrCN8Wr8>@;alft349Tk9IPWt@`Z20Nc_K32*rGtJUE1hIBcr)*7I@su}}jr8q!%oxx? zm6dCjE#DLj%PN@--p!Sjmj9t6|By=>IKwV;WCC{g`EBXueJVkq!TsXveH*!rw20Moko~j(lw_aGrHm8KJ&~YgPP!$4^;UODgQgfI3Ov$n7We; z{BOs~&3XO+aYRK1?f5)jm}}_u$0*KVD|-2&k`9tC(dSe?v-q&(()2=jJ_io16u)kU zTPa@Ex=dp_uu@*R3aQCp5}6&l(pX4A$0i3~L|q?4B;lTO!ePnY@@r+3B~UQ4=uTZnVK z3a6XA%cgoggRgXA$Zrhz$Oth2O6${&GiE9}3;-X(`@V}YuJJqMEmWGuzmVS^@P9-G zsoiz5vs5P!78W^MNp~&fkgXVUKCJwN{29K><_`I7eAnFMDCL&qn$r!KF6dl}f94rp z#mhG$s`s^~Wjf3Y?A+?MZDoA6YPh5T*N!N1E+!uyZA$f0*JwtUhXLc;-j$y73}Ivg zgx8qWh1bf7iuo5~D-$Wre_nn@87W#?=V0MflrHowatzH{e@Ja+!e~Z;XVw{md#Ywf zx^{3x_b^nw?F=YQ9=QuMx;w?N)f&>Cy5_VeB~$5nGeT3qo9Q@T80nYq+Z<)f{DdRo zaAtGd!m*l<+FHmvhH>LCzG4_(GmJZi@y6)T_-kpqs*8rYmKMtIZL3SyGf}GAJIbGv zzMiA<*VeeJk%{lX_1WG)shrLr?42BCH&xB{T6d%oK#EUe#=i#xG7R?!;nZG3VbSxp zGp)^z(s?F`^97EQQ!SQVT@4)}%mL>n6!~-f;dxY5FahwY2y=Q6=2&?P!nTCrstB(+ zYS>m+QyJECQ!F8ei`ONTM9<{2nsb*d%3aDJutIPn){ogZi@VJqiaA7L~v z4&}3%hP80MH+{M{$15D|-#>+;#ttT~nP#skMT@2OYST4!4XJv9(v_TY!f4LDiX+uN zB)*Edi#^%3mvK#gk}$qhJ$k+^-Bw>u8+4V^S2F*#d1GCRO@HZa^GfGhZ?n>I zUF}+R7jg;TB@d>lscOcstxe78ZFPIofo;tACo3m#mCOmHZ!_BvcD7_1D+ilC_I{>% zr-sqS)^sy&9^d>YgqR6ITcfEDCFf}}Iy4^Be2tk_PqxLLbS-&%lDum!^c#+nzCUYK z-KwZeFlxPRzU@q2x5{Fu#+RdOOyrqCVyDtcT9WmoTf5KOld28*pe=#I7)MHkqXTWh$PsY}+WAk86Z_=bQVshXSf;p6?hGl{B~Hz<%K3N>BFM5`v# zhH6o9X{N}6I|DP0n}5W;lZk`Ca&PTxNVo3D;H<)1=XqGN#Dpr(pq)(Hrph)LUnmF}BF& zuj=b(@pVXV2V+7!el#Cax>~;JR9lop0s5?5j}5o*bPrc{z6j*Q77Q zj@*!L$W(fz-l~jpLp5%Rz*D=`H=M)59issu zER-?xrh)l&rVTIqR&!kXUxSWmF72RU2XTj_Bif~*iL#OBlPROdHR<&1adYl4o;Qr= z!@*1q#p)YsUIRW9uR86aY*2!Ar~->qej>H&1$@FZn$AwwOB3!( z+QiFT%BWOdvG>?hWG5xv;!91m|W`k6N1ukKaIVD;;!bE8|B) zCeygp?@w|uTVV(Mc;6wc>L>K)brYw?=!ZF~{Rd@|T6g}&Iptd(=%Pu!t+V{7t_A$Y z;Tn;zyIE@S>x$}@qSqm4k<6WlOZnZ%QSpcQ?+ogR@JF0$C#>wJIQ~!Fs|f4swxw(K z;iyLPat5}h9p`q!$*x^)_R5iMA#i$a%4DS*%4E1KHqyRmhJ)TQYj6#?%B75~JmHw! zs`w^O_GMdyuUYM`7*^Yv6&!=KheUZH_MO699UQ}Tr~iW0U&4CXfKbw{Yr_(6GbPA9Ddm*@Z`j ztk0+;hT*Otoa*qw3^2&Z`}41ic1~ET)pOvK!M>G;6hZQ00Yka;Fv98sP=LaVaaVrL9S$6D7Bh zOoE7~oN%%|)^gN5_B;(6q*beuq?>mWzm{ZeE>uMrjZb0Nm+Q}wr!{obmo;Q+HLJOS zxX&f-J0iaC=H>e?s#)xuHy7u{l3;;`!Ox#J5&cWA$NaN172@h6&*yV|BZ8A$Lgp7$ z%vKNiBv@@!TXz1Hzfp(tM~@vdX9A%~w4SQ}Oa9l!ELWd%r|0|nLf>A< zp)XJVi0u5ILH^~R$Ub)_=gvztZA@S8muPciUF$Nr=!TVD^Md6&Qq9@-E*%yoIgFRV z%h(%{eb4e?Va^`LD~9n(cwKsrya7Y%Vio88)t@yB=dYPJH#?2hTw7DIa7g$yI!EPa zhdYOJn-|XCJa6u1LJz&Bez=+N{IK+WUt-tEbrER>8nKP?YCRhLG|FhSm&KydOPX4m zNmi70YsiX{<+MT;Y1(veGlmC_zglN4=M|4W=kXbEv7#EW&o}MKEURl>(OA1mUPQ*z z=2rW*)*N9n5?K~b*KVxa+q!Qh#x{Ys*ckTmwMNY`*LQcM>)AkKlf~piUqKvCM6woj zvA>3{=U#MT5eu}Avy_jDpUoQ7LsnzRzAo1FOe1rfKvgrHOEJ=5wlTAlJ2m44zQFRm zEBTvpQjtwa!#KADalB&1jC7mJQnjfjjx8*Dv^AtP!41{uKPrC}dAgK*lm~eUl?D@q zm)u&Cy!C6yw>T^MW2~7cA6LM~MrMUQCn&BXsEK57?XNBAd3&*6&=&h#1nYQsW~itA|J{?%NQ zLJ7l!D-r|VewG~u9C?JR55ix`QGFrw;Aht##{H1`+X4IYiP}&TQLLJ_dVilsxbg1g zt6_f`Kr2u40_)9B4w3$nd`g~;d`{#Oay|lCG>lKm;sUO#Pln-Vz>-tQ6~nHJHH!(a zFBo=RJR|G+e0Wk8SHjuxuZA@yhVh*X%ks`<&F({9$8`+^A#a7{-3Yk>&Mwc@u*Ti+ z`t@*j`ZvR4v#!4lu7KAxu*nR!c0Frw<}9+2XGaQ?zg#2DVrE_J2K8*wlJ8!9im5@( z4%*dhU&*p`6;90jVX5VYQ;VEUS!vx)TG?g47tYRWH>|R*X9}hjOXg(EH3pg#j(H}~ zmI;4p(@$owtncDpFDt!Lj1<`>;jE3x++yi^S>MuCb$tGvjnlks!LWE>mft?-lZNsj zU9_F$*sxO^S+-!kR(r7sAKtH3G1cEI)=O*@Dr0jRLwKV!((Ktq&U)f~0GXe{QT;p| z7kBbqx-{AK1IE=nFSx|3jULpArzKZ2{`?&}Gn_|=OvaxY;&=H@oD|q!t`3*-4su>b z;L8_yxXWkQ_Rt1)+?Amhw3J85c9Djru&UsCKK-Oy#qn-3rG~$GaQ(vf^lAfKZKhRb zei-&9!m1MwT`t_SBU7K=qFt}%Rj97pKJ@xFZLejvovL5XE@BpL{H2M(X*phiFoajj zMrTX&$8&sl${#qYa^Prw#6TLLGJpOS~uMw!@?uCEUbbY{aT_MY!ZleD%w zmU_1X&s?+H4I^}_^WZm0R>TO~H4ObxbU^kmbtCeXM z;{Y0-3=;?XodvemOp~W=3My1{^FH&@DRSF%%zoQC`TL8#3)9{XG9=5Jee^26WX}L% z-hXYaR`2naW43Dh@@%icHa?S2dBNntYRRy-+FV%d=k-{LRVsM-)6J!`%W&J$A^z>{ zd0^>9s*(OwQDhSX8H94>gj~w^Vm|-&^x5(gZgGE*wAGKL$22(VyL6d8a$Ps^xtvck zAAd-elUA-*f7zN9fN(=LtvU<*l|);ZtDWoXoMYWjv&=NIe?)7U7Dx7pta!SJXEOP) zFgw~BQjOe@b^RMbI>B<(rcB2A*gy~7!SYhNkyfb6=l>L4cRMZ0s(j0NrO$A`+*F}V za#3v3k0GBNa4^8HPPOd7bI*X_n=tAJFO`I|c3zQlT2`EA1#$Yi-B#Y`;x0vVps#4` z>4CQEVV5pAcIJumR^m=(#eL?m{L7fjF3+n2zJMnt=(|n0;nW4CYHW+il=;3({omgH zv=rsj7XmDZMX`F5;Su<{(d0t>ucvsM>UP|5D!%?#ELuQ*9qZZK@$Sw=qo8Z)CyQ!B)pg z7Pn}J{NSp+^BvMw9iLsdyN+EP)%(2Hq?=g;e~$ASFGFJ&5jnXF{Us*9?SVsU9VI5x6E)9FIU~mJ_87ynGwx#ON=q0RdwC6d> z=nU^!X4}37qI3!u`DI}PY zDyij~@;O*pVGXp{LVb37XeFFqZ_D;wLak+AYvWpYXZHEsoZlF31fg>LShuPIS&x+E zChw=72V(n;&aTU};Fj>LF?%xY%%S$1$hf7{l>QHWNmHGa{L*f_0=yg z_U8iMzXir_f+$a=CEhUD!v+-DjiY{-6J z3p<;$d5Lcy*KkyO%dXSG{4}zqm00R(ahtIu-hu%bqQCQsN0?Zz-7&CxV32Fmfqx}y zT`i1-^ll+twbu`FRGu$nI z*G%WAx(uGLVm28(UB$WVw(?py8D6wS`8qu%iBEQDxGNM_bMt!HI@$MM3Ddr8`Q0zM z|1el~n5%}}b2a=$+S)^WKF8-Xd>-KQNj~+bN$QSs&c^lYun1&mV460hywo<0uQD*} z<<77+B>Mv!JJsCmo1biSEFHK}7C9@$tP05uuMJXl_0qfSY0=yc?VlB=MOSK_n-nq8 zFm73F&S-}^M)i(5Dg(<3KO8%>l&mGA*$Zc7yl94F>m{|anQbk)biM7Mv`UvuA<-}PqhI#Y(JQt}#kPKBu)QE0 zriY5|D3^m8J<6To9@?YET2DhNMPo9Bs~>EWm_dv$YG6UMFW-K|CaF!&(Z1d}_M~ok z>4MsOc-_^;p9WoUsm{|FZ-~5 zJ7)(5NOI%yHEV_!7X5RUZ9mq8-p}{h ze5?=o+oHox9WIPYR&;`}f16!b`k%-@wW{Zttlkzc^;ax4-YfqhEC1Q7{Acs)hVh$* z@y)~dZNpggqxhEjzFl;ib`#?>O8R5>f2`cLQK&&beoeo==7^z$_A_xx9EmE}pM$;04&~4cwN=2Bw{T8% zogB+SPD-8Ixn~ylglTDQ(1Uw9uj$6{xWg&nk!xRrD>1gBh%>N}|5@t$cQ)IBwc~lK z{5Ja#d5rTZE;;d}lTVpGW9F%|X3r_Fm^*L&0^TXGWNC8Q^0Qa0T(x@5Ip?lDZ{3FT zFW9(g^OlP)zU0!XRCP^ldPm*PUG)u3mp2a$w>}7XAt5c?w(Wk%#tdOwTHAK-*}LyG zgUQUAU0U|aVkj*ejP2#b^m6VQOmWWES9brbvX|Ti>9~<-ES|{8&C4$+JbZY>$WcY3 zk2`+M*m3@y<0nj8zwckm zx!*h~${9fchRA17I>^NjkS(3Co%@aEf1d;nJFYsXNG8=_gJ0%Qx6IhL(Q* zg8!A}A1rQ={la0T9xSgPV0fvI5a9nJF`Rk$@W0sp&pQ17Py46zhtK*K%YXR)_440k*2c?1hP{zEzWxZ5}Q zPjw#PIFk6ow*bCS36 zk@HvAZ{Z`iLw1Ii#I}pRm3(Ztz^|)X(vod| zWH|hQgxed0dk1xTI^ja@gv;TXN8U(5gZ4X94~FRxbv#t3pP@OOHv^|lRjReh4o1nygK+ZVMTJGiG)N_=M(VV(!qrWtA6X#SP;nDAt{*I>U(`S3#!SzpbjAq?; z2jBIld++2^h5sUq^J&7;1RaG5`)C*6@8WYeA5VX;&7Yk=n}c_ycjb)y8ME_Wd#S>Q zeeuJ5e^ubvAUEa_>s)wYIc%5Y8i9go3I~4oTi$X(N55ZEGL&08S!l_D8T> z#+#0~U;cnFo@GakhnEPkL&1;7o>Gv)~%jcEPFJDl;uzXSZ;_@XGQ?G6^rLCp0{}Z;suKrF6L!^id{T_Os`^zGf?iQX^7IV*=^_}@I8D!%IB!E^G9SYQ<)$5z=ggH zTT!0VxF_V-!t%8o5eKittzleGH`MHqUhUz2k8nHqOy?8wHGH3x#nNHQEAQk(Yxs+5 zes|SIXLW4l6#k0%n5 zoJ4L;-st=(1rrM=jVKy9VpOasdfaix=Z$m6$0oQFqmyzbyHg@3jPs(iqH_vL-STKf zWUhN>FG z)z+UKc+;D2e#>1S`^;y*^yRO9?Wa#Yeb|YOK5k~k{6&?gow4SeR~>jW7eD!#&wlx9 zk3RO)(@t!}NV{5j+KQEH&Utlh`oPWae(zTweQd<&nVed4;iZ?on)fWc>E^q*tXOAYM@KK|h6zwo^$p8MUkuY2R|cYOW}U;4_UkNxmRt2;mU%`ZRt*qU|g zFTD8GTd#lfjUT)JfiFD#<*z(3dffO+FZ zqqF?R6Tbc3M-Q)Cf61jexuc4vmp%L2#>}EK&RVwOrkgizZ|nK$^Cz4Z%}*@OU71^$Xf2o)y(D&VUi-BZ zrsR*yTN`VCL*m1?7mklr+!ova!&7n!{G_RmKrM@Nlt60S?( zBJrG@NN#RkBtKpd85t{bM@No}A3u7GJ2o;tGI7L|_|)8!+?}yqk$a;LMjnfNEArjK z@8x|z@$S-4kk!QWss#`eyv@_SOzwv$Vd;e?S_|~_7;NzdU?qi9Z zyoG0+x#bU!e=9a-!oo#cF1-5gkKX&a1qY9N{q=8t-#|-LLtMAMHhtOs4@{ntlbc^K zX8gh>m0frB{vdDBO*ePt%Sr@~jo--*M+RzIkiT#7QM5pLy0VpZV?KFMT=Yop|yoGv+O>Tz$^k z4I6Pz)99*d(%W{m?7i~pH{5>rz4txz_($(;%)Is0C9jP~V{@Y0qHbAf`!!Re6{Dua zPRg4WpA|nlHuBW=yAvnHPKwRQonNqS`Tj+D~v?e#Nd>lVHJvr_!T^u_% zUKY#G$;(;lO^+4kEsR#iC*{Nnb2hA5G;hSboYLI<{ij^8Zbt5@<0hRlWz6`zbtG{1 zh>1D*iPgE&^V$l|N}ifHEuNn^KjFrUqVe`OR!>`U5F){Hn%cH_6MS#{f|uUV3FYV5MaDfuh&XT*=c=DthQ=f;-gj9#iX@Q(i61K&S2 z?*qTwKW|QSbS!uO4cEtZ#YaT*a*EzkwJNXm^!7jHx8ydBUD^JwF@+cAO>BSt{#DV} zEgLoVz=jjr56x=--kj*9SY-dw6Gm6Y-2(^P|2%VTEI$^xcJ$e6&uIUz(-UrNbA0mr z$o`SDW3`1_^4mYUcu@R>td+wbRYNJhY|m(<8O@|H{L7x+zC}BSIqXx&A3;s)eEDN5({^M3zMSn5Vj{U6i+bi5tl&$g6fEd3mmzI43fhoVf0ykrXBp zFK|!FbGOAPI9AZaNGw_u8kxp_OZnNJTsKk><)%6DdHgtYiMu-* zi{!b9=#L^1(sy$dYa}<3A91IPx?kTww3reHqh&K`$ zjk;czkoi~W=2DLZ?mTk9Pp=~I$?ixy*2eRq`^ZO(^xit!DT=yiD2H<~+^x{SIf=S1UQ%$4BAyPIea1d2QxOYraH$mU#y-YLm* zB^{;F#GO2sA1zkvy@^y}u9rU}5uyF$B_h#MDi@QDuosMr$5hxLqlj~~#TUm|b@D9@Sg9l!LBs^iN) zd~l5OLe==P!VbMJ6Z$(!k% zq81vN#cX^_B;n-c@NMZsOPxp}atfdDNAFLFERclgpcp`rL~H~-FQ?VoWSSIdsB}hR z*B=d3h z#c0`DKqFWE1V=5xS*v0&be8hpW>gd{$jVhnOgV0nhJliBr$_|k2g5uv(Vd7ahJJFL ze0Pjp=$HCc=uBtiH zUZ^T{Ui22e?{L+^zq^MPy7|S6P8xA&(T7K-mXuAnZAtl*L#zHUt#~cEcs;s!!+RgR zZG-bz>iqP#Zad%kVetj%;f?6w&FJAR=;1A%(|F-??%@l01}VoG(6Orv%B5RTq3SLt z`nnZ8HUX7PUB+icPtQGdg6m~#S7}3xGKtGmcX~$D(YR^h+Xho-}NUk_v_r0Xn z%W=MNl(0sA;r3t0)=t{A8Ztg$S zdE8+-FUJ|8?@niKtUi_GlX8-M-@$9ZuVXRMc9Q)D%Yhmv+3{UnIUA^TlAQ)CfHY4@ z8>|GjImvE=Rls&9*<-L8*x@954b}j4q+@Unu#wygE7;FHVNXOuO;BwM2xBzG-9fOTP3+a4c>1+a8Nyk9zPi>@Qum#vnItH>T z_mGakMZjLtF}N7mM>+@Sq=c~Z4NXOu7z<-mD!PkLbla9eRfM-a@;G4j2 zNXOt&;91f!cntV0=@>i?JV!b|P&(fNen&b6-v)k9ItJS7`3KT5_%84~=@@(u_#^2U zd>{A|=@|3^{iI{?1K=;D^FyWcL*TEZWAG#31=2D2G4MCiG587achWKVDe$6`{DA?@ z8-pR)C!kLiDTrTnH_KI*pbSZxzJrMUtIH=RoH|T}Er6^Pp~{b$C2bJDM(8W-v(IwEOP?ynV(5s+sqgO*)p&p|uC3Q6rRrdW@Q&%b{MQW~c?~Girs} zpnfC$e8(QB<7cE7-wPckIYD9{@ER_48NC*|0_rxp61ocNG1?DpjF6nsHPE$O>oYn4 zy$Yh1WwJT)e3^iHK`^d2a~wLYWw zLd{UW(fgq`sN-p+cPn%o_jMY50Qw-*Wpq3AA*kEv4yaw}8QlqWDLtdRplg+$(MO>^a<#bgzPc;6m-ARGkO4ei_$ad zhCZ$Ij2?tO2X*{X={*8{8R|6pQb1isUxB{LwQi%HfO?F+27QBTy+&UTsL$w|(4$=I zH+l?u9O~#(df$S+4RsoQ2l_75W%NDh`%t&h6HqVIWAp>)hfuH4kDwnzeMUcpo`m|1 z4nl{Zj$bLgpFux|I*p!!o`$-NegXXw>Ne_weg*Xy{WtV$sMqKj=r>TG(X-HRp?;&^ zL4SZc{#)t&KA=vc=b=Axt;^_7(A%JHqd!AmfO?Gjp}#=AMt_A~fclL72K^oCH+m5| z3|;?g(u+qJDXHjA0R}ZArJ9RT4B~pS+elkDa-bd~y^kUf>NU~}C<~xIqe5r|)NiC0 zfsTSYo>2-#&}gXB=s4(jsLN;!G#2VM8V8MsdWCs7py^PL(F|xN)N6DqGz;o8nhni?`i=BjpfafA zS*2GFRY09abD?=qmr*5@o=tj2r$MK4t;gsL=w0Nq*XT@W8zK9QlF%|j_8TpS+6me5 zTcvk4biL9uS^?dl^o&+QtDtV9)zBKK$LJjBT&UMbKNfTz)MvB~S`YObH8JL29woi! zlwLE`0(BbghW0>RMpr|BfVz#YgFXWF7o~ zJy567UC>vdE~C4luR+~LABMgT^%y+{JpuI^^+G>@`iy=E{Rrwe`Z4qqsN;`H@2Aj{ zP^ZyB=n&Lp^fTz^P`A-j(9=+l(J!E1LcK%OC3O9tNiQCAoDDIO z6R;A3NeOisMW73yZlfr)5$Z8wsovQH^%^Ob%}}3F0^--hlKn&}C4s(Fo{OP@mCA=+#ia(I{vu)bSUkR|J(qokpXf z3aHEIIA|`^ZFD>|59%=*1I>qejmAO?pgyB<&_bx+XgstC>iDbDn*c3_I*lemOQ0^J zNl+!!Z8RA=4eBwP0-X-^8cl`pdL;Xdra@;y{YEE1XF(k=C_N8a3UwM4LrJL1s03OD zbsL=sEr)uHPJ+&cdW}woRzQ75r$8&AexvEoDyZXcN^b_V8tOEf39W&;j828lfx3-m zLFYm}Mzf){P_NM(=sc*;s1#ZU^&6Ez>!FUnE4?Zx1$7!#Lp4yBQ7x2)x{bC$+o2w# z9Z((AYqS&E1@#%#Lk&>BQ6rRrI$l(IP0-~~r%^N10(BX+LTymD(QarD)MK<4+6VO- zy#{(M)Ms=BbS2bpbQN?p)NxqpwL|-%PNO$KZ-lyxZh+ndbsN1Ix)JIzx(T`&>NR=` z^j4_P=oaX0P`}aJp?5$X?f*r3ozOd>PNR20?}oaJ-UGcC>Na{G^nR$v=vL@9sMqKN z&Z*)KO0Mv1f((8sk4RsoQ2Kp@2W%MBQIjGy{^UxQd9;1h#$Dm%LhoS$1 z`i#B^Jp%O`eF^$9)N!rS`wG+pbsBvY`Wn<_^mXVPP`A-Hp+}(}qsO6dLA^%bhQ0&! z8GRS}9@KC2edr0ON0u;`VG`=^epsSsK@9z=yy=B(eI%@Kz&Bf zLw|(&js67v8S1!B>GeZ@fjW);3cUbz8T}3VJJfCTB6Jw~swf_377!;nyA*+bPF%&46Y?okpiZv!E`c+0Y!Q+o%*OgL;fApcK?=G#9Fd`i$m5HBi6Ne5e-cc!Sbg z0HvW$qlM5msLN;(v>oa;S`6)gdW@Dpbx^NSCA1UjGdd001@#-94%I^)Z&Z3`Kn+l* z(V0*q)Ma!Ql!3a9mO@QXk5Ll39O^Y%1~o%{M$4fVsNd*ps1@qCLFui4+MrIOmC$ae z%V-s}2kJJ`Pb%((dW_aU`=DNppf z7=0W%4(c`f1av&qXY@&E4AgJ*DQGOzakJ999~uXB8a)7whq{cqp$Sm8(Wjw_P><1P zph-}#(PyE_P@mC*&=jcO=yT9isN*e4@AJ?!sMF{R&VMlf*xlVCp@4>BIm|M;HIdS1-p z_^fM~^JW3-zJY576s0++6iU)ubOFkxd8jlhr1_`}a-D2%Au5NwvKvC+C-b6_nfZjs6G!VUw3TY5}2f5C+HyFK(yfg&8hk_K)`zVu!qJ}6+!_WsP zNyE{HD3?Z{k5D0vM2(Q^Vtb>|$H+^g(I+TKV^Cw1Nn=qH6s2*fDN53K)C}d)1k@ZA z(nQn(xvsW13AIFCnv7bZAZ5s*Oqzl|MNyiHK0`^GhFYUsnvU9_LYjfvBG=9KW}Wy4?+gpzMATO;zU!WkZM14^vtwQ}!lvbnuC`oJ3 z0F+B>(Lhv4>(C(Ndf482G#Ghl0~&&Ylu$sKv=I$OQQCxtp(Jfa!%;46K_gHhZABxI z>uG!2&?w}k?PxR#(hf8RWztSG7DZ_n8i$g!8;wV~^c9+b3TY3Th+Hq*`x;F`Uit=2 zMnTF^hB9d{nu4PAEt-mwv=2=~xwIcmM}_nqnt@zz+xs5PL|*y<%|b!?5fvx0C;f!} zL{a(~{e_bB3;G-7(y!443I(YnT8%QP6Iz3!)ETWs zN$P^upU)}un|hBhGgh3$Eike9lnjVMSx&?b~gJ<(XpM73ESNv<(%~ z7ic?jeQmEV+JU^(5A8%j>W_AzOd5c8qbLnTU!f!oLVHjy4Mtz1LK=d;L9U#X`%sidp#3OGBhhy#mqwxQQ6Y^+KOooN_Qs$ek(b7zpHPs-p`TGE zjYq$rC`~}Wq9jd3zoA^3gnmbbG#UMY+yL9lP=UNO1^tPFG!^}YGHC|-7e#3%`X5Tt zEc74RYdZKGzOXunIlXiMIuN;mHg^!>^;^Ak2s#u6=`eIS%A_OEktj+>p`%ffjzPzw zTsjUNj|%AobRu$tZ0{s=GV;)6nTClg>bAq9~n(&PGW(2c3&@={$5kDx^~A z0^|nUUTIVYd8sTahk|q=x(H=bc~k*KsUo@ZM^Gj`iXKBzdK^80 zlJq2c3gyz%s4gm`XVA0A4YR%H(DTSkFQ6AukX}MBqfDxY>Z2$%K(C-Ay^3B#x%4`E z0~OMn=q==i+uqyg9pt5V(R(OJ@1uq&lRiKnq9}cY8lfb8j6OlR)EG5Eh13)^LvDoa zHAgLwms+A$C`b-{iZbal)EY&p4Qh*$)DC@)a;ZJ)fC{N2>V(`#+v|+FAa6Rj58BS0 zUg`__@lq!BM*~ol2BJYINrTZ4luH2(MTImB4M%R2&5b}Kk(WlH(I`k`&{&j7e(qHIrfNrT?M-P>>Egm%lAImp$ol zR1!t$2y_5S(vj#uluJjUgHRzIjSfa`g6$oH4nbZz79EO$bQ(GiWzy;Bcod~G& zXQC5PE}ex=LWOiTIvKf%ws#>q4|(Y#bUq4Fc~lBzQU!DYic&>X8YSssR0ieJC8#Va zq)Smbva;bTulZThKMgO}4%2 zs50_W4Rk9CQcY9^Wl}9v6-B8wx(y}iPE-x$(j(|zR7j7ZI>=?V_XK(XdFd(i5DL;u z=xLNmFQd9BO7+k)C`t9vvnZDupyyB_y@H-cZi?-_ie5lodJVmZg5*$Rlu4hWCMZgu zp{6KFtx+?SOKnhdR7h=63*@HSUOUthdFgZ13I)ld_9&COqYfxaJy1uKq@Jh~%B5bY zGb*Iss0(t_Y_AXMioEm%>V|?8P+ycuLs35zrD3Q)O44vN0OisMG!PZiNHhq!>9#it z4MtuXjfS8gWoQh_q$y}Diqcf{I!e+s^ajeM>1aGEq=?=`ZiekGLT@22EkXkS3Mp=eaa{b8K%i zT7|rnq17lzQ_vceNmJ2U6s2is9ZJ%4v>xTs4733i(oB?)n`?Ws&_?8?FVQ9xq}gaQ z%A`4H3yRWQv=t?39@>U-X+GMH3TXk_f!sXXTZncdFGaKq1!)o5jWTI5`U*v93EG2_ zv=n`fa%ma*1{KnBlp{Ca_Ew<1sJrRlihOF~4P8Mml|+}@8^NRlP$d+l1JM;INe7`T zQ7+k4u0n-$2)Y`%1vYmmx(0daFmx>n(&6Yjlu1XR>rs@BL^q%$9ffX0xpXwT2^G>Y z=w{>=+TO9~7UZSlP-PUP(wK9l2cQOeL1 zl%%O>8p@^VXa*{znP?Vrt8DK}G#hzo4w{RCG!M;3nX~{cL{W-p5lYfxv;^hSQnU;e z(sHx{xz)C}60JgBT8-AAAgx8~P$sQM8&H%I+K7_032jEXv;}QNg|rQAM{bSn?La$` zmv*7uC`kLzew0byq3=z1 zM72;R)kb%sDBXqbMoGE{-HUSRK2!%4(*5WG=MF&!JC|mp((SQIOi8wkVU@q0dp2+M^CANgYuqluMma7gR`H zQ8(n0?RnH4d8r5LiGoyW2!DJY!k$zbl|fM|i^`!SU5GA1xl|riK!sEhU5wmD+q(o^ zio8?_U4ephCAtb_($(l16s2p?btp;KqZ?2z-H2{Ng>*Bz1-VVOR~g-kyi^5MMM1g^ zRYRF{JGui!sXD5Gl2jAbLb+5M-H8h6E_63?n{DqNbT9JKeW(r!(*5WGlt~YwhftIr zMvtH*J&GPfx%4=C0u|De=qcp3*xu8qF7nbd=vfq`=g{*glU_hCqA0zDUPei(hw7tT zYJgrrh4di5hNH*r>xmt-YA#GqdNS9Y#~iR6Zu%&PTQM=CL=FpXbK9_R5T4`(sVQf zMQJ9Qg_86onvHU44w{P!X&&l~+%DUjkDBt4d1(P^$FGneEkuzsGiec8jH0v>twKp! zk2auON@yc0q~Fl*$nCbh^Z(=b`+w|7rBD?Vqzh10lu4!0Z751*P&JgKvgme{OXbiV zsE{s1)sg$k_AWv-keAA%nkYyWP%V^66;W*zrHj#>C`p%~yHGA&ita{*bQ!t_xjnXb zIl32lsS>&m1?dV@2W8Tg=zbKXtIz`|Nmru>Q7&DB9zun5EqWNauWj!-^a%3O_2^MF zR63|+i3>Tn?~gMNwMQddWQ-z@A1P7Zm_(icQlf$}7Y`yU8Viv}hm^S3=)SQ_@jQ_d zml(asBXdezY78RJ6yoLqn2Cpzmm8ya1X;^1T{R1!;c~}%T5Wqq_n!L*Ba@#$I zyxQo+W65ibK|GGU)|iRMlh+xecmjF7F^MOVHyCsAB=SaMA)ZX$WORFN_Z0GGqZdyl zZ!rduM}KfL0nEhHE$xWn8Dte>63-;78gub1@-|~3o=sLWx^Hdw9P)Of7tbZ{Fb45F zvbr%7&nIgbqgaZpX-wh;WG!PZmL_W(3$YA&r_t@R-Lm9eMlY5l?=}W;44I6XIF{UK zjN&+QlQD_o$<4-GoIq|d7UD#5tI_SZ-AUv&qZcQW+l@iY$Q{N^oI>t2MsX^+%b3Jz z}kxzcgSAGD85VfHYV{svX3zr-zUE?7GguPuhIQvyC0DKj9&bR z9AFG$BXXcI6F(*g8Kd|KIoO!Q#^exVE;b>9u@IY*Lyhid+igY;GkUQ(Ioue;7UT$H zCblF;8l%{X9A!+RBS#x^@l$e)u@FBa#~R%)w%djrZ}ehYa)L34?Z}D7O#GajWQ<~a zaiyg@+#zO2&PBXe+ZMO?K-RQ-}N0lt`B?tEz+N({-*~Uz4O3pDxu^Bnn zn8fDfJYz1lAm47lIGo&POyUS~zcCj_lHVB%aTNKz(fwt+qsbqPUK~UIXbj?5@+V^^jw63I zMzQZ{{Nm@}-bA}pKXSG)7yFZQjD+nr8sF?w+Zxz!lNndCNOCe9+a8>3kH)siKi=HT8%yVR{@U1Kg*A)hf8VpZ~4 zqx;WJzKwj&=*4Q}^Tr_FPQGBw#5>3rjZv&lzGO^d4f17UF4iRL84Ix%S>Nay&tOsa@*|@cpCB64s}S;?5h>_z?pfr`MlYUC-eL^mIb>yHCZ20)M-dRnIrGds^UOZU zbrq+sU6tySGCx&XEVfijf(0&pWV}Vn_&7_v7Wo%P{{TXY_=E%v!BUoWm&qcz;>c@S zic`}AM?BYB-bn29hv<;kv0ZylQ)^yIZr2;SUf*$i$8ooG@(i_hNb2;2=u{#rL?_R` ztb^l<-%KizWycfN2~pp(D5+djsq2P|#wzPGF}Ccr_-x_1Ecq_cplnU@K2dhWI#rZS zt~=N&(mgxUGevsYq4ZrsxILbR3mTL@9MJS`cB_6`E7U^-yOw$EjYgN_3l7Yf= z`DG(eq&1f5)p{)|Je&$Jj5C$h`#Z1n(2QucY9{+6b{Er*Ki$Zw@6wArb| zZduq$OZiE796MU5y!m2yYTs0Aie0l?QJ}t_%1dXK)g5{{>ZR=Jo64nV;Q9NOHlnU4 z`OX%eez)F;r$u*Wl~vrDOhNlbOoP6zeV^P zrzcLfHTFDp`)Ir%?w}Vk@Av`F$#>3!O)R=IRRAcB=kFSUr=*dNCXLLL(l1QO*3i>$ zBqg(PWQQgZY4vNxY3%uaWK+@56F=%4r7og2N@ z^gBDIuIH^WbzzYd<1j$+w<+%OFSdSHBPQ;5G#zG!HT=v(ZH-tQO*t2i(+hVonktGZ3uf{vJpM{p9hd+R= zWa_KST0EE{M2V-}LksJd)DA5v+xgIALY5!)3@y4ly}WiX{Ern?$^C~t&n>;Xi}ypM z=+O65tluC4xoTk0FQC+9c;rZHQ+;(c;^pYOs>_Bxe2Yjjv8uYPY#9_)eXwlpN{^5y z4wiLXb)}T250=gI%oB~w)Qb+qre5TcYtD;ek9_Qv`o#xp6|K1J{l|t1QR>Mqex-hC z?ag?e!;Cl>1NST6Eh>b?2@agt?6yo;r{P4&%|jXj}f zZC&^8K^0i_N^;`tnvP6VZN&4tejDV8_@D)j$JDd-DD zz8kXI{=@$mzn@_jcr~NYRxHtD>76~jpKVt68JSW~vuin$|5!b5Z@5MtTT#|%W9N9e zTX?S8>hR3mn%=@PyjdNKut-=T6$a47WH^RGyfmFL??W7mNf2g|doJuSCiMb6aiL*=Q}o>#ZGk)hR|Z?_Lc zlj>DAOolw3Rb@k^&jY`%p2p>Nv81ef`E4RH>`A>?)C^V|U%E_)<(^|N-xwW4;{G}K z#KjJk$}wGZ^(^!EkZ0YVH~qbkGi$|gaexxR^R|ka&&to!7BhoZa){a#fA1)1Oda`Z19FUfjnno-22I%p;@amNCXVIl{b)Vxzb` zSMO`#>HOMiBav|}e6gX3T^h^Yva9!%isoJ~a_Z1sC6O+`qIb@hTWNZ5%IB%`dJ}ov z=gEEj%A~Cu5V5@;-c~mM^?{<*uJwe7RVoYh@@;_q_`}-QBWZfRe8W|{6f@r}?Q{|` z^E9mo_bli+j)QX}Jq_}CES3*!^ITQ=imX~y7WdXYG+?{lX^-J&>pL@qXzKa-_bgAZ zcNYnVXV1G|3U}Ev@4Y8-m#jf{>O%WzA{EvjuY1U&30FrN)pX}Vdpri)t)8{P*6GpM z1JdGCYr7fU?JAB+;7vMC=tDa2M!@<-c*$FuXJrXtI;^gvtB*^fFQN{0it zGrtAd!wxnPvTB)U+M)TNZw`%?1K)WxT2k(g_JPfkYWgct(BpJr82>s=Jh9A^{&9|Y zpsd%&pGsTcZ&VBoRxrc_J@|K7yH6jF7hccn#~0Vz`pm1`S>&UYP?uTax%I2Lom{`; zjmM~)Nwe42HG3UB{9D8)ojcCd_!Rwvbr7ASpIzrU_fuPQ8dqDg4bY zCYT+E)KAp(Q79dC9P8H$*~*!+u%)Jl<0fZYT4}aQ0fRXWeQUO2dMv_hTNsbUc$CIt zz*=axc}MbfYs5Q+!Izu3vy3d9Z3{3Y<0Aw)G5UrStPSDW6p6(x3oFP zqf+W=12I@w^pK=J(NPbN$Bf5Dc&s)a>*Mi&@o2?k(0D|f$&ppk(F|UvErr?0dX6lX z*=@-6N}HDy6JQ;c;xSJP2wluf6S~vtkh0P|gJk@zt|=`^g-;P^_h%yq64@*q z2}s>R`6G>5XE|(mgz6mei1p2%v$HI^7YWd-B-LA!nS|6P$cSgbnGUI_mS`N$i)S*N zh`CA_O045Zphc@B?%xt{n} zCTa@HOZ}8FaKq3^GRaMZK$s9UnFe^oa*!Sq%q&7uV~0jYgX}fQHZw>mxu|1Kw8f-E zB{oxPYQByVnkhOR=xsX`ScYH-Xk`?WQdvu>)Q?St%-&3;W%O-F9Wz0UU)-MX*Uhae zJC}PJGOQwNc1|~#7g|8eeCdjVTPI(hC63E?%G31FG+&+~7tJC}ZdyJ%7`P4c(cvJ` z_pOB(xgCuuJy)EgEvdB1>PRI8ziV~WMHIu}OSm$Pws9pXF;9CF33Sq4=U5Rl&(mP$ zR(pbV&2emsq@QbIrR;lNIMnzW%4mV58@j{PMqDbWqbRCW>NFs%T0}cjBQElatOe0Q zR9aIT7}}uZoH5Czr`TIz7>(H9Mq$(+YS6GZjq05mK~dC>^Ryzi^)yMb^0cJ_-2-(C z=pFvj&~(u~Xf%6>B&xG!gac`Fs!n>L;gxuSMtL+-4MQkv4T{Rs-WOz+dg2_rm_^#; z_JI1OZ3su*Xu^6!?!mZKa4rRU*VI%L=zaEx<@HIiRW8i6-hqpp9ylC=CT=52d0rlxlA1!dUcVOsgZl;p6}6)6VqX& zsEkONuS}~4z17Zv=g9diG~oj<3fMNHvwhSx9;@J+%8z8%l~(k6k{UiYw`8g^Ou0Mf44a2XZ4t{#2Q}U#M$K$$srDpR&6FhPp?l*AR<>lsOT@z}_CT!+W{PUE>4&sO7cH6Bxp$09sJ>DIz*l#w#xf`{=) zeMN<&J_aRgo{z~D+{}DTw%{VH6k*l$+$>+Zsl#m74HGT6NoK#;!sr*VsL$sPR6lJk zbkIx%y&%ocRFXyH3XA^|iH$6PK~2qiC#!-gsOsmQ%?hk}+6~beij5Z5@EL+WayZSQ>NpH9BMF)WV7rE2#S{e*uLbv=ObK6=-P}yB zubG^5G)T2@a=N1dO;c>p+5C7hu{muc+auAtN2NDNt&iyHT)fClvC^8)h@!eAi1Z#1 z)+I6}X+Vv(xse;1kv69(3G#59X1s7i5>pbm$E2eX5?q)d^4djLjm8>NtF^|o@?>AL zH$ycXOc1TxM&p~S%tkdYpcAoD#~zSK+>wY`qm?Gcy7>xcq1u>YBI0plN?y;*5Z;N* z=rMuF#Mr`0()XkJa0poqtR6D3nvmV(E-S5x4GHGDI4XgLCrChRra4Z0P0~rGw9Hh@ zrQ!x)@nHQ=5@;fZ-E2(6xC*HCR3W2eOPI!6sqdk}QWM@U?Tz%rc{CVWsa0W^who~t zxE~MH+yms|#a-k|bXxd3AdNCm!9|2I+A!Hb^;B51Z5X+!3^|BSb;aEzmYm9+Bw9nQ zHLsv&t^EpSBD^{cSRF8UPNJS&LvmD*6noNuvgyFcd zS{mcOup^0FSUA~=MBjo87?#F`p$Z5{s(jWVRt6FCZEjCWOUBSv&*&PcD9vqIlym?l z%WIm5sbGnfYjM_CV}PxZ-$nbw8(3k&<}lDpENS5)@0q$FZN#x*qV`C#*)EzRFUVGf zm2HQYl2j@lRPnM=GO~sXO6L4GMPrr!*WB06Jnsu~#<@KrFc!-7twfa>Y!4SGFp8302}w>i-!BJ*a$rBH8Nw$RgzeuQSv+zhhgawTtgL^iI_ zU?M(bbtQ4#EG{UHL}sJ5^yQ*3JKgpJdC>xv$HeI9SIRzNrxqRmcumT~Vl)zM*l@ec z#_0^Kgmj6S(Fr7JZ;~&MlbeXm1adJoJVq`?xN36I6(1nCG3Ei}CZqQv7cI6Du3oQ) zRw3+{Kxes@k=-oV72-!PN)e{;BHEO&y+}<;v%L%-QVT8VtjbkK3>j|KOE6H!Me}87 z05d70eHrC5RAj8)pqPj%p*C8?QE~XSY)tzo1OC=^MPmV*pqWt`q(+*7DVZ`+VoV9~ zCUrM2gD=ffA8PW6RD=2aVH$#V-uG%7PLl;OM~-M5vVn&uJy!WCn>mCWakuE?$2(!Nyqw6v$rk4A&4#} z*Re>U(R6@IoS<){g?l}l-&8m4l19qRLrqPYG2%qZjP|bkdBx9_M3o2aN6PGsR2xsM zpcG1odQ{ss!4n((^YE+KOqAVY6Yb z%c#wssMvBH#&u(?nB9oFl7EO{i=>KOLA^hmv~zfc;D4T4Cs2%q`04! z%dNB-fgG2_Ig+V?dIe21)S)I~aKnqfr@A*4LCn!fQnIa#$8(eHZEf4Bx%*o;gLjsd z#&aLqE$#1?Qa^=vvKzuJ#mMhgH)M(oVf9bS6vHj@luzx=5?#_y<4`MK&afv^TbTl< z`~`*8>>yd~_1|C@?L~Uni&A$(2v!<;>C=EE>Jf+NB@wgAA$p8Xg#;S5;SMgNY7+=sK@5ht|8sdHl6H|M#uA#GldM4s<2UYn(wisK_ zjZLiRArKZ~#j0gXab17ZJvMji8Dl5c@&(Gm7|fN_COYa;wxZqg2|-g2^-@bwV92>b zUDisp&8A%lQy87O>YKrxj6)RMXDQU5UaA(h5)VdA#5e>sOr%k3(YvuxRq^&Z*kL8Z zF=eXE*5VTNRBMrhK?hoZ3NJ7`!&>%B{cIQFQ? zjGEF`baU=}G4KTr z22<(6m)Qi@Q>b`q9wJ^b2*}?1Cu*wBOTd}W+k0xkRjB8 zTnNLzHCGIBda0%3FuMZM={}3@rc>%n-5v2TvQ6Cz3e82tc~dr30p`xxO`_9BIz{98 zb<_vD>F^0%(A+H*IGrqhP^B{!r~gR7A%Ey zH+t9*)gUIh$KVzeQJ!$G)m%w|h#VjndqPz0I2$Ep@OsWH=4tpqzHzPz zCEyejkxx+MqIil7{Y9$|p+!)Ii#8Zmb0}&zHZ+9Ox#bk<UaJ%|1ChNqO6gh8Q4TZZFQsOZOL}?pxZENLwf9`856*7ZhBNu~{r354MwthyR<7 z;$e{(#RZ+kb#jD><+Y=qLNdm^DYlh@&7@eY0$@+Hg}ndRt7X>s~UQ#XxkJjq|F?%T zE~U<7iJ*Z=c`g-Q&?g&HY;=M#szaBB4Imz!XbHlRVuN=fcpV2d5jM^ z&5_G#ngX}TVvLJa!F+*<$3mXE`%q8ZATU1Dwhx;TTpraa=QRC}oZ7-pC;^+#xZnVT z$fkY@HWnkFjVffJi4r7Rvw2U1GGiTpepEAaQY;Jm)1^Eu8+$Dz2d$P9!+JSlp*poo z3PZb(_>t9yEVQC>BbU%*e7@+69<5ux$Zq=&J>!sHM2gO92Fe0fc=@6Ws?ZmY+hyqb zBR6X?g^7>ePw)rx#R@TwPdDs!Z9Qm@e;s;BdmBy=M17{+9-*^1GRm;G2J&$w?KNZU zvCyUr`aj;nr_*p+pdQ0t+78fC>(EJqag-K&_Jz^NkSlqwq~=_Oc1m#Cn~SwB*_Dlk zh{#DJsgcE1TWC1r(_!q2@flCG#oUK7j$HV-*wiTU1T(dCbK)#61?{vUAA!&rI&CA+ zaVm{~j&yR5SsV?c$6QF;+{i(Qd06y+k-b}tqjf$Kx>){@y~wE#a@mA)N$2>SOFpVa zE^*|^xoko+8dHUyAy?yIQPdo*;j%aKUW!wjJZ(O0MAN}qp0)rnV(${*eQYWeTaDxW zO3dq|tskWyn-;b!%oxTQTu<#uWRsG6U-Zz{^D|C5o#>psWi%0#!(%Y;(`)TT*^Qm?NzMj0twp2qBUs5ik;b!BThawr_~x}!Vp$1 z=pq4~1!GEsTkN4)gS8?LdD_J2nTKHO%+n@CuY-_Je#8z!{GxFkWGvFe z-76~0$m|Rltxmg_NbMFjTs*40E5y_mXxE5E5h$?ca7U!lL9D8{LbPgVp;Mbkl)iW$ zt<|D_zCtw2H9Ct7^OgthWbmyDm;tvgt|_!G6hn3DE&2+Jn$cTam4r@(mx31cYHxuX zB<6h-eGBGIdOF>Q(5umGEc$VbmB!{GOadF&7@&e875kkL`@q=%M8Tp-E@jI&td1PH zlVr9L)G8aan;AF)6JQ`V6>UqwK&bPgA>0zQXJ6S#hmr(KSdHgqN# z#;qUYWgM}^yv$0#nN0$DB0K1!=&78>c$P?)e1tv0HlStz!fi&|0J=`0nL|HbsJ2k_ zWDG!#F05mx#nH9^JpelOEaRFlQo<>M(U5SPCt^~~jn4Q>greoaDyZRoj(kzW!>}4L zL0a5f=uSecA8D4CD9FMt;{+Pgk$sGPA-qc+a%_BP7B{Lm0(y>kW31g3og&wcp8^fz zxHn?w8b86z(HV3w_Jz<$QIsdCb=1Kn1nwnBWf@L$BsKJDUWsCj;y{#JJ(P}q1htW; zb!I!K`4ymx{-Z{l5oWD%YPJnrYeq7-^2WWVW*QA0bwp|(`bIBp)zgw435M~Yf$t~~ zgRimBls3b*8T%CIdGRjEvU7B(Bu{gotevlh{a-$4R$6>SI=-ruTc8yr+g?P^fkmey z7wO&5PqcHwqA$4Fg$z>Dq6m2!W))dfHPlxa7oqq%U=~-fUG&rrBD#JUp}2p;hbugr zf@*n?#}tTF#P_}Ov?N1IiO6gk7MJKQQ-za~r@1d~#zm)+sB!FEV~JB_rTt$+KCTXs zRnc`sQ+{HM{KTkywErNryiU=~VfdrQN?jF|gp3=#6{UpETB9MAuL;phbU}f;BWcbA zkQ(hh&u|%L-CA9HJ?Syv$h%r^qhRA|iH#@QMfwumbF!}^iCC}%~B?7A* z^G!Og;UuvmY*7aWh)%r?n}F8XCiogBmENoqx*(Kh*aY8_-OeZ6P%odp;d%=Coqa0; zxcGr2x%4(l9Q)Du>!SrBPEOf?XeWfPJ4Y1B#}hC=W7SA;*!(cM(5iq`OQQ^_mc|uI zj&@TY4w&Bpq=wD6Wht_uQY=+tRqDfLSCvRM(qf&i9w-WFWZ_i{++yR198bJ*fm;;y zq1B7Vs~564szDx_Z7oSlZi{hR2sL8M#iFm{^(KvlMls}SUXbzSUo6$AAEf}S(E?7Y z3uwxwsJ1bEwV}tSt%+6|502G{exaUBd#}+Gt^N=Px{v6RH0Orq0#^MyIt*)%V93ym z7Xy|ofzIffIIrq#*i+_fMUk&}s?@8+%yjbxDSfX*(pV+*waR@pCcf2cRN2+y(>lwK zyhitP=*}G$y=wh6VtaQt{B-(*0K3&5KN;4KlImN@pZ>r<8^(hFEQ7GMpy{hAWVKp4 zNL($JsE-DT&KXPKMfRlWB!VwOVX)F&s@b(-bV?EVVPi*wN71$7(uD9qq!2#n-*>IZ zv(_p93uWUk2?%}vU+V80g!3YP%~k0TTyZa23vHz69&!@-x`4ipp10DUBzWM9R_pvf z4H3ie%?W?MVdAWGu78^%+mxgUhS0x%9hgjru}bJ~1c3Dj(eVo1N7#rEqb;U4^lmyK znv~GjQD_4~=$Ec5SPSzdz5%PB-iv@_{Q(M3w)6MBmgCv>giKL;Zo;MzO1ArE(K0Do zTJ`-+Vu0#+i&zl}%Z!GlG}kcYAk|ZImvi*0x7FEOM6Y(I-az_k`l2`CP-$Tw%jtO? z{W0}XwGq!HYV@t5|Dc+}acOD__s`NuJC1cOS{hdBa`p4AqPr+o?QRp7h*EXuZDKI0 zKR8Y{Ol}I*35cc$c_=n$8$#;sZiv;Xdy)GJXV6U2X(SYi=l=q?m<$Kk)cZoLg)E-rDq_{$L zyG!)EsKAS-3xWTWbjQi?n`-_@v05H`L)952=F=W_(I~N4tW&9@MFEbb)D5FWrdY0~ zjutn-_vtYrQym>GZjL-(H%8!FcYmtAqeU~ddyE)e-`qXdYIe{4UB-%Ji&*XNH9^#s z!wrSz*d=;-d^HhYzuRqSUefO8S%58!{cr?y!1NZK0G|Hw&elCK@09OR>nDkKD7#Y% zMF(;pFBG>#4%6cK%SXmezCUiVcv&F#yQYZi<%ta{ZK~+mHgW`j`}XvO8UC8NSq@B< zYfj>(PZeXJjMS;3SI+~$Z-wr!RE`BG;+vJ~`UN6WepIQZ!fjAYvFK}L(VqNhrFwFKu*-0z+Pgr! zD7L7X_lVwbeD{b+a@X6c*}X`|aGQAWtw8^zd&PqyDfB5)x}I!dh_ zy(AJGIa%2s@vu`zcpRzyOB@ot!X*D^%2}Mwo3C-#r!`J(mZDqmUu+<6^CGYzzCMDl z?&4@+i*hd&%_Q9CP4{iM^`kFEB(GL~EEU_5%oCpS&1&1j;;smu+N>Hc6L&Q=Ll105 zc47~Nj&D}(Wuj}M8NOP*y-YmZW>*O{0L=~!=JOYPPd{h&U+~I6uWWI&hr~n8YA3o7NDxJs0$x{r#_<>?>QFOQ1r z>w7_=M}RV$mVVO`ZE$m1HPiSjPW3rW}a!(VTwhmWeupAdJ{FMpntp9o9I%a@pMqv@4Cfqs9#SDkzU zBaUk;qNn1x7bEX-dOo$)-(#J4RJ1ddzH7T#%7~?}+Ys^adJ*4&E5*M*Db^*K7E-lc zJ@J%yEGsgo#u>GaZVw4jPWYVPrEXX+u8_xmS1Z?xJbCJOwP(H9Zw?%|zHYoE%z+~j z-6HZ=GjIq!(;PU2IdH_hV+AH!eA=gIXF$u*_-81140VCc<5iY@I#w2BhhzD~4%Kg?xDFGv zMI~Z_`g5bm`R`)&P2!ZOq&KcpOG-ue|Nh3YQt^4T+M{|ddd1Kn*Pz>fY_n)1{!1*c za%>TI{{JzCkG6=<|Cw^-u9!>)0ml5~KbqOe*n*vUMOD2ZTKPLXF9wMl4P(2?sMB7k zNh5t!GEJGnG3n#C5sV2?#ExTLG6a|}g?9NNphPN;#+O7NS@D+to0r5i(V~J3=}B~S{c zB7Dn%Za8o8&-RPs;tr!&r_rNP^EgR8n_;Xc=n)$MFxQCctom6nk6*Zv&J*toUNmNe z(HGC|_LuJvk4m}bb#<&#Oj9rK5}U*t|DC(V!Z_hopS&hoz&ZOG)^M1y?!)a;uYck` zF)L1N@_$?@8VR}SEp^v!ak;<4+u})y0=`{^p<#op z7zac9RJX%$1N+n>a!c9ms?Hr2?SxC^REuHqz-tuNRc)&ljbw!he*zG}c0}AEkH4y> z9}(l_E_QpV^rHyFg6pWbI%UbLWVIQX>Ex@vhefX1bX3&MFq9oL`96s?C!(pD=S8~u z{HT~5wSQ@JbNJ~2o@<+H#hOZ#(QY;}KZmf$J4Owf@0{JOydR4>&SF}N*3}=Q1ztQd zhV@!0ys+e@uOi1TCx4?QpY4K}MP^KVt0y+5u{PKLpfs`RV5|X+H1Vys*qEO-phVMZ zMOB-Qi7e*}6jWE=O^%uAN_wuQKW0|R1HZ;X8}rg$v+^yWD9N=_H8McQXE8C?Qp}W# z#Z&`65w?aaC_GVLLk_-sVJ>G2KM`4N&QS3ZFIWllqW!{Rt8Iwu3{l+Fnq@RP{ENgj z%7Qh1Yz`|8F|idCgcns1mjAIaw;DoXV^$b3ThT^GY}6$bwf+TlxlYaeRP^{?>`nL& zeu{~J^TQw+YmS~x-$jx74ilU3mrC^~P0XY(@<{yw6PwW?nbg00-*`8R4&0=^+r&2X z4I`F738U{c96bX{$-<@0i$(IvlC{qKK^~nXP~Rj`8yQ8f`X7eS^upxPJ7L zZ>#Jt!~l8xZ8hl&F)hjbg{kU~{Gl(zy`pK9QK!7bhJR+CeMnPmE%NMhQ0`hu|2 zAE~xKiPrYx*fpcyE8=AUemg=BeMla(!Aw`8KJ-udNxYu$|M*9ll=Ba9<^P8?o2U+_ z#W(ehGR1U?rK9q zc20CnKN}{kB-(LuW=zIc2)%3RPiSP=0>oWxT+Vx!l^wHxvJ1haUP=8k?YSKI zNwxVKGyH!9gnm+U{uV9eiJ#Qkzr{#$|N2{8BV7I~&x=$kmivbZ*-Xk)2h|LVybdGL zUW5owQA-jsS8kqR9a>BLs9vd78h5^kS3 zIh|ZzoNU_0g^gb%GdL~5uHl>KW~!7ZJZcgR9l=}RA9GA z_rZACwXy3EB*P15%X}>p-`v5MmJh1;;$>43{$0H6*F74Eb{aV{N5Y%g7CJ`9);(?A zTIkd}5xpEz=Ur(vEgcg-vp%Z)I~y(7UWcQszJ$82;*w!yJG@`*6^PmrgI!)t`}?x5?91Euh>QFb ztB;dpme{KPN|Je44&^4x7V*a6fEt`En_+@7DOp~YLL2{h!+{MzwK-X?Le!oqcyWmu zks^l=FGa9U_dIEr16R6j)mZSs59i7Fb{a29y#~@1umrmej$Q&E1GVa}X>FCSVk7=?a)YH6TWeL5?hc6e?;S#hYZfIN}0%|q{Kt2TFSU5{SJ`{2~ z7M2`F$Z2)8P4?`uj-K84L$S!!i%cjXC^muIXtb>aUiG3)HW*b-&!uK8a&@l>y9j(H zkQ4b|GXtbUM_t{ z)YlnuM3WlP)Kgk@%S_#ZD^uuXZfg>w!ktZI$Dt7w3LZdX3;AzUNIUSbSPU-zMunZYc0Sgc+$J4W+`tRVM%yv&EnqKPw8VVYW`YKg_HIq#fxDSPrGBahCSsUhGwl$ zr$j$tcp_)?q*uI1Q#?&SZhGT{gS>g*2_000&E+*&B|lS~jG8mf&@bdc^GU1{aWvmt z-b*TJAs5T?U)6yY@8!%WNT~g9fQ+h4GpM9&^7+=fvm%SH7y*&I|o%@<@UQPLj8(9oe#5*7-95O-CJL?*iG$ z!39b|SKrByGxWdD&}sB2?CH#GDL2(VDt@t*Y_9sXk|S#c_!02BkY|5Y^V`UA^4LN3 zSsU5GUUI6It`D$>sq15>{O#MyS4H+&=o7o%wnEz(fl57zNctu4!1k^ezhkIZ{-)~W z%Hr0(KLBa^YI0~%MfF9`Ya<@mO!2CBa%I2Na+HxKs!|X9p_;ant8oUht)1*7PyDJv z?PLdefZb+UI@yEXUN1o&jP;=Dv6?;9f)R-X^3=Q_)-YDar{xux7B z|C$c+Ig5lKy|Wx|IbnF~Y5P%!q+vUTfP?CEXIVmb7M|)Nr?xJ_8()U`q4fQ&y3@A`PM;6>v%1N0neZpo>R)Hn(aX`k zUO%H6^pH3jG9NT5oaa^ zH_+v+nC4E?WESzr0%Qm70|l}TxzE9Mya9C-b~3*8m}pNb zIIb$Du{pZ;}nvm>cC& zwLD!CcQu~52}P+LIpt=V5&sa>pbIr4TQ>6dxmn(3k>PXdiQD8DjArL=lb7N*Jk{O_ z@@BPs1ga$Xgeo0@I)LZr<7ESKza1e9WYs#AcRMoXentf+$`3biB6Tr3oWh(s+*`Z$55^#>b?m;+Ssqgxi|AsrHU)J3Ue;e;; z;0Fj$BaKGN6-i{TXiU47__vP4ZxWEkpBimcaA35&g}CV$qoxYR$kwFgNn>Oy3}ugu z!H?LYdGs19Cz~!e4~%26&BH`>bSz4CYNcv1PPUifm1@v9c^Oh!G!DygzF(7xdii0T z94>dc4IMo`9y$uRNk>_!EwAU>Tv(kWn6(8L+R9Yv6J(oam8ry3o$Bpoi9K+}U_5;jwo7aMXKM&%%c<-lb*D9;E9o+VqW!?WZ|T{g(AuduZ6?^Ket)KX&enDU-&GnlsKme$u!pW9=j1mzikO z>hU`^O~9QyZSu6~cTcm=8#QavsA+RJPG2+5`2=;_9N8i%!eiBN>Sy zj%?Y@2W$*{6RrjBq-pa;O_?;-e&eKRbGmfxZf^^}V`hr$;99|Rr%X{5(`BwYKSy3h z9z)b+bI}>kQa8?(?J-GMG*@;?u1GRcem_a=oGW|CaFY5RuIQk;%#-P2q8czyb{oDV z+0cRqZWAPR^QhTVubMu6@__l{#>|~Fj!>J3dL)g^FSd1`@Q4_|^?lf!Mgh{jK z%v#WC_N+0TX3UyCXL`q3vo)}>n& zant62kEg1G^U=7^rmAyrlUk+Ov`qN-RUH<{mTAL*RMft3g?j1%c~#=n>0?QbOKn{s zN2xzo%a$tt9@#$o7@`b8)Mcn_dL_bjU|P+X)#7{P_qdod{a)Pa?x0rPi%~kfUcG;> zY>S5f$G!49Sz%Kl?N3b$#{zLfJI= zG??rR{OdxLAT!BGPfL6voQ!OCtHrHiI0fOkF`NS?F_HJX)Cwo2 z78D7;%m{a0;E@v(;Zj6s8pA!nu>!6F*NF)q1SSiQ2p}d)itu${>M0_87dTz(SK~1i z9I0nW7ndB9+p3{W8y*wA1i`WS+ZIVqEnFn~)QhD0I9{=H zD(@|li*XBY=mWA3oJSv!cU`f+kxjcEfquN(1};?ywH9iq$hlTtkD7l?OCLRI_PG2@ zd)Rw5M#rG^sdBh_U@=gR+r~cf%u5sv&D+FST$g`q}sXCF|DnHnVAW z;I(%6khy!+kN=XBg`OcrE*xVwS`U7V`BG?#5Uii3O3%p?qS(B&V}fW44u69uuMUV zI{L8el$4rf)0!g{ud2TciXW?n!s&e?g>VudiD#cS zeGbH<PJyTn_q=0UwI}k373B%x0GPkLDZrP{fULaY{1=#?H z;7{$cVAPy36OGJir(3Bn-7-J7duu~+TM&ngb|A9QA0Hi`-uU#yr#n7l{ROM!Y)id4 zIW}!H;8nh{RfpSaryRu23u1U`jt9;bh~~FH+YM z;rsENO{@;Ak?Wn^+u5``feY}VXc4ApvAn1jKUj-b)Z$gOcug&)>>~X}TEX1${^G0HLcF`4D$5o`RYDYM6Eoe@NNebG!S!Y|k2S88#f7Qa`EKdQym zF|58+^3r+{NxwuwR8Fz%DQ;I|i?L)098vCKxj-K4piKZa-O>Z;%(r%`vL9X;R38a|D1 z>RULTVY_WhWIK_ehL*^?bKmc7?s3}vXkHNgms(vZK znAbt&Z;&k=6E8P9zDP@q@Id5f6JZGPP1&H)18{>!H?flx^x)!<%eJ zA>X~=R`*bcH_F?Z^zUipB@Zt3qc*ryw0iz)HpxyxJgx32l|7wXd)YKQysO~SI7Ma} zKven{h9A8Wac7L0HfhY{abxYH=Gfb|?O@Ni!U%5y*MfMF_wJ>a@sHlU51*0fwj*H! z5SKJfanRkWOE=3K#ai|7X88x42cDDt>L2KB&3<&H!&D#MLVs1~dD+tudFwuS)BNcfxHNxy4lWr}e^vNA_ExHOweoqHU(Z@#~nFAO>0%Plh0dYXMUrh+!~bDg-fH2bcyyB_xO@nbRSN;Re7A2x1rln27>0 z34=WGaKqN(p32x6cG#aswtxCt;1f;Nz#n*n!25W_8i`4Gf#D_{WxG28~Y z2Z9&^fDq&`ybAanau{&FsA*q75Ys-umk_j(1nmbLhaiU60bfB7!yACFA&B8kz&8-Y zPzg8zK@4vJzJ(x$w*lWl4#PWu?;&T?tC}+2d1~>~rn@P|ofO8PU@G0PLO@EpJHZBC@5X4K61#2Wdz-R@= zfr3o&paf8eiRST1pfD4yEHTRIuIDHj8qYAs>29Vvpt>M0lMPf4dDVQwFFBD9qFp)C}a>LIN{E%|ULa7N9JUm&p!tfP75Zpq8KjQ!7ww zP>`t&sIAa?;9D+~D6M{T5g2BoA-6rqwUxp;fbu|YrjDRaAg}s3Ae%b_>`7}~EQs|W zQ$DC0D8zI*2y0(G%+wQvzD9RFPf1?^!m>wqGxY)W1$mitPyxut)DP4j6kr+vx)Kz0 zG7bb{Ijx77t^o}Kg_*7e4F@OR=7H`8 z1&QM3gU&-92Q2{HgP<_ey`cL*t``x}8Gk=;A<#`2zX&u;LLSotpv4IDF)aZ-2nsMg z1R9Q*L8gC!iVzlJS_--eVPU3+K{tb3+eyMQ&~lQ;95_Bt~`k36H5ugAQ zZFfA1m_a5FXe7cyOshd-Kw+lGK$AeOG7_jj6G3jKV$fQW$FvUphc+F7KE@|Ovp@l+ z^`N<+Ad?sLG+qobJp+0c6lN*`Z2-B-N#I71iv%)l0+o_Lrp=(mB#&t;`VZ}S1O^yi zKwuFGWZDMuAuPo7BIsd+g_*X4mVsO^k-#!gIbyn*UIM*L0-5}vM@b-41!xD!W7;LK zj@S(hGVVv<8=w%=>n4Sn-UPjcFxSf@u+k(q)7zjbgn60XG0DgDF6cdk1(@Ck1wlck z4?xZjfg#3^fCoTfrh}kEAeWy69tKr|+)PJ6M?qeuk3q*kKBiAWpMe5QA<*ZbAk!D1 zFF_%u37f?8b4e+NZ=p9y$EzOod*30@-m$P{RQ$dodul(1(^N@odffIg;7P;*d#sRbwt6lAi4orXtYuATQHW&9GGzY_Q!FwB9gKrez^0TTEqXgkQw|K~2igVlF+B;|4GJ(l1=<4&GOY*g z1%;Trpa3Y$^fc&Ikn1&)_be%RAJENM0@@GqGHn384)QT=1ib+YFl_?82?{cmf+|5F zrp=(YKw+lmKyQOw`$*sx&^sVE)BE^6740z4%UF%TBOo8sQP9Vr0MjwhC!iqHr=ZV3 zA*K-Mb5NM+3(%J!*M1Us9P|~)&Ga?s8<3ajgazZzw?H4`cL@9*6ks|D`T-PV`VsUK zD8zIM#C6E@2k11yT(6VBKS95M+)QUce}TMA=Ro&@d`y3Xoc93(jOT&(gFYaN!(#ph zYy*TiNPvcb!b}o06y$n?x)T&&stdXc6lAi2I$JfT z9%8Hq?1I2BQ+-fZkgJjerh_g4xtSV(E(Lj+8iH_atNWN5f$~8CrpBOdpdeEQs5>ac z)C6=n$QfpA3hV)Ny+s0>fqH`6OqrlwATLvM&=nvbQwvaUP=F~5)CUw~vV;19LQD>j z4hl16g9<<{=i4N(C9ogR&D09iALM0f4H^LQF|`3*2?{W^1q}oRnQ}l^fkI5VpsPV) zrgorfK(2R4UVG3Wkoz4cVF%!~KraX8fd+$oOdUbjfdWjOK-YtUOd~;~Kq02lpfR8@ z(^$|rkgJL$j0a5sxtS({CV{+FJpL2{Cj)&PI0ZBn6kwVLnhpvw%>c~=g_vf6W`n{^ zb3k)Ju6Ie`JkZ@BH`9F30+5&K9?-oY9|+^meZc#H0S;UUa)N?PF3=)Si0NU_GEkUl zIcNpQ^&Sa)1hf+5W^#j8fxJwQf;=D}(`wKfP=Lr8{}@mKgB(~4S_=v>Jq~&T6lPin zdJ^P%p9DSyS`TtFc|lKuyiCu4o(1`sNm!o) zDf&O{GoYI>guu^1UZyWVUxIv0$3b6#0!&|nz5xZ9PJq4zg_ynreGdvVodo>=avdOn zKZ1S&xtYQs=g&Yd<1fHpK|ZEapx;0Nrr$w-fPze?L4SfmOlLrUfx=8@LFYiOgCy{8 z(0R}*qPRG$4&oq=gCxijhw;b9XaypI9$<^)LnN;b zs4mFOWCPU$d70{i(m_6^2B3y<7=Hqcjew027-Y%-H35Z~nu3~v!c3W<<{;N$64(Ni z1#&alK@O0YDI3%hm#HggG|0zv31|!`z;r2SEGWoy8E70R2dEI_W9kW-3<@yy0!;x0nXUj$1%;S;gQkJPM|k|{1DpwzD`hjMH0!;lub3j3+0id~{5Yv^Qd7v=UK+xSF*T+2mTm_sDbbn0ZuLdmu zd6}*O-2?J54FcT@3NT#@x(^g&8VtH06k@s#v=9_#x*p^NxsH*98$d3Q8-(#^2yhY5 z%Yj2d4}g43!$6Bc0jA-gC7>YFji3iXA*P!^4}ro=UOEHHgTPNn;L{)hax*;xk{~aU zGyYki1?c0z5|9-XVA=qR0|l8jg5p6TrcIy(P?)I{ln8QtN&+{7l0a^z=RnCIFVhxK z3dqOg+zLzu1{j|QrGbJ>FM#TRLQLC0bwOb!AIJuBeMSOb1l0q%nYM%KgS<>-pmdOr zsT|Y*6kvME32X=qGQJFI1PU?vL5)FSrV3C7$Q2@iJ3vi9Zl;}}rXVlVE1+f|AJZ;S zCMdwP8`K;WWZGlH_|pOyV%&?sEKry!0J4KzpOe5>K@O0c=`~O`$jh`3)Dq-l+7D_4 z3NXD6Y7Gi9y$Nay3NgKF!}ya23^RJu(eSoF;1?wDY0ylNo9P+QERdJ!SrgG2{P=M(r z(1V~L)61ZTKp`eS=wF~PQw699?=S zpcSAX(;mlZl>2jkAl2R`#_#882@~X`+=(w7+`uG zv<4JpdIR(rD8%$8NP)skm7rpf>l+gI7HBQV&Ga_tagdkk9ncdXA5#@*9mpAAd>8m6 zFv#>C=qXT$>3z_8P?#wQ@`79^NZ<#cr$KI}4?)j>yi6Z~o(1`s4uDEP0j7hX4WOWt z@ept$FvN5ivwR?*y;{==z=nehb0MY zfATQGf&{rTI(?%!oYhZwJ6X+XIkf{`O z0u*A}4Eh!nW_k|v9mo|Xfm=Y|gWOD8K_@|8rsqLFfP73ZfPMr8n6_nN{QC(QWb`30 z3<@#52>KZmX4($=1?2jf1eSq*1-Y5ZL8m}ork6m!fqYCagMJ4EnEaqWKtZO8OpJf0 zfg#2n2>cTiX4(ll19JUB0(XPXf!s`cK!1b0OnX7+K`#=;;o6XB0eKuG|4&VK9d1Rr zw{aYlFt9rjq*Lio>244a6{V510~BZIhM}Ychi-TX=@`1<0SrQAu(8glM~`vN@qB;x zd%b_G>-v7KXYYNpH>@=qS<8(sM_$T>IIopTc~IT}X5tm_N)-NLdsm^WQ6%L<*PvLs z7F~y&bUnHOCDM)PCgi1?(Jd&IZbi4DOu8N2aj*UR&p&POPIwoGk#sk@2gTC8C_i%2 zeW(CRq=M*v|5sN}s|e zCZa@|geD^|O+iypYRWwaU0_Z}L5${d7XI7z=Arp0k`|zaD3%tX#mGrZ&{C90%g}P< zr4?u;N~Kk3HOeH1)}Zh|wzrnASdMit64#^mP%Ldg8DcgRcMqaRQz{fPd7GATnpp>U85{)~P>k@QdWD~hGx z(7%wAen)?xMEVo`W%n2_{u}-WrP6=V-zbx=$j^UH$j{(l8@v+bM3HnAx(vnA)#!5M zqW8|cRC*5eK$$cWg(w_pA9EBMgd%A)8jNCT z3>t#m$ldn*x3O?2OmsL74MScUkA|aEnt(>2Oqz}&6ppgN8E7Jkq?u?Eiltd-GIG*8 zXbMUY*Pq#ND)c&>gWg7|^e&o)GHD5lQ8?NLm!i2Sl9r))D3+F^`N&Bt&;pc5E73ya zO+lVja1l&(xEd`+nY0Nx6ppdM&1emZq%G)q6iZvt3&=^^&^nYz2hoejONY=)D3yZ4 z@MV~ZN6;%M9BYF|(H;~@XOKs+bQYaNPCAEPMTvACy@tH>4N6feT|yU8CVd;g0WchA zgWsVyP$YeizC^L~J9-^C=?~N&CDNbhP2{D&&_I+*|3<%{Oe#{~|DGEWj%P1-i2?!N zL9r*5Vw`yVPu1S(LfYQ{m@$|mYzcapMNbU z4uL~COr#Bk_`NQ~ptKR4M5(k1okE$k8J$MqL>t_K-bazN6@7qWX&d?wIcYoks1T3; ziMRuv;m}Jv(OHyA2|9-|X%{+=!bvu`8-0u-X%G4Y#nN8%DRR<2bO9yOew3oXiwEFE zm`VrHXDE{nq0dn`*#-}zFHj^ML0_U+I*PtRPCACZMu~JBeS^Go0$oBE17q$|T&Q?< zSf;a_=s|l{*%aHm43$HXbU7-IVksA@fShC>r6NkCJg5@#QeIRUrP39s3d*MF@%Ktt z6^2u7@G4XdMbg!%I*O%y=pp2!YtX|ek*-CLATM2qYM@lQ9@RvdbOWk|!ngJKdn2q3 zBgm6YP#qLYH>0}9Nw=VSD3NYO^^uouLk&Wq5xjKXlH4R%2T?_p5tYO-e{NeyXW8KMs5OeD7tu?6lvsKNy=sHfTc`$anMn5O)mP$Z2+qfji3Mq`kZ#-ed3k;bD5$V(BLh*D`13MRu$oC2q! zaJCJ;ji#YUnvQ0mSel7uAt$|qW}`%!gWg46iqTw@O7qZslt~NFLcSoi!Z|j$2rfpE zv;-|hv9t^=M^0LSR-!~&g;pakIkX0)(pt0*Wzu@|9tz*Jy$xt1zyJJz2jeEVnZsDx zg0>fJ&m40vD6WDLQd+8x}Zerin<{$bw@o=xzXJJp6>97~-jlzXC*a!7R zkrbjqD3%7JA;?KX(J+)q!_f%jrIBb9N~O_g49XCH{}>C$!Elicjz<$vBt>W@6fU*F`ltblq=u*wilxQ@YyzFw6g5MM)Eu=yUTTS2p;T&(+MrB& z6tzX+G8=phwL_8gIBJh#=?U~Ca?(?ax&C#4iTE^!&mb>#M4eD7bw*uKCUr&KP`KO% zyQ3Z`lAc99Q7rXBy^)jppuQ-P`Yq=A_Z;+Me+~zrRC)uwi85&*>dzHETw#N6A-;0F zqR9)>=Tq$A%3VdgR5=O!8sg8(i$`Z#nM_d8#!qmYQsO~CenKJ z9={kbZ9p4QDs4iWQ6_CcTT$q2ZyVaq??10IH12>qIgF(Q?Lto4jrO2K+KZ+jFYQBv z`K6`Oel(sxC7E;p9po*;HMVdF9Y&Gl(Mc4<;)n1f=%h2~EJ~zb(Qn901^(uK|2KnD zK~x)M(*39o3fJ0TAygMdQejjN#ZnPeAGts*3LC&gDux;&FBM0PP%4!`jZr3*L`_h* z&IU`NrYMq1qh=_U%An@RNo7$Bl&sVB?*Z5ndL2H9TA@@bhgzddDv#QraJ>yyK#!tG zs)*X6SgM2`Lr$uU+Mz_Mf*wbHy{>;%VSAYBuo`*-{UqhenWGptUTDZ*-kfA{V6WGw}-Y0b{tqhOZ*&hnOvl%gRgB?A8@_?8YK+7i$!f+}yos!C zbmGnAL&ikBg?!lP#aqcojH!4VStD0~Gx>I0(~iSUHhhPr-6HW$vbHf6?;`6Mop?7{ z*O-X+koAmSyqBzROvU_U17ik*tMlGRH#CQvZMXp0$QX$Q$;QT5yq|1hbYda0sWA}? zlg*4?EJ8LnreaaDg)tKyc_uK2TWoj@dDa+-YsquQSX@V*H#%`W`LQt(-y=UUdT|5! zsWBBdk{67bxQR@S;a2v ziaW`#jhUE`-x$MfHnfWjE}0{FH~FnG7Wa_f8J)P7{N9*|`^X=RUffUqXiUWe)41`nMSJHL$mvEe@-w({%rK_nOXN&r zCcaG0GKM?teP1EpF-GF6(Tiirb;eX2N3J(!;&}2sW4POfCy*PAkrRGFHYf5Fa;wpcQ^{?{R1EXw%#m>8m5sJEh}>li_ZSD0yN!`Jgxq6{ z#i8V0qZ5ab`?v+Xyis2+dcPfeaRhn5n2ICGgT_o8MIJJSd+mKklZTCwIEFl8jK#6! zQKJ*bk;jaQ7>uWno4q`NJYh`5i1fxxoJgKDhWl)I5_!rPiId6G##o#}zHfBmRPqC3 zBEC(2n9r`iUY>?Ovg1^oPM$Gl;tcYvG2Cy%Gs$ztNSsBUH^$;SNqdEcckm{T3cWNOUBx#UG-c)*6|k)IhOaX$IEF%}n)Ul^UZko?k^h>OUtj9y$! zex1**zp1 z{;r~ro5LeEyqY{=j6_FzV=S&APa2)LmON!l#C7CpqZikc?;BI`J@Nx%CT<{u56$6G z8{SBMWQ@d3nvWwA+b;+*ARIEpKGiG9avb!-nZXdZpKkolM z%#qxX}5>ECS-4;7n_oOjH%d+>}$-#=43x(c*2HTkk1*TKyFDt zZ;r)QiJ^fh=zfoO~l)!JLRU zkrjP9Et8PE@z6ZtOkVWSuC zCLb}T;yq*yVPJyG7!CWNl+C79i^wov~;Up3rrVJ*ms$|8E2MpDuRb OR+-xk+`g-R{r>=w_NY1l delta 49941 zcmcG%33yY*_y2!qlI|^}w3HS~n}n?_Wfu?-xCnwGih}#X4pI;h3b-dIYQd_(08_PU zkRphvfmTx$C1{l*C{YoMqDDnUMU9Gzg8F-(b8pg6`E1Ys`^P7p`0_-0&F$7AIW9xkt$Ii+!C!lc{>IXvrYG8yY|X1*wQUn3;&r#UA-n8u`1VJP zV_JzGB&aO+W@JtA-j=f?<M}l^{MXwhnHhUT#JW{zz#A!0<@!I+fDvGQK zYBsM#fUU$XYOE()6XFLIDHRLT zN2FWR?3&#Qp(DJHTyUNDhap#>h+~G{9xb9Zu83Rnrli=M>4HiSktOzYyymQ4;QS6H zT{o#iD#|;#$5j@&x!fD<-L`t|phtvs-|yAWm|5NY!qcsydG*;B*GQ4${p-?>qJ=m0 z>H_bXmtBOXrB@eL*It%NL9brX8GpaKqP1vA-ri1EUXh<;mqjupGTPXs9ug(^TZX?0 zdh%>rOYb9BPQeS}DtaORs_*cedi7#x$kMCR1%T3cYT^}mN}1%y%QjQWIyog??|#VKCc|V=n#;c}(f~s0F zV>spig_-AgpPzYJ_3792Lr^MituQss8!qb49YL?vd(Iw_YhSKYl-`6=_;OO|uK#TB3heUE}H| zWK~1;XYN)))-+TfU;4U`bq(HEZ+}A^^4`1b))t5Gj_pUGrRl+Upy~Pgq3VJ=(u6qb z?Q-X>Esiz~JzD+3ooj?#*5JLcY)RI#h9)n=|6ti3xvIgtY59^~5lYdaucBDLKm>A? zZO~7k^i+5hNo#BU5F+SBdijCs3s+ocw7YiJ5xC{`k}zymIy5;;>h)d9lUe_nPGHaP{6b7YcFA>#TUO#j&QL$Ets*I3Q%% ze(xI()?}4Yvhnp&w!eDiLrFqb?DsxcS<}jtUJ;WnQMQWx)zcqdD$jEx?arFkpBn-L z*|B|boLizt;@MWBACBkb5MZH&T zM>AOU3UU(cnvRTAZou=yy2%`+QZ7ET_j2 zE!+IcWj^8_@^)Hp&-#b=wg4{w zbdO1|zAo4M=K4``+r8B}kM~TJ_et;Q%?|J6&23sIPH59CQ6x%>H37;-`NgXvGZNAh zy$^04eu))cdo;t(YL~XxMe|rJ>oAg&3_tS9H6mHaFZ-l;BQs>WCHB_H43RFqKWuK< zj8Zb+e^P2*QP5Hi8z`*Rj;CrRW%a{n9;f;1wk>0&f3^4REu+b4v-Lu`akY2e){b)3 zYOmUQp=j`avvs^&waPoR`a*fg3%}mp*Q)KJw))HJ%SCkRlX`_{oVzAGdzuhOyepo& zs7G`zO8Dnoln_5%q7CnqTAFuWt<&2xaHc%C(z_@ynC8d81X;7vd-rn_09Vxxi%LA{ zZSR)aeD6EYugu6-bQao+Yr_3 zdXc4at{2%!aXzi9CvJN}c$d6**qi+F4LLiPBXT+?Ppx9NVEkCN#;aa-{38guK|yc5 zJlp$b?P?jKiEE7andjSiPv3q_y0>~uU%ALz7JR+gVSijt{M>uxjWobz8jK z>hfgG7VrCYXQiB2kBD9Mpuf7~YokQ_a(b^TVr`Tq`Z6T0ufiX0Dm|K}cjfEurlly{ zxv|GK#4Ogdfjs13NU4d>8}hn2o~!)cUw6JJH{V}fU4J9Z+}(F~#XNNR?)gGEyla0i z@P57LHqqKU=grSWqFpWH5n=DBP=~Bo;K+=`^aL8` zcY0l+0ixDh8=5S3R=0lpVS%W%?>v*glhVnvwY8^Yr0T+}w938t`>zMB-akc-y3HFaEss-w+#hQhP5&tddV(%&W1N_s z1@eR$@vg@Agnql%JLJG6&K$BlJtD&bHTA$YvFc>CeMowlgtroGFloN+T*hORMQE$>0 zi+Y59#T#qT^XwV+7P@9{rUzp_Sv;bqC#LCZABN~6eb2+*C%@<-S5;QO|3$JCN2{^TiG34ifd(sxBAK>GlXz^U;VCw_}u&T zcQcw-p;CHi+90S-s_yevU;X{L)@a9vE?QzkjrZlB&V+u*pO49P_j*tKJPU=LadZnB zCHEJ*m}y$QQa{`{I-$HY(tKMbWP4ZIt?e{Dk}%t8ZLitt$<#lF`qpd}^jHR?R2YvH zc$CIt(252rlE;Lz1G#Q#WBqgygsr+9g@N0u2l0YcueX+TwrKq=u!(g)`-B^P?AFef zptZlHR>ES&a|50?;u*%9)sau`KC7cGxreQe0&giE(Nq^>#a)O}bo{x&q0mZZWb6z2np@QJIV zXpPiU-Z5W?kuOZxmIm$!MrQN|w0?9}G3o#cEHYfp@XkK&EMW_kn)KYLS4)4nhjI-s zZerA%?X>jtG&xKTqY~^8PE9|qQNwAv6ONwhkm(sz3~p?y2iuuc{-D(<^_HVDgx(A> z(kTYjk;ArD%rs*=PL7E@a3T)dWofY*4Cb&O+9#J&3WoNg%K6T*>%q#TqP zsy^!ihYgRYCr2XO!*ElFTO8di-Yu7O^6vayFSP1Dq(>=H1^F5?l9ZlDndtOKw{&A{ zGU9kA{*miK%$35Zz-EplTG&Zc3-9&1RoTxC{gQGaL{IzhXB(wzXeSwDG#IH8|BMsDkV@+i6J7!h(a`eBHH zo81pX4iepKEx`otXhrF{6C9mL7xq{k=~T^cS{>LRF?G9&o7CtXXHg{$+xuTgzHAja@?iJ|rl<(n|{+6IMJ%>w)O8zQV$ux{WcthiR zMqK0_Sq<^~>Di67b7}#usD!LEdwZU24Mlxi7)^{uHWX7M)u7H(7S}1txKm_EidC#F zr!j=a4h$j3HS}+cAsQJTQSIkg&;g_!P4#SOEnXm70ON^T69yLQa-)y{vOzc z6Vsuz8oeFOZ6<1|X&$_H{auLi?}JuA*Abl+q`C392fpe2NQz!>#n>p*bItyjN_7G= z%+xJRx2D!%7RwvS;{gSm{kt(3gLTW1TmlN_fdmVKw&^rPbAo1Hj=jNBp=emmqR2GF z^C*I*u80VQ?W&$Q4C4y)aU+Q&4df3BJ(h%PP*>`;p{iwuVxUTk2x6nMQ^iGJ@r zaf=cx!OG&<-3XT9Yus*k7{%Y1V8@Ql34*&*z(g^WTAZ<1@a zjhOf>#oD-->0;w`c(HbYVPavVGkkPTf(!)gWK;QUux9Y)x!_^5DdEx1wq$_7ZiZ=;9R?Mb3Tr&xS*!J5=j(pl5q8ile(7`x_IvDze#csh8MD~~4thAaoB$!L%m;{v^`a-YJ0j6MZh#n6Zx(g@m+khU|7qY<;=b!?>6p>o;w&0*UY zS#brWGnB^ zZIEm)V9-EvouSpF9}>e4@@Qxm7mP{*`PAZEap;6mosI6LWEz77dMNr#0oNV$lvh7d z{lH=@UIT-yftV~asm~!ZSc*c=Xi;k@8Oo8b3#ys~WSr_BGYKS{ouMuAf_&9lSz&n5 z*%nJLo@--8BNh0MMMKFT#Aua&nR)btf99U{7mb{ACq&MXbP5kk0M*wWDD{ubBSGhu%&aKPZ= z9?2aJb_I7hC^UCC8+SO1jwxBE2}GyTp-K2)5+kH#Bn;;)n+vQ|KAS zphBiK_Z4SCXUSV8IM-x9^s1;2sbf__e~TLxN+O+TMZH{Al z6BkUd=vA2H6Jq%?Y5<0p(eI4%8C7Jg{!lSo91J_CHd+IcYVd1LSc#N@z`M;vD*>G# zLn;GOqus-lOqr-MEJ(abqgFBPDBOD1d{m_$B&9aHUXF~f>K5qG@W!z?#@!v(D?x4ap@xC|IC*4H@UWFKL zxy9LOgN_xWX74l{M=-PpkeFb_E`UbU2p2m^-&=e?4vH3> zjEyk8n9k*-7DN-61;-woS%Ykup&}?D8gOmTi1cP8`pCa3>>;XLn2})%?L0;Ec!Wf? zh~<%o>VKVt>*O^4yVCsiuS&y(;k^87iH!oW8D?>rHM@cq>bCzj*C(g(-(~tilECu< zo1SJ9xT4CJ0ej@Xs%qZqr(S^Fa!Rt<|DI_|!pyYGuv-45;+#6yu}q_<{8yPK>(s32 zrzz8E(M-E&O8oEB`2SMXW~NV;2mLokPji%tQ|efzc}CTrr;MY(MRGIsp_*79GPI87 zyZ=V($VM=$BDg$=J3>j(x=0v_9i4xh2pbsY%jUsebSyZzSpTL}bi^2~#)t*u4@5?X z%cBIOTUgLxxHL8!DKgCqw2u=VEB_~HaVZ*`5|kFrKv;gbVoB19@81?4p~hfCCgFco z)iiQqsJA#0u~&mZ?I;cDi8Q3Mp+ryWg>2DBSk(8~;?*;FD0UVNmltyRs3H>e2i$0O zYg`*qHdnEoj`^ywqSfJ+VrZ68eTjM*y_IQu5|P!w95DndU!z`Wrc1Qt!Fzd*7}@)j zNwLKs%dNC$h5}S2I8tev@CmYu*R&F2Tb}YYHKmmZVHrt+Qf<|2ahhcBWZO#fPT>4p zcn@I9%n!SZjw&{i{e^d&E#Yp2X=)x-;F!rHW;>Iy?oY;2ADaZ0fHzM}u*kYC>g#;b zE2|zyx&7pP1fyZ*z*+W;DsC&r$c<|QH?|dBMOJVvs-ZtZuw2%U5$sd71!Ay7%wG${ zKv#3fBwHH=ERvKHoCjFB+R)9c)C}YuT{{GEFDzF3dw5A_*!AeVbuhzGWxP_v0?MAM zYna05{W2@|3yo%{GgsOMK(pB;tT^>dp(sN0Hx!C#nLnU|n-@-K=R*HYjkSyOMnG|J ztdVKhe5?~E)h%pCZqkl1YmsD{lPb0v1ewz66T290$T>qzbcjw)+H5n0(M1Ej3`eCs zjPpa>>w;yvLTz-2J7Nm;2*UL&L!pK_#Soj(vWfO)IA35jyVohsgn@)=K^2{(nub2r zNw)I;tDeJ?47E$5Zr)G8i4BSsl)P+XTOpAv*cg(cLS1nkA}Y19x1OTK;)Yx9)~D!L z(caLQ4k9)7yUu9!{;=9nXwlC_#t8Kq&LJ|)3sz%zBZG#PInkhaLx;77wx+m@jRp`e z6i?yLOPYWBr;Vlr!WJwbpcY6j33arIYp&M9<68whGh&_<7HB36YHl)YMK+d7o!4IU zcl~&O?1a9R{x!hV7z_HNJq?Qidz!JuX1g6ic)8ozl8YxhtrQGT-jj0_(EyT6;|H() z(~R3WM(2UO&3k4rwSAbyC}CTFi$B2*g-z%nisAI>ARO&BqW{t*&2*Uk<#a>S?A_^f zL(=TrOFD=yc|5#?Q8GRWl~7S*ZziH%=pfor-~Xh8805f;2DOoeY{$x-#mlBJ8dKhi zUNfkp7~_gw+Ngzex(K3&A4ONl*TYc{Bil5Dq0n4J9Md|f39w*v=Ec@bbok7R%9sz1 zpx_feX&|xG;!xYLrg?YCWhuk3q#r|)>BG%c-eEv96NV#tgvyHTM-2M?EnM(qY{N>u zGjC?L!F?y}krb8abue6cT|&EPxYD)_Y&K~dw1{34&lnUogI%!*7!|7GBUCnmW%zPP z_h2*+Qww5ccM$IIGRhOKkL@E*td2tDqM7R{5RrrAV#}189d`<-GR(~lT7l`u;G<28 z))r|H_Bt$wDRNmNMMnL_nhv35s0uf2v901zv~GN87>C;B6zbzpD1Bq7npq@z3QM4( zNc<`LmOp?7Zf8%SD)G~E5PystJi#^G_H`9eWr%tNc6AjiL~;zTC>H0*D@;7mGyEv4H&dvbC{0^Feln)JF|Ez+}cyTo`mk+fW}vE z_Y@-vExOynOLWXG&C$O0bgDZB^jC}O+e>t6je4RzOR8TStJwO|h_Ou2yrvfQ61^~j z8;eKSl8yD#83P>lIeD0(#WhEY58j60N)E0ybsy2k3>p6Da4jri|WbfHF`5Hb33|;Xdu8!3c^JO*5)FVGG$| zG$A{APmnTWrQH_I%t?hT89~=sH79mONe;RuCx$kPs-aGukHXNoqkbd+2MEw?4|0i` zJlvbqN#*qs&QAZRXWW1h(W0{vPg$_2DSbq*4%m=M#GOp+qcz??- z7rQVAu@^&oUK%aH|NV(`>_8YZ5+6Qdi<7p=MYyXI%AKAw9ZDeMD&E7Dw%W8 zV4W|()16u0eA3hag{rr@XsfR!pA^#V6WTt*{v6z}#gRqs zL5rhh?CjUf-2Ywn#QBXCbjtii4@Z&9JkBNEfZ<&74F}{BR|Pnid3?uGrS%uBUGRxN zfu_^0=*5!j>C}bJpNq8{u;(0q2M6_st+WcOaV@4ER-v@%lzMzx*rYRK7$@h0w1??< z4$18m1GPu_*=1Y^@R$5$-btBo2Fmkr9i{xrI* zDU(!yZbyhgVl$qQmJ5j)`tYx!aV65RKBbF8b0mp0@V;3bbl)ns>8jV8ds$6s=z(t33Rbh1vmyT|n9Xb@DR@QMg@bjRyB@xf>m66rVxi0V8J&>$RLk8(muMQ?o=_f#k^eOZm53EY1q z7n~1vqZ&0jT4lxB+4`S+-Oj4U4i;^U>kHhzorl}Y1{?jeGj1LrH}=lMi^?`Q%?7q( zUlGR|&~q9fN&8?3SzuYQE8?td5T9%$45uaCX((V979i{F)?q8nbbT6QG68|BC?@z8Y?`s9D_wSW0MM< z7@2>VI!7~H<>67p=!nr9VU!p1x*=B~E{XG~V8#7PjfT`>jV}^pkZlI&rGKx{)NxX; zUN7teV(H*6DG#rjsU~zX7;SFUFotofp5aI$O`#;!Lqo;bbF5?z=h~jYE(k_uyh^g{ z92<2|tT~`PJrpFU;*jx|i__%dMU;o9(2+ZK!@Sd}_DBfZ|kaAO3$nQl!MYoAz1 zg{dIau_yvvqI49RT1&Trs2Oo1(O$?cY8QjF_YhrwA6~e!#z&59exYX3Ypm1`Tt$3~ zvRF$oYAG3+HBLG)H@YYu+0D3h8Z$$o`Z&u$W0zU!*xDGWaQ~)>{NyaiGGnNsl3*;?Xv*cAb@US5^6}9aB27yHsqskEbPS?gh5l8x>yd)m zs$&-k3B^rAxQa`)s>LcG$*8A|r0Ha$N6kXr$38fikNMDk2ShgdP#x7{c|ljR=zN$u z25%D(!_0T0xWk*=n8wZs`t}<08Z0#>#Kx94TEaQhgluD8=D@9>>o6#uxzvGM7W1Lyj>gL!sXo|tXzD7wdDoT0O3AfS>P zlV(C>6vdFMcrnM9>aoltV~hf@z6(M(xu$H2S{p{T4I@15U9{JDYHVQbj;|+E-y7?R zR*rZFbst}I9@JdWs((XA#9a}L*3c_%2P|7=ton=a|3=DlqC z78jo_2;IC*iSPPgVlpnhYPw~hW<@qN%wke6U!zu^B|dI;@W3my{KnJ_u?=eJD6zF5 z3_qRzAOIy#oQ;lwO3+V`{|R-$Xpx5Pnofz@F==U- zsq~QgbF`R})Vf^1K)Ez6nOhQF8 z{l(XTsf3ufguZ46Fq06Yu+ZIvIfR&Mg?^CU%_2nq68aH!?Rb%!T_2<*^mo{?^Oq|R z1|AqMtU{s$k4_NnQevf2Z;lrumF*&NPc$q)7M9kQnuIEw`nW9BD|f4pFA{^h)a`_T z4E=3#s8ne8gY4X z;;MQ)zZ3Pqz9D;5)vI2Yita5#6q>1jN=}l|Qk5H2>80X>rp=8CY^@ewCN`ZiVD#l; zVvA)}bOw}bd`&goP6s^CUoPxf|L_mKp^jWG3QrLbR0UU@DxfN;#+@=?;~VOMD^K;t zvY^_1rRXT@wyT3zi0e-&>(og?)_;@a8LH=1*q;j4tIMwvtK{aLDsq*$o_4fLt`@h8 zBkKFB#qdINqa2%s!*JiHJtj^ETUSLg*O{OnROe3=;}F+3Q7kl^eARQ3xKPxQSH605 zl9GAZBcTON0wI08-Y`a=IL+r-sojPx(=tl0%GsUIRL%c-(N}sXMANXpfcupYm zkIWM1%i71)53|IePSFDbm}IeEaWKolx0j-a1Q(Qusq*0e{!(vs&TKI#t$YJz+J@gh z={HGly~W3%eemQ}TYJZeYVDR~WrQziXFC83}6e zSvagvyHu~mB44iCrOt<&eVC%tS2$w>{ia>YwHV`haF<%USZql=PDvzqZ+fAvTC_yu zi{tA4C1RE=->v>!f?74)Jn#G$lLBL|7k7vh|0j5%k6s&A2W}8cMOa;Nqu8ERw-NdM zIqtlpW@DiECNU#%e9(vZ4*d{CFn)#&Z?DhhJrD}%OgNd?f!ZG0=w zy&1vXbw3;q#uj^P>{6r8ez{c4%&K{!iO8xa0+VhN&x=u}$U2I^A`|Gew`ugF(HupO zXjaAI)7V*q)Ru|;;<6ygr=JBt6Y>Uc!uc7k(%Yoz7W@|K>zj=+}q3Kzaqk4ZW1 zP1uSYn3dit4c}2sK%lzsPSHlf-3+%yEOInEhtz>P#WN}9`O&gXYUN#GVifB(so#OE z&Cse%W>KRr*KAS?%0%yEGyIU+Tqag@EMHH$sM%4i{rFq@^-mf-io9|$y4&D})RoJ{ z@+($Rl03gs?d_wwVZw=;el%8>nvN+sT1;KwzeX};pTGf_aTI2@%RV)1g}5Nuq;TK? ze1BTxn6bmikmUX`=U!|zCM_aUHQhZg#12()s~k5g;u+E1@qA3Z;}ag?SGnuOdFqvQB2T@sRuq^L2iUoc z-B23>Q9!$HaZ2dor zZC53Z%8D0N-g6B zZ>U3CP=Uu)+E&q80y}LLlYnJg#ZX{i*H$rCkpJm5qK!BnxTr=P5?2|5k73*)l|Dk_ zkD+0Q=@EN~(6MNa5d`LG2H#2J9G~=}(Fm~@_q-ff^PIR}$}e71FTW<{s*2~u2JuB; z*bCy;1QAi&w~GQeA8!}q^CG)2m?YU2)0ZA{H;jY{gf%sUMFQsp#exL!Ti~VFM2?WZ z?Na&+;`BhXo#J7M!foD#A^o`eWf$xfqo|2)UfiiSw~9N}@ZI82f#G3WY){X~pcP&k zr%pw~cOQ-iM(h!X6T~4^{Ep~C)6r$`h)2l%{T(qiYI5?1N7QPZ_pZ2F?x|CI-^Kjp zuTy#Z;CkxR#P=|Nt==bc)J#T9erLzvx+PJy?WgVPE*iKkYAA^_eA^r}(v^OptU!$0| zlVUcQG0~{;F<+#Zsrt^>;NaUllqS}F6Ay@%EuW^KjHW@$4~Rn7UlhH$ehtB$AjWn|q z=YAjxJHBBA#V>q$ZQi8BD-m~`pW>!Bu9{Kzr-*A53rl%vZ_I3kAtt_Ue6OwfP_!I! zf|@J+q_!wSWNNi03;ul+v&BghGA?h7P-=UTtC_ot#Pi9uqs#_vxhm#a`pxBD#kl^`}kjPbXPY zzso?E-idxzLh5_pGGY&)!9?mRhPX#9^{?MFLc8<%wf?q=xvVq#D<(FljdQ6#XJR@x zzW$JjZD<&gx;uv0D3VTn%N`@?y|mYb@LzTtJeanMq`qypvVI~)%9`D3%qL=Qiun_5 z8}|iX`9$0#TE`d-#U@nDLtXNz_~IYoH;QDJZgJppO5ozpL^lza;N72#F;=giV6QO>!uM~mxWL_% zcd2A_!4FIP+IIuz9TBf3{U86TnVNi5ob~@hnt7_(FXF2fMw#M)LyXDV^CMLV8O}J0Bg6TnAJyIT?et^n z{XaxOR(XU~p>dO>Dx#8)!=nC2fIp%xK92Q%ZA9I4TudVOqvPTn5egKY!0(fZgMrij z!rD^S?O%PNJWqsHuayr2)G#4iVm`T8$g|=2guJ+GJ$6+~u;b&x*6J&?r-)4-0W-w1 zxYWr<=(zWki~#|`$|2>v;jw6#eJzWfVzCngH2sVUID|c0Br!H4$*$o?7wXIuakdK& zTS#0(yOkmJ4$|pp#&ssr*ZdRp>#x&|tY|vz{2~=7Eo9EL$lk3&lu61PS%Kuz^{)E; z%5RaaB_i#y$TLwOn^k7F<5Zj$Iz`9LF50oQ&}p?<2HrweqpY&HQ#1p7!|YV@1y_oC z$ST{CkQeZhJ#JSzx@V33ijRb`qk&jS39|U4z3ZU~vQM+9EcCcxSTDH~WNFW6F=;|f zw!MW)w_9gBIR*u>4Hd0X+%pKN_KC7x8l^<#K{crh6J^nvwC`?D#;+M^(9 zjV*V>3pIvCzFnS;3xk>*CWrB!JK`cght*4ovQV5*A0^6SEKJgpWI>|2ci$sPwt;~$ zCP|)_W^VmEuzRQOPLeATwQVw9+^5b+mJ=o%gCw1jFqMsMwmy9At)ECL}B2!0=<}h^B0v(0gK}R*Z=7C+#sE$rg zksh0wQ@i<_Lk%h+RbCuDKu}XsWk-%;2%%#Lv`Iy(Y}b;HBybdgcA%V4I@kgYrONK8 zp1)INUNee;YO`CgiG?6sq%Sny!lqi>TXs#gvB@F!_)4L}4Qg3KEHxw=wKh$TN;fs% z(6_X7L*Kfj%YI$lA0XD>g_N0pUse0mLm4t}6!jGDNc6@bf(HB{AXlegf+GZB6UdE4 zJ4$d^eVQS&i%-yV#EeC*e%OR%?*opRKrXgwdNh-R)RJa0V^k%DdhmxtRm4LT0r^mf zFCI1%kPn4yWKdh0$?VB~dL|DF*hWA;1hw%{M?gLl5{!pE1mr^@_3^NepkDQ9E|M?@UtIeeY-TRB?+`SWQ zazej&O{RO4LN~jD6a8gu2D%Wb_Nn?#7xlbNj?N?1N6#6Rfu4fl3X_Iz!5tg)f!3Mw zvRLoDF;f`S?b=FE<7F7s%FE~g9poC;04 zjoIMA)fi?QREHMwf><7IX(98|<0Go|Eu_;Nhh*GbN#ju5T#0f;$DyBE$o-g-c4f)F zNi+{)GE~-V>1z=}71M-^F_``%|L3x0FPfge&Xy{J#z<6?6I=Y~hxfFUr%U$-s=lSX zBEAMO;>FkC;GDP`tjv+!FO1fp;E6E4)Ko5eTn!rX?6kKH4Mz(K+X4Je>ObmK<+s9I z(4YpilH)HRD<;ruiO^wr!8F?NHeK@8*%9X8?c$`E%{go>V&EeFXzB}g` z!|CWeIiPSOvR$lU(nG6ZmCFUj)}^sCSof29G!HZ25%p%CbX>g+anTU^-}sk=Sw>%m zu^1k>WTyMgFmiSJc^ue3dadD!o=G`+_3#+d?n^Tgucug+~P&nZ00CSh*l zfu#TEsEvp<9?r>I%bTcD+Q{4GvZLy`Hu4VO;C$JMaC*KRbKa_>^aeDWrqnqdzr;^N?jX`o=u2V0D2Rj)^nlF z!a6Nh7s{okww0Zwe}CZKw(?~mK2l=~WzT{yJv-=>7h^0QY<~;=NAgI42abJDsD}z= z|H8e;gPJb6Igp(q+-nqcp`E7mT>Y)%baXr!8!zMSazoQ|U3@e0mQ(n(4fq`rKmWAn zsJgtJoGv%-S3BCtZuX;GQE_!$^-Ek`Z~i5a(O&Kl&OL|*Gu~EW`$M2nw;__=2OdS( zXrkweUsa@otmxoA2FTD4{RW5DNYq~R{B_g=I~Ec3R7ZJc`ZAP}3{k0jj;Ry)>0cZ$ ztn4Iv$l9YS(n+>aA9a$MvWg+UfOJCdsvm_W7)w0U;}CnOvBh$*^#7smE|#s;z2zcV zttgV`po&%$%f9NNB6+%HnR|ySFP6OnOFGL<773y4iscMTt>LX_tU`N|8EwaewO@Tu zEUV~}fxEk$W4gI{Sd1bNdyXfN3qBJtF;Lh8-?C`oLFxG{HoBQ~H1K;bOcv7pw`$!7 z7whZYI|8DwtdU8(sD*bQSKIo@0dnI39TFbh%i_AYK?G*C%pn@2b!sIY7LvQU=RDl*W+3vXtJf87!|C z@2TQ5ko2zO>QZuz;LFuVXUJ9*=hrjjW#X_JHv~Tcl|TI4(<*5Aq`izOLe?4ZK&)>Z-F{gPp_9r4Y>1U z;My}~AFC|?EAZGTIZn{S(b4j1E4A~4v9gP-zb)V%EAJ6<^X+QsIB8cs&X>ESdzk^P z$I0o~QFV`#LuB1D6�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 Date: Fri, 24 Mar 2023 15:56:19 +0100 Subject: [PATCH 06/14] added single pool query (#4549) * added single pool query * added changelog * remove empty tests as they are invalid * removed sender and made reserved * remove and reserve unused sender * removed sender * actually remove sender * querygen * move impl to correct file * more flexible querygen * Update proto/osmosis/poolmanager/v1beta1/query.proto Co-authored-by: Matt, Park <45252226+mattverse@users.noreply.github.com> * Update proto/osmosis/poolmanager/v1beta1/query.proto Co-authored-by: Matt, Park <45252226+mattverse@users.noreply.github.com> * Update proto/osmosis/poolmanager/v1beta1/query.proto Co-authored-by: Matt, Park <45252226+mattverse@users.noreply.github.com> * Update proto/osmosis/poolmanager/v1beta1/query.proto Co-authored-by: Matt, Park <45252226+mattverse@users.noreply.github.com> * protos * added cli * fixed command parsing * single line * lint * fix cli * run proto gen * added whitelisted query * fix test for v15 --------- Co-authored-by: Matt, Park <45252226+mattverse@users.noreply.github.com> --- CHANGELOG.md | 3 + app/upgrades/v15/upgrade_test.go | 2 +- cmd/querygen/templates/grpcTemplate.go | 3 +- cmd/querygen/templates/grpc_template.tmpl | 2 +- cmd/querygen/templates/queryyml.go | 2 +- go.mod | 2 +- proto/osmosis/poolmanager/v1beta1/query.proto | 40 +- proto/osmosis/poolmanager/v1beta1/query.yml | 12 + .../poolmanager/v1beta1/swap_route.proto | 2 +- wasmbinding/stargate_whitelist.go | 2 + x/poolmanager/client/cli/cli_test.go | 38 +- x/poolmanager/client/cli/query.go | 38 +- x/poolmanager/client/cli/query_test.go | 58 +- x/poolmanager/client/grpc/grpc_query.go | 20 + x/poolmanager/client/query_proto_wrap.go | 22 +- x/poolmanager/client/queryproto/query.pb.go | 802 ++++++++++++++---- .../client/queryproto/query.pb.gw.go | 242 +++++- x/poolmanager/types/swap_route.pb.go | 20 +- 18 files changed, 1112 insertions(+), 198 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5f29ffe574..20c31825c70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Misc Improvements * [#4582](https://github.com/osmosis-labs/osmosis/pull/4582) Consistently generate build tags metadata, to return a comma-separated list without stray quotes. This affects the output from `version` CLI subcommand and server info API calls. + * [#4549](https://github.com/osmosis-labs/osmosis/pull/4549) Add single pool price estimate queries + +### API Breaks ### API breaks diff --git a/app/upgrades/v15/upgrade_test.go b/app/upgrades/v15/upgrade_test.go index a5452ee6b36..8d43c3ebb5e 100644 --- a/app/upgrades/v15/upgrade_test.go +++ b/app/upgrades/v15/upgrade_test.go @@ -201,7 +201,7 @@ func (suite *UpgradeTestSuite) TestSetICQParams() { v15.SetICQParams(suite.Ctx, suite.App.ICQKeeper) suite.Require().True(suite.App.ICQKeeper.IsHostEnabled(suite.Ctx)) - suite.Require().Len(suite.App.ICQKeeper.GetAllowQueries(suite.Ctx), 65) + suite.Require().Len(suite.App.ICQKeeper.GetAllowQueries(suite.Ctx), 67) } func (suite *UpgradeTestSuite) TestSetRateLimits() { diff --git a/cmd/querygen/templates/grpcTemplate.go b/cmd/querygen/templates/grpcTemplate.go index 0a112d58dd9..a0c129f7c0a 100644 --- a/cmd/querygen/templates/grpcTemplate.go +++ b/cmd/querygen/templates/grpcTemplate.go @@ -10,12 +10,13 @@ type GrpcTemplate struct { type GrpcQuery struct { QueryName string + Response string } func GrpcTemplateFromQueryYml(queryYml QueryYml) GrpcTemplate { GrpcQueries := []GrpcQuery{} for queryName := range queryYml.Queries { - GrpcQueries = append(GrpcQueries, GrpcQuery{QueryName: queryName}) + GrpcQueries = append(GrpcQueries, GrpcQuery{QueryName: queryName, Response: queryYml.Queries[queryName].ProtoWrapper.Response}) } sort.Slice(GrpcQueries, func(i, j int) bool { return GrpcQueries[i].QueryName > GrpcQueries[j].QueryName diff --git a/cmd/querygen/templates/grpc_template.tmpl b/cmd/querygen/templates/grpc_template.tmpl index 9007fb99e40..0b63645e478 100644 --- a/cmd/querygen/templates/grpc_template.tmpl +++ b/cmd/querygen/templates/grpc_template.tmpl @@ -24,7 +24,7 @@ var _ queryproto.QueryServer = Querier{} func (q Querier) {{.QueryName}}(grpcCtx context.Context, req *queryproto.{{.QueryName}}Request, -) (*queryproto.{{.QueryName}}Response, error) { +) ({{ if .Response }}{{.Response}}{{else}}*queryproto.{{.QueryName}}Response{{end}}, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } diff --git a/cmd/querygen/templates/queryyml.go b/cmd/querygen/templates/queryyml.go index bff18c3d8ea..1eaa0ef6588 100644 --- a/cmd/querygen/templates/queryyml.go +++ b/cmd/querygen/templates/queryyml.go @@ -33,7 +33,7 @@ type YmlQueryDescriptor struct { type ProtoWrapperDescriptor struct { DefaultValues map[string]string `yaml:"default_values"` QueryFunc string `yaml:"query_func"` - Response string + Response string `yaml:"response"` } type CliDescriptor struct{} diff --git a/go.mod b/go.mod index 69bf5873ba4..9b3248ee032 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( github.com/CosmWasm/wasmd v0.30.0 github.com/cosmos/cosmos-proto v1.0.0-alpha8 - github.com/cosmos/cosmos-sdk v0.47.0 + github.com/cosmos/cosmos-sdk v0.47.1 github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/ibc-go/v4 v4.3.0 github.com/gogo/protobuf v1.3.3 diff --git a/proto/osmosis/poolmanager/v1beta1/query.proto b/proto/osmosis/poolmanager/v1beta1/query.proto index e2b784a3961..a71152f1707 100644 --- a/proto/osmosis/poolmanager/v1beta1/query.proto +++ b/proto/osmosis/poolmanager/v1beta1/query.proto @@ -24,14 +24,28 @@ service Query { rpc EstimateSwapExactAmountIn(EstimateSwapExactAmountInRequest) returns (EstimateSwapExactAmountInResponse) { option (google.api.http).get = - "/osmosis/gamm/v1beta1/{pool_id}/estimate/swap_exact_amount_in"; + "/osmosis/poolmanager/v1beta1/{pool_id}/estimate/swap_exact_amount_in"; + } + + rpc EstimateSinglePoolSwapExactAmountIn( + EstimateSinglePoolSwapExactAmountInRequest) + returns (EstimateSwapExactAmountInResponse) { + option (google.api.http).get = + "/osmosis/poolmanager/v1beta1/{pool_id}/estimate/single_pool_swap_exact_amount_in"; } // Estimates swap amount in given out. rpc EstimateSwapExactAmountOut(EstimateSwapExactAmountOutRequest) returns (EstimateSwapExactAmountOutResponse) { option (google.api.http).get = - "/osmosis/gamm/v1beta1/{pool_id}/estimate/swap_exact_amount_out"; + "/osmosis/poolmanager/v1beta1/{pool_id}/estimate/swap_exact_amount_out"; + } + + rpc EstimateSinglePoolSwapExactAmountOut( + EstimateSinglePoolSwapExactAmountOutRequest) + returns (EstimateSwapExactAmountOutResponse) { + option (google.api.http).get = + "/osmosis/poolmanager/v1beta1/{pool_id}/estimate_out/single_pool_swap_exact_amount_out"; } // Returns the total number of pools existing in Osmosis. @@ -64,8 +78,8 @@ message ParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } //=============================== EstimateSwapExactAmountIn message EstimateSwapExactAmountInRequest { - // TODO: CHANGE THIS TO RESERVED IN A PATCH RELEASE - string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ]; + reserved 1; + reserved "sender"; uint64 pool_id = 2 [ (gogoproto.moretags) = "yaml:\"pool_id\"" ]; string token_in = 3 [ (gogoproto.moretags) = "yaml:\"token_in\"" ]; repeated SwapAmountInRoute routes = 4 [ @@ -74,6 +88,13 @@ message EstimateSwapExactAmountInRequest { ]; } +message EstimateSinglePoolSwapExactAmountInRequest { + uint64 pool_id = 1 [ (gogoproto.moretags) = "yaml:\"pool_id\"" ]; + string token_in = 2 [ (gogoproto.moretags) = "yaml:\"token_in\"" ]; + string token_out_denom = 3 + [ (gogoproto.moretags) = "yaml:\"token_out_denom\"" ]; +} + message EstimateSwapExactAmountInResponse { string token_out_amount = 1 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", @@ -84,8 +105,8 @@ message EstimateSwapExactAmountInResponse { //=============================== EstimateSwapExactAmountOut message EstimateSwapExactAmountOutRequest { - // TODO: CHANGE THIS TO RESERVED IN A PATCH RELEASE - string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ]; + reserved 1; + reserved "sender"; uint64 pool_id = 2 [ (gogoproto.moretags) = "yaml:\"pool_id\"" ]; repeated SwapAmountOutRoute routes = 3 [ (gogoproto.moretags) = "yaml:\"routes\"", @@ -94,6 +115,13 @@ message EstimateSwapExactAmountOutRequest { string token_out = 4 [ (gogoproto.moretags) = "yaml:\"token_out\"" ]; } +message EstimateSinglePoolSwapExactAmountOutRequest { + uint64 pool_id = 1 [ (gogoproto.moretags) = "yaml:\"pool_id\"" ]; + string token_in_denom = 2 + [ (gogoproto.moretags) = "yaml:\"token_in_denom\"" ]; + string token_out = 3 [ (gogoproto.moretags) = "yaml:\"token_out\"" ]; +} + message EstimateSwapExactAmountOutResponse { string token_in_amount = 1 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", diff --git a/proto/osmosis/poolmanager/v1beta1/query.yml b/proto/osmosis/poolmanager/v1beta1/query.yml index a69ac9ba17c..4321837be25 100644 --- a/proto/osmosis/poolmanager/v1beta1/query.yml +++ b/proto/osmosis/poolmanager/v1beta1/query.yml @@ -18,6 +18,18 @@ queries: query_func: "k.EstimateSwapExactAmountOut" cli: cmd: "EstimateSwapExactAmountOut" + EstimateSinglePoolSwapExactAmountIn: + proto_wrapper: + query_func: "k.EstimateSinglePoolSwapExactAmountIn" + response: "*queryproto.EstimateSwapExactAmountInResponse" + cli: + cmd: "EstimateSinglePoolSwapExactAmountIn" + EstimateSinglePoolSwapExactAmountOut: + proto_wrapper: + query_func: "k.EstimateSinglePoolSwapExactAmountOutTEST" + response: "*queryproto.EstimateSwapExactAmountOutResponse" + cli: + cmd: "EstimateSinglePoolSwapExactAmountOut" NumPools: proto_wrapper: query_func: "k.NumPools" diff --git a/proto/osmosis/poolmanager/v1beta1/swap_route.proto b/proto/osmosis/poolmanager/v1beta1/swap_route.proto index 6e6b52e1044..78d6984ff41 100644 --- a/proto/osmosis/poolmanager/v1beta1/swap_route.proto +++ b/proto/osmosis/poolmanager/v1beta1/swap_route.proto @@ -14,5 +14,5 @@ message SwapAmountInRoute { message SwapAmountOutRoute { uint64 pool_id = 1 [ (gogoproto.moretags) = "yaml:\"pool_id\"" ]; string token_in_denom = 2 - [ (gogoproto.moretags) = "yaml:\"token_out_denom\"" ]; + [ (gogoproto.moretags) = "yaml:\"token_in_denom\"" ]; } diff --git a/wasmbinding/stargate_whitelist.go b/wasmbinding/stargate_whitelist.go index 47d4fbf6018..29c6999f525 100644 --- a/wasmbinding/stargate_whitelist.go +++ b/wasmbinding/stargate_whitelist.go @@ -126,6 +126,8 @@ func init() { setWhitelistedQuery("/osmosis.poolmanager.v1beta1.Query/NumPools", &poolmanagerqueryproto.NumPoolsResponse{}) setWhitelistedQuery("/osmosis.poolmanager.v1beta1.Query/EstimateSwapExactAmountIn", &poolmanagerqueryproto.EstimateSwapExactAmountInResponse{}) setWhitelistedQuery("/osmosis.poolmanager.v1beta1.Query/EstimateSwapExactAmountOut", &poolmanagerqueryproto.EstimateSwapExactAmountOutRequest{}) + setWhitelistedQuery("/osmosis.poolmanager.v1beta1.Query/EstimateSinglePoolSwapExactAmountIn", &poolmanagerqueryproto.EstimateSwapExactAmountInResponse{}) + setWhitelistedQuery("/osmosis.poolmanager.v1beta1.Query/EstimateSinglePoolSwapExactAmountOut", &poolmanagerqueryproto.EstimateSwapExactAmountOutRequest{}) // txfees setWhitelistedQuery("/osmosis.txfees.v1beta1.Query/FeeTokens", &txfeestypes.QueryFeeTokensResponse{}) diff --git a/x/poolmanager/client/cli/cli_test.go b/x/poolmanager/client/cli/cli_test.go index cff4bd45458..c4e93a3f0d2 100644 --- a/x/poolmanager/client/cli/cli_test.go +++ b/x/poolmanager/client/cli/cli_test.go @@ -199,9 +199,8 @@ func TestGetCmdEstimateSwapExactAmountIn(t *testing.T) { desc, _ := cli.GetCmdEstimateSwapExactAmountIn() tcs := map[string]osmocli.QueryCliTestCase[*queryproto.EstimateSwapExactAmountInRequest]{ "basic test": { - Cmd: "1 osm11vmx8jtggpd9u7qr0t8vxclycz85u925sazglr7 10stake --swap-route-pool-ids=2 --swap-route-denoms=node0token", + Cmd: "1 10stake --swap-route-pool-ids=2 --swap-route-denoms=node0token", ExpectedQuery: &queryproto.EstimateSwapExactAmountInRequest{ - Sender: "osm11vmx8jtggpd9u7qr0t8vxclycz85u925sazglr7", PoolId: 1, TokenIn: "10stake", Routes: []types.SwapAmountInRoute{{PoolId: 2, TokenOutDenom: "node0token"}}, @@ -210,13 +209,13 @@ func TestGetCmdEstimateSwapExactAmountIn(t *testing.T) { } osmocli.RunQueryTestCases(t, desc, tcs) } + func TestGetCmdEstimateSwapExactAmountOut(t *testing.T) { desc, _ := cli.GetCmdEstimateSwapExactAmountOut() tcs := map[string]osmocli.QueryCliTestCase[*queryproto.EstimateSwapExactAmountOutRequest]{ "basic test": { - Cmd: "1 osm11vmx8jtggpd9u7qr0t8vxclycz85u925sazglr7 10stake --swap-route-pool-ids=2 --swap-route-denoms=node0token", + Cmd: "1 10stake --swap-route-pool-ids=2 --swap-route-denoms=node0token", ExpectedQuery: &queryproto.EstimateSwapExactAmountOutRequest{ - Sender: "osm11vmx8jtggpd9u7qr0t8vxclycz85u925sazglr7", PoolId: 1, TokenOut: "10stake", Routes: []types.SwapAmountOutRoute{{PoolId: 2, TokenInDenom: "node0token"}}, @@ -225,6 +224,37 @@ func TestGetCmdEstimateSwapExactAmountOut(t *testing.T) { } osmocli.RunQueryTestCases(t, desc, tcs) } + +func TestGetCmdEstimateSinglePoolSwapExactAmountIn(t *testing.T) { + desc, _ := cli.GetCmdEstimateSinglePoolSwapExactAmountIn() + tcs := map[string]osmocli.QueryCliTestCase[*queryproto.EstimateSinglePoolSwapExactAmountInRequest]{ + "basic test": { + Cmd: "1 10stake node0token", + ExpectedQuery: &queryproto.EstimateSinglePoolSwapExactAmountInRequest{ + PoolId: 1, + TokenIn: "10stake", + TokenOutDenom: "node0token", + }, + }, + } + osmocli.RunQueryTestCases(t, desc, tcs) +} + +func TestGetCmdEstimateSinglePoolSwapExactAmountOut(t *testing.T) { + desc, _ := cli.GetCmdEstimateSinglePoolSwapExactAmountOut() + tcs := map[string]osmocli.QueryCliTestCase[*queryproto.EstimateSinglePoolSwapExactAmountOutRequest]{ + "basic test": { + Cmd: "1 node0token 10stake", + ExpectedQuery: &queryproto.EstimateSinglePoolSwapExactAmountOutRequest{ + PoolId: 1, + TokenInDenom: "node0token", + TokenOut: "10stake", + }, + }, + } + osmocli.RunQueryTestCases(t, desc, tcs) +} + func (s *IntegrationTestSuite) TestNewCreatePoolCmd() { val := s.network.Validators[0] diff --git a/x/poolmanager/client/cli/query.go b/x/poolmanager/client/cli/query.go index 73706444699..387f6406b0f 100644 --- a/x/poolmanager/client/cli/query.go +++ b/x/poolmanager/client/cli/query.go @@ -23,6 +23,8 @@ func GetQueryCmd() *cobra.Command { osmocli.AddQueryCmd(cmd, queryproto.NewQueryClient, GetCmdNumPools) osmocli.AddQueryCmd(cmd, queryproto.NewQueryClient, GetCmdEstimateSwapExactAmountIn) osmocli.AddQueryCmd(cmd, queryproto.NewQueryClient, GetCmdEstimateSwapExactAmountOut) + osmocli.AddQueryCmd(cmd, queryproto.NewQueryClient, GetCmdEstimateSinglePoolSwapExactAmountIn) + osmocli.AddQueryCmd(cmd, queryproto.NewQueryClient, GetCmdEstimateSinglePoolSwapExactAmountOut) osmocli.AddQueryCmd(cmd, queryproto.NewQueryClient, GetCmdSpotPrice) return cmd @@ -31,10 +33,10 @@ func GetQueryCmd() *cobra.Command { // GetCmdEstimateSwapExactAmountIn returns estimation of output coin when amount of x token input. func GetCmdEstimateSwapExactAmountIn() (*osmocli.QueryDescriptor, *queryproto.EstimateSwapExactAmountInRequest) { return &osmocli.QueryDescriptor{ - Use: "estimate-swap-exact-amount-in ", + Use: "estimate-swap-exact-amount-in ", Short: "Query estimate-swap-exact-amount-in", Long: `Query estimate-swap-exact-amount-in.{{.ExampleHeader}} -{{.CommandPrefix}} estimate-swap-exact-amount-in 1 osm11vmx8jtggpd9u7qr0t8vxclycz85u925sazglr7 1000stake --swap-route-pool-ids=2 --swap-route-pool-ids=3`, +{{.CommandPrefix}} estimate-swap-exact-amount-in 1 1000stake --swap-route-pool-ids=2 --swap-route-pool-ids=3`, ParseQuery: EstimateSwapExactAmountInParseArgs, Flags: osmocli.FlagDesc{RequiredFlags: []*flag.FlagSet{FlagSetMultihopSwapRoutes()}}, QueryFnName: "EstimateSwapExactAmountIn", @@ -45,10 +47,10 @@ func GetCmdEstimateSwapExactAmountIn() (*osmocli.QueryDescriptor, *queryproto.Es // GetCmdEstimateSwapExactAmountOut returns estimation of input coin to get exact amount of x token output. func GetCmdEstimateSwapExactAmountOut() (*osmocli.QueryDescriptor, *queryproto.EstimateSwapExactAmountOutRequest) { return &osmocli.QueryDescriptor{ - Use: "estimate-swap-exact-amount-out ", + Use: "estimate-swap-exact-amount-out ", Short: "Query estimate-swap-exact-amount-out", Long: `Query estimate-swap-exact-amount-out.{{.ExampleHeader}} -{{.CommandPrefix}} estimate-swap-exact-amount-out 1 osm11vmx8jtggpd9u7qr0t8vxclycz85u925sazglr7 1000stake --swap-route-pool-ids=2 --swap-route-pool-ids=3`, +{{.CommandPrefix}} estimate-swap-exact-amount-out 1 1000stake --swap-route-pool-ids=2 --swap-route-pool-ids=3`, ParseQuery: EstimateSwapExactAmountOutParseArgs, Flags: osmocli.FlagDesc{RequiredFlags: []*flag.FlagSet{FlagSetMultihopSwapRoutes()}}, QueryFnName: "EstimateSwapExactAmountOut", @@ -95,9 +97,8 @@ func EstimateSwapExactAmountInParseArgs(args []string, fs *flag.FlagSet) (proto. } return &queryproto.EstimateSwapExactAmountInRequest{ - Sender: args[1], // TODO: where sender is used? PoolId: uint64(poolID), // TODO: is this poolId used? - TokenIn: args[2], + TokenIn: args[1], Routes: routes, }, nil } @@ -114,9 +115,30 @@ func EstimateSwapExactAmountOutParseArgs(args []string, fs *flag.FlagSet) (proto } return &queryproto.EstimateSwapExactAmountOutRequest{ - Sender: args[1], // TODO: where sender is used? PoolId: uint64(poolID), // TODO: is this poolId used? Routes: routes, - TokenOut: args[2], + TokenOut: args[1], }, nil } + +// GetCmdEstimateSinglePoolSwapExactAmountIn returns estimation of output coin when amount of x token input. +func GetCmdEstimateSinglePoolSwapExactAmountIn() (*osmocli.QueryDescriptor, *queryproto.EstimateSinglePoolSwapExactAmountInRequest) { + return &osmocli.QueryDescriptor{ + Use: "estimate-single-pool-swap-exact-amount-in ", + Short: "Query estimate-single-pool-swap-exact-amount-in", + Long: `Query estimate-single-pool-swap-exact-amount-in.{{.ExampleHeader}} +{{.CommandPrefix}} estimate-single-pool-swap-exact-amount-in 1 1000stake uosmo`, + QueryFnName: "EstimateSinglePoolSwapExactAmountIn", + }, &queryproto.EstimateSinglePoolSwapExactAmountInRequest{} +} + +// GetCmdEstimateSinglePoolSwapExactAmountOut returns estimation of input coin to get exact amount of x token output. +func GetCmdEstimateSinglePoolSwapExactAmountOut() (*osmocli.QueryDescriptor, *queryproto.EstimateSinglePoolSwapExactAmountOutRequest) { + return &osmocli.QueryDescriptor{ + Use: "estimate-single-pool-swap-exact-amount-out ", + Short: "Query estimate-single-pool-swap-exact-amount-out", + Long: `Query estimate-single-pool-swap-exact-amount-out.{{.ExampleHeader}} +{{.CommandPrefix}} estimate-single-pool-swap-exact-amount-out 1 uosmo 1000stake`, + QueryFnName: "EstimateSinglePoolSwapExactAmountOut", + }, &queryproto.EstimateSinglePoolSwapExactAmountOutRequest{} +} diff --git a/x/poolmanager/client/cli/query_test.go b/x/poolmanager/client/cli/query_test.go index 3410d9c4202..c1fe4960891 100644 --- a/x/poolmanager/client/cli/query_test.go +++ b/x/poolmanager/client/cli/query_test.go @@ -2,6 +2,7 @@ package cli_test import ( gocontext "context" + "github.com/osmosis-labs/osmosis/v15/x/poolmanager/types" "testing" "github.com/stretchr/testify/suite" @@ -39,13 +40,21 @@ func (s *QueryTestSuite) TestQueriesNeverAlterState() { { "Query estimate swap in", "/osmosis.poolmanager.v1beta1.Query/EstimateSwapExactAmountIn", - &poolmanagerqueryproto.EstimateSwapExactAmountInRequest{}, + &poolmanagerqueryproto.EstimateSwapExactAmountInRequest{ + PoolId: 1, + TokenIn: "10bar", + Routes: types.SwapAmountInRoutes{{PoolId: 1, TokenOutDenom: "baz"}}, + }, &poolmanagerqueryproto.EstimateSwapExactAmountInResponse{}, }, { "Query estimate swap out", "/osmosis.poolmanager.v1beta1.Query/EstimateSwapExactAmountOut", - &poolmanagerqueryproto.EstimateSwapExactAmountOutRequest{}, + &poolmanagerqueryproto.EstimateSwapExactAmountOutRequest{ + PoolId: 1, + TokenOut: "6baz", + Routes: types.SwapAmountOutRoutes{{PoolId: 1, TokenInDenom: "bar"}}, + }, &poolmanagerqueryproto.EstimateSwapExactAmountOutResponse{}, }, } @@ -61,10 +70,49 @@ func (s *QueryTestSuite) TestQueriesNeverAlterState() { } } -func TestQueryTestSuite(t *testing.T) { +func (s *QueryTestSuite) TestSimplifiedQueries() { + swapIn := &poolmanagerqueryproto.EstimateSwapExactAmountInRequest{ + PoolId: 1, + TokenIn: "10bar", + Routes: types.SwapAmountInRoutes{{PoolId: 1, TokenOutDenom: "baz"}}, + } + swapOut := &poolmanagerqueryproto.EstimateSwapExactAmountOutRequest{ + PoolId: 1, + TokenOut: "6baz", + Routes: types.SwapAmountOutRoutes{{PoolId: 1, TokenInDenom: "bar"}}, + } + simplifiedSwapIn := &poolmanagerqueryproto.EstimateSinglePoolSwapExactAmountInRequest{ + PoolId: 1, + TokenIn: "10bar", + TokenOutDenom: "baz", + } + simplifiedSwapOut := &poolmanagerqueryproto.EstimateSinglePoolSwapExactAmountOutRequest{ + PoolId: 1, + TokenOut: "6baz", + TokenInDenom: "bar", + } + s.SetupSuite() + output1 := &poolmanagerqueryproto.EstimateSwapExactAmountInResponse{} + output2 := &poolmanagerqueryproto.EstimateSwapExactAmountInResponse{} + err := s.QueryHelper.Invoke(gocontext.Background(), + "/osmosis.poolmanager.v1beta1.Query/EstimateSwapExactAmountIn", swapIn, output1) + s.Require().NoError(err) + err = s.QueryHelper.Invoke(gocontext.Background(), + "/osmosis.poolmanager.v1beta1.Query/EstimateSinglePoolSwapExactAmountIn", simplifiedSwapIn, output2) + s.Require().NoError(err) + s.Require().Equal(output1, output2) - // TODO: re-enable this once poolmanager is fully merged. - t.SkipNow() + output3 := &poolmanagerqueryproto.EstimateSwapExactAmountOutResponse{} + output4 := &poolmanagerqueryproto.EstimateSwapExactAmountOutResponse{} + err = s.QueryHelper.Invoke(gocontext.Background(), + "/osmosis.poolmanager.v1beta1.Query/EstimateSwapExactAmountOut", swapOut, output3) + s.Require().NoError(err) + err = s.QueryHelper.Invoke(gocontext.Background(), + "/osmosis.poolmanager.v1beta1.Query/EstimateSinglePoolSwapExactAmountOut", simplifiedSwapOut, output4) + s.Require().NoError(err) + s.Require().Equal(output3, output4) +} +func TestQueryTestSuite(t *testing.T) { suite.Run(t, new(QueryTestSuite)) } diff --git a/x/poolmanager/client/grpc/grpc_query.go b/x/poolmanager/client/grpc/grpc_query.go index 7af5536db54..7aab48c525f 100644 --- a/x/poolmanager/client/grpc/grpc_query.go +++ b/x/poolmanager/client/grpc/grpc_query.go @@ -80,6 +80,26 @@ func (q Querier) EstimateSwapExactAmountIn(grpcCtx context.Context, return q.Q.EstimateSwapExactAmountIn(ctx, *req) } +func (q Querier) EstimateSinglePoolSwapExactAmountOut(grpcCtx context.Context, + req *queryproto.EstimateSinglePoolSwapExactAmountOutRequest, +) (*queryproto.EstimateSwapExactAmountOutResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + ctx := sdk.UnwrapSDKContext(grpcCtx) + return q.Q.EstimateSinglePoolSwapExactAmountOut(ctx, *req) +} + +func (q Querier) EstimateSinglePoolSwapExactAmountIn(grpcCtx context.Context, + req *queryproto.EstimateSinglePoolSwapExactAmountInRequest, +) (*queryproto.EstimateSwapExactAmountInResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + ctx := sdk.UnwrapSDKContext(grpcCtx) + return q.Q.EstimateSinglePoolSwapExactAmountIn(ctx, *req) +} + func (q Querier) AllPools(grpcCtx context.Context, req *queryproto.AllPoolsRequest, ) (*queryproto.AllPoolsResponse, error) { diff --git a/x/poolmanager/client/query_proto_wrap.go b/x/poolmanager/client/query_proto_wrap.go index 1ea3a0b2568..ddb9eaa6162 100644 --- a/x/poolmanager/client/query_proto_wrap.go +++ b/x/poolmanager/client/query_proto_wrap.go @@ -52,10 +52,6 @@ func (q Querier) EstimateSwapExactAmountIn(ctx sdk.Context, req queryproto.Estim // EstimateSwapExactAmountOut estimates token output amount for a swap. func (q Querier) EstimateSwapExactAmountOut(ctx sdk.Context, req queryproto.EstimateSwapExactAmountOutRequest) (*queryproto.EstimateSwapExactAmountOutResponse, error) { - if req.Sender == "" { - return nil, status.Error(codes.InvalidArgument, "address cannot be empty") - } - if req.TokenOut == "" { return nil, status.Error(codes.InvalidArgument, "invalid token") } @@ -79,6 +75,24 @@ func (q Querier) EstimateSwapExactAmountOut(ctx sdk.Context, req queryproto.Esti }, nil } +func (q Querier) EstimateSinglePoolSwapExactAmountOut(ctx sdk.Context, req queryproto.EstimateSinglePoolSwapExactAmountOutRequest) (*queryproto.EstimateSwapExactAmountOutResponse, error) { + routeReq := &queryproto.EstimateSwapExactAmountOutRequest{ + PoolId: req.PoolId, + TokenOut: req.TokenOut, + Routes: types.SwapAmountOutRoutes{{PoolId: req.PoolId, TokenInDenom: req.TokenInDenom}}, + } + return q.EstimateSwapExactAmountOut(ctx, *routeReq) +} + +func (q Querier) EstimateSinglePoolSwapExactAmountIn(ctx sdk.Context, req queryproto.EstimateSinglePoolSwapExactAmountInRequest) (*queryproto.EstimateSwapExactAmountInResponse, error) { + routeReq := &queryproto.EstimateSwapExactAmountInRequest{ + PoolId: req.PoolId, + TokenIn: req.TokenIn, + Routes: types.SwapAmountInRoutes{{PoolId: req.PoolId, TokenOutDenom: req.TokenOutDenom}}, + } + return q.EstimateSwapExactAmountIn(ctx, *routeReq) +} + // NumPools returns total number of pools. func (q Querier) NumPools(ctx sdk.Context, _ queryproto.NumPoolsRequest) (*queryproto.NumPoolsResponse, error) { return &queryproto.NumPoolsResponse{ diff --git a/x/poolmanager/client/queryproto/query.pb.go b/x/poolmanager/client/queryproto/query.pb.go index 996f0bd7dc5..10abab81dd1 100644 --- a/x/poolmanager/client/queryproto/query.pb.go +++ b/x/poolmanager/client/queryproto/query.pb.go @@ -119,8 +119,6 @@ func (m *ParamsResponse) GetParams() types.Params { // =============================== EstimateSwapExactAmountIn type EstimateSwapExactAmountInRequest struct { - // TODO: CHANGE THIS TO RESERVED IN A PATCH RELEASE - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` TokenIn string `protobuf:"bytes,3,opt,name=token_in,json=tokenIn,proto3" json:"token_in,omitempty" yaml:"token_in"` Routes []types.SwapAmountInRoute `protobuf:"bytes,4,rep,name=routes,proto3" json:"routes" yaml:"routes"` @@ -159,13 +157,6 @@ func (m *EstimateSwapExactAmountInRequest) XXX_DiscardUnknown() { var xxx_messageInfo_EstimateSwapExactAmountInRequest proto.InternalMessageInfo -func (m *EstimateSwapExactAmountInRequest) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - func (m *EstimateSwapExactAmountInRequest) GetPoolId() uint64 { if m != nil { return m.PoolId @@ -187,6 +178,70 @@ func (m *EstimateSwapExactAmountInRequest) GetRoutes() []types.SwapAmountInRoute return nil } +type EstimateSinglePoolSwapExactAmountInRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokenIn string `protobuf:"bytes,2,opt,name=token_in,json=tokenIn,proto3" json:"token_in,omitempty" yaml:"token_in"` + TokenOutDenom string `protobuf:"bytes,3,opt,name=token_out_denom,json=tokenOutDenom,proto3" json:"token_out_denom,omitempty" yaml:"token_out_denom"` +} + +func (m *EstimateSinglePoolSwapExactAmountInRequest) Reset() { + *m = EstimateSinglePoolSwapExactAmountInRequest{} +} +func (m *EstimateSinglePoolSwapExactAmountInRequest) String() string { + return proto.CompactTextString(m) +} +func (*EstimateSinglePoolSwapExactAmountInRequest) ProtoMessage() {} +func (*EstimateSinglePoolSwapExactAmountInRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_6256a4106f701b7d, []int{3} +} +func (m *EstimateSinglePoolSwapExactAmountInRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EstimateSinglePoolSwapExactAmountInRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EstimateSinglePoolSwapExactAmountInRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EstimateSinglePoolSwapExactAmountInRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_EstimateSinglePoolSwapExactAmountInRequest.Merge(m, src) +} +func (m *EstimateSinglePoolSwapExactAmountInRequest) XXX_Size() int { + return m.Size() +} +func (m *EstimateSinglePoolSwapExactAmountInRequest) XXX_DiscardUnknown() { + xxx_messageInfo_EstimateSinglePoolSwapExactAmountInRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_EstimateSinglePoolSwapExactAmountInRequest proto.InternalMessageInfo + +func (m *EstimateSinglePoolSwapExactAmountInRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *EstimateSinglePoolSwapExactAmountInRequest) GetTokenIn() string { + if m != nil { + return m.TokenIn + } + return "" +} + +func (m *EstimateSinglePoolSwapExactAmountInRequest) GetTokenOutDenom() string { + if m != nil { + return m.TokenOutDenom + } + return "" +} + type EstimateSwapExactAmountInResponse struct { TokenOutAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_out_amount,json=tokenOutAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_out_amount" yaml:"token_out_amount"` } @@ -195,7 +250,7 @@ func (m *EstimateSwapExactAmountInResponse) Reset() { *m = EstimateSwapE func (m *EstimateSwapExactAmountInResponse) String() string { return proto.CompactTextString(m) } func (*EstimateSwapExactAmountInResponse) ProtoMessage() {} func (*EstimateSwapExactAmountInResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{3} + return fileDescriptor_6256a4106f701b7d, []int{4} } func (m *EstimateSwapExactAmountInResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -226,8 +281,6 @@ var xxx_messageInfo_EstimateSwapExactAmountInResponse proto.InternalMessageInfo // =============================== EstimateSwapExactAmountOut type EstimateSwapExactAmountOutRequest struct { - // TODO: CHANGE THIS TO RESERVED IN A PATCH RELEASE - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` PoolId uint64 `protobuf:"varint,2,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` Routes []types.SwapAmountOutRoute `protobuf:"bytes,3,rep,name=routes,proto3" json:"routes" yaml:"routes"` TokenOut string `protobuf:"bytes,4,opt,name=token_out,json=tokenOut,proto3" json:"token_out,omitempty" yaml:"token_out"` @@ -237,7 +290,7 @@ func (m *EstimateSwapExactAmountOutRequest) Reset() { *m = EstimateSwapE func (m *EstimateSwapExactAmountOutRequest) String() string { return proto.CompactTextString(m) } func (*EstimateSwapExactAmountOutRequest) ProtoMessage() {} func (*EstimateSwapExactAmountOutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{4} + return fileDescriptor_6256a4106f701b7d, []int{5} } func (m *EstimateSwapExactAmountOutRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -266,13 +319,6 @@ func (m *EstimateSwapExactAmountOutRequest) XXX_DiscardUnknown() { var xxx_messageInfo_EstimateSwapExactAmountOutRequest proto.InternalMessageInfo -func (m *EstimateSwapExactAmountOutRequest) GetSender() string { - if m != nil { - return m.Sender - } - return "" -} - func (m *EstimateSwapExactAmountOutRequest) GetPoolId() uint64 { if m != nil { return m.PoolId @@ -294,6 +340,70 @@ func (m *EstimateSwapExactAmountOutRequest) GetTokenOut() string { return "" } +type EstimateSinglePoolSwapExactAmountOutRequest struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` + TokenInDenom string `protobuf:"bytes,2,opt,name=token_in_denom,json=tokenInDenom,proto3" json:"token_in_denom,omitempty" yaml:"token_in_denom"` + TokenOut string `protobuf:"bytes,3,opt,name=token_out,json=tokenOut,proto3" json:"token_out,omitempty" yaml:"token_out"` +} + +func (m *EstimateSinglePoolSwapExactAmountOutRequest) Reset() { + *m = EstimateSinglePoolSwapExactAmountOutRequest{} +} +func (m *EstimateSinglePoolSwapExactAmountOutRequest) String() string { + return proto.CompactTextString(m) +} +func (*EstimateSinglePoolSwapExactAmountOutRequest) ProtoMessage() {} +func (*EstimateSinglePoolSwapExactAmountOutRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_6256a4106f701b7d, []int{6} +} +func (m *EstimateSinglePoolSwapExactAmountOutRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EstimateSinglePoolSwapExactAmountOutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EstimateSinglePoolSwapExactAmountOutRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EstimateSinglePoolSwapExactAmountOutRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_EstimateSinglePoolSwapExactAmountOutRequest.Merge(m, src) +} +func (m *EstimateSinglePoolSwapExactAmountOutRequest) XXX_Size() int { + return m.Size() +} +func (m *EstimateSinglePoolSwapExactAmountOutRequest) XXX_DiscardUnknown() { + xxx_messageInfo_EstimateSinglePoolSwapExactAmountOutRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_EstimateSinglePoolSwapExactAmountOutRequest proto.InternalMessageInfo + +func (m *EstimateSinglePoolSwapExactAmountOutRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *EstimateSinglePoolSwapExactAmountOutRequest) GetTokenInDenom() string { + if m != nil { + return m.TokenInDenom + } + return "" +} + +func (m *EstimateSinglePoolSwapExactAmountOutRequest) GetTokenOut() string { + if m != nil { + return m.TokenOut + } + return "" +} + type EstimateSwapExactAmountOutResponse struct { TokenInAmount github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=token_in_amount,json=tokenInAmount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"token_in_amount" yaml:"token_in_amount"` } @@ -302,7 +412,7 @@ func (m *EstimateSwapExactAmountOutResponse) Reset() { *m = EstimateSwap func (m *EstimateSwapExactAmountOutResponse) String() string { return proto.CompactTextString(m) } func (*EstimateSwapExactAmountOutResponse) ProtoMessage() {} func (*EstimateSwapExactAmountOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{5} + return fileDescriptor_6256a4106f701b7d, []int{7} } func (m *EstimateSwapExactAmountOutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -339,7 +449,7 @@ func (m *NumPoolsRequest) Reset() { *m = NumPoolsRequest{} } func (m *NumPoolsRequest) String() string { return proto.CompactTextString(m) } func (*NumPoolsRequest) ProtoMessage() {} func (*NumPoolsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{6} + return fileDescriptor_6256a4106f701b7d, []int{8} } func (m *NumPoolsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -376,7 +486,7 @@ func (m *NumPoolsResponse) Reset() { *m = NumPoolsResponse{} } func (m *NumPoolsResponse) String() string { return proto.CompactTextString(m) } func (*NumPoolsResponse) ProtoMessage() {} func (*NumPoolsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{7} + return fileDescriptor_6256a4106f701b7d, []int{9} } func (m *NumPoolsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -421,7 +531,7 @@ func (m *PoolRequest) Reset() { *m = PoolRequest{} } func (m *PoolRequest) String() string { return proto.CompactTextString(m) } func (*PoolRequest) ProtoMessage() {} func (*PoolRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{8} + return fileDescriptor_6256a4106f701b7d, []int{10} } func (m *PoolRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -465,7 +575,7 @@ func (m *PoolResponse) Reset() { *m = PoolResponse{} } func (m *PoolResponse) String() string { return proto.CompactTextString(m) } func (*PoolResponse) ProtoMessage() {} func (*PoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{9} + return fileDescriptor_6256a4106f701b7d, []int{11} } func (m *PoolResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -510,7 +620,7 @@ func (m *AllPoolsRequest) Reset() { *m = AllPoolsRequest{} } func (m *AllPoolsRequest) String() string { return proto.CompactTextString(m) } func (*AllPoolsRequest) ProtoMessage() {} func (*AllPoolsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{10} + return fileDescriptor_6256a4106f701b7d, []int{12} } func (m *AllPoolsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -554,7 +664,7 @@ func (m *AllPoolsResponse) Reset() { *m = AllPoolsResponse{} } func (m *AllPoolsResponse) String() string { return proto.CompactTextString(m) } func (*AllPoolsResponse) ProtoMessage() {} func (*AllPoolsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{11} + return fileDescriptor_6256a4106f701b7d, []int{13} } func (m *AllPoolsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -602,7 +712,7 @@ func (m *SpotPriceRequest) Reset() { *m = SpotPriceRequest{} } func (m *SpotPriceRequest) String() string { return proto.CompactTextString(m) } func (*SpotPriceRequest) ProtoMessage() {} func (*SpotPriceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{12} + return fileDescriptor_6256a4106f701b7d, []int{14} } func (m *SpotPriceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -663,7 +773,7 @@ func (m *SpotPriceResponse) Reset() { *m = SpotPriceResponse{} } func (m *SpotPriceResponse) String() string { return proto.CompactTextString(m) } func (*SpotPriceResponse) ProtoMessage() {} func (*SpotPriceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6256a4106f701b7d, []int{13} + return fileDescriptor_6256a4106f701b7d, []int{15} } func (m *SpotPriceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -703,8 +813,10 @@ func init() { proto.RegisterType((*ParamsRequest)(nil), "osmosis.poolmanager.v1beta1.ParamsRequest") proto.RegisterType((*ParamsResponse)(nil), "osmosis.poolmanager.v1beta1.ParamsResponse") proto.RegisterType((*EstimateSwapExactAmountInRequest)(nil), "osmosis.poolmanager.v1beta1.EstimateSwapExactAmountInRequest") + proto.RegisterType((*EstimateSinglePoolSwapExactAmountInRequest)(nil), "osmosis.poolmanager.v1beta1.EstimateSinglePoolSwapExactAmountInRequest") proto.RegisterType((*EstimateSwapExactAmountInResponse)(nil), "osmosis.poolmanager.v1beta1.EstimateSwapExactAmountInResponse") proto.RegisterType((*EstimateSwapExactAmountOutRequest)(nil), "osmosis.poolmanager.v1beta1.EstimateSwapExactAmountOutRequest") + proto.RegisterType((*EstimateSinglePoolSwapExactAmountOutRequest)(nil), "osmosis.poolmanager.v1beta1.EstimateSinglePoolSwapExactAmountOutRequest") proto.RegisterType((*EstimateSwapExactAmountOutResponse)(nil), "osmosis.poolmanager.v1beta1.EstimateSwapExactAmountOutResponse") proto.RegisterType((*NumPoolsRequest)(nil), "osmosis.poolmanager.v1beta1.NumPoolsRequest") proto.RegisterType((*NumPoolsResponse)(nil), "osmosis.poolmanager.v1beta1.NumPoolsResponse") @@ -721,76 +833,84 @@ func init() { } var fileDescriptor_6256a4106f701b7d = []byte{ - // 1096 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4f, 0x6f, 0x1b, 0xc5, - 0x1b, 0xce, 0x26, 0x8e, 0x1b, 0x4f, 0x7e, 0x89, 0x9d, 0xf9, 0xa5, 0xe0, 0xba, 0x95, 0x1d, 0xa6, - 0x50, 0x92, 0x26, 0xde, 0x55, 0x92, 0xf6, 0x52, 0xa9, 0x29, 0x71, 0x09, 0xaa, 0x2f, 0x34, 0x6c, - 0x6e, 0x48, 0x65, 0x35, 0x71, 0x06, 0xb3, 0xea, 0xee, 0xcc, 0xc6, 0x33, 0xdb, 0xc6, 0x42, 0x5c, - 0xb8, 0x71, 0xa9, 0x40, 0x48, 0xc0, 0x8d, 0x2f, 0xc1, 0x87, 0xa8, 0x38, 0xa0, 0x48, 0x5c, 0x10, - 0x07, 0x0b, 0x12, 0xf8, 0x02, 0xfe, 0x04, 0x68, 0xfe, 0xec, 0xda, 0x31, 0x64, 0xe3, 0x06, 0x71, - 0xf2, 0x7a, 0xde, 0xe7, 0x7d, 0xe7, 0x79, 0x9f, 0x77, 0xf6, 0x99, 0x05, 0x6f, 0x33, 0x1e, 0x32, - 0xee, 0x73, 0x27, 0x62, 0x2c, 0x08, 0x31, 0xc5, 0x6d, 0xd2, 0x71, 0x9e, 0xad, 0xef, 0x13, 0x81, - 0xd7, 0x9d, 0xc3, 0x98, 0x74, 0xba, 0x76, 0xd4, 0x61, 0x82, 0xc1, 0xeb, 0x06, 0x68, 0x0f, 0x01, - 0x6d, 0x03, 0xac, 0x2c, 0xb6, 0x59, 0x9b, 0x29, 0x9c, 0x23, 0x9f, 0x74, 0x4a, 0x65, 0x25, 0xab, - 0x76, 0x9b, 0x50, 0xa2, 0xca, 0x29, 0xe8, 0x9b, 0x59, 0x50, 0x71, 0x64, 0x50, 0x6b, 0x59, 0x28, - 0xfe, 0x1c, 0x47, 0x5e, 0x87, 0xc5, 0x82, 0x18, 0x74, 0xb5, 0xa5, 0xe0, 0xce, 0x3e, 0xe6, 0x24, - 0x45, 0xb5, 0x98, 0x4f, 0x4d, 0xfc, 0xf6, 0x70, 0x5c, 0xb5, 0x9a, 0xa2, 0x22, 0xdc, 0xf6, 0x29, - 0x16, 0x3e, 0x4b, 0xb0, 0x37, 0xda, 0x8c, 0xb5, 0x03, 0xe2, 0xe0, 0xc8, 0x77, 0x30, 0xa5, 0x4c, - 0xa8, 0x60, 0xc2, 0xfe, 0x9a, 0x89, 0xaa, 0x7f, 0xfb, 0xf1, 0xc7, 0x0e, 0xa6, 0xdd, 0x24, 0xa4, - 0x37, 0xf1, 0xb4, 0x38, 0xfa, 0x8f, 0x09, 0xd5, 0x46, 0xb3, 0x84, 0x1f, 0x12, 0x2e, 0x70, 0x18, - 0x69, 0x00, 0x2a, 0x82, 0xb9, 0x5d, 0xdc, 0xc1, 0x21, 0x77, 0xc9, 0x61, 0x4c, 0xb8, 0x40, 0x7b, - 0x60, 0x3e, 0x59, 0xe0, 0x11, 0xa3, 0x9c, 0xc0, 0x6d, 0x90, 0x8f, 0xd4, 0x4a, 0xd9, 0x5a, 0xb2, - 0x96, 0x67, 0x37, 0x6e, 0xda, 0x19, 0x63, 0xb2, 0x75, 0x72, 0x23, 0xf7, 0xb2, 0x57, 0x9b, 0x70, - 0x4d, 0x22, 0xfa, 0x62, 0x12, 0x2c, 0xed, 0x70, 0xe1, 0x87, 0x58, 0x90, 0xbd, 0xe7, 0x38, 0xda, - 0x39, 0xc2, 0x2d, 0xb1, 0x1d, 0xb2, 0x98, 0x8a, 0x26, 0x35, 0x3b, 0xc3, 0x15, 0x90, 0xe7, 0x84, - 0x1e, 0x90, 0x8e, 0xda, 0xa7, 0xd0, 0x58, 0xe8, 0xf7, 0x6a, 0x73, 0x5d, 0x1c, 0x06, 0xf7, 0x90, - 0x5e, 0x47, 0xae, 0x01, 0xc0, 0x55, 0x70, 0x45, 0xee, 0xed, 0xf9, 0x07, 0xe5, 0xc9, 0x25, 0x6b, - 0x39, 0xd7, 0x80, 0xfd, 0x5e, 0x6d, 0x5e, 0x63, 0x4d, 0x00, 0xb9, 0x79, 0xf9, 0xd4, 0x3c, 0x80, - 0x36, 0x98, 0x11, 0xec, 0x29, 0xa1, 0x9e, 0x4f, 0xcb, 0x53, 0xaa, 0xf2, 0xff, 0xfb, 0xbd, 0x5a, - 0x51, 0xa3, 0x93, 0x08, 0x72, 0xaf, 0xa8, 0xc7, 0x26, 0x85, 0x4f, 0x40, 0x5e, 0x8d, 0x98, 0x97, - 0x73, 0x4b, 0x53, 0xcb, 0xb3, 0x1b, 0x76, 0x66, 0xbf, 0xb2, 0x9d, 0xb4, 0x13, 0x99, 0xd6, 0xb8, - 0x2a, 0x5b, 0x1f, 0x70, 0xd7, 0xb5, 0x90, 0x6b, 0x8a, 0xa2, 0xef, 0x2c, 0xf0, 0x46, 0x86, 0x16, - 0x46, 0x74, 0x0e, 0x4a, 0x9a, 0x1a, 0x8b, 0x85, 0x87, 0x55, 0xd4, 0xc8, 0xd2, 0x94, 0xe5, 0x7f, - 0xed, 0xd5, 0x6e, 0xb5, 0x7d, 0xf1, 0x49, 0xbc, 0x6f, 0xb7, 0x58, 0x68, 0x66, 0x6e, 0x7e, 0xea, - 0xfc, 0xe0, 0xa9, 0x23, 0xba, 0x11, 0xe1, 0x76, 0x93, 0x8a, 0x7e, 0xaf, 0xf6, 0xfa, 0x70, 0xab, - 0x83, 0x7a, 0xc8, 0x9d, 0x57, 0x4b, 0x8f, 0x63, 0xb3, 0x3d, 0x7a, 0x31, 0x79, 0x2e, 0xb5, 0xc7, - 0xb1, 0xf8, 0xaf, 0xe7, 0xf4, 0x51, 0xaa, 0xfb, 0x94, 0xd2, 0xdd, 0x19, 0x53, 0x77, 0x49, 0x6d, - 0x0c, 0xe1, 0xe1, 0x3a, 0x28, 0xa4, 0x12, 0x94, 0x73, 0x8a, 0xfa, 0x62, 0xbf, 0x57, 0x2b, 0x8d, - 0xa8, 0x83, 0xdc, 0x99, 0x44, 0x16, 0xf4, 0x8d, 0x05, 0x50, 0x96, 0x20, 0x66, 0x58, 0x11, 0x28, - 0x26, 0xe7, 0xe8, 0xec, 0xac, 0x1e, 0xbd, 0xf2, 0xac, 0x5e, 0x3b, 0x7b, 0x2c, 0xd3, 0x51, 0xcd, - 0x99, 0xd3, 0x69, 0x26, 0xb5, 0x00, 0x8a, 0xef, 0xc7, 0xe1, 0x2e, 0x63, 0x41, 0xfa, 0xe2, 0xee, - 0x80, 0xd2, 0x60, 0xc9, 0x10, 0x5b, 0x07, 0x05, 0x1a, 0x87, 0x9e, 0xd4, 0x4f, 0xbf, 0xbd, 0xb9, - 0xe1, 0x96, 0xd3, 0x10, 0x72, 0x67, 0xa8, 0x49, 0x45, 0xf7, 0xc0, 0xac, 0x7c, 0x48, 0x86, 0x3d, - 0x34, 0x41, 0xeb, 0xa2, 0x09, 0xa2, 0x87, 0xe0, 0x7f, 0x3a, 0xd7, 0x6c, 0xbf, 0x09, 0x72, 0x32, - 0x62, 0x7c, 0x63, 0xd1, 0xd6, 0x66, 0x64, 0x27, 0x66, 0x64, 0x6f, 0xd3, 0x6e, 0xa3, 0xf0, 0xe3, - 0x0f, 0xf5, 0x69, 0x99, 0xd5, 0x74, 0x15, 0x18, 0x6d, 0x81, 0xe2, 0x76, 0x10, 0x0c, 0xb7, 0xf6, - 0x6a, 0x24, 0x9a, 0xa0, 0x34, 0xc8, 0x37, 0x44, 0xee, 0x82, 0xe9, 0x44, 0x83, 0xa9, 0x71, 0x98, - 0x68, 0x34, 0x3a, 0xb6, 0x40, 0x69, 0x2f, 0x62, 0x62, 0xb7, 0xe3, 0xb7, 0xc8, 0x65, 0xc8, 0xc0, - 0x1d, 0x50, 0x92, 0xd6, 0xef, 0x61, 0xce, 0x89, 0xf0, 0x0e, 0x08, 0x65, 0xa1, 0x7a, 0x13, 0x0a, - 0x8d, 0xeb, 0x83, 0x17, 0x73, 0x14, 0x81, 0xdc, 0x79, 0xb9, 0xb4, 0x2d, 0x57, 0xde, 0x95, 0x0b, - 0xf0, 0x11, 0x58, 0x38, 0x8c, 0x99, 0x38, 0x5b, 0x47, 0x7b, 0xd9, 0x8d, 0x7e, 0xaf, 0x56, 0xd6, - 0x75, 0xfe, 0x06, 0x41, 0x6e, 0x51, 0xad, 0x0d, 0x2a, 0xa1, 0x26, 0x58, 0x18, 0xea, 0xc8, 0xc8, - 0x73, 0x07, 0x00, 0x1e, 0x31, 0xe1, 0x45, 0x72, 0xd5, 0x1c, 0xdd, 0xab, 0xfd, 0x5e, 0x6d, 0xc1, - 0xbc, 0xd5, 0x69, 0x0c, 0xb9, 0x05, 0x9e, 0x64, 0x6f, 0xfc, 0x54, 0x00, 0xd3, 0x1f, 0xc8, 0x2b, - 0x0d, 0xbe, 0xb0, 0x40, 0x5e, 0xfb, 0x3e, 0xbc, 0x3d, 0xc6, 0xe5, 0x60, 0x94, 0xac, 0xac, 0x8e, - 0x85, 0xd5, 0x1c, 0xd1, 0xea, 0xe7, 0x3f, 0xff, 0xf1, 0xf5, 0xe4, 0x5b, 0xf0, 0xa6, 0x93, 0x75, - 0x41, 0x1b, 0x16, 0xbf, 0x5b, 0xe0, 0xda, 0xb9, 0x1e, 0x0b, 0xef, 0x67, 0xee, 0x7b, 0xd1, 0x3d, - 0x55, 0xd9, 0xba, 0x6c, 0xba, 0xe9, 0x64, 0x47, 0x75, 0xf2, 0x00, 0xde, 0x4f, 0x3b, 0x69, 0xe3, - 0x30, 0x4c, 0x5b, 0xf8, 0xd4, 0x1c, 0xa2, 0xcf, 0x1c, 0x62, 0x4a, 0xe9, 0xcf, 0x0e, 0x22, 0x8b, - 0x19, 0x3f, 0xf0, 0x7c, 0x0a, 0xff, 0xb4, 0x40, 0xe5, 0x7c, 0x6f, 0x82, 0x97, 0x62, 0x39, 0x70, - 0xf9, 0xca, 0x83, 0x4b, 0xe7, 0x9b, 0x36, 0xdf, 0x53, 0x6d, 0xbe, 0x03, 0xb7, 0xfe, 0x45, 0x9b, - 0x2c, 0x16, 0xf0, 0x5b, 0x0b, 0xcc, 0x24, 0xc6, 0x06, 0xd7, 0x32, 0x59, 0x8d, 0x58, 0x62, 0xa5, - 0x3e, 0x26, 0xda, 0x30, 0xb6, 0x15, 0xe3, 0x65, 0x78, 0x2b, 0xf3, 0x88, 0xa5, 0xae, 0x09, 0xbf, - 0xb2, 0x40, 0x4e, 0x56, 0x80, 0xcb, 0xd9, 0x07, 0x79, 0x60, 0xa7, 0x95, 0x95, 0x31, 0x90, 0x86, - 0xcd, 0x1d, 0xc5, 0xc6, 0x86, 0x6b, 0x99, 0x6c, 0x14, 0x93, 0x81, 0x98, 0x4a, 0xad, 0xc4, 0xfe, - 0x2e, 0x50, 0x6b, 0xc4, 0x65, 0x2f, 0x50, 0x6b, 0xd4, 0x53, 0xc7, 0x54, 0x0b, 0x07, 0x41, 0x5d, - 0xab, 0xf5, 0xbd, 0x05, 0x0a, 0xa9, 0xf5, 0xc0, 0xec, 0xcd, 0x46, 0x4d, 0xb7, 0x62, 0x8f, 0x0b, - 0x37, 0xe4, 0x36, 0x15, 0xb9, 0x3a, 0x5c, 0xfd, 0x47, 0x72, 0x23, 0xa2, 0x39, 0xca, 0xdb, 0x78, - 0xe3, 0xc9, 0xcb, 0x93, 0xaa, 0x75, 0x7c, 0x52, 0xb5, 0x7e, 0x3b, 0xa9, 0x5a, 0x5f, 0x9e, 0x56, - 0x27, 0x8e, 0x4f, 0xab, 0x13, 0xbf, 0x9c, 0x56, 0x27, 0x3e, 0x7c, 0x38, 0x74, 0x7f, 0x9b, 0x82, - 0xf5, 0x00, 0xef, 0xf3, 0xb4, 0xfa, 0xb3, 0xf5, 0xbb, 0xce, 0xd1, 0x99, 0x3d, 0x5a, 0x81, 0x4f, - 0xa8, 0xd0, 0xdf, 0xfc, 0xfa, 0x9a, 0xc9, 0xab, 0x9f, 0xcd, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, - 0x31, 0xe5, 0x33, 0xa9, 0x0f, 0x0d, 0x00, 0x00, + // 1231 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcf, 0x6f, 0x1b, 0x45, + 0x14, 0xce, 0x3a, 0x8e, 0x1b, 0x4f, 0x9a, 0xd8, 0x19, 0x92, 0xe2, 0xb8, 0x95, 0x37, 0x4c, 0x4a, + 0x71, 0x93, 0x78, 0x57, 0x49, 0xda, 0x4b, 0x25, 0x5a, 0xc5, 0x6d, 0x68, 0x8c, 0x80, 0x86, 0x8d, + 0x10, 0x08, 0x29, 0x58, 0x1b, 0x67, 0x30, 0xab, 0x7a, 0x77, 0x36, 0x9e, 0xd9, 0x36, 0x11, 0xe2, + 0xc2, 0x89, 0x13, 0x2a, 0x42, 0x02, 0x6e, 0xfc, 0x13, 0xfc, 0x11, 0x15, 0x12, 0x28, 0x12, 0x17, + 0xc4, 0xc1, 0x42, 0x09, 0x07, 0x0e, 0xbd, 0xe0, 0x23, 0x27, 0xb4, 0x33, 0xb3, 0xeb, 0x1f, 0x24, + 0xeb, 0x8d, 0xd3, 0x53, 0xd6, 0xf3, 0xbe, 0xf7, 0xe6, 0xfb, 0xde, 0x7c, 0x9a, 0x37, 0x01, 0x6f, + 0x10, 0x6a, 0x13, 0x6a, 0x51, 0xdd, 0x25, 0xa4, 0x61, 0x9b, 0x8e, 0x59, 0xc7, 0x4d, 0xfd, 0xc9, + 0xca, 0x2e, 0x66, 0xe6, 0x8a, 0xbe, 0xef, 0xe1, 0xe6, 0xa1, 0xe6, 0x36, 0x09, 0x23, 0xf0, 0xaa, + 0x04, 0x6a, 0x5d, 0x40, 0x4d, 0x02, 0xf3, 0x33, 0x75, 0x52, 0x27, 0x1c, 0xa7, 0xfb, 0x5f, 0x22, + 0x25, 0x7f, 0x33, 0xaa, 0x76, 0x1d, 0x3b, 0x98, 0x97, 0xe3, 0xd0, 0xeb, 0x51, 0x50, 0x76, 0x20, + 0x51, 0xcb, 0x51, 0x28, 0xfa, 0xd4, 0x74, 0xab, 0x4d, 0xe2, 0x31, 0x2c, 0xd1, 0x85, 0x1a, 0x87, + 0xeb, 0xbb, 0x26, 0xc5, 0x21, 0xaa, 0x46, 0x2c, 0x47, 0xc6, 0x17, 0xbb, 0xe3, 0x5c, 0x6a, 0x88, + 0x72, 0xcd, 0xba, 0xe5, 0x98, 0xcc, 0x22, 0x01, 0xf6, 0x5a, 0x9d, 0x90, 0x7a, 0x03, 0xeb, 0xa6, + 0x6b, 0xe9, 0xa6, 0xe3, 0x10, 0xc6, 0x83, 0x01, 0xfb, 0x39, 0x19, 0xe5, 0xbf, 0x76, 0xbd, 0x4f, + 0x75, 0xd3, 0x39, 0x0c, 0x42, 0x62, 0x93, 0xaa, 0x68, 0x8e, 0xf8, 0x21, 0x43, 0x6a, 0x7f, 0x16, + 0xb3, 0x6c, 0x4c, 0x99, 0x69, 0xbb, 0x02, 0x80, 0x32, 0x60, 0x72, 0xcb, 0x6c, 0x9a, 0x36, 0x35, + 0xf0, 0xbe, 0x87, 0x29, 0x43, 0xdb, 0x60, 0x2a, 0x58, 0xa0, 0x2e, 0x71, 0x28, 0x86, 0xeb, 0x20, + 0xe5, 0xf2, 0x95, 0x9c, 0x32, 0xaf, 0x14, 0x27, 0x56, 0x17, 0xb4, 0x88, 0x63, 0xd2, 0x44, 0x72, + 0x39, 0xf9, 0xbc, 0xa5, 0x8e, 0x18, 0x32, 0x11, 0xbd, 0x50, 0xc0, 0xfc, 0x06, 0x65, 0x96, 0x6d, + 0x32, 0xbc, 0xfd, 0xd4, 0x74, 0x37, 0x0e, 0xcc, 0x1a, 0x5b, 0xb7, 0x89, 0xe7, 0xb0, 0x8a, 0x23, + 0x77, 0x86, 0x4b, 0xe0, 0x92, 0x5f, 0xb0, 0x6a, 0xed, 0xe5, 0x12, 0xf3, 0x4a, 0x31, 0x59, 0x86, + 0xed, 0x96, 0x3a, 0x75, 0x68, 0xda, 0x8d, 0x3b, 0x48, 0x06, 0x90, 0x91, 0xf2, 0xbf, 0x2a, 0x7b, + 0x50, 0x03, 0xe3, 0x8c, 0x3c, 0xc6, 0x4e, 0xd5, 0x72, 0x72, 0xa3, 0xf3, 0x4a, 0x31, 0x5d, 0x7e, + 0xa5, 0xdd, 0x52, 0x33, 0x02, 0x1d, 0x44, 0x90, 0x71, 0x89, 0x7f, 0x56, 0x1c, 0xb8, 0x03, 0x52, + 0xfc, 0xdc, 0x68, 0x2e, 0x39, 0x3f, 0x5a, 0x9c, 0x58, 0xd5, 0x22, 0x45, 0xf8, 0x1c, 0x43, 0x7a, + 0x7e, 0x5a, 0x79, 0xd6, 0xd7, 0xd3, 0x6e, 0xa9, 0x93, 0x62, 0x07, 0x51, 0x0b, 0x19, 0xb2, 0xe8, + 0xdb, 0xc9, 0x71, 0x25, 0x9b, 0x30, 0x52, 0x14, 0x3b, 0x7b, 0xb8, 0x89, 0x7e, 0x51, 0xc0, 0x62, + 0x28, 0xd7, 0x72, 0xea, 0x0d, 0xbc, 0x45, 0x48, 0x23, 0x8e, 0x70, 0xe5, 0x5c, 0xc2, 0x13, 0x31, + 0x84, 0x97, 0x41, 0x46, 0xac, 0x12, 0x8f, 0x55, 0xf7, 0xb0, 0x43, 0x6c, 0xd9, 0xaf, 0x7c, 0xbb, + 0xa5, 0x5e, 0xe9, 0x4e, 0x0b, 0x01, 0xc8, 0x98, 0xe4, 0x2b, 0x8f, 0x3c, 0xf6, 0x80, 0xff, 0xfe, + 0x41, 0x01, 0xaf, 0x45, 0x1c, 0x9f, 0xf4, 0x09, 0x05, 0xd9, 0x4e, 0x21, 0x93, 0x47, 0xb9, 0x9e, + 0x74, 0xb9, 0xe2, 0x37, 0xef, 0x8f, 0x96, 0x7a, 0xa3, 0x6e, 0xb1, 0xcf, 0xbc, 0x5d, 0xad, 0x46, + 0x6c, 0x69, 0x53, 0xf9, 0xa7, 0x44, 0xf7, 0x1e, 0xeb, 0xec, 0xd0, 0xc5, 0x54, 0xab, 0x38, 0xac, + 0xdd, 0x52, 0x5f, 0xed, 0x27, 0x26, 0xea, 0x21, 0x63, 0x2a, 0x60, 0x26, 0xb6, 0x47, 0xff, 0x9c, + 0x4d, 0xed, 0x91, 0xc7, 0x86, 0xb2, 0xd6, 0x27, 0xa1, 0x55, 0x46, 0xb9, 0x55, 0xf4, 0x98, 0x56, + 0xf1, 0xf7, 0x8b, 0xe1, 0x15, 0xb8, 0x02, 0xd2, 0xa1, 0xae, 0x5c, 0x92, 0x37, 0x68, 0xa6, 0xdd, + 0x52, 0xb3, 0x7d, 0x92, 0x91, 0x31, 0x1e, 0x68, 0xed, 0xb3, 0xd7, 0xaf, 0x0a, 0x58, 0x1a, 0x68, + 0xaf, 0xd3, 0xd5, 0x0f, 0xf6, 0xd7, 0x3d, 0x30, 0x15, 0xb8, 0x48, 0xda, 0x45, 0xb8, 0x6c, 0xae, + 0xdd, 0x52, 0x67, 0x7b, 0x5d, 0x16, 0xb8, 0xe5, 0xb2, 0xf4, 0x1a, 0x37, 0x4b, 0xaf, 0xbc, 0xd1, + 0x38, 0xf2, 0xd0, 0x77, 0x0a, 0x40, 0x51, 0x87, 0x28, 0x0d, 0xe6, 0x06, 0x56, 0xb6, 0x9c, 0x5e, + 0x7f, 0x6d, 0x9e, 0xdb, 0x5f, 0x57, 0xfa, 0x94, 0x04, 0xf6, 0x9a, 0x94, 0x52, 0xa4, 0xbb, 0xa6, + 0x41, 0xe6, 0x3d, 0xcf, 0xf6, 0xbb, 0x1b, 0xde, 0x8f, 0x1b, 0x20, 0xdb, 0x59, 0x92, 0xc4, 0x56, + 0x40, 0xda, 0xf1, 0xec, 0xaa, 0xdf, 0x41, 0x2a, 0x5b, 0xdc, 0x25, 0x39, 0x0c, 0x21, 0x63, 0xdc, + 0x91, 0xa9, 0xe8, 0x0e, 0x98, 0xf0, 0x3f, 0x86, 0x39, 0x22, 0x74, 0x1f, 0x5c, 0x16, 0xb9, 0x72, + 0xfb, 0x35, 0x90, 0xf4, 0x23, 0xf2, 0x7a, 0x9e, 0xd1, 0xc4, 0x9d, 0xaf, 0x05, 0x77, 0xbe, 0xb6, + 0xee, 0x1c, 0x96, 0xd3, 0x3f, 0xff, 0x54, 0x1a, 0xf3, 0xb3, 0x2a, 0x06, 0x07, 0xa3, 0xbb, 0x20, + 0xb3, 0xde, 0x68, 0x74, 0x4b, 0x3b, 0x1f, 0x89, 0x0a, 0xc8, 0x76, 0xf2, 0x25, 0x91, 0xdb, 0x60, + 0x2c, 0xe8, 0xc1, 0x68, 0x1c, 0x26, 0x02, 0x8d, 0x8e, 0x14, 0x90, 0xdd, 0x76, 0x09, 0xdb, 0x6a, + 0x5a, 0x35, 0x3c, 0x94, 0x69, 0x37, 0x40, 0xd6, 0x9f, 0xb0, 0x55, 0x93, 0x52, 0xcc, 0x7a, 0x6c, + 0x7b, 0xb5, 0x73, 0x99, 0xf4, 0x23, 0x90, 0x31, 0xe5, 0x2f, 0xad, 0xfb, 0x2b, 0xc2, 0xba, 0x9b, + 0x60, 0x7a, 0xdf, 0x23, 0xac, 0xb7, 0x8e, 0xb0, 0xf0, 0xb5, 0x76, 0x4b, 0xcd, 0x89, 0x3a, 0xff, + 0x83, 0x20, 0x23, 0xc3, 0xd7, 0x3a, 0x95, 0x50, 0x05, 0x4c, 0x77, 0x29, 0x92, 0xed, 0xb9, 0x05, + 0x00, 0x75, 0x09, 0xab, 0xba, 0xfe, 0xaa, 0xb4, 0xee, 0x6c, 0xbb, 0xa5, 0x4e, 0x8b, 0xba, 0x9d, + 0x18, 0x32, 0xd2, 0x34, 0xc8, 0x5e, 0xfd, 0x77, 0x12, 0x8c, 0xbd, 0xef, 0xbf, 0x1c, 0xe0, 0xd7, + 0x0a, 0x48, 0x89, 0xf1, 0x0a, 0x17, 0x63, 0xcc, 0x60, 0xd9, 0xc9, 0xfc, 0x52, 0x2c, 0xac, 0xe0, + 0x88, 0x96, 0xbe, 0xfc, 0xed, 0xaf, 0x6f, 0x13, 0xaf, 0xc3, 0x05, 0x3d, 0xea, 0x1d, 0x24, 0x59, + 0xfc, 0xad, 0x80, 0xb9, 0x33, 0xe7, 0x02, 0x7c, 0x33, 0x72, 0xdf, 0x41, 0xcf, 0x81, 0xfc, 0xdd, + 0x61, 0xd3, 0xa5, 0x92, 0x77, 0xb8, 0x92, 0xb7, 0xe0, 0x83, 0x48, 0x25, 0x9f, 0x4b, 0x2f, 0x7d, + 0xa1, 0x63, 0x59, 0x51, 0x3c, 0xf2, 0xb0, 0x5f, 0x53, 0x5e, 0x0b, 0x55, 0xcb, 0x81, 0x5f, 0x25, + 0xc0, 0x42, 0x8c, 0x91, 0x0e, 0x1f, 0xc6, 0x63, 0x3d, 0xf0, 0x51, 0x70, 0x61, 0xf9, 0x1f, 0x71, + 0xf9, 0x06, 0xdc, 0x3a, 0xb7, 0x7c, 0xce, 0x8d, 0xdf, 0x58, 0xd5, 0x53, 0x5b, 0xf1, 0x42, 0x01, + 0xf9, 0xb3, 0x6f, 0x6b, 0x38, 0x14, 0xf1, 0xce, 0xb4, 0xca, 0xdf, 0x1b, 0x3a, 0x5f, 0x2a, 0x7f, + 0x97, 0x2b, 0x7f, 0x08, 0x37, 0x2e, 0x7e, 0xf0, 0xc4, 0x63, 0xf0, 0x59, 0x02, 0x5c, 0x8f, 0x33, + 0x6d, 0xe1, 0xe6, 0xc5, 0x8e, 0xfe, 0x65, 0xb6, 0x60, 0x87, 0xb7, 0xe0, 0x43, 0xf8, 0xc1, 0x39, + 0x5b, 0xe0, 0x0b, 0x1e, 0x60, 0x00, 0xbf, 0x25, 0xdf, 0x2b, 0x60, 0x3c, 0x18, 0x82, 0x70, 0x39, + 0x92, 0x6c, 0xdf, 0xf8, 0xcc, 0x97, 0x62, 0xa2, 0xa5, 0x10, 0x8d, 0x0b, 0x29, 0xc2, 0x1b, 0x91, + 0x42, 0xc2, 0x09, 0x0b, 0xbf, 0x51, 0x40, 0xd2, 0xaf, 0x00, 0x8b, 0xd1, 0x97, 0x5e, 0x67, 0xf4, + 0xe6, 0x6f, 0xc6, 0x40, 0x4a, 0x36, 0xb7, 0x38, 0x1b, 0x0d, 0x2e, 0x47, 0xb2, 0xe1, 0x4c, 0x3a, + 0xcd, 0xe5, 0xdd, 0x0a, 0x46, 0xe5, 0x80, 0x6e, 0xf5, 0x4d, 0xe4, 0x01, 0xdd, 0xea, 0x9f, 0xbf, + 0x31, 0xbb, 0x65, 0x36, 0x1a, 0x25, 0xd1, 0xad, 0x1f, 0x15, 0x90, 0x0e, 0xc7, 0x14, 0x8c, 0xde, + 0xac, 0x7f, 0x40, 0xe7, 0xb5, 0xb8, 0x70, 0x49, 0x6e, 0x8d, 0x93, 0x2b, 0xc1, 0xa5, 0x53, 0xc9, + 0xf5, 0x35, 0x4d, 0xe7, 0x73, 0x90, 0x96, 0x77, 0x9e, 0x1f, 0x17, 0x94, 0xa3, 0xe3, 0x82, 0xf2, + 0xe7, 0x71, 0x41, 0x79, 0x76, 0x52, 0x18, 0x39, 0x3a, 0x29, 0x8c, 0xfc, 0x7e, 0x52, 0x18, 0xf9, + 0xf8, 0x7e, 0xd7, 0x5b, 0x4f, 0x16, 0x2c, 0x35, 0xcc, 0x5d, 0x1a, 0x56, 0x7f, 0xb2, 0x72, 0x5b, + 0x3f, 0xe8, 0xd9, 0xa3, 0xd6, 0xb0, 0xb0, 0xc3, 0xc4, 0xbf, 0xe1, 0xe2, 0x49, 0x92, 0xe2, 0x7f, + 0xd6, 0xfe, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xb7, 0x5a, 0xe7, 0x8d, 0xa2, 0x10, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -808,8 +928,10 @@ type QueryClient interface { Params(ctx context.Context, in *ParamsRequest, opts ...grpc.CallOption) (*ParamsResponse, error) // Estimates swap amount out given in. EstimateSwapExactAmountIn(ctx context.Context, in *EstimateSwapExactAmountInRequest, opts ...grpc.CallOption) (*EstimateSwapExactAmountInResponse, error) + EstimateSinglePoolSwapExactAmountIn(ctx context.Context, in *EstimateSinglePoolSwapExactAmountInRequest, opts ...grpc.CallOption) (*EstimateSwapExactAmountInResponse, error) // Estimates swap amount in given out. EstimateSwapExactAmountOut(ctx context.Context, in *EstimateSwapExactAmountOutRequest, opts ...grpc.CallOption) (*EstimateSwapExactAmountOutResponse, error) + EstimateSinglePoolSwapExactAmountOut(ctx context.Context, in *EstimateSinglePoolSwapExactAmountOutRequest, opts ...grpc.CallOption) (*EstimateSwapExactAmountOutResponse, error) // Returns the total number of pools existing in Osmosis. NumPools(ctx context.Context, in *NumPoolsRequest, opts ...grpc.CallOption) (*NumPoolsResponse, error) // Pool returns the Pool specified by the pool id @@ -847,6 +969,15 @@ func (c *queryClient) EstimateSwapExactAmountIn(ctx context.Context, in *Estimat return out, nil } +func (c *queryClient) EstimateSinglePoolSwapExactAmountIn(ctx context.Context, in *EstimateSinglePoolSwapExactAmountInRequest, opts ...grpc.CallOption) (*EstimateSwapExactAmountInResponse, error) { + out := new(EstimateSwapExactAmountInResponse) + err := c.cc.Invoke(ctx, "/osmosis.poolmanager.v1beta1.Query/EstimateSinglePoolSwapExactAmountIn", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) EstimateSwapExactAmountOut(ctx context.Context, in *EstimateSwapExactAmountOutRequest, opts ...grpc.CallOption) (*EstimateSwapExactAmountOutResponse, error) { out := new(EstimateSwapExactAmountOutResponse) err := c.cc.Invoke(ctx, "/osmosis.poolmanager.v1beta1.Query/EstimateSwapExactAmountOut", in, out, opts...) @@ -856,6 +987,15 @@ func (c *queryClient) EstimateSwapExactAmountOut(ctx context.Context, in *Estima return out, nil } +func (c *queryClient) EstimateSinglePoolSwapExactAmountOut(ctx context.Context, in *EstimateSinglePoolSwapExactAmountOutRequest, opts ...grpc.CallOption) (*EstimateSwapExactAmountOutResponse, error) { + out := new(EstimateSwapExactAmountOutResponse) + err := c.cc.Invoke(ctx, "/osmosis.poolmanager.v1beta1.Query/EstimateSinglePoolSwapExactAmountOut", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) NumPools(ctx context.Context, in *NumPoolsRequest, opts ...grpc.CallOption) (*NumPoolsResponse, error) { out := new(NumPoolsResponse) err := c.cc.Invoke(ctx, "/osmosis.poolmanager.v1beta1.Query/NumPools", in, out, opts...) @@ -897,8 +1037,10 @@ type QueryServer interface { Params(context.Context, *ParamsRequest) (*ParamsResponse, error) // Estimates swap amount out given in. EstimateSwapExactAmountIn(context.Context, *EstimateSwapExactAmountInRequest) (*EstimateSwapExactAmountInResponse, error) + EstimateSinglePoolSwapExactAmountIn(context.Context, *EstimateSinglePoolSwapExactAmountInRequest) (*EstimateSwapExactAmountInResponse, error) // Estimates swap amount in given out. EstimateSwapExactAmountOut(context.Context, *EstimateSwapExactAmountOutRequest) (*EstimateSwapExactAmountOutResponse, error) + EstimateSinglePoolSwapExactAmountOut(context.Context, *EstimateSinglePoolSwapExactAmountOutRequest) (*EstimateSwapExactAmountOutResponse, error) // Returns the total number of pools existing in Osmosis. NumPools(context.Context, *NumPoolsRequest) (*NumPoolsResponse, error) // Pool returns the Pool specified by the pool id @@ -920,9 +1062,15 @@ func (*UnimplementedQueryServer) Params(ctx context.Context, req *ParamsRequest) func (*UnimplementedQueryServer) EstimateSwapExactAmountIn(ctx context.Context, req *EstimateSwapExactAmountInRequest) (*EstimateSwapExactAmountInResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method EstimateSwapExactAmountIn not implemented") } +func (*UnimplementedQueryServer) EstimateSinglePoolSwapExactAmountIn(ctx context.Context, req *EstimateSinglePoolSwapExactAmountInRequest) (*EstimateSwapExactAmountInResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EstimateSinglePoolSwapExactAmountIn not implemented") +} func (*UnimplementedQueryServer) EstimateSwapExactAmountOut(ctx context.Context, req *EstimateSwapExactAmountOutRequest) (*EstimateSwapExactAmountOutResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method EstimateSwapExactAmountOut not implemented") } +func (*UnimplementedQueryServer) EstimateSinglePoolSwapExactAmountOut(ctx context.Context, req *EstimateSinglePoolSwapExactAmountOutRequest) (*EstimateSwapExactAmountOutResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EstimateSinglePoolSwapExactAmountOut not implemented") +} func (*UnimplementedQueryServer) NumPools(ctx context.Context, req *NumPoolsRequest) (*NumPoolsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method NumPools not implemented") } @@ -976,6 +1124,24 @@ func _Query_EstimateSwapExactAmountIn_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _Query_EstimateSinglePoolSwapExactAmountIn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EstimateSinglePoolSwapExactAmountInRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EstimateSinglePoolSwapExactAmountIn(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.poolmanager.v1beta1.Query/EstimateSinglePoolSwapExactAmountIn", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EstimateSinglePoolSwapExactAmountIn(ctx, req.(*EstimateSinglePoolSwapExactAmountInRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_EstimateSwapExactAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(EstimateSwapExactAmountOutRequest) if err := dec(in); err != nil { @@ -994,6 +1160,24 @@ func _Query_EstimateSwapExactAmountOut_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } +func _Query_EstimateSinglePoolSwapExactAmountOut_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EstimateSinglePoolSwapExactAmountOutRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EstimateSinglePoolSwapExactAmountOut(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/osmosis.poolmanager.v1beta1.Query/EstimateSinglePoolSwapExactAmountOut", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EstimateSinglePoolSwapExactAmountOut(ctx, req.(*EstimateSinglePoolSwapExactAmountOutRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_NumPools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(NumPoolsRequest) if err := dec(in); err != nil { @@ -1078,10 +1262,18 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "EstimateSwapExactAmountIn", Handler: _Query_EstimateSwapExactAmountIn_Handler, }, + { + MethodName: "EstimateSinglePoolSwapExactAmountIn", + Handler: _Query_EstimateSinglePoolSwapExactAmountIn_Handler, + }, { MethodName: "EstimateSwapExactAmountOut", Handler: _Query_EstimateSwapExactAmountOut_Handler, }, + { + MethodName: "EstimateSinglePoolSwapExactAmountOut", + Handler: _Query_EstimateSinglePoolSwapExactAmountOut_Handler, + }, { MethodName: "NumPools", Handler: _Query_NumPools_Handler, @@ -1205,12 +1397,47 @@ func (m *EstimateSwapExactAmountInRequest) MarshalToSizedBuffer(dAtA []byte) (in i-- dAtA[i] = 0x10 } - if len(m.Sender) > 0 { - i -= len(m.Sender) - copy(dAtA[i:], m.Sender) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Sender))) + return len(dAtA) - i, nil +} + +func (m *EstimateSinglePoolSwapExactAmountInRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EstimateSinglePoolSwapExactAmountInRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EstimateSinglePoolSwapExactAmountInRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenOutDenom) > 0 { + i -= len(m.TokenOutDenom) + copy(dAtA[i:], m.TokenOutDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenOutDenom))) + i-- + dAtA[i] = 0x1a + } + if len(m.TokenIn) > 0 { + i -= len(m.TokenIn) + copy(dAtA[i:], m.TokenIn) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenIn))) + i-- + dAtA[i] = 0x12 + } + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) i-- - dAtA[i] = 0xa + dAtA[i] = 0x8 } return len(dAtA) - i, nil } @@ -1294,12 +1521,47 @@ func (m *EstimateSwapExactAmountOutRequest) MarshalToSizedBuffer(dAtA []byte) (i i-- dAtA[i] = 0x10 } - if len(m.Sender) > 0 { - i -= len(m.Sender) - copy(dAtA[i:], m.Sender) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Sender))) + return len(dAtA) - i, nil +} + +func (m *EstimateSinglePoolSwapExactAmountOutRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EstimateSinglePoolSwapExactAmountOutRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EstimateSinglePoolSwapExactAmountOutRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenOut) > 0 { + i -= len(m.TokenOut) + copy(dAtA[i:], m.TokenOut) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenOut))) i-- - dAtA[i] = 0xa + dAtA[i] = 0x1a + } + if len(m.TokenInDenom) > 0 { + i -= len(m.TokenInDenom) + copy(dAtA[i:], m.TokenInDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.TokenInDenom))) + i-- + dAtA[i] = 0x12 + } + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 } return len(dAtA) - i, nil } @@ -1625,10 +1887,6 @@ func (m *EstimateSwapExactAmountInRequest) Size() (n int) { } var l int _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } if m.PoolId != 0 { n += 1 + sovQuery(uint64(m.PoolId)) } @@ -1645,6 +1903,26 @@ func (m *EstimateSwapExactAmountInRequest) Size() (n int) { return n } +func (m *EstimateSinglePoolSwapExactAmountInRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + l = len(m.TokenIn) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.TokenOutDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + func (m *EstimateSwapExactAmountInResponse) Size() (n int) { if m == nil { return 0 @@ -1662,10 +1940,6 @@ func (m *EstimateSwapExactAmountOutRequest) Size() (n int) { } var l int _ = l - l = len(m.Sender) - if l > 0 { - n += 1 + l + sovQuery(uint64(l)) - } if m.PoolId != 0 { n += 1 + sovQuery(uint64(m.PoolId)) } @@ -1682,17 +1956,37 @@ func (m *EstimateSwapExactAmountOutRequest) Size() (n int) { return n } -func (m *EstimateSwapExactAmountOutResponse) Size() (n int) { +func (m *EstimateSinglePoolSwapExactAmountOutRequest) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = m.TokenInAmount.Size() - n += 1 + l + sovQuery(uint64(l)) - return n -} - + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + l = len(m.TokenInDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.TokenOut) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *EstimateSwapExactAmountOutResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TokenInAmount.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + func (m *NumPoolsRequest) Size() (n int) { if m == nil { return 0 @@ -1967,9 +2261,28 @@ func (m *EstimateSwapExactAmountInRequest) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: EstimateSwapExactAmountInRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1997,9 +2310,93 @@ func (m *EstimateSwapExactAmountInRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Sender = string(dAtA[iNdEx:postIndex]) + m.TokenIn = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Routes = append(m.Routes, types.SwapAmountInRoute{}) + if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EstimateSinglePoolSwapExactAmountInRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EstimateSinglePoolSwapExactAmountInRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EstimateSinglePoolSwapExactAmountInRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) } @@ -2018,7 +2415,7 @@ func (m *EstimateSwapExactAmountInRequest) Unmarshal(dAtA []byte) error { break } } - case 3: + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field TokenIn", wireType) } @@ -2050,11 +2447,11 @@ func (m *EstimateSwapExactAmountInRequest) Unmarshal(dAtA []byte) error { } m.TokenIn = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TokenOutDenom", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -2064,25 +2461,23 @@ func (m *EstimateSwapExactAmountInRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Routes = append(m.Routes, types.SwapAmountInRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.TokenOutDenom = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -2218,9 +2613,62 @@ func (m *EstimateSwapExactAmountOutRequest) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: EstimateSwapExactAmountOutRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Routes = append(m.Routes, types.SwapAmountOutRoute{}) + if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -2248,9 +2696,59 @@ func (m *EstimateSwapExactAmountOutRequest) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Sender = string(dAtA[iNdEx:postIndex]) + m.TokenOut = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EstimateSinglePoolSwapExactAmountOutRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EstimateSinglePoolSwapExactAmountOutRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EstimateSinglePoolSwapExactAmountOutRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) } @@ -2269,11 +2767,11 @@ func (m *EstimateSwapExactAmountOutRequest) Unmarshal(dAtA []byte) error { break } } - case 3: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Routes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TokenInDenom", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -2283,27 +2781,25 @@ func (m *EstimateSwapExactAmountOutRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - m.Routes = append(m.Routes, types.SwapAmountOutRoute{}) - if err := m.Routes[len(m.Routes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.TokenInDenom = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field TokenOut", wireType) } diff --git a/x/poolmanager/client/queryproto/query.pb.gw.go b/x/poolmanager/client/queryproto/query.pb.gw.go index 9e78b4e101c..12f69e4355f 100644 --- a/x/poolmanager/client/queryproto/query.pb.gw.go +++ b/x/poolmanager/client/queryproto/query.pb.gw.go @@ -123,6 +123,78 @@ func local_request_Query_EstimateSwapExactAmountIn_0(ctx context.Context, marsha } +var ( + filter_Query_EstimateSinglePoolSwapExactAmountIn_0 = &utilities.DoubleArray{Encoding: map[string]int{"pool_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_EstimateSinglePoolSwapExactAmountIn_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq EstimateSinglePoolSwapExactAmountInRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pool_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") + } + + protoReq.PoolId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EstimateSinglePoolSwapExactAmountIn_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EstimateSinglePoolSwapExactAmountIn(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_EstimateSinglePoolSwapExactAmountIn_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq EstimateSinglePoolSwapExactAmountInRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pool_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") + } + + protoReq.PoolId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EstimateSinglePoolSwapExactAmountIn_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EstimateSinglePoolSwapExactAmountIn(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Query_EstimateSwapExactAmountOut_0 = &utilities.DoubleArray{Encoding: map[string]int{"pool_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -195,6 +267,78 @@ func local_request_Query_EstimateSwapExactAmountOut_0(ctx context.Context, marsh } +var ( + filter_Query_EstimateSinglePoolSwapExactAmountOut_0 = &utilities.DoubleArray{Encoding: map[string]int{"pool_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_EstimateSinglePoolSwapExactAmountOut_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq EstimateSinglePoolSwapExactAmountOutRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pool_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") + } + + protoReq.PoolId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EstimateSinglePoolSwapExactAmountOut_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EstimateSinglePoolSwapExactAmountOut(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_EstimateSinglePoolSwapExactAmountOut_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq EstimateSinglePoolSwapExactAmountOutRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["pool_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pool_id") + } + + protoReq.PoolId, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pool_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EstimateSinglePoolSwapExactAmountOut_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EstimateSinglePoolSwapExactAmountOut(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_NumPools_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq NumPoolsRequest var metadata runtime.ServerMetadata @@ -427,6 +571,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_EstimateSinglePoolSwapExactAmountIn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_EstimateSinglePoolSwapExactAmountIn_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EstimateSinglePoolSwapExactAmountIn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_EstimateSwapExactAmountOut_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -450,6 +617,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_EstimateSinglePoolSwapExactAmountOut_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_EstimateSinglePoolSwapExactAmountOut_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EstimateSinglePoolSwapExactAmountOut_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_NumPools_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -623,6 +813,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_EstimateSinglePoolSwapExactAmountIn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_EstimateSinglePoolSwapExactAmountIn_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EstimateSinglePoolSwapExactAmountIn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_EstimateSwapExactAmountOut_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -643,6 +853,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_EstimateSinglePoolSwapExactAmountOut_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_EstimateSinglePoolSwapExactAmountOut_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EstimateSinglePoolSwapExactAmountOut_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_NumPools_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -729,9 +959,13 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie var ( pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"osmosis", "poolmanager", "v1beta1", "Params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_EstimateSwapExactAmountIn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pool_id", "estimate", "swap_exact_amount_in"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EstimateSwapExactAmountIn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"osmosis", "poolmanager", "v1beta1", "pool_id", "estimate", "swap_exact_amount_in"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_EstimateSinglePoolSwapExactAmountIn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"osmosis", "poolmanager", "v1beta1", "pool_id", "estimate", "single_pool_swap_exact_amount_in"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_EstimateSwapExactAmountOut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"osmosis", "gamm", "v1beta1", "pool_id", "estimate", "swap_exact_amount_out"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EstimateSwapExactAmountOut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"osmosis", "poolmanager", "v1beta1", "pool_id", "estimate", "swap_exact_amount_out"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_EstimateSinglePoolSwapExactAmountOut_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"osmosis", "poolmanager", "v1beta1", "pool_id", "estimate_out", "single_pool_swap_exact_amount_out"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_NumPools_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"osmosis", "poolmanager", "v1beta1", "num_pools"}, "", runtime.AssumeColonVerbOpt(false))) @@ -747,8 +981,12 @@ var ( forward_Query_EstimateSwapExactAmountIn_0 = runtime.ForwardResponseMessage + forward_Query_EstimateSinglePoolSwapExactAmountIn_0 = runtime.ForwardResponseMessage + forward_Query_EstimateSwapExactAmountOut_0 = runtime.ForwardResponseMessage + forward_Query_EstimateSinglePoolSwapExactAmountOut_0 = runtime.ForwardResponseMessage + forward_Query_NumPools_0 = runtime.ForwardResponseMessage forward_Query_Pool_0 = runtime.ForwardResponseMessage diff --git a/x/poolmanager/types/swap_route.pb.go b/x/poolmanager/types/swap_route.pb.go index 22cb811f5c1..44fd3f26206 100644 --- a/x/poolmanager/types/swap_route.pb.go +++ b/x/poolmanager/types/swap_route.pb.go @@ -77,7 +77,7 @@ func (m *SwapAmountInRoute) GetTokenOutDenom() string { type SwapAmountOutRoute struct { PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty" yaml:"pool_id"` - TokenInDenom string `protobuf:"bytes,2,opt,name=token_in_denom,json=tokenInDenom,proto3" json:"token_in_denom,omitempty" yaml:"token_out_denom"` + TokenInDenom string `protobuf:"bytes,2,opt,name=token_in_denom,json=tokenInDenom,proto3" json:"token_in_denom,omitempty" yaml:"token_in_denom"` } func (m *SwapAmountOutRoute) Reset() { *m = SwapAmountOutRoute{} } @@ -137,7 +137,7 @@ func init() { } var fileDescriptor_cddd97a9a05492a8 = []byte{ - // 292 bytes of a gzipped FileDescriptorProto + // 304 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0xc9, 0x2f, 0xce, 0xcd, 0x2f, 0xce, 0x2c, 0xd6, 0x2f, 0xc8, 0xcf, 0xcf, 0xc9, 0x4d, 0xcc, 0x4b, 0x4c, 0x4f, 0x2d, 0xd2, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x2f, 0x2e, 0x4f, 0x2c, 0x88, 0x2f, 0xca, 0x2f, @@ -149,14 +149,14 @@ var fileDescriptor_cddd97a9a05492a8 = []byte{ 0x42, 0x29, 0x88, 0x0d, 0xc4, 0xf2, 0x4c, 0x11, 0x72, 0xe2, 0xe2, 0x2f, 0xc9, 0xcf, 0x4e, 0xcd, 0x8b, 0xcf, 0x2f, 0x2d, 0x89, 0x4f, 0x49, 0xcd, 0xcb, 0xcf, 0x95, 0x60, 0x52, 0x60, 0xd4, 0xe0, 0x74, 0x92, 0xfa, 0x74, 0x4f, 0x5e, 0x0c, 0xa2, 0x09, 0x4d, 0x81, 0x52, 0x10, 0x2f, 0x58, 0xc4, - 0xbf, 0xb4, 0xc4, 0x05, 0xcc, 0x6f, 0x66, 0xe4, 0x12, 0x42, 0x38, 0xc3, 0xbf, 0xb4, 0x84, 0x0c, - 0x77, 0x38, 0x70, 0xf1, 0x41, 0xac, 0xc9, 0xcc, 0x23, 0xda, 0x19, 0x3c, 0x60, 0x11, 0xcf, 0x3c, - 0xb0, 0x2b, 0x9c, 0x02, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, - 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0xca, 0x3c, - 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x1f, 0x1a, 0xc8, 0xba, 0x39, 0x89, - 0x49, 0xc5, 0x30, 0x8e, 0x7e, 0x99, 0xa1, 0xa9, 0x7e, 0x05, 0x4a, 0x2c, 0x95, 0x54, 0x16, 0xa4, - 0x16, 0x27, 0xb1, 0x81, 0x83, 0xd9, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x2c, 0x01, 0x52, 0x52, - 0xc9, 0x01, 0x00, 0x00, + 0xbf, 0xb4, 0xc4, 0x05, 0xcc, 0x6f, 0x62, 0xe4, 0x12, 0x42, 0x38, 0xc3, 0xbf, 0xb4, 0x84, 0x0c, + 0x77, 0xd8, 0x73, 0xf1, 0x41, 0xac, 0xc9, 0xcc, 0x43, 0x71, 0x86, 0xe4, 0xa7, 0x7b, 0xf2, 0xa2, + 0xc8, 0xce, 0x80, 0xc9, 0x2b, 0x05, 0xf1, 0x80, 0x05, 0x3c, 0xf3, 0xc0, 0x8e, 0x70, 0x0a, 0x3c, + 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, + 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xf3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, + 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0x7d, 0x68, 0x18, 0xeb, 0xe6, 0x24, 0x26, 0x15, 0xc3, 0x38, 0xfa, + 0x65, 0x86, 0xa6, 0xfa, 0x15, 0x28, 0x91, 0x54, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x0e, + 0x65, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x11, 0x78, 0xbd, 0xc8, 0x01, 0x00, 0x00, } func (m *SwapAmountInRoute) Marshal() (dAtA []byte, err error) { From afbc5b09c63dc6c2d72ad55d78fe7bee605e9b74 Mon Sep 17 00:00:00 2001 From: Nguyen Thanh Nhan Date: Fri, 24 Mar 2023 22:13:32 +0700 Subject: [PATCH 07/14] Revert "[tests/e2e]: simplify the logic for adding accounts to genesis sdk side and integrate into e2e (#4706)" (#4727) This reverts commit a9725d6ec860b3873420ae7bc0da7c93b47a4653. --- tests/e2e/initialization/config.go | 70 ++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/tests/e2e/initialization/config.go b/tests/e2e/initialization/config.go index 0611ab872fa..062c4d20871 100644 --- a/tests/e2e/initialization/config.go +++ b/tests/e2e/initialization/config.go @@ -8,9 +8,10 @@ import ( "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" - authhelpers "github.com/cosmos/cosmos-sdk/x/auth/helpers" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" + "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" staketypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -123,11 +124,72 @@ func addAccount(path, moniker, amountStr string, accAddr sdk.AccAddress, forkHei config.SetRoot(path) config.Moniker = moniker - feeToken := sdk.NewCoin(E2EFeeToken, sdk.NewInt(GenesisFeeBalance)) - amountStr = amountStr + "," + feeToken.String() + coins, err := sdk.ParseCoinsNormalized(amountStr) + if err != nil { + return fmt.Errorf("failed to parse coins: %w", err) + } + coins = coins.Add(sdk.NewCoin(E2EFeeToken, sdk.NewInt(GenesisFeeBalance))) + + balances := banktypes.Balance{Address: accAddr.String(), Coins: coins.Sort()} + genAccount := authtypes.NewBaseAccount(accAddr, nil, 0, 0) + + // TODO: Make the SDK make it far cleaner to add an account to GenesisState genFile := config.GenesisFile() + appState, genDoc, err := genutiltypes.GenesisStateFromGenFile(genFile) + if err != nil { + return fmt.Errorf("failed to unmarshal genesis state: %w", err) + } + + genDoc.InitialHeight = int64(forkHeight) + + authGenState := authtypes.GetGenesisStateFromAppState(util.Cdc, appState) + + accs, err := authtypes.UnpackAccounts(authGenState.Accounts) + if err != nil { + return fmt.Errorf("failed to get accounts from any: %w", err) + } + + if accs.Contains(accAddr) { + return fmt.Errorf("failed to add account to genesis state; account already exists: %s", accAddr) + } + + // Add the new account to the set of genesis accounts and sanitize the + // accounts afterwards. + accs = append(accs, genAccount) + accs = authtypes.SanitizeGenesisAccounts(accs) + + genAccs, err := authtypes.PackAccounts(accs) + if err != nil { + return fmt.Errorf("failed to convert accounts into any's: %w", err) + } + + authGenState.Accounts = genAccs + + authGenStateBz, err := util.Cdc.MarshalJSON(&authGenState) + if err != nil { + return fmt.Errorf("failed to marshal auth genesis state: %w", err) + } + + appState[authtypes.ModuleName] = authGenStateBz + + bankGenState := banktypes.GetGenesisStateFromAppState(util.Cdc, appState) + bankGenState.Balances = append(bankGenState.Balances, balances) + bankGenState.Balances = banktypes.SanitizeGenesisBalances(bankGenState.Balances) + + bankGenStateBz, err := util.Cdc.MarshalJSON(bankGenState) + if err != nil { + return fmt.Errorf("failed to marshal bank genesis state: %w", err) + } + + appState[banktypes.ModuleName] = bankGenStateBz + + appStateJSON, err := json.Marshal(appState) + if err != nil { + return fmt.Errorf("failed to marshal application genesis state: %w", err) + } - return authhelpers.AddGenesisAccount(util.Cdc, accAddr, false, genFile, amountStr, "", 0, 0) + genDoc.AppState = appStateJSON + return genutil.ExportGenesisFile(genDoc, genFile) } func updateModuleGenesis[V proto.Message](appGenState map[string]json.RawMessage, moduleName string, protoVal V, updateGenesis func(V)) error { From 243b594403f46699cd79db27887741c78e1b67a5 Mon Sep 17 00:00:00 2001 From: David Terpay <35130517+davidterpay@users.noreply.github.com> Date: Fri, 24 Mar 2023 11:46:23 -0400 Subject: [PATCH 08/14] ProtoRev: Adding Txs to CLI (#4567) * init set hot routes cli command * adding remaining txs * few more tests * comments --- x/protorev/client/cli/query.go | 11 +- x/protorev/client/cli/tx.go | 163 +++++++++++++++++- x/protorev/client/cli/utils.go | 245 +++++++++++++++++++++++++++ x/protorev/keeper/msg_server.go | 18 ++ x/protorev/keeper/msg_server_test.go | 9 +- x/protorev/protorev.md | 13 +- 6 files changed, 452 insertions(+), 7 deletions(-) create mode 100644 x/protorev/client/cli/utils.go diff --git a/x/protorev/client/cli/query.go b/x/protorev/client/cli/query.go index d54604d31e0..e549e29cc2d 100644 --- a/x/protorev/client/cli/query.go +++ b/x/protorev/client/cli/query.go @@ -28,6 +28,7 @@ func NewCmdQuery() *cobra.Command { osmocli.AddQueryCmd(cmd, types.NewQueryClient, NewQueryMaxPoolPointsPerBlockCmd) osmocli.AddQueryCmd(cmd, types.NewQueryClient, NewQueryBaseDenomsCmd) osmocli.AddQueryCmd(cmd, types.NewQueryClient, NewQueryEnabledCmd) + osmocli.AddQueryCmd(cmd, types.NewQueryClient, NewQueryPoolWeightsCmd) return cmd } @@ -86,7 +87,7 @@ func NewQueryAllRouteStatisticsCmd() (*osmocli.QueryDescriptor, *types.QueryGetP // NewQueryTokenPairArbRoutesCmd returns the command to query the token pair arb routes func NewQueryTokenPairArbRoutesCmd() (*osmocli.QueryDescriptor, *types.QueryGetProtoRevTokenPairArbRoutesRequest) { return &osmocli.QueryDescriptor{ - Use: "token-pair-arb-routes", + Use: "hot-routes", Short: "Query the ProtoRev hot routes currently being used", }, &types.QueryGetProtoRevTokenPairArbRoutesRequest{} } @@ -139,6 +140,14 @@ func NewQueryEnabledCmd() (*osmocli.QueryDescriptor, *types.QueryGetProtoRevEnab }, &types.QueryGetProtoRevEnabledRequest{} } +// NewQueryPoolWeightsCmd returns the command to query the pool weights of protorev +func NewQueryPoolWeightsCmd() (*osmocli.QueryDescriptor, *types.QueryGetProtoRevPoolWeightsRequest) { + return &osmocli.QueryDescriptor{ + Use: "pool-weights", + Short: "Query the pool weights used to determine how computationally expensive a route is", + }, &types.QueryGetProtoRevPoolWeightsRequest{} +} + // convert a string array "[1,2,3]" to []uint64 func parseRoute(arg string, _ *pflag.FlagSet) (any, osmocli.FieldReadLocation, error) { var route []uint64 diff --git a/x/protorev/client/cli/tx.go b/x/protorev/client/cli/tx.go index a774d99f290..f0f49c2222e 100644 --- a/x/protorev/client/cli/tx.go +++ b/x/protorev/client/cli/tx.go @@ -5,11 +5,13 @@ import ( "strconv" "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/gov/client/cli" "github.com/spf13/cobra" + "github.com/spf13/pflag" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" @@ -22,17 +24,174 @@ import ( // NewCmdTx returns the cli transaction commands for this module func NewCmdTx() *cobra.Command { txCmd := osmocli.TxIndexCmd(types.ModuleName) + osmocli.AddTxCmd(txCmd, CmdSetDeveloperAccount) + osmocli.AddTxCmd(txCmd, CmdSetMaxPoolPointsPerTx) + osmocli.AddTxCmd(txCmd, CmdSetMaxPoolPointsPerBlock) txCmd.AddCommand( + CmdSetDeveloperHotRoutes().BuildCommandCustomFn(), + CmdSetPoolWeights().BuildCommandCustomFn(), + CmdSetBaseDenoms().BuildCommandCustomFn(), CmdSetProtoRevAdminAccountProposal(), CmdSetProtoRevEnabledProposal(), ) return txCmd } +// CmdSetDeveloperHotRoutes implements the command to set the protorev hot routes +func CmdSetDeveloperHotRoutes() *osmocli.TxCliDesc { + desc := osmocli.TxCliDesc{ + Use: "set-hot-routes [path/to/routes.json]", + Short: "set the protorev hot routes", + Long: `Must provide a json file with all of the hot routes that will be set. + Sample json file: + [ + { + "token_in": "uosmo", + "token_out": "ibc/123...", + "arb_routes" : [ + { + "trades": [ + { + "pool": 1, + "token_in": "uosmo", + "token_out": "uatom" + }, + { + "pool": 2, + "token_in": "uatom", + "token_out": "ibc/123..." + }, + { + "pool": 0, + "token_in": "ibc/123...", + "token_out": "uosmo" + } + ], + "step_size": 1000000 + } + ] + } + ] + `, + Example: fmt.Sprintf(`$ %s tx protorev set-hot-routes routes.json --from mykey`, version.AppName), + NumArgs: 1, + ParseAndBuildMsg: BuildSetHotRoutesMsg, + } + + return &desc +} + +// CmdSetDeveloperAccount implements the command to set the protorev developer account +func CmdSetDeveloperAccount() (*osmocli.TxCliDesc, *types.MsgSetDeveloperAccount) { + return &osmocli.TxCliDesc{ + Use: "set-developer-account [sdk.AccAddress]", + Short: "set the protorev developer account", + NumArgs: 1, + ParseAndBuildMsg: func(clientCtx client.Context, args []string, flags *pflag.FlagSet) (sdk.Msg, error) { + developer, err := sdk.AccAddressFromBech32(args[0]) + if err != nil { + return nil, err + } + + return &types.MsgSetDeveloperAccount{ + DeveloperAccount: developer.String(), + Admin: clientCtx.GetFromAddress().String(), + }, nil + }, + }, &types.MsgSetDeveloperAccount{} +} + +// CmdSetMaxPoolPointsPerTx implements the command to set the max pool points per tx +func CmdSetMaxPoolPointsPerTx() (*osmocli.TxCliDesc, *types.MsgSetMaxPoolPointsPerTx) { + return &osmocli.TxCliDesc{ + Use: "set-max-pool-points-per-tx [uint64]", + Short: "set the max pool points that can be consumed per tx", + NumArgs: 1, + ParseAndBuildMsg: func(clientCtx client.Context, args []string, flags *pflag.FlagSet) (sdk.Msg, error) { + maxPoolPointsPerTx, err := strconv.ParseUint(args[0], 10, 64) + if err != nil { + return nil, err + } + + return &types.MsgSetMaxPoolPointsPerTx{ + MaxPoolPointsPerTx: maxPoolPointsPerTx, + Admin: clientCtx.GetFromAddress().String(), + }, nil + }, + }, &types.MsgSetMaxPoolPointsPerTx{} +} + +// CmdSetMaxPoolPointsPerBlock implements the command to set the max pool points per block +func CmdSetMaxPoolPointsPerBlock() (*osmocli.TxCliDesc, *types.MsgSetMaxPoolPointsPerBlock) { + return &osmocli.TxCliDesc{ + Use: "set-max-pool-points-per-block [uint64]", + Short: "set the max pool points that can be consumed per block", + NumArgs: 1, + ParseAndBuildMsg: func(clientCtx client.Context, args []string, flags *pflag.FlagSet) (sdk.Msg, error) { + maxPoolPointsPerBlock, err := strconv.ParseUint(args[0], 10, 64) + if err != nil { + return nil, err + } + + return &types.MsgSetMaxPoolPointsPerBlock{ + MaxPoolPointsPerBlock: maxPoolPointsPerBlock, + Admin: clientCtx.GetFromAddress().String(), + }, nil + }, + }, &types.MsgSetMaxPoolPointsPerBlock{} +} + +// CmdSetPoolWeights implements the command to set the pool weights used to estimate execution costs +func CmdSetPoolWeights() *osmocli.TxCliDesc { + desc := osmocli.TxCliDesc{ + Use: "set-pool-weights [path/to/routes.json]", + Short: "set the protorev pool weights", + Long: `Must provide a json file with all the pool weights that will be set. + Sample json file: + { + "stable_weight" : 1, + "balancer_weight" : 1, + "concentrated_weight" : 1 + } + `, + Example: fmt.Sprintf(`$ %s tx protorev set-pool-weights weights.json --from mykey`, version.AppName), + NumArgs: 1, + ParseAndBuildMsg: BuildSetPoolWeightsMsg, + } + + return &desc +} + +// CmdSetBaseDenoms implements the command to set the base denoms used in the highest liquidity method +func CmdSetBaseDenoms() *osmocli.TxCliDesc { + desc := osmocli.TxCliDesc{ + Use: "set-base-denoms [path/to/denoms.json]", + Short: "set the protorev base denoms", + Long: `Must provide a json file with all the base denoms that will be set. + Sample json file: + [ + { + "step_size" : 10000, + "denom" : "uosmo" + }, + { + "step_size" : 10000, + "denom" : "atom" + } + ] + `, + Example: fmt.Sprintf(`$ %s tx protorev set-base-denoms denoms.json --from mykey`, version.AppName), + NumArgs: 1, + ParseAndBuildMsg: BuildSetBaseDenomsMsg, + } + + return &desc +} + // CmdSetProtoRevAdminAccountProposal implements the command to submit a SetProtoRevAdminAccountProposal func CmdSetProtoRevAdminAccountProposal() *cobra.Command { cmd := &cobra.Command{ - Use: "set-protorev-admin-account-proposal [sdk.AccAddress]", + Use: "set-admin-account-proposal [sdk.AccAddress]", Args: cobra.ExactArgs(1), Short: "submit a set protorev admin account proposal to set the admin account for x/protorev", Example: fmt.Sprintf(`$ %s tx protorev set-protorev-admin-account osmo123... --from mykey`, version.AppName), @@ -58,7 +217,7 @@ func CmdSetProtoRevAdminAccountProposal() *cobra.Command { // CmdSetProtoRevEnabledProposal implements the command to submit a SetProtoRevEnabledProposal func CmdSetProtoRevEnabledProposal() *cobra.Command { cmd := &cobra.Command{ - Use: "set-protorev-enabled-proposal [boolean]", + Use: "set-enabled-proposal [boolean]", Args: cobra.ExactArgs(1), Short: "submit a set protorev enabled proposal to enable or disable the protocol", Example: fmt.Sprintf(`$ %s tx protorev set-protorev-enabled true --from mykey`, version.AppName), diff --git a/x/protorev/client/cli/utils.go b/x/protorev/client/cli/utils.go new file mode 100644 index 00000000000..e5900bf4be8 --- /dev/null +++ b/x/protorev/client/cli/utils.go @@ -0,0 +1,245 @@ +package cli + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + + "github.com/cosmos/cosmos-sdk/client" + sdk "github.com/cosmos/cosmos-sdk/types" + flag "github.com/spf13/pflag" + + "github.com/osmosis-labs/osmosis/v15/x/protorev/types" +) + +// ------------ types/functions to handle a SetHotRoutes CLI TX ------------ // +type Trade struct { + Pool uint64 `json:"pool"` + TokenIn string `json:"token_in"` + TokenOut string `json:"token_out"` +} + +type ArbRoutes struct { + Trades []Trade `json:"trades"` + StepSize uint64 `json:"step_size"` +} + +type hotRoutesInput struct { + TokenIn string `json:"token_in"` + TokenOut string `json:"token_out"` + ArbRoutes []ArbRoutes `json:"arb_routes"` +} + +type createArbRoutesInput []hotRoutesInput + +type XCreateHotRoutesInputs hotRoutesInput + +type XCreateHotRoutesExceptions struct { + XCreateHotRoutesInputs + Other *string // Other won't raise an error +} + +// UnmarshalJSON should error if there are fields unexpected. +func (release *createArbRoutesInput) UnmarshalJSON(data []byte) error { + var createHotRoutesE []XCreateHotRoutesExceptions + dec := json.NewDecoder(bytes.NewReader(data)) + dec.DisallowUnknownFields() // Force + + if err := dec.Decode(&createHotRoutesE); err != nil { + return err + } + + routes := make([]hotRoutesInput, 0) + for _, route := range createHotRoutesE { + routes = append(routes, hotRoutesInput(route.XCreateHotRoutesInputs)) + } + + *release = createArbRoutesInput(routes) + return nil +} + +// extractTokenPairArbRoutes builds all of the TokenPairArbRoutes that were extracted from the json file +func (release *createArbRoutesInput) extractTokenPairArbRoutes() []types.TokenPairArbRoutes { + if release == nil { + return nil + } + + tokenPairArbRoutes := make([]types.TokenPairArbRoutes, 0) + + // Iterate through each hot route and construct the token pair arb routes + for _, hotRoute := range *release { + current := types.TokenPairArbRoutes{} + current.TokenIn = hotRoute.TokenIn + current.TokenOut = hotRoute.TokenOut + + for _, arbRoute := range hotRoute.ArbRoutes { + currentArbRoute := types.Route{} + currentArbRoute.StepSize = sdk.NewIntFromUint64(arbRoute.StepSize) + + for _, trade := range arbRoute.Trades { + currentTrade := types.Trade{} + currentTrade.Pool = trade.Pool + currentTrade.TokenIn = trade.TokenIn + currentTrade.TokenOut = trade.TokenOut + currentArbRoute.Trades = append(currentArbRoute.Trades, currentTrade) + } + + current.ArbRoutes = append(current.ArbRoutes, currentArbRoute) + } + + tokenPairArbRoutes = append(tokenPairArbRoutes, current) + } + + return tokenPairArbRoutes +} + +// BuildSetHotRoutesMsg builds a MsgSetHotRoutes from the provided json file +func BuildSetHotRoutesMsg(clientCtx client.Context, args []string, fs *flag.FlagSet) (sdk.Msg, error) { + if len(args) == 0 { + return nil, fmt.Errorf("must provide a json file") + } + + // Read the json file + input := &createArbRoutesInput{} + path := args[0] + contents, err := os.ReadFile(path) + if err != nil { + return nil, err + } + + // Unmarshal the json file + if err := input.UnmarshalJSON(contents); err != nil { + return nil, err + } + + // Build the msg + tokenPairArbRoutes := input.extractTokenPairArbRoutes() + admin := clientCtx.GetFromAddress().String() + return &types.MsgSetHotRoutes{ + Admin: admin, + HotRoutes: tokenPairArbRoutes, + }, nil +} + +// ------------ types/functions to handle a SetPoolWeights CLI TX ------------ // +type createPoolWeightsInput types.PoolWeights + +type XCreatePoolWeightsInputs createPoolWeightsInput + +type XCreatePoolWeightsExceptions struct { + XCreatePoolWeightsInputs + Other *string // Other won't raise an error +} + +// UnmarshalJSON should error if there are fields unexpected. +func (release *createPoolWeightsInput) UnmarshalJSON(data []byte) error { + var createPoolWeightsE XCreatePoolWeightsExceptions + dec := json.NewDecoder(bytes.NewReader(data)) + dec.DisallowUnknownFields() // Force + + if err := dec.Decode(&createPoolWeightsE); err != nil { + return err + } + + *release = createPoolWeightsInput(createPoolWeightsE.XCreatePoolWeightsInputs) + return nil +} + +// BuildSetPoolWeightsMsg builds a MsgSetPoolWeights from the provided json file +func BuildSetPoolWeightsMsg(clientCtx client.Context, args []string, fs *flag.FlagSet) (sdk.Msg, error) { + if len(args) == 0 { + return nil, fmt.Errorf("must provide a json file") + } + + // Read the json file + input := &createPoolWeightsInput{} + path := args[0] + contents, err := os.ReadFile(path) + if err != nil { + return nil, err + } + + // Unmarshal the json file + if err := input.UnmarshalJSON(contents); err != nil { + return nil, err + } + + // Build the msg + admin := clientCtx.GetFromAddress().String() + return &types.MsgSetPoolWeights{ + Admin: admin, + PoolWeights: types.PoolWeights(*input), + }, nil +} + +// ------------ types/functions to handle a SetBaseDenoms CLI TX ------------ // +type baseDenomInput struct { + Denom string `json:"denom"` + StepSize uint64 `json:"step_size"` +} + +type createBaseDenomsInput []baseDenomInput + +type XCreateBaseDenomsInputs baseDenomInput + +type XCreateBaseDenomsException struct { + XCreateBaseDenomsInputs + Other *string // Other won't raise an error +} + +// UnmarshalJSON should error if there are fields unexpected. +func (release *createBaseDenomsInput) UnmarshalJSON(data []byte) error { + var createBaseDenomsE []XCreateBaseDenomsException + dec := json.NewDecoder(bytes.NewReader(data)) + dec.DisallowUnknownFields() // Force + + if err := dec.Decode(&createBaseDenomsE); err != nil { + return err + } + + baseDenoms := make([]baseDenomInput, 0) + for _, denom := range createBaseDenomsE { + baseDenoms = append(baseDenoms, baseDenomInput(denom.XCreateBaseDenomsInputs)) + } + + *release = createBaseDenomsInput(baseDenoms) + + return nil +} + +// BuildSetBaseDenomsMsg builds a MsgSetBaseDenoms from the provided json file +func BuildSetBaseDenomsMsg(clientCtx client.Context, args []string, fs *flag.FlagSet) (sdk.Msg, error) { + if len(args) == 0 { + return nil, fmt.Errorf("must provide a json file") + } + + // Read the json file + input := &createBaseDenomsInput{} + path := args[0] + contents, err := os.ReadFile(path) + if err != nil { + return nil, err + } + + // Unmarshal the json file + if err := input.UnmarshalJSON(contents); err != nil { + return nil, err + } + + // Build the base denoms + baseDenoms := make([]types.BaseDenom, 0) + for _, baseDenom := range *input { + baseDenoms = append(baseDenoms, types.BaseDenom{ + Denom: baseDenom.Denom, + StepSize: sdk.NewIntFromUint64(baseDenom.StepSize), + }) + } + + // Build the msg + admin := clientCtx.GetFromAddress().String() + return &types.MsgSetBaseDenoms{ + Admin: admin, + BaseDenoms: baseDenoms, + }, nil +} diff --git a/x/protorev/keeper/msg_server.go b/x/protorev/keeper/msg_server.go index 193123624ba..386a7f803db 100644 --- a/x/protorev/keeper/msg_server.go +++ b/x/protorev/keeper/msg_server.go @@ -71,6 +71,15 @@ func (m MsgServer) SetMaxPoolPointsPerTx(c context.Context, msg *types.MsgSetMax return nil, err } + maxPointsPerBlock, err := m.k.GetMaxPointsPerBlock(ctx) + if err != nil { + return nil, err + } + + if msg.MaxPoolPointsPerTx > maxPointsPerBlock { + return nil, fmt.Errorf("max pool points per tx cannot be greater than max pool points per block") + } + // Set the max pool points per tx if err := m.k.SetMaxPointsPerTx(ctx, msg.MaxPoolPointsPerTx); err != nil { return nil, err @@ -88,6 +97,15 @@ func (m MsgServer) SetMaxPoolPointsPerBlock(c context.Context, msg *types.MsgSet return nil, err } + maxPointsPerTx, err := m.k.GetMaxPointsPerTx(ctx) + if err != nil { + return nil, err + } + + if msg.MaxPoolPointsPerBlock < maxPointsPerTx { + return nil, fmt.Errorf("max pool points per block cannot be less than max pool points per tx") + } + // Set the max pool points per block if err := m.k.SetMaxPointsPerBlock(ctx, msg.MaxPoolPointsPerBlock); err != nil { return nil, err diff --git a/x/protorev/keeper/msg_server_test.go b/x/protorev/keeper/msg_server_test.go index b463c4c43a1..9d36a56f5f5 100644 --- a/x/protorev/keeper/msg_server_test.go +++ b/x/protorev/keeper/msg_server_test.go @@ -410,9 +410,16 @@ func (suite *KeeperTestSuite) TestMsgSetMaxPoolPointsPerBlock() { { "Valid message (correct admin)", suite.adminAccount.String(), - 1, + 50, + true, true, + }, + { + "Invalid message (correct admin but less points than max pool points per tx)", + suite.adminAccount.String(), + 17, true, + false, }, { "Valid message (correct admin, valid max pool points per block)", diff --git a/x/protorev/protorev.md b/x/protorev/protorev.md index c09a1703800..f7501498b2d 100644 --- a/x/protorev/protorev.md +++ b/x/protorev/protorev.md @@ -627,20 +627,27 @@ osmosisd query protorev params | query protorev | all-profits | Queries all ProtoRev profits | | query protorev | statistics-by-route [route] where route is the list of pool ids i.e. [1,2,3] | Queries ProtoRev statistics by route | | query protorev | all-statistics | Queries all ProtoRev statistics | -| query protorev | token-pair-arb-routes | Queries the ProtoRev token pair arb routes | +| query protorev | hot-routes | Queries the ProtoRev token pair arb routes | | query protorev | admin-account | Queries the ProtoRev admin account | | query protorev | developer-account | Queries the ProtoRev developer account | | query protorev | max-pool-points-per-tx | Queries the ProtoRev max pool points per transaction | | query protorev | max-pool-points-per-block | Queries the ProtoRev max pool points per block | | query protorev | base-denoms | Queries the ProtoRev base denoms used to create cyclic arbitrage routes | | query protorev | enabled | Queries whether the ProtoRev module is currently enabled | +| query protorev | pool-weights | Queries the pool weights used to determine how computationally expensive a route is | ### Proposals | Command | Subcommand | Description | | --- | --- | --- | -| tx protorev | set-protorev-admin-account-proposal [sdk.AccAddress] | Submit a proposal to set the admin account for ProtoRev | -| tx protorev | set-protorev-enabled-proposal [boolean] | Submit a proposal to disable/enable the ProtoRev module | +| tx protorev | set-pool-weights [path/to/file.json] | Submit a tx to set the pool weights for ProtoRev | +| tx protorev | set-hot-routes [path/to/file.json] | Submit a tx to set the hot routes for ProtoRev | +| tx protorev | set-base-denoms [path/to/file.json] | Submit a tx to set the base denoms for ProtoRev | +| tx protorev | set-max-pool-points-per-block [uint64] | Submit a tx to set the max pool points per block for ProtoRev | +| tx protorev | set-max-pool-points-per-tx [uint64] | Submit a tx to set the max pool points per transaction for ProtoRev | +| tx protorev | set-developer-account [sdk.AccAddress] | Submit a tx to set the developer account for ProtoRev | +| tx protorev | set-admin-account-proposal [sdk.AccAddress] | Submit a proposal to set the admin account for ProtoRev | +| tx protorev | set-enabled-proposal [boolean] | Submit a proposal to disable/enable the ProtoRev module | ## gRPC & REST From d099e545db49605481db798f7e361e4080b74edc Mon Sep 17 00:00:00 2001 From: Adam Tucker Date: Fri, 24 Mar 2023 13:16:13 -0500 Subject: [PATCH 09/14] Update upgrade_test.go (#4734) --- app/upgrades/v15/upgrade_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/upgrades/v15/upgrade_test.go b/app/upgrades/v15/upgrade_test.go index 8d43c3ebb5e..74ee75ac6f2 100644 --- a/app/upgrades/v15/upgrade_test.go +++ b/app/upgrades/v15/upgrade_test.go @@ -201,7 +201,8 @@ func (suite *UpgradeTestSuite) TestSetICQParams() { v15.SetICQParams(suite.Ctx, suite.App.ICQKeeper) suite.Require().True(suite.App.ICQKeeper.IsHostEnabled(suite.Ctx)) - suite.Require().Len(suite.App.ICQKeeper.GetAllowQueries(suite.Ctx), 67) + // commented out for historical reasons since v15 upgrade is now over. + // suite.Require().Len(suite.App.ICQKeeper.GetAllowQueries(suite.Ctx), 65) } func (suite *UpgradeTestSuite) TestSetRateLimits() { From f5c60e2ab223a1e3246997b01499e3e2c54694be Mon Sep 17 00:00:00 2001 From: alpo Date: Fri, 24 Mar 2023 11:20:43 -0700 Subject: [PATCH 10/14] refactor tests and fix incentive forfeiting bug --- x/concentrated-liquidity/export_test.go | 2 +- x/concentrated-liquidity/incentives.go | 31 +++--- x/concentrated-liquidity/incentives_test.go | 102 ++++++++++---------- x/concentrated-liquidity/lp.go | 2 +- x/concentrated-liquidity/lp_test.go | 35 ++----- 5 files changed, 78 insertions(+), 94 deletions(-) diff --git a/x/concentrated-liquidity/export_test.go b/x/concentrated-liquidity/export_test.go index 9c8ee20d6bf..95c666ea146 100644 --- a/x/concentrated-liquidity/export_test.go +++ b/x/concentrated-liquidity/export_test.go @@ -244,7 +244,7 @@ func PrepareAccumAndClaimRewards(accum accum.AccumulatorObject, positionKey stri return prepareAccumAndClaimRewards(accum, positionKey, growthOutside) } -func (k Keeper) ClaimAllIncentivesForPosition(ctx sdk.Context, positionId uint64) (sdk.Coins, error) { +func (k Keeper) ClaimAllIncentivesForPosition(ctx sdk.Context, positionId uint64) (sdk.Coins, sdk.Coins, error) { return k.claimAllIncentivesForPosition(ctx, positionId) } diff --git a/x/concentrated-liquidity/incentives.go b/x/concentrated-liquidity/incentives.go index ae1901115f7..70dfcb2eab2 100644 --- a/x/concentrated-liquidity/incentives.go +++ b/x/concentrated-liquidity/incentives.go @@ -510,34 +510,39 @@ func prepareAccumAndClaimRewards(accum accum.AccumulatorObject, positionKey stri } // claimAllIncentivesForPosition claims and returns all the incentives for a given position. -// It takes in a `forfeitIncentives` boolean to indicate whether the accrued incentives should be forfeited, in which case it -// redeposits the accrued rewards back into the accumulator as additional rewards for other participants. -func (k Keeper) claimAllIncentivesForPosition(ctx sdk.Context, positionId uint64) (sdk.Coins, error) { +// It claims all the incentives that the position is eligible for and forfeits the rest by redepositing them back +// into the accumulator (effectively redistributing them to the other LPs). +// +// Returns the amount of successfully claimed incentives and the amount of forfeited incentives. +// Returns error if the position/uptime accumulators don't exist, or if there is an issue that arises while claiming. +func (k Keeper) claimAllIncentivesForPosition(ctx sdk.Context, positionId uint64) (sdk.Coins, sdk.Coins, error) { // Retrieve the position with the given ID. position, err := k.GetPosition(ctx, positionId) if err != nil { - return sdk.Coins{}, err + return sdk.Coins{}, sdk.Coins{}, err } + // TODO: add validation to ensure this is never negative positionAge := ctx.BlockTime().Sub(position.JoinTime) // Retrieve the uptime accumulators for the position's pool. uptimeAccumulators, err := k.getUptimeAccumulators(ctx, position.PoolId) if err != nil { - return sdk.Coins{}, err + return sdk.Coins{}, sdk.Coins{}, err } // Compute uptime growth outside of the range between lower tick and upper tick uptimeGrowthOutside, err := k.GetUptimeGrowthOutsideRange(ctx, position.PoolId, position.LowerTick, position.UpperTick) if err != nil { - return sdk.Coins{}, err + return sdk.Coins{}, sdk.Coins{}, err } // Create a variable to hold the name of the position. positionName := string(types.KeyPositionId(positionId)) - // Create a variable to hold the total collected incentives for the position. + // Create variables to hold the total collected and forfeited incentives for the position. collectedIncentivesForPosition := sdk.Coins{} + forfeitedIncentivesForPosition := sdk.Coins{} supportedUptimes := types.SupportedUptimes @@ -546,27 +551,30 @@ func (k Keeper) claimAllIncentivesForPosition(ctx sdk.Context, positionId uint64 // Check if the accumulator contains the position. hasPosition, err := uptimeAccum.HasPosition(positionName) if err != nil { - return sdk.Coins{}, err + return sdk.Coins{}, sdk.Coins{}, err } // If the accumulator contains the position, claim the position's incentives. if hasPosition { collectedIncentivesForUptime, err := prepareAccumAndClaimRewards(uptimeAccum, positionName, uptimeGrowthOutside[uptimeIndex]) if err != nil { - return sdk.Coins{}, err + return sdk.Coins{}, sdk.Coins{}, err } // If the claimed incentives are forfeited, deposit them back into the accumulator to be distributed // to other qualifying positions. if positionAge < supportedUptimes[uptimeIndex] { uptimeAccum.AddToAccumulator(sdk.NewDecCoinsFromCoins(collectedIncentivesForUptime...)) + + forfeitedIncentivesForPosition = forfeitedIncentivesForPosition.Add(collectedIncentivesForUptime...) + continue } collectedIncentivesForPosition = collectedIncentivesForPosition.Add(collectedIncentivesForUptime...) } } - return collectedIncentivesForPosition, nil + return collectedIncentivesForPosition, forfeitedIncentivesForPosition, nil } // collectIncentives collects incentives for all uptime accumulators for the specified position id. @@ -583,7 +591,8 @@ func (k Keeper) collectIncentives(ctx sdk.Context, owner sdk.AccAddress, positio } // Claim all incentives for the position. - collectedIncentivesForPosition, err := k.claimAllIncentivesForPosition(ctx, position.PositionId) + // TODO: consider returning forfeited rewards as well + collectedIncentivesForPosition, _, err := k.claimAllIncentivesForPosition(ctx, position.PositionId) if err != nil { return sdk.Coins{}, err } diff --git a/x/concentrated-liquidity/incentives_test.go b/x/concentrated-liquidity/incentives_test.go index fa8cc228ddb..8fde41358a9 100644 --- a/x/concentrated-liquidity/incentives_test.go +++ b/x/concentrated-liquidity/incentives_test.go @@ -169,11 +169,11 @@ func expectedIncentivesFromRate(denom string, rate sdk.Dec, timeElapsed time.Dur // towards result. Takes in a multiplier parameter for further versatility in testing. // // Returns value as truncated sdk.Coins as the primary use of this helper is testing higher level incentives functions such as claiming. -func expectedIncentivesFromUptimeGrowth(uptimeGrowths []sdk.DecCoins, positionShares sdk.Dec, freezeDuration time.Duration, multiplier sdk.Int) sdk.Coins { +func expectedIncentivesFromUptimeGrowth(uptimeGrowths []sdk.DecCoins, positionShares sdk.Dec, timeInPool time.Duration, multiplier sdk.Int) sdk.Coins { // Sum up rewards from all inputs totalRewards := sdk.DecCoins(nil) for uptimeIndex, uptimeGrowth := range uptimeGrowths { - if freezeDuration >= types.SupportedUptimes[uptimeIndex] { + if timeInPool >= types.SupportedUptimes[uptimeIndex] { totalRewards = totalRewards.Add(uptimeGrowth...) } } @@ -717,7 +717,13 @@ func (s *KeeperTestSuite) TestCalcAccruedIncentivesForAccum() { } } +// Testing strategy: +// 1. Create a position +// 2. Let a fixed amount of time pass, enough to qualify it for some (but not all) uptimes +// 3. Let a variable amount of time pass determined by the test case +// 4. Ensure uptime accumulators and incentive records behave as expected func (s *KeeperTestSuite) TestUpdateUptimeAccumulatorsToNow() { + defaultTestUptime := types.SupportedUptimes[2] type updateAccumToNow struct { poolId uint64 accumUptime time.Duration @@ -738,7 +744,7 @@ func (s *KeeperTestSuite) TestUpdateUptimeAccumulatorsToNow() { expectedIncentiveRecords: []types.IncentiveRecord{ // We deduct incentives from the record for the period it emitted incentives - chargeIncentive(incentiveRecordOne, time.Hour), + chargeIncentive(incentiveRecordOne, defaultTestUptime+time.Hour), }, expectedPass: true, }, @@ -749,8 +755,8 @@ func (s *KeeperTestSuite) TestUpdateUptimeAccumulatorsToNow() { expectedIncentiveRecords: []types.IncentiveRecord{ // We deduct incentives from both records since there are positions for each - chargeIncentive(incentiveRecordOne, time.Hour), - chargeIncentive(incentiveRecordTwo, time.Hour), + chargeIncentive(incentiveRecordOne, defaultTestUptime+time.Hour), + chargeIncentive(incentiveRecordTwo, defaultTestUptime+time.Hour), }, expectedPass: true, }, @@ -762,9 +768,9 @@ func (s *KeeperTestSuite) TestUpdateUptimeAccumulatorsToNow() { expectedIncentiveRecords: []types.IncentiveRecord{ // We deduct incentives from each record since there are positions for all three // Note that records are in ascending order by uptime index - chargeIncentive(incentiveRecordOne, time.Hour), - chargeIncentive(incentiveRecordTwo, time.Hour), - chargeIncentive(incentiveRecordThree, time.Hour), + chargeIncentive(incentiveRecordOne, defaultTestUptime+time.Hour), + chargeIncentive(incentiveRecordTwo, defaultTestUptime+time.Hour), + chargeIncentive(incentiveRecordThree, defaultTestUptime+time.Hour), }, expectedPass: true, }, @@ -776,10 +782,12 @@ func (s *KeeperTestSuite) TestUpdateUptimeAccumulatorsToNow() { expectedIncentiveRecords: []types.IncentiveRecord{ // We only deduct from the first three incentive records since the last doesn't emit anything // Note that records are in ascending order by uptime index - chargeIncentive(incentiveRecordOne, time.Hour), - chargeIncentive(incentiveRecordTwo, time.Hour), - chargeIncentive(incentiveRecordThree, time.Hour), - incentiveRecordFour, + chargeIncentive(incentiveRecordOne, defaultTestUptime+time.Hour), + chargeIncentive(incentiveRecordTwo, defaultTestUptime+time.Hour), + chargeIncentive(incentiveRecordThree, defaultTestUptime+time.Hour), + // We charge even for uptimes the position has technically not qualified for since its liquidity is on + // the accumulator. + chargeIncentive(incentiveRecordFour, defaultTestUptime+time.Hour), }, expectedPass: true, }, @@ -805,36 +813,16 @@ func (s *KeeperTestSuite) TestUpdateUptimeAccumulatorsToNow() { // Add qualifying and non-qualifying liquidity to the pool s.FundAcc(testAddressOne, sdk.NewCoins(sdk.NewCoin(clPool.GetToken0(), testQualifyingDepositsOne), sdk.NewCoin(clPool.GetToken1(), testQualifyingDepositsOne))) - s.FundAcc(testAddressTwo, sdk.NewCoins(sdk.NewCoin(clPool.GetToken0(), testQualifyingDepositsTwo), sdk.NewCoin(clPool.GetToken1(), testQualifyingDepositsTwo))) - s.FundAcc(testAddressThree, sdk.NewCoins(sdk.NewCoin(clPool.GetToken0(), testQualifyingDepositsThree), sdk.NewCoin(clPool.GetToken1(), testQualifyingDepositsThree))) - - _, _, _, qualifyingLiquidityUptimeThree, _, err := clKeeper.CreatePosition(s.Ctx, tc.poolId, testAddressThree, testQualifyingDepositsThree, testQualifyingDepositsThree, sdk.ZeroInt(), sdk.ZeroInt(), clPool.GetCurrentTick().Int64()-1, clPool.GetCurrentTick().Int64()+1) - s.Require().NoError(err) - - s.Ctx = s.Ctx.WithBlockTime(s.Ctx.BlockTime().Add(cltypes.SupportedUptimes[2] - cltypes.SupportedUptimes[1] - cltypes.SupportedUptimes[0])) - - _, _, _, qualifyingLiquidityUptimeTwo, _, err := clKeeper.CreatePosition(s.Ctx, tc.poolId, testAddressTwo, testQualifyingDepositsTwo, testQualifyingDepositsTwo, sdk.ZeroInt(), sdk.ZeroInt(), clPool.GetCurrentTick().Int64()-1, clPool.GetCurrentTick().Int64()+1) - s.Require().NoError(err) - - s.Ctx = s.Ctx.WithBlockTime(s.Ctx.BlockTime().Add(cltypes.SupportedUptimes[1] - cltypes.SupportedUptimes[0])) - - _, _, _, qualifyingLiquidityUptimeOne, _, err := clKeeper.CreatePosition(s.Ctx, tc.poolId, testAddressOne, testQualifyingDepositsOne, testQualifyingDepositsOne, sdk.ZeroInt(), sdk.ZeroInt(), clPool.GetCurrentTick().Int64()-1, clPool.GetCurrentTick().Int64()+1) + _, _, _, qualifyingLiquidity, _, err := clKeeper.CreatePosition(s.Ctx, tc.poolId, testAddressOne, testQualifyingDepositsOne, testQualifyingDepositsOne, sdk.ZeroInt(), sdk.ZeroInt(), clPool.GetCurrentTick().Int64()-1, clPool.GetCurrentTick().Int64()+1) s.Require().NoError(err) - s.Ctx = s.Ctx.WithBlockTime(s.Ctx.BlockTime().Add(cltypes.SupportedUptimes[0])) + // Let enough time elapse to qualify the position for the first three supported uptimes + s.Ctx = s.Ctx.WithBlockTime(s.Ctx.BlockTime().Add(defaultTestUptime)) - // Note that the third position (1D freeze) qualifies for all three uptimes, the second position qualifies for the first two, - // and the first position only qualifies for the first. None of the positions qualify for any later uptimes (e.g. 1W) - qualifyingLiquidities := []sdk.Dec{ - qualifyingLiquidityUptimeOne.Add(qualifyingLiquidityUptimeTwo).Add(qualifyingLiquidityUptimeThree), - qualifyingLiquidityUptimeTwo.Add(qualifyingLiquidityUptimeThree), - qualifyingLiquidityUptimeThree, - } - - // // Let `timeElapsed` time pass - // s.Ctx = s.Ctx.WithBlockTime(defaultStartTime.Add(tc.timeElapsed)) + // Let `timeElapsed` time pass to test incentive distribution + s.Ctx = s.Ctx.WithBlockTime(s.Ctx.BlockTime().Add(tc.timeElapsed)) - // system under test + // System under test err = clKeeper.UpdateUptimeAccumulatorsToNow(s.Ctx, tc.poolId) if tc.expectedPass { @@ -848,14 +836,19 @@ func (s *KeeperTestSuite) TestUpdateUptimeAccumulatorsToNow() { newUptimeAccumValues, err := clKeeper.GetUptimeAccumulatorValues(s.Ctx, tc.poolId) s.Require().NoError(err) - // Calculate expected uptime deltas using qualifying liquidity deltas (eh can only test one incentive?) + // Calculate expected uptime deltas using qualifying liquidity deltas expectedUptimeDeltas := []sdk.DecCoins{} for uptimeIndex := range newUptimeAccumValues { - if uptimeIndex < len(tc.poolIncentiveRecords) && uptimeIndex < len(qualifyingLiquidities) { - expectedUptimeDeltas = append(expectedUptimeDeltas, sdk.NewDecCoins(expectedIncentivesFromRate(tc.poolIncentiveRecords[uptimeIndex].IncentiveDenom, tc.poolIncentiveRecords[uptimeIndex].EmissionRate, time.Hour, qualifyingLiquidities[uptimeIndex]))) - } else { - expectedUptimeDeltas = append(expectedUptimeDeltas, cl.EmptyCoins) + // Calculate expected incentives for the current uptime by emitting incentives from + // all incentive records for the it + curUptimeAccruedIncentives := cl.EmptyCoins + for _, poolRecord := range tc.poolIncentiveRecords { + if poolRecord.MinUptime == types.SupportedUptimes[uptimeIndex] { + // We set the expected accrued incentives based on the total time that has elapsed since position creation + curUptimeAccruedIncentives = curUptimeAccruedIncentives.Add(sdk.NewDecCoins(expectedIncentivesFromRate(poolRecord.IncentiveDenom, poolRecord.EmissionRate, defaultTestUptime+tc.timeElapsed, qualifyingLiquidity))...) + } } + expectedUptimeDeltas = append(expectedUptimeDeltas, curUptimeAccruedIncentives) } // Ensure that each accumulator value changes by the correct amount @@ -3194,9 +3187,14 @@ func (s *KeeperTestSuite) TestClaimAllIncentives() { initSenderBalances := s.App.BankKeeper.GetAllBalances(s.Ctx, defaultSender) initPoolBalances := s.App.BankKeeper.GetAllBalances(s.Ctx, clPool.GetAddress()) + if !tc.forfeitIncentives { + // Let enough time elapse for the position to accrue rewards for all uptimes + s.Ctx = s.Ctx.WithBlockTime(s.Ctx.BlockTime().Add(types.SupportedUptimes[len(types.SupportedUptimes)-1])) + } + // --- System under test --- - amountClaimed, err := clKeeper.ClaimAllIncentivesForPosition(s.Ctx, tc.positionIdClaim) + amountClaimed, amountForfeited, err := clKeeper.ClaimAllIncentivesForPosition(s.Ctx, tc.positionIdClaim) // --- Assertions --- @@ -3215,13 +3213,6 @@ func (s *KeeperTestSuite) TestClaimAllIncentives() { } s.Require().NoError(err) - // We expect claimed rewards to be equal to growth inside - expectedCoins := sdk.Coins(nil) - for _, growthInside := range tc.growthInside { - expectedCoins = expectedCoins.Add(sdk.NormalizeCoins(growthInside)...) - } - s.Require().Equal(expectedCoins, amountClaimed) - // Ensure that forfeited incentives were properly added to their respective accumulators if tc.forfeitIncentives { newUptimeAccumValues, err := clKeeper.GetUptimeAccumulatorValues(s.Ctx, validPoolId) @@ -3237,7 +3228,14 @@ func (s *KeeperTestSuite) TestClaimAllIncentives() { normalizedUptimeAccumDelta = normalizedUptimeAccumDelta.Add(sdk.NormalizeCoins(uptimeAccumDelta)...) } - s.Require().Equal(normalizedUptimeAccumDelta, amountClaimed) + s.Require().Equal(normalizedUptimeAccumDelta, amountClaimed.Add(amountForfeited...)) + } else { + // We expect claimed rewards to be equal to growth inside + expectedCoins := sdk.Coins(nil) + for _, growthInside := range tc.growthInside { + expectedCoins = expectedCoins.Add(sdk.NormalizeCoins(growthInside)...) + } + s.Require().Equal(expectedCoins, amountClaimed.Add(amountForfeited...)) } // Ensure balances have not been mutated diff --git a/x/concentrated-liquidity/lp.go b/x/concentrated-liquidity/lp.go index 4c6d22b17b7..5cdde503f50 100644 --- a/x/concentrated-liquidity/lp.go +++ b/x/concentrated-liquidity/lp.go @@ -129,7 +129,7 @@ func (k Keeper) withdrawPosition(ctx sdk.Context, owner sdk.AccAddress, position return sdk.Int{}, sdk.Int{}, err } - _, err = k.claimAllIncentivesForPosition(ctx, positionId) + _, err = k.collectIncentives(ctx, owner, positionId) if err != nil { return sdk.Int{}, sdk.Int{}, err } diff --git a/x/concentrated-liquidity/lp_test.go b/x/concentrated-liquidity/lp_test.go index 168c29631e1..b122ccfcf83 100644 --- a/x/concentrated-liquidity/lp_test.go +++ b/x/concentrated-liquidity/lp_test.go @@ -302,9 +302,8 @@ func (s *KeeperTestSuite) TestCreatePosition() { } func (s *KeeperTestSuite) TestWithdrawPosition() { - frozenBaseCase := *baseCase - frozenBaseCase.freezeDuration = DefaultFreezeDuration defaultJoinTime := defaultBlockTime + defaultTimeElapsed := time.Hour * 24 uptimeHelper := getExpectedUptimes() defaultUptimeGrowth := uptimeHelper.hundredTokensMultiDenom @@ -339,18 +338,6 @@ func (s *KeeperTestSuite) TestWithdrawPosition() { amount1Expected: baseCase.amount1Expected.QuoRaw(2), // 2500 usdc }, }, - "position still unfreezing": { - // setup parameters for creation a pool and position. - setupConfig: &frozenBaseCase, - - // system under test parameters - // for withdrawing a position. - sutConfigOverwrite: &lpTest{ - amount0Expected: baseCase.amount0Expected, // 0.998976 eth - amount1Expected: baseCase.amount1Expected, // 5000 usdc - joinTime: defaultJoinTime, - }, - }, "error: no position created": { // setup parameters for creation a pool and position. setupConfig: baseCase, @@ -396,11 +383,6 @@ func (s *KeeperTestSuite) TestWithdrawPosition() { // If specific configs are provided in the test case, overwrite the config with those values. mergeConfigs(&config, &sutConfigOverwrite) - // createPositionFreezeDuration := config.freezeDuration - - // if tc.createPositionFreezeOverwrite { - // createPositionFreezeDuration = 0 - // } // If a setupConfig is provided, use it to create a pool and position. pool := s.PrepareConcentratedPool() @@ -410,7 +392,7 @@ func (s *KeeperTestSuite) TestWithdrawPosition() { _, _, _, liquidityCreated, _, err := concentratedLiquidityKeeper.CreatePosition(ctx, pool.GetId(), owner, config.amount0Desired, config.amount1Desired, sdk.ZeroInt(), sdk.ZeroInt(), DefaultLowerTick, DefaultUpperTick) s.Require().NoError(err) - ctx = ctx.WithBlockTime(ctx.BlockTime().Add(time.Hour * 24)) + ctx = ctx.WithBlockTime(ctx.BlockTime().Add(defaultTimeElapsed)) // Set global fee growth to 1 ETH and charge the fee to the pool. globalFeeGrowth := sdk.NewDecCoin(ETH, sdk.NewInt(1)) @@ -431,23 +413,18 @@ func (s *KeeperTestSuite) TestWithdrawPosition() { if expectedRemainingLiquidity.IsZero() { expectedFeesClaimed = expectedFeesClaimed.Add(sdk.NewCoin(ETH, liquidityCreated.TruncateInt())) s.FundAcc(pool.GetAddress(), expectedFeesClaimed) - - if !ctx.BlockTime().Before(config.joinTime.Add(config.freezeDuration)) { - expectedIncentivesClaimed = expectedIncentivesFromUptimeGrowth(defaultUptimeGrowth, liquidityCreated, config.freezeDuration, sdk.OneInt()) - s.FundAcc(pool.GetAddress(), expectedIncentivesClaimed) - } } + // Set expected incentives and fund pool with appropriate amount + expectedIncentivesClaimed = expectedIncentivesFromUptimeGrowth(defaultUptimeGrowth, liquidityCreated, defaultTimeElapsed, sdk.OneInt()) + s.FundAcc(pool.GetAddress(), expectedIncentivesClaimed) + // Note the pool and owner balances before collecting fees. poolBalanceBeforeCollect := s.App.BankKeeper.GetAllBalances(ctx, pool.GetAddress()) ownerBalancerBeforeCollect := s.App.BankKeeper.GetAllBalances(ctx, owner) expectedBalanceDelta := expectedFeesClaimed.Add(expectedIncentivesClaimed...).Add(sdk.NewCoin(ETH, config.amount0Expected.Abs())).Add(sdk.NewCoin(USDC, config.amount1Expected.Abs())) - // if tc.setupConfig != &frozenBaseCase { - // ctx = ctx.WithBlockTime(defaultJoinTime.Add(time.Hour * 24)) - // } - // System under test. amtDenom0, amtDenom1, err := concentratedLiquidityKeeper.WithdrawPosition(ctx, owner, config.positionId, config.liquidityAmount) if config.expectedError != nil { From 0b87b7b7590ec7e8708fa256427f268a6f806934 Mon Sep 17 00:00:00 2001 From: Adam Tucker Date: Fri, 24 Mar 2023 14:02:04 -0500 Subject: [PATCH 11/14] update create position tx --- tests/e2e/configurer/chain/commands.go | 4 ++-- tests/e2e/e2e_test.go | 11 +++++------ x/concentrated-liquidity/client/cli/tx.go | 4 ++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/tests/e2e/configurer/chain/commands.go b/tests/e2e/configurer/chain/commands.go index 0b88a71d072..05744c418b9 100644 --- a/tests/e2e/configurer/chain/commands.go +++ b/tests/e2e/configurer/chain/commands.go @@ -69,10 +69,10 @@ func (n *NodeConfig) CreateConcentratedPool(from, denom1, denom2 string, tickSpa return poolID } -func (n *NodeConfig) CreateConcentratedPosition(from, lowerTick, upperTick string, token0, token1 string, token0MinAmt, token1MinAmt int64, freezeDuration string, poolId uint64) uint64 { +func (n *NodeConfig) CreateConcentratedPosition(from, lowerTick, upperTick string, token0, token1 string, token0MinAmt, token1MinAmt int64, poolId uint64) uint64 { n.LogActionF("creating concentrated position") - cmd := []string{"osmosisd", "tx", "concentratedliquidity", "create-position", lowerTick, upperTick, token0, token1, fmt.Sprintf("%d", token0MinAmt), fmt.Sprintf("%d", token1MinAmt), freezeDuration, fmt.Sprintf("--from=%s", from), fmt.Sprintf("--pool-id=%d", poolId)} + cmd := []string{"osmosisd", "tx", "concentratedliquidity", "create-position", lowerTick, upperTick, token0, token1, fmt.Sprintf("%d", token0MinAmt), fmt.Sprintf("%d", token1MinAmt), fmt.Sprintf("--from=%s", from), fmt.Sprintf("--pool-id=%d", poolId)} outBuf, _, err := n.containerManager.ExecTxCmd(n.t, n.chainId, n.Name, cmd) require.NoError(n.t, err) diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 3b89b531896..765180fd7fd 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -197,7 +197,6 @@ func (s *IntegrationTestSuite) TestConcentratedLiquidity() { denom1 string = "uosmo" tickSpacing uint64 = 1 precisionFactorAtPriceOne int64 = -1 - freezeDuration = time.Duration(time.Second) swapFee = "0.01" ) @@ -230,15 +229,15 @@ func (s *IntegrationTestSuite) TestConcentratedLiquidity() { address3 := node.CreateWalletAndFund("addr3", fundTokens) // Create 2 positions for address1: overlap together, overlap with 2 address3 positions - addr1PosId := node.CreateConcentratedPosition(address1, "[-1200]", "400", fmt.Sprintf("1000%s", denom0), fmt.Sprintf("1000%s", denom1), 0, 0, freezeDuration.String(), poolID) - node.CreateConcentratedPosition(address1, "[-400]", "400", fmt.Sprintf("1000%s", denom0), fmt.Sprintf("1000%s", denom1), 0, 0, freezeDuration.String(), poolID) + addr1PosId := node.CreateConcentratedPosition(address1, "[-1200]", "400", fmt.Sprintf("1000%s", denom0), fmt.Sprintf("1000%s", denom1), 0, 0, poolID) + node.CreateConcentratedPosition(address1, "[-400]", "400", fmt.Sprintf("1000%s", denom0), fmt.Sprintf("1000%s", denom1), 0, 0, poolID) // Create 1 position for address2: does not overlap with anything, ends at maximum - addr2PosId := node.CreateConcentratedPosition(address2, "2200", fmt.Sprintf("%d", maxTick), fmt.Sprintf("1000%s", denom0), fmt.Sprintf("1000%s", denom1), 0, 0, freezeDuration.String(), poolID) + addr2PosId := node.CreateConcentratedPosition(address2, "2200", fmt.Sprintf("%d", maxTick), fmt.Sprintf("1000%s", denom0), fmt.Sprintf("1000%s", denom1), 0, 0, poolID) // Create 2 positions for address3: overlap together, overlap with 2 address1 positions, one position starts from minimum - addr3PosId := node.CreateConcentratedPosition(address3, "[-1600]", "[-200]", fmt.Sprintf("1000%s", denom0), fmt.Sprintf("1000%s", denom1), 0, 0, freezeDuration.String(), poolID) - node.CreateConcentratedPosition(address3, fmt.Sprintf("[%d]", minTick), "1400", fmt.Sprintf("1000%s", denom0), fmt.Sprintf("1000%s", denom1), 0, 0, freezeDuration.String(), poolID) + addr3PosId := node.CreateConcentratedPosition(address3, "[-1600]", "[-200]", fmt.Sprintf("1000%s", denom0), fmt.Sprintf("1000%s", denom1), 0, 0, poolID) + node.CreateConcentratedPosition(address3, fmt.Sprintf("[%d]", minTick), "1400", fmt.Sprintf("1000%s", denom0), fmt.Sprintf("1000%s", denom1), 0, 0, poolID) // get newly created positions positionsAddress1 := node.QueryConcentratedPositions(address1) diff --git a/x/concentrated-liquidity/client/cli/tx.go b/x/concentrated-liquidity/client/cli/tx.go index 58bf9e47be2..51e22dcf2ce 100644 --- a/x/concentrated-liquidity/client/cli/tx.go +++ b/x/concentrated-liquidity/client/cli/tx.go @@ -35,9 +35,9 @@ func NewCreateConcentratedPoolCmd() (*osmocli.TxCliDesc, *clmodel.MsgCreateConce func NewCreatePositionCmd() (*osmocli.TxCliDesc, *types.MsgCreatePosition) { return &osmocli.TxCliDesc{ - Use: "create-position [lower-tick] [upper-tick] [token-0] [token-1] [token-0-min-amount] [token-1-min-amount] [freeze-duration]", + Use: "create-position [lower-tick] [upper-tick] [token-0] [token-1] [token-0-min-amount] [token-1-min-amount]", Short: "create or add to existing concentrated liquidity position", - Example: "create-position [-69082] 69082 1000000000uosmo 10000000uion 0 0 24h --pool-id 1 --from val --chain-id osmosis-1", + Example: "create-position [-69082] 69082 1000000000uosmo 10000000uion 0 0 --pool-id 1 --from val --chain-id osmosis-1", CustomFlagOverrides: poolIdFlagOverride, Flags: osmocli.FlagDesc{RequiredFlags: []*flag.FlagSet{FlagSetJustPoolId()}}, }, &types.MsgCreatePosition{} From 7417c4dafa7def4872a0aec44d021bb91b038069 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 24 Mar 2023 15:11:47 -0400 Subject: [PATCH 12/14] feat: whitelist poolmanager Pool, CL Params and ClaimableFees queries (#4725) * feat: whitelist poolmanager Pool, CL Params and ClaimableFees queries * lint * conflict --- wasmbinding/stargate_whitelist.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wasmbinding/stargate_whitelist.go b/wasmbinding/stargate_whitelist.go index 29c6999f525..1664fbc78b7 100644 --- a/wasmbinding/stargate_whitelist.go +++ b/wasmbinding/stargate_whitelist.go @@ -14,6 +14,7 @@ import ( stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types" + concentratedliquidityquery "github.com/osmosis-labs/osmosis/v15/x/concentrated-liquidity/types/query" downtimequerytypes "github.com/osmosis-labs/osmosis/v15/x/downtime-detector/client/queryproto" gammtypes "github.com/osmosis-labs/osmosis/v15/x/gamm/types" gammv2types "github.com/osmosis-labs/osmosis/v15/x/gamm/v2types" @@ -128,6 +129,7 @@ func init() { setWhitelistedQuery("/osmosis.poolmanager.v1beta1.Query/EstimateSwapExactAmountOut", &poolmanagerqueryproto.EstimateSwapExactAmountOutRequest{}) setWhitelistedQuery("/osmosis.poolmanager.v1beta1.Query/EstimateSinglePoolSwapExactAmountIn", &poolmanagerqueryproto.EstimateSwapExactAmountInResponse{}) setWhitelistedQuery("/osmosis.poolmanager.v1beta1.Query/EstimateSinglePoolSwapExactAmountOut", &poolmanagerqueryproto.EstimateSwapExactAmountOutRequest{}) + setWhitelistedQuery("/osmosis.poolmanager.v1beta1.Query/Pool", &poolmanagerqueryproto.PoolResponse{}) // txfees setWhitelistedQuery("/osmosis.txfees.v1beta1.Query/FeeTokens", &txfeestypes.QueryFeeTokensResponse{}) @@ -149,6 +151,10 @@ func init() { // downtime-detector setWhitelistedQuery("/osmosis.downtimedetector.v1beta1.Query/RecoveredSinceDowntimeOfLength", &downtimequerytypes.RecoveredSinceDowntimeOfLengthResponse{}) + + // concentrated-liquidity + setWhitelistedQuery("/osmosis.concentratedliquidity.v1beta1.Query/Params", &concentratedliquidityquery.QueryParamsResponse{}) + setWhitelistedQuery("/osmosis.concentratedliquidity.v1beta1.Query/ClaimableFees", &concentratedliquidityquery.QueryClaimableFeesResponse{}) } // GetWhitelistedQuery returns the whitelisted query at the provided path. From 4240946cb431c757427dd49ba2b1ba2a12d595b9 Mon Sep 17 00:00:00 2001 From: Adam Tucker Date: Fri, 24 Mar 2023 14:57:40 -0500 Subject: [PATCH 13/14] fix e2e query parsing --- tests/e2e/configurer/chain/commands.go | 61 +++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/tests/e2e/configurer/chain/commands.go b/tests/e2e/configurer/chain/commands.go index 8499a45255c..06b4d1a30ea 100644 --- a/tests/e2e/configurer/chain/commands.go +++ b/tests/e2e/configurer/chain/commands.go @@ -73,14 +73,18 @@ func (n *NodeConfig) CreateConcentratedPool(from, denom1, denom2 string, tickSpa func (n *NodeConfig) CreateConcentratedPosition(from, lowerTick, upperTick string, token0, token1 string, token0MinAmt, token1MinAmt int64, freezeDuration string, poolId uint64) uint64 { n.LogActionF("creating concentrated position") - cmd := []string{"osmosisd", "tx", "concentratedliquidity", "create-position", lowerTick, upperTick, token0, token1, fmt.Sprintf("%d", token0MinAmt), fmt.Sprintf("%d", token1MinAmt), freezeDuration, fmt.Sprintf("--from=%s", from), fmt.Sprintf("--pool-id=%d", poolId)} - outBuf, _, err := n.containerManager.ExecTxCmd(n.t, n.chainId, n.Name, cmd) + cmd := []string{"osmosisd", "tx", "concentratedliquidity", "create-position", lowerTick, upperTick, token0, token1, fmt.Sprintf("%d", token0MinAmt), fmt.Sprintf("%d", token1MinAmt), freezeDuration, fmt.Sprintf("--from=%s", from), fmt.Sprintf("--pool-id=%d", poolId), "-o json"} + outJson, _, err := n.containerManager.ExecTxCmdWithSuccessString(n.t, n.chainId, n.Name, cmd, "code\":0") require.NoError(n.t, err) - prefix := "position_id\",\"value\":\"" - startIndex := strings.Index(outBuf.String(), prefix) + len(prefix) - endIndex := startIndex + strings.Index(outBuf.String()[startIndex:], "\"}") - positionID, err := strconv.ParseUint(outBuf.String()[startIndex:endIndex], 10, 64) + var txResponse map[string]interface{} + err = json.Unmarshal(outJson.Bytes(), &txResponse) + require.NoError(n.t, err) + + positionIDString, err := GetPositionID(txResponse) + require.NoError(n.t, err) + + positionID, err := strconv.ParseUint(positionIDString, 10, 64) require.NoError(n.t, err) n.LogActionF("successfully created concentrated position from %s to %s", lowerTick, upperTick) @@ -448,3 +452,48 @@ func (n *NodeConfig) Status() (resultStatus, error) { } return result, nil } + +func GetPositionID(responseJson map[string]interface{}) (string, error) { + logs, ok := responseJson["logs"].([]interface{}) + if !ok { + return "", fmt.Errorf("logs field not found in response") + } + + if len(logs) == 0 { + return "", fmt.Errorf("empty logs field in response") + } + + log, ok := logs[0].(map[string]interface{}) + if !ok { + return "", fmt.Errorf("invalid format of logs field") + } + + events, ok := log["events"].([]interface{}) + if !ok { + return "", fmt.Errorf("events field not found in logs") + } + + for _, event := range events { + attributes, ok := event.(map[string]interface{})["attributes"].([]interface{}) + if !ok { + return "", fmt.Errorf("attributes field not found in event") + } + + for _, attr := range attributes { + switch v := attr.(type) { + case map[string]interface{}: + if v["key"] == "position_id" { + positionID, ok := v["value"].(string) + if !ok { + return "", fmt.Errorf("invalid format of position_id field") + } + return positionID, nil + } + default: + return "", fmt.Errorf("invalid type for attributes field") + } + } + } + + return "", fmt.Errorf("position_id field not found in response") +} From 5248c4d423b6de80186939588fe3a585254e5164 Mon Sep 17 00:00:00 2001 From: Adam Tucker Date: Fri, 24 Mar 2023 16:13:35 -0500 Subject: [PATCH 14/14] increase gas --- tests/e2e/configurer/chain/commands.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/configurer/chain/commands.go b/tests/e2e/configurer/chain/commands.go index b4af54d0262..4f46cd92723 100644 --- a/tests/e2e/configurer/chain/commands.go +++ b/tests/e2e/configurer/chain/commands.go @@ -101,7 +101,7 @@ func (n *NodeConfig) StoreWasmCode(wasmFile, from string) { func (n *NodeConfig) WithdrawPosition(from, liquidityOut string, positionId uint64) { n.LogActionF("withdrawing liquidity from position") - cmd := []string{"osmosisd", "tx", "concentratedliquidity", "withdraw-position", fmt.Sprint(positionId), liquidityOut, fmt.Sprintf("--from=%s", from)} + cmd := []string{"osmosisd", "tx", "concentratedliquidity", "withdraw-position", fmt.Sprint(positionId), liquidityOut, fmt.Sprintf("--from=%s", from), "--gas=auto", "--gas-prices=0.1uosmo", "--gas-adjustment=1.3"} _, _, err := n.containerManager.ExecTxCmd(n.t, n.chainId, n.Name, cmd) require.NoError(n.t, err) n.LogActionF("successfully withdrew %s liquidity from position %d", liquidityOut, positionId)

?fR!{X>* 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