From e02a720516e3bad88523f389ca29c7c01d41858a Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Wed, 28 Jan 2026 22:18:25 -0300 Subject: [PATCH 01/29] feat: add TRON substreams for ERC20FeeProxy payment detection - Move substreams-tron from requestNetwork monorepo - Add tron/ folder with Rust WASM module for indexing payments - Add GitHub Actions CI workflow with optional integration tests - Index TransferWithReferenceAndFee events from ERC20FeeProxy - Support both Nile testnet and mainnet contracts --- .github/workflows/tron-build.yml | 129 + tron/Cargo.toml | 28 + tron/Makefile | 28 + tron/README.md | 105 + tron/proto/request/tron/v1/payments.proto | 44 + tron/schema.graphql | 40 + tron/src/lib.rs | 223 ++ tron/src/pb/mod.rs | 28 + tron/src/pb/protocol.rs | 2824 +++++++++++++++++++++ tron/src/pb/request.tron.v1.rs | 49 + tron/src/pb/sf.tron.type.v1.rs | 127 + tron/subgraph.yaml | 22 + tron/substreams.yaml | 48 + 13 files changed, 3695 insertions(+) create mode 100644 .github/workflows/tron-build.yml create mode 100644 tron/Cargo.toml create mode 100644 tron/Makefile create mode 100644 tron/README.md create mode 100644 tron/proto/request/tron/v1/payments.proto create mode 100644 tron/schema.graphql create mode 100644 tron/src/lib.rs create mode 100644 tron/src/pb/mod.rs create mode 100644 tron/src/pb/protocol.rs create mode 100644 tron/src/pb/request.tron.v1.rs create mode 100644 tron/src/pb/sf.tron.type.v1.rs create mode 100644 tron/subgraph.yaml create mode 100644 tron/substreams.yaml diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml new file mode 100644 index 0000000..ba21f38 --- /dev/null +++ b/.github/workflows/tron-build.yml @@ -0,0 +1,129 @@ +name: Tron Substreams Build + +on: + pull_request: + branches: + - main + paths: + - 'tron/**' + - '.github/workflows/tron-build.yml' + push: + branches: + - main + paths: + - 'tron/**' + - '.github/workflows/tron-build.yml' + workflow_dispatch: + inputs: + run_integration_tests: + description: 'Run integration tests against live endpoint' + required: false + default: false + type: boolean + +jobs: + build-and-test: + name: Build and Test Tron Substreams + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-action@stable + with: + targets: wasm32-unknown-unknown + + - name: Cache Cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + tron/target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('tron/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-cargo- + + - name: Build WASM module + working-directory: tron + run: make build + + - name: Run unit tests + working-directory: tron + run: make test + + - name: Verify build artifacts + working-directory: tron + run: | + echo "Checking build artifacts..." + if [ ! -f "target/wasm32-unknown-unknown/release/request_network_tron.wasm" ]; then + echo "ERROR: WASM file not found!" + exit 1 + fi + echo "Build artifacts verified successfully" + + integration-test: + name: Integration Test (Live Endpoint) + runs-on: ubuntu-latest + needs: build-and-test + # Only run on manual trigger with integration tests enabled, or on main branch push + if: ${{ github.event.inputs.run_integration_tests == 'true' || (github.event_name == 'push' && github.ref == 'refs/heads/main') }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-action@stable + with: + targets: wasm32-unknown-unknown + + - name: Cache Cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + tron/target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('tron/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-cargo- + + - name: Install Substreams CLI + run: | + curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz + sudo mv substreams /usr/local/bin/ + + - name: Build WASM module + working-directory: tron + run: make build + + - name: Run integration test against Nile testnet + working-directory: tron + env: + SUBSTREAMS_API_TOKEN: ${{ secrets.SUBSTREAMS_API_TOKEN }} + run: | + echo "Running substreams against Nile testnet (blocks 63208782-63208792)..." + + # Run against a small range of blocks to verify the module works + substreams run ./substreams.yaml map_erc20_fee_proxy_payments \ + -e tron.substreams.pinax.network:443 \ + --start-block 63208782 \ + --stop-block +10 \ + --output json > output.json 2>&1 || true + + # Check that the run completed (even if no payments found) + if grep -q "error" output.json; then + echo "ERROR: Substreams run failed" + cat output.json + exit 1 + fi + + echo "Integration test completed successfully" + cat output.json diff --git a/tron/Cargo.toml b/tron/Cargo.toml new file mode 100644 index 0000000..c805c20 --- /dev/null +++ b/tron/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "request-network-tron" +version = "0.1.0" +edition = "2021" +repository = "https://github.com/RequestNetwork/payments-substream" +license = "MIT" +description = "Request Network TRON Substreams module for ERC20FeeProxy payment detection" + +[lib] +name = "request_network_tron" +crate-type = ["cdylib"] + +[dependencies] +substreams = "0.5" +prost = "0.11" +prost-types = "0.11" +hex = "0.4" +bs58 = { version = "0.5", features = ["check"] } +sha2 = "0.10" +anyhow = "1.0" + +[target.wasm32-unknown-unknown.dependencies] +getrandom = { version = "0.2", features = ["custom"] } + +[profile.release] +lto = true +opt-level = 's' +strip = "debuginfo" diff --git a/tron/Makefile b/tron/Makefile new file mode 100644 index 0000000..e9d1c03 --- /dev/null +++ b/tron/Makefile @@ -0,0 +1,28 @@ +.PHONY: build +build: + cargo build --target wasm32-unknown-unknown --release + +.PHONY: protogen +protogen: + substreams protogen ./substreams.yaml --exclude-paths="sf/substreams,google" + +.PHONY: package +package: build + substreams pack ./substreams.yaml + +.PHONY: gui +gui: build + substreams gui ./substreams.yaml map_erc20_fee_proxy_payments -e tron.substreams.pinax.network:443 + +.PHONY: run +run: build + substreams run ./substreams.yaml map_erc20_fee_proxy_payments -e tron.substreams.pinax.network:443 --start-block 63208782 --stop-block +100 + +.PHONY: clean +clean: + cargo clean + rm -f *.spkg + +.PHONY: test +test: + cargo test diff --git a/tron/README.md b/tron/README.md new file mode 100644 index 0000000..4bd4c89 --- /dev/null +++ b/tron/README.md @@ -0,0 +1,105 @@ +# Request Network TRON Substreams + +This package contains a Substreams module for indexing ERC20FeeProxy payment events on the TRON blockchain. + +## Overview + +The module indexes `TransferWithReferenceAndFee` events from the deployed ERC20FeeProxy contracts: + +- **Mainnet**: `TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd` +- **Nile Testnet**: `THK5rNmrvCujhmrXa5DB1dASepwXTr9cJs` + +## Prerequisites + +1. **Rust toolchain** with `wasm32-unknown-unknown` target: + + ```bash + rustup target add wasm32-unknown-unknown + ``` + +2. **Substreams CLI**: + + ```bash + brew install streamingfast/tap/substreams + ``` + +3. **bs58 crate** for Base58 encoding (included in dependencies) + +## Building + +```bash +# Build the WASM module +make build + +# Generate protobuf types +make protogen + +# Package for deployment +make package +``` + +## Running Locally + +```bash +# Run with GUI for debugging +make gui + +# Run and output to console +make run +``` + +## Deployment + +### Deploy as Substreams-powered Subgraph + +1. Build and package the Substreams module: + + ```bash + make package + ``` + +2. Deploy to The Graph: + ```bash + graph deploy --studio request-payments-tron + ``` + +### Subgraph Endpoints + +Once deployed, the subgraph will be available at: + +- **Mainnet**: `https://api.studio.thegraph.com/query/67444/request-payments-tron/version/latest` +- **Nile Testnet**: `https://api.studio.thegraph.com/query/67444/request-payments-tron-nile/version/latest` + +## Module Details + +### `map_erc20_fee_proxy_payments` + +Extracts payment events from TRON blocks: + +**Input**: `sf.tron.type.v1.Block` + +**Output**: `request.tron.v1.Payments` + +**Fields extracted**: + +- `token_address` - TRC20 token contract address +- `to` - Payment recipient +- `amount` - Payment amount +- `payment_reference` - Indexed payment reference (hex) +- `fee_amount` - Fee amount +- `fee_address` - Fee recipient +- `from` - Sender address +- `block` - Block number +- `timestamp` - Block timestamp (Unix seconds) +- `tx_hash` - Transaction hash +- `contract_address` - ERC20FeeProxy contract address + +## Testing + +```bash +make test +``` + +## License + +MIT diff --git a/tron/proto/request/tron/v1/payments.proto b/tron/proto/request/tron/v1/payments.proto new file mode 100644 index 0000000..7b8348e --- /dev/null +++ b/tron/proto/request/tron/v1/payments.proto @@ -0,0 +1,44 @@ +syntax = "proto3"; + +package request.tron.v1; + +// A single payment event from the ERC20FeeProxy contract +message Payment { + // The token contract address (TRC20) + string token_address = 1; + + // The recipient address + string to = 2; + + // The payment amount (as string to preserve precision) + string amount = 3; + + // The indexed payment reference (hex encoded) + string payment_reference = 4; + + // The fee amount (as string to preserve precision) + string fee_amount = 5; + + // The fee recipient address + string fee_address = 6; + + // The sender address (msg.sender) + string from = 7; + + // Block number where the event was emitted + uint64 block = 8; + + // Block timestamp (Unix timestamp in seconds) + uint64 timestamp = 9; + + // Transaction hash + string tx_hash = 10; + + // The proxy contract address that emitted the event + string contract_address = 11; +} + +// Collection of payment events +message Payments { + repeated Payment payments = 1; +} diff --git a/tron/schema.graphql b/tron/schema.graphql new file mode 100644 index 0000000..7d31e64 --- /dev/null +++ b/tron/schema.graphql @@ -0,0 +1,40 @@ +# GraphQL schema for Request Network TRON payments +# This schema is used when deploying a Substreams-powered subgraph + +type Payment @entity { + "Unique identifier: txHash-logIndex" + id: ID! + + "The TRC20 token contract address" + tokenAddress: String! + + "The payment recipient address" + to: String! + + "The payment amount" + amount: BigInt! + + "The indexed payment reference (keccak256 hash)" + reference: Bytes! + + "The fee amount" + feeAmount: BigInt! + + "The fee recipient address" + feeAddress: String + + "The sender address" + from: String! + + "Block number" + block: Int! + + "Block timestamp (Unix seconds)" + timestamp: Int! + + "Transaction hash" + txHash: String! + + "The ERC20FeeProxy contract address" + contractAddress: String! +} diff --git a/tron/src/lib.rs b/tron/src/lib.rs new file mode 100644 index 0000000..d9a023a --- /dev/null +++ b/tron/src/lib.rs @@ -0,0 +1,223 @@ +//! Request Network TRON Substreams Module +//! +//! This module indexes TransferWithReferenceAndFee events from the ERC20FeeProxy +//! contract deployed on TRON mainnet and Nile testnet. + +mod pb; + +use hex; +use pb::protocol::transaction_info::Log; +use pb::request::tron::v1::{Payment, Payments}; +use pb::sf::tron::r#type::v1::{Block, Transaction}; +use substreams::log; + +/// TransferWithReferenceAndFee event signature (keccak256 hash of event signature) +/// Event: TransferWithReferenceAndFee(address,address,uint256,bytes indexed,uint256,address) +/// keccak256("TransferWithReferenceAndFee(address,address,uint256,bytes,uint256,address)") +const TRANSFER_WITH_REF_AND_FEE_TOPIC: &str = + "9f16cbcc523c67a60c450e5ffe4f3b7b6dbe772e7abcadb2686ce029a9a0a2b6"; + +/// Parses proxy addresses from the params string +/// Expected format: "mainnet_proxy_address=ADDR1\nnile_proxy_address=ADDR2" +fn parse_proxy_addresses(params: &str) -> (String, String) { + let mut mainnet = String::new(); + let mut nile = String::new(); + + for line in params.lines() { + let parts: Vec<&str> = line.splitn(2, '=').collect(); + if parts.len() == 2 { + match parts[0].trim() { + "mainnet_proxy_address" => mainnet = parts[1].trim().to_string(), + "nile_proxy_address" => nile = parts[1].trim().to_string(), + _ => {} + } + } + } + + (mainnet, nile) +} + +/// Maps TRON blocks to extract ERC20FeeProxy payment events +#[substreams::handlers::map] +fn map_erc20_fee_proxy_payments(params: String, block: Block) -> Result { + let (mainnet_proxy, nile_proxy) = parse_proxy_addresses(¶ms); + + let mut payments = Vec::new(); + let block_number = block.header.as_ref().map(|h| h.number).unwrap_or(0); + let block_timestamp = block.header.as_ref().map(|h| h.timestamp).unwrap_or(0) as u64 / 1000; // Convert from ms to seconds + + for transaction in block.transactions.iter() { + let tx_hash = hex::encode(&transaction.txid); + + // Get the transaction info to access logs + if let Some(info) = &transaction.info { + for log_entry in info.log.iter() { + // Check if this log is from one of our proxy contracts + let contract_address = base58_encode(&log_entry.address); + + if contract_address != mainnet_proxy && contract_address != nile_proxy { + continue; + } + + // Check if this is a TransferWithReferenceAndFee event + // The first topic should be the event signature + if log_entry.topics.is_empty() { + continue; + } + + // Validate the event signature matches TransferWithReferenceAndFee + let topic0 = hex::encode(&log_entry.topics[0]); + if topic0 != TRANSFER_WITH_REF_AND_FEE_TOPIC { + continue; + } + + // Parse the event data + if let Some(payment) = parse_transfer_with_reference_and_fee( + log_entry, + &contract_address, + &tx_hash, + block_number, + block_timestamp, + transaction, + ) { + payments.push(payment); + } + } + } + } + + Ok(Payments { payments }) +} + +/// Parses a TransferWithReferenceAndFee event from a log entry +fn parse_transfer_with_reference_and_fee( + log_entry: &Log, + contract_address: &str, + tx_hash: &str, + block_number: u64, + block_timestamp: u64, + transaction: &Transaction, +) -> Option { + // Event: TransferWithReferenceAndFee(address tokenAddress, address to, uint256 amount, + // bytes indexed paymentReference, uint256 feeAmount, address feeAddress) + // + // Topics: + // [0] = Event signature hash + // [1] = paymentReference (indexed) + // + // Data (non-indexed parameters, ABI encoded): + // [0-31] = tokenAddress + // [32-63] = to + // [64-95] = amount + // [96-127] = feeAmount + // [128-159] = feeAddress + + if log_entry.topics.len() < 2 { + return None; + } + + let data = &log_entry.data; + if data.len() < 160 { + log::info!("Log data too short: {} bytes", data.len()); + return None; + } + + // Extract payment reference from indexed topic + let payment_reference = hex::encode(&log_entry.topics[1]); + + // Parse non-indexed parameters from data + let token_address = parse_address_from_data(data, 0)?; + let to = parse_address_from_data(data, 32)?; + let amount = parse_uint256_from_data(data, 64); + let fee_amount = parse_uint256_from_data(data, 96); + let fee_address = parse_address_from_data(data, 128)?; + + // Get the sender (from) address from the transaction contracts + let from = transaction + .contracts + .first() + .and_then(|c| c.parameter.as_ref()) + .map(|p| extract_owner_address(p)) + .unwrap_or_default(); + + Some(Payment { + token_address, + to, + amount, + payment_reference, + fee_amount, + fee_address, + from, + block: block_number, + timestamp: block_timestamp, + tx_hash: tx_hash.to_string(), + contract_address: contract_address.to_string(), + }) +} + +/// Parses an address from ABI-encoded data at the given offset +fn parse_address_from_data(data: &[u8], offset: usize) -> Option { + if data.len() < offset + 32 { + return None; + } + // Address is the last 20 bytes of the 32-byte slot + let address_bytes = &data[offset + 12..offset + 32]; + Some(base58_encode(address_bytes)) +} + +/// Parses a uint256 from ABI-encoded data at the given offset +fn parse_uint256_from_data(data: &[u8], offset: usize) -> String { + if data.len() < offset + 32 { + return "0".to_string(); + } + let bytes = &data[offset..offset + 32]; + // Convert to decimal string, handling large numbers + let hex_str = hex::encode(bytes); + // Remove leading zeros and convert + let trimmed = hex_str.trim_start_matches('0'); + if trimmed.is_empty() { + "0".to_string() + } else { + // For simplicity, return as hex - the consumer can convert + format!("0x{}", hex_str) + } +} + +/// Extracts the owner address from a contract parameter +fn extract_owner_address(parameter: &prost_types::Any) -> String { + // The owner_address is typically at the beginning of the parameter value + if parameter.value.len() >= 21 { + base58_encode(¶meter.value[0..21]) + } else { + String::new() + } +} + +/// Encodes bytes to TRON Base58Check address format +fn base58_encode(bytes: &[u8]) -> String { + // TRON addresses use Base58Check encoding with 0x41 prefix for mainnet + // This is a simplified version - in production, use a proper Base58Check implementation + if bytes.len() == 20 { + // Add TRON mainnet prefix (0x41) + let mut prefixed = vec![0x41]; + prefixed.extend_from_slice(bytes); + bs58::encode(&prefixed).with_check().into_string() + } else if bytes.len() == 21 && bytes[0] == 0x41 { + bs58::encode(bytes).with_check().into_string() + } else { + bs58::encode(bytes).with_check().into_string() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_base58_encode() { + // Test with a known TRON address + let hex_addr = hex::decode("41a614f803b6fd780986a42c78ec9c7f77e6ded13c").unwrap(); + let encoded = base58_encode(&hex_addr); + assert!(encoded.starts_with('T')); + } +} diff --git a/tron/src/pb/mod.rs b/tron/src/pb/mod.rs new file mode 100644 index 0000000..d7bf3b7 --- /dev/null +++ b/tron/src/pb/mod.rs @@ -0,0 +1,28 @@ +// @generated +// Protobuf types for Request Network TRON Substreams + +// TRON protocol types from StreamingFast +pub mod protocol { + include!("protocol.rs"); +} + +pub mod sf { + pub mod tron { + pub mod r#type { + // @@ protoc_insertion_point(attribute:sf.tron.type.v1) + pub mod v1 { + include!("sf.tron.type.v1.rs"); + // @@ protoc_insertion_point(sf.tron.type.v1) + } + } + } +} + +// Request Network payment types +pub mod request { + pub mod tron { + pub mod v1 { + include!("request.tron.v1.rs"); + } + } +} diff --git a/tron/src/pb/protocol.rs b/tron/src/pb/protocol.rs new file mode 100644 index 0000000..c94724c --- /dev/null +++ b/tron/src/pb/protocol.rs @@ -0,0 +1,2824 @@ +// @generated +// This file is @generated by prost-build. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Endpoint { + #[prost(bytes="vec", tag="1")] + pub address: ::prost::alloc::vec::Vec, + #[prost(int32, tag="2")] + pub port: i32, + #[prost(bytes="vec", tag="3")] + pub node_id: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PingMessage { + #[prost(message, optional, tag="1")] + pub from: ::core::option::Option, + #[prost(message, optional, tag="2")] + pub to: ::core::option::Option, + #[prost(int32, tag="3")] + pub version: i32, + #[prost(int64, tag="4")] + pub timestamp: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PongMessage { + #[prost(message, optional, tag="1")] + pub from: ::core::option::Option, + #[prost(int32, tag="2")] + pub echo: i32, + #[prost(int64, tag="3")] + pub timestamp: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FindNeighbours { + #[prost(message, optional, tag="1")] + pub from: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub target_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub timestamp: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Neighbours { + #[prost(message, optional, tag="1")] + pub from: ::core::option::Option, + #[prost(message, repeated, tag="2")] + pub neighbours: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub timestamp: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct BackupMessage { + #[prost(bool, tag="1")] + pub flag: bool, + #[prost(int32, tag="2")] + pub priority: i32, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum ResourceCode { + Bandwidth = 0, + Energy = 1, + TronPower = 2, +} +impl ResourceCode { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ResourceCode::Bandwidth => "BANDWIDTH", + ResourceCode::Energy => "ENERGY", + ResourceCode::TronPower => "TRON_POWER", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "BANDWIDTH" => Some(Self::Bandwidth), + "ENERGY" => Some(Self::Energy), + "TRON_POWER" => Some(Self::TronPower), + _ => None, + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountId { + #[prost(bytes="vec", tag="1")] + pub name: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Vote { + #[prost(bytes="vec", tag="1")] + pub vote_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub vote_count: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Proposal { + #[prost(int64, tag="1")] + pub proposal_id: i64, + #[prost(bytes="vec", tag="2")] + pub proposer_address: ::prost::alloc::vec::Vec, + #[prost(map="int64, int64", tag="3")] + pub parameters: ::std::collections::HashMap, + #[prost(int64, tag="4")] + pub expiration_time: i64, + #[prost(int64, tag="5")] + pub create_time: i64, + #[prost(bytes="vec", repeated, tag="6")] + pub approvals: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(enumeration="proposal::State", tag="7")] + pub state: i32, +} +/// Nested message and enum types in `Proposal`. +pub mod proposal { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum State { + Pending = 0, + Disapproved = 1, + Approved = 2, + Canceled = 3, + } + impl State { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + State::Pending => "PENDING", + State::Disapproved => "DISAPPROVED", + State::Approved => "APPROVED", + State::Canceled => "CANCELED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "PENDING" => Some(Self::Pending), + "DISAPPROVED" => Some(Self::Disapproved), + "APPROVED" => Some(Self::Approved), + "CANCELED" => Some(Self::Canceled), + _ => None, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Exchange { + #[prost(int64, tag="1")] + pub exchange_id: i64, + #[prost(bytes="vec", tag="2")] + pub creator_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub create_time: i64, + #[prost(bytes="vec", tag="6")] + pub first_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="7")] + pub first_token_balance: i64, + #[prost(bytes="vec", tag="8")] + pub second_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="9")] + pub second_token_balance: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MarketOrder { + #[prost(bytes="vec", tag="1")] + pub order_id: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub create_time: i64, + #[prost(bytes="vec", tag="4")] + pub sell_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub sell_token_quantity: i64, + #[prost(bytes="vec", tag="6")] + pub buy_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="7")] + pub buy_token_quantity: i64, + #[prost(int64, tag="9")] + pub sell_token_quantity_remain: i64, + #[prost(int64, tag="10")] + pub sell_token_quantity_return: i64, + #[prost(enumeration="market_order::State", tag="11")] + pub state: i32, + #[prost(bytes="vec", tag="12")] + pub prev: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="13")] + pub next: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `MarketOrder`. +pub mod market_order { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum State { + Active = 0, + Inactive = 1, + Canceled = 2, + } + impl State { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + State::Active => "ACTIVE", + State::Inactive => "INACTIVE", + State::Canceled => "CANCELED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "ACTIVE" => Some(Self::Active), + "INACTIVE" => Some(Self::Inactive), + "CANCELED" => Some(Self::Canceled), + _ => None, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MarketOrderList { + #[prost(message, repeated, tag="1")] + pub orders: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MarketOrderPairList { + #[prost(message, repeated, tag="1")] + pub order_pair: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MarketOrderPair { + #[prost(bytes="vec", tag="1")] + pub sell_token_id: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub buy_token_id: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MarketAccountOrder { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", repeated, tag="2")] + pub orders: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(int64, tag="3")] + pub count: i64, + #[prost(int64, tag="4")] + pub total_count: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct MarketPrice { + #[prost(int64, tag="1")] + pub sell_token_quantity: i64, + #[prost(int64, tag="2")] + pub buy_token_quantity: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MarketPriceList { + #[prost(bytes="vec", tag="1")] + pub sell_token_id: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub buy_token_id: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="3")] + pub prices: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MarketOrderIdList { + #[prost(bytes="vec", tag="1")] + pub head: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub tail: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ChainParameters { + #[prost(message, repeated, tag="1")] + pub chain_parameter: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `ChainParameters`. +pub mod chain_parameters { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct ChainParameter { + #[prost(string, tag="1")] + pub key: ::prost::alloc::string::String, + #[prost(int64, tag="2")] + pub value: i64, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Account { + #[prost(bytes="vec", tag="1")] + pub account_name: ::prost::alloc::vec::Vec, + #[prost(enumeration="AccountType", tag="2")] + pub r#type: i32, + #[prost(bytes="vec", tag="3")] + pub address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub balance: i64, + #[prost(message, repeated, tag="5")] + pub votes: ::prost::alloc::vec::Vec, + #[prost(map="string, int64", tag="6")] + pub asset: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + #[prost(map="string, int64", tag="56")] + pub asset_v2: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + #[prost(message, repeated, tag="7")] + pub frozen: ::prost::alloc::vec::Vec, + #[prost(int64, tag="8")] + pub net_usage: i64, + #[prost(int64, tag="41")] + pub acquired_delegated_frozen_balance_for_bandwidth: i64, + #[prost(int64, tag="42")] + pub delegated_frozen_balance_for_bandwidth: i64, + #[prost(int64, tag="46")] + pub old_tron_power: i64, + #[prost(message, optional, tag="47")] + pub tron_power: ::core::option::Option, + #[prost(bool, tag="60")] + pub asset_optimized: bool, + #[prost(int64, tag="9")] + pub create_time: i64, + #[prost(int64, tag="10")] + pub latest_opration_time: i64, + #[prost(int64, tag="11")] + pub allowance: i64, + #[prost(int64, tag="12")] + pub latest_withdraw_time: i64, + #[prost(bytes="vec", tag="13")] + pub code: ::prost::alloc::vec::Vec, + #[prost(bool, tag="14")] + pub is_witness: bool, + #[prost(bool, tag="15")] + pub is_committee: bool, + #[prost(message, repeated, tag="16")] + pub frozen_supply: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="17")] + pub asset_issued_name: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="57")] + pub asset_issued_id: ::prost::alloc::vec::Vec, + #[prost(map="string, int64", tag="18")] + pub latest_asset_operation_time: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + #[prost(map="string, int64", tag="58")] + pub latest_asset_operation_time_v2: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + #[prost(int64, tag="19")] + pub free_net_usage: i64, + #[prost(map="string, int64", tag="20")] + pub free_asset_net_usage: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + #[prost(map="string, int64", tag="59")] + pub free_asset_net_usage_v2: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + #[prost(int64, tag="21")] + pub latest_consume_time: i64, + #[prost(int64, tag="22")] + pub latest_consume_free_time: i64, + #[prost(bytes="vec", tag="23")] + pub account_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="24")] + pub net_window_size: i64, + #[prost(bool, tag="25")] + pub net_window_optimized: bool, + #[prost(message, optional, tag="26")] + pub account_resource: ::core::option::Option, + #[prost(bytes="vec", tag="30")] + pub code_hash: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="31")] + pub owner_permission: ::core::option::Option, + #[prost(message, optional, tag="32")] + pub witness_permission: ::core::option::Option, + #[prost(message, repeated, tag="33")] + pub active_permission: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="34")] + pub frozen_v2: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="35")] + pub unfrozen_v2: ::prost::alloc::vec::Vec, + #[prost(int64, tag="36")] + pub delegated_frozen_v2_balance_for_bandwidth: i64, + #[prost(int64, tag="37")] + pub acquired_delegated_frozen_v2_balance_for_bandwidth: i64, +} +/// Nested message and enum types in `Account`. +pub mod account { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct Frozen { + #[prost(int64, tag="1")] + pub frozen_balance: i64, + #[prost(int64, tag="2")] + pub expire_time: i64, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct AccountResource { + #[prost(int64, tag="1")] + pub energy_usage: i64, + #[prost(message, optional, tag="2")] + pub frozen_balance_for_energy: ::core::option::Option, + #[prost(int64, tag="3")] + pub latest_consume_time_for_energy: i64, + #[prost(int64, tag="4")] + pub acquired_delegated_frozen_balance_for_energy: i64, + #[prost(int64, tag="5")] + pub delegated_frozen_balance_for_energy: i64, + #[prost(int64, tag="6")] + pub storage_limit: i64, + #[prost(int64, tag="7")] + pub storage_usage: i64, + #[prost(int64, tag="8")] + pub latest_exchange_storage_time: i64, + #[prost(int64, tag="9")] + pub energy_window_size: i64, + #[prost(int64, tag="10")] + pub delegated_frozen_v2_balance_for_energy: i64, + #[prost(int64, tag="11")] + pub acquired_delegated_frozen_v2_balance_for_energy: i64, + #[prost(bool, tag="12")] + pub energy_window_optimized: bool, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct FreezeV2 { + #[prost(enumeration="super::ResourceCode", tag="1")] + pub r#type: i32, + #[prost(int64, tag="2")] + pub amount: i64, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct UnFreezeV2 { + #[prost(enumeration="super::ResourceCode", tag="1")] + pub r#type: i32, + #[prost(int64, tag="3")] + pub unfreeze_amount: i64, + #[prost(int64, tag="4")] + pub unfreeze_expire_time: i64, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Key { + #[prost(bytes="vec", tag="1")] + pub address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub weight: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DelegatedResource { + #[prost(bytes="vec", tag="1")] + pub from: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub to: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub frozen_balance_for_bandwidth: i64, + #[prost(int64, tag="4")] + pub frozen_balance_for_energy: i64, + #[prost(int64, tag="5")] + pub expire_time_for_bandwidth: i64, + #[prost(int64, tag="6")] + pub expire_time_for_energy: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Authority { + #[prost(message, optional, tag="1")] + pub account: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub permission_name: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Permission { + #[prost(enumeration="permission::PermissionType", tag="1")] + pub r#type: i32, + #[prost(int32, tag="2")] + pub id: i32, + #[prost(string, tag="3")] + pub permission_name: ::prost::alloc::string::String, + #[prost(int64, tag="4")] + pub threshold: i64, + #[prost(int32, tag="5")] + pub parent_id: i32, + #[prost(bytes="vec", tag="6")] + pub operations: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="7")] + pub keys: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `Permission`. +pub mod permission { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum PermissionType { + Owner = 0, + Witness = 1, + Active = 2, + } + impl PermissionType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + PermissionType::Owner => "Owner", + PermissionType::Witness => "Witness", + PermissionType::Active => "Active", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "Owner" => Some(Self::Owner), + "Witness" => Some(Self::Witness), + "Active" => Some(Self::Active), + _ => None, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Witness { + #[prost(bytes="vec", tag="1")] + pub address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub vote_count: i64, + #[prost(bytes="vec", tag="3")] + pub pub_key: ::prost::alloc::vec::Vec, + #[prost(string, tag="4")] + pub url: ::prost::alloc::string::String, + #[prost(int64, tag="5")] + pub total_produced: i64, + #[prost(int64, tag="6")] + pub total_missed: i64, + #[prost(int64, tag="7")] + pub latest_block_num: i64, + #[prost(int64, tag="8")] + pub latest_slot_num: i64, + #[prost(bool, tag="9")] + pub is_jobs: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Votes { + #[prost(bytes="vec", tag="1")] + pub address: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="2")] + pub old_votes: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="3")] + pub new_votes: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TxOutput { + #[prost(int64, tag="1")] + pub value: i64, + #[prost(bytes="vec", tag="2")] + pub pub_key_hash: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TxInput { + #[prost(message, optional, tag="1")] + pub raw_data: ::core::option::Option, + #[prost(bytes="vec", tag="4")] + pub signature: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `TXInput`. +pub mod tx_input { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Raw { + #[prost(bytes="vec", tag="1")] + pub tx_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub vout: i64, + #[prost(bytes="vec", tag="3")] + pub pub_key: ::prost::alloc::vec::Vec, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TxOutputs { + #[prost(message, repeated, tag="1")] + pub outputs: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct ResourceReceipt { + #[prost(int64, tag="1")] + pub energy_usage: i64, + #[prost(int64, tag="2")] + pub energy_fee: i64, + #[prost(int64, tag="3")] + pub origin_energy_usage: i64, + #[prost(int64, tag="4")] + pub energy_usage_total: i64, + #[prost(int64, tag="5")] + pub net_usage: i64, + #[prost(int64, tag="6")] + pub net_fee: i64, + #[prost(enumeration="transaction::result::ContractResult", tag="7")] + pub result: i32, + #[prost(int64, tag="8")] + pub energy_penalty_total: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MarketOrderDetail { + #[prost(bytes="vec", tag="1")] + pub maker_order_id: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub taker_order_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub fill_sell_quantity: i64, + #[prost(int64, tag="4")] + pub fill_buy_quantity: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Transaction { + #[prost(message, optional, tag="1")] + pub raw_data: ::core::option::Option, + #[prost(bytes="vec", repeated, tag="2")] + pub signature: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(message, repeated, tag="5")] + pub ret: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `Transaction`. +pub mod transaction { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Contract { + #[prost(enumeration="contract::ContractType", tag="1")] + pub r#type: i32, + #[prost(message, optional, tag="2")] + pub parameter: ::core::option::Option<::prost_types::Any>, + #[prost(bytes="vec", tag="3")] + pub provider: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub contract_name: ::prost::alloc::vec::Vec, + #[prost(int32, tag="5")] + pub permission_id: i32, + } + /// Nested message and enum types in `Contract`. + pub mod contract { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum ContractType { + AccountCreateContract = 0, + TransferContract = 1, + TransferAssetContract = 2, + VoteAssetContract = 3, + VoteWitnessContract = 4, + WitnessCreateContract = 5, + AssetIssueContract = 6, + WitnessUpdateContract = 8, + ParticipateAssetIssueContract = 9, + AccountUpdateContract = 10, + FreezeBalanceContract = 11, + UnfreezeBalanceContract = 12, + WithdrawBalanceContract = 13, + UnfreezeAssetContract = 14, + UpdateAssetContract = 15, + ProposalCreateContract = 16, + ProposalApproveContract = 17, + ProposalDeleteContract = 18, + SetAccountIdContract = 19, + CustomContract = 20, + CreateSmartContract = 30, + TriggerSmartContract = 31, + GetContract = 32, + UpdateSettingContract = 33, + ExchangeCreateContract = 41, + ExchangeInjectContract = 42, + ExchangeWithdrawContract = 43, + ExchangeTransactionContract = 44, + UpdateEnergyLimitContract = 45, + AccountPermissionUpdateContract = 46, + ClearAbiContract = 48, + UpdateBrokerageContract = 49, + ShieldedTransferContract = 51, + MarketSellAssetContract = 52, + MarketCancelOrderContract = 53, + FreezeBalanceV2Contract = 54, + UnfreezeBalanceV2Contract = 55, + WithdrawExpireUnfreezeContract = 56, + DelegateResourceContract = 57, + UnDelegateResourceContract = 58, + CancelAllUnfreezeV2Contract = 59, + } + impl ContractType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ContractType::AccountCreateContract => "AccountCreateContract", + ContractType::TransferContract => "TransferContract", + ContractType::TransferAssetContract => "TransferAssetContract", + ContractType::VoteAssetContract => "VoteAssetContract", + ContractType::VoteWitnessContract => "VoteWitnessContract", + ContractType::WitnessCreateContract => "WitnessCreateContract", + ContractType::AssetIssueContract => "AssetIssueContract", + ContractType::WitnessUpdateContract => "WitnessUpdateContract", + ContractType::ParticipateAssetIssueContract => "ParticipateAssetIssueContract", + ContractType::AccountUpdateContract => "AccountUpdateContract", + ContractType::FreezeBalanceContract => "FreezeBalanceContract", + ContractType::UnfreezeBalanceContract => "UnfreezeBalanceContract", + ContractType::WithdrawBalanceContract => "WithdrawBalanceContract", + ContractType::UnfreezeAssetContract => "UnfreezeAssetContract", + ContractType::UpdateAssetContract => "UpdateAssetContract", + ContractType::ProposalCreateContract => "ProposalCreateContract", + ContractType::ProposalApproveContract => "ProposalApproveContract", + ContractType::ProposalDeleteContract => "ProposalDeleteContract", + ContractType::SetAccountIdContract => "SetAccountIdContract", + ContractType::CustomContract => "CustomContract", + ContractType::CreateSmartContract => "CreateSmartContract", + ContractType::TriggerSmartContract => "TriggerSmartContract", + ContractType::GetContract => "GetContract", + ContractType::UpdateSettingContract => "UpdateSettingContract", + ContractType::ExchangeCreateContract => "ExchangeCreateContract", + ContractType::ExchangeInjectContract => "ExchangeInjectContract", + ContractType::ExchangeWithdrawContract => "ExchangeWithdrawContract", + ContractType::ExchangeTransactionContract => "ExchangeTransactionContract", + ContractType::UpdateEnergyLimitContract => "UpdateEnergyLimitContract", + ContractType::AccountPermissionUpdateContract => "AccountPermissionUpdateContract", + ContractType::ClearAbiContract => "ClearABIContract", + ContractType::UpdateBrokerageContract => "UpdateBrokerageContract", + ContractType::ShieldedTransferContract => "ShieldedTransferContract", + ContractType::MarketSellAssetContract => "MarketSellAssetContract", + ContractType::MarketCancelOrderContract => "MarketCancelOrderContract", + ContractType::FreezeBalanceV2Contract => "FreezeBalanceV2Contract", + ContractType::UnfreezeBalanceV2Contract => "UnfreezeBalanceV2Contract", + ContractType::WithdrawExpireUnfreezeContract => "WithdrawExpireUnfreezeContract", + ContractType::DelegateResourceContract => "DelegateResourceContract", + ContractType::UnDelegateResourceContract => "UnDelegateResourceContract", + ContractType::CancelAllUnfreezeV2Contract => "CancelAllUnfreezeV2Contract", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "AccountCreateContract" => Some(Self::AccountCreateContract), + "TransferContract" => Some(Self::TransferContract), + "TransferAssetContract" => Some(Self::TransferAssetContract), + "VoteAssetContract" => Some(Self::VoteAssetContract), + "VoteWitnessContract" => Some(Self::VoteWitnessContract), + "WitnessCreateContract" => Some(Self::WitnessCreateContract), + "AssetIssueContract" => Some(Self::AssetIssueContract), + "WitnessUpdateContract" => Some(Self::WitnessUpdateContract), + "ParticipateAssetIssueContract" => Some(Self::ParticipateAssetIssueContract), + "AccountUpdateContract" => Some(Self::AccountUpdateContract), + "FreezeBalanceContract" => Some(Self::FreezeBalanceContract), + "UnfreezeBalanceContract" => Some(Self::UnfreezeBalanceContract), + "WithdrawBalanceContract" => Some(Self::WithdrawBalanceContract), + "UnfreezeAssetContract" => Some(Self::UnfreezeAssetContract), + "UpdateAssetContract" => Some(Self::UpdateAssetContract), + "ProposalCreateContract" => Some(Self::ProposalCreateContract), + "ProposalApproveContract" => Some(Self::ProposalApproveContract), + "ProposalDeleteContract" => Some(Self::ProposalDeleteContract), + "SetAccountIdContract" => Some(Self::SetAccountIdContract), + "CustomContract" => Some(Self::CustomContract), + "CreateSmartContract" => Some(Self::CreateSmartContract), + "TriggerSmartContract" => Some(Self::TriggerSmartContract), + "GetContract" => Some(Self::GetContract), + "UpdateSettingContract" => Some(Self::UpdateSettingContract), + "ExchangeCreateContract" => Some(Self::ExchangeCreateContract), + "ExchangeInjectContract" => Some(Self::ExchangeInjectContract), + "ExchangeWithdrawContract" => Some(Self::ExchangeWithdrawContract), + "ExchangeTransactionContract" => Some(Self::ExchangeTransactionContract), + "UpdateEnergyLimitContract" => Some(Self::UpdateEnergyLimitContract), + "AccountPermissionUpdateContract" => Some(Self::AccountPermissionUpdateContract), + "ClearABIContract" => Some(Self::ClearAbiContract), + "UpdateBrokerageContract" => Some(Self::UpdateBrokerageContract), + "ShieldedTransferContract" => Some(Self::ShieldedTransferContract), + "MarketSellAssetContract" => Some(Self::MarketSellAssetContract), + "MarketCancelOrderContract" => Some(Self::MarketCancelOrderContract), + "FreezeBalanceV2Contract" => Some(Self::FreezeBalanceV2Contract), + "UnfreezeBalanceV2Contract" => Some(Self::UnfreezeBalanceV2Contract), + "WithdrawExpireUnfreezeContract" => Some(Self::WithdrawExpireUnfreezeContract), + "DelegateResourceContract" => Some(Self::DelegateResourceContract), + "UnDelegateResourceContract" => Some(Self::UnDelegateResourceContract), + "CancelAllUnfreezeV2Contract" => Some(Self::CancelAllUnfreezeV2Contract), + _ => None, + } + } + } + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Result { + #[prost(int64, tag="1")] + pub fee: i64, + #[prost(enumeration="result::Code", tag="2")] + pub ret: i32, + #[prost(enumeration="result::ContractResult", tag="3")] + pub contract_ret: i32, + #[prost(string, tag="14")] + pub asset_issue_id: ::prost::alloc::string::String, + #[prost(int64, tag="15")] + pub withdraw_amount: i64, + #[prost(int64, tag="16")] + pub unfreeze_amount: i64, + #[prost(int64, tag="18")] + pub exchange_received_amount: i64, + #[prost(int64, tag="19")] + pub exchange_inject_another_amount: i64, + #[prost(int64, tag="20")] + pub exchange_withdraw_another_amount: i64, + #[prost(int64, tag="21")] + pub exchange_id: i64, + #[prost(int64, tag="22")] + pub shielded_transaction_fee: i64, + #[prost(bytes="vec", tag="25")] + pub order_id: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="26")] + pub order_details: ::prost::alloc::vec::Vec, + #[prost(int64, tag="27")] + pub withdraw_expire_amount: i64, + #[prost(map="string, int64", tag="28")] + pub cancel_unfreeze_v2_amount: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + } + /// Nested message and enum types in `Result`. + pub mod result { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum Code { + Sucess = 0, + Failed = 1, + } + impl Code { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Code::Sucess => "SUCESS", + Code::Failed => "FAILED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "SUCESS" => Some(Self::Sucess), + "FAILED" => Some(Self::Failed), + _ => None, + } + } + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum ContractResult { + Default = 0, + Success = 1, + Revert = 2, + BadJumpDestination = 3, + OutOfMemory = 4, + PrecompiledContract = 5, + StackTooSmall = 6, + StackTooLarge = 7, + IllegalOperation = 8, + StackOverflow = 9, + OutOfEnergy = 10, + OutOfTime = 11, + JvmStackOverFlow = 12, + Unknown = 13, + TransferFailed = 14, + InvalidCode = 15, + } + impl ContractResult { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ContractResult::Default => "DEFAULT", + ContractResult::Success => "SUCCESS", + ContractResult::Revert => "REVERT", + ContractResult::BadJumpDestination => "BAD_JUMP_DESTINATION", + ContractResult::OutOfMemory => "OUT_OF_MEMORY", + ContractResult::PrecompiledContract => "PRECOMPILED_CONTRACT", + ContractResult::StackTooSmall => "STACK_TOO_SMALL", + ContractResult::StackTooLarge => "STACK_TOO_LARGE", + ContractResult::IllegalOperation => "ILLEGAL_OPERATION", + ContractResult::StackOverflow => "STACK_OVERFLOW", + ContractResult::OutOfEnergy => "OUT_OF_ENERGY", + ContractResult::OutOfTime => "OUT_OF_TIME", + ContractResult::JvmStackOverFlow => "JVM_STACK_OVER_FLOW", + ContractResult::Unknown => "UNKNOWN", + ContractResult::TransferFailed => "TRANSFER_FAILED", + ContractResult::InvalidCode => "INVALID_CODE", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "DEFAULT" => Some(Self::Default), + "SUCCESS" => Some(Self::Success), + "REVERT" => Some(Self::Revert), + "BAD_JUMP_DESTINATION" => Some(Self::BadJumpDestination), + "OUT_OF_MEMORY" => Some(Self::OutOfMemory), + "PRECOMPILED_CONTRACT" => Some(Self::PrecompiledContract), + "STACK_TOO_SMALL" => Some(Self::StackTooSmall), + "STACK_TOO_LARGE" => Some(Self::StackTooLarge), + "ILLEGAL_OPERATION" => Some(Self::IllegalOperation), + "STACK_OVERFLOW" => Some(Self::StackOverflow), + "OUT_OF_ENERGY" => Some(Self::OutOfEnergy), + "OUT_OF_TIME" => Some(Self::OutOfTime), + "JVM_STACK_OVER_FLOW" => Some(Self::JvmStackOverFlow), + "UNKNOWN" => Some(Self::Unknown), + "TRANSFER_FAILED" => Some(Self::TransferFailed), + "INVALID_CODE" => Some(Self::InvalidCode), + _ => None, + } + } + } + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Raw { + #[prost(bytes="vec", tag="1")] + pub ref_block_bytes: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub ref_block_num: i64, + #[prost(bytes="vec", tag="4")] + pub ref_block_hash: ::prost::alloc::vec::Vec, + #[prost(int64, tag="8")] + pub expiration: i64, + #[prost(message, repeated, tag="9")] + pub auths: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="10")] + pub data: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="11")] + pub contract: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="12")] + pub scripts: ::prost::alloc::vec::Vec, + #[prost(int64, tag="14")] + pub timestamp: i64, + #[prost(int64, tag="18")] + pub fee_limit: i64, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionInfo { + #[prost(bytes="vec", tag="1")] + pub id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub fee: i64, + #[prost(int64, tag="3")] + pub block_number: i64, + #[prost(int64, tag="4")] + pub block_time_stamp: i64, + #[prost(bytes="vec", repeated, tag="5")] + pub contract_result: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(bytes="vec", tag="6")] + pub contract_address: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="7")] + pub receipt: ::core::option::Option, + #[prost(message, repeated, tag="8")] + pub log: ::prost::alloc::vec::Vec, + #[prost(enumeration="transaction_info::Code", tag="9")] + pub result: i32, + #[prost(bytes="vec", tag="10")] + pub res_message: ::prost::alloc::vec::Vec, + #[prost(string, tag="14")] + pub asset_issue_id: ::prost::alloc::string::String, + #[prost(int64, tag="15")] + pub withdraw_amount: i64, + #[prost(int64, tag="16")] + pub unfreeze_amount: i64, + #[prost(message, repeated, tag="17")] + pub internal_transactions: ::prost::alloc::vec::Vec, + #[prost(int64, tag="18")] + pub exchange_received_amount: i64, + #[prost(int64, tag="19")] + pub exchange_inject_another_amount: i64, + #[prost(int64, tag="20")] + pub exchange_withdraw_another_amount: i64, + #[prost(int64, tag="21")] + pub exchange_id: i64, + #[prost(int64, tag="22")] + pub shielded_transaction_fee: i64, + #[prost(bytes="vec", tag="25")] + pub order_id: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="26")] + pub order_details: ::prost::alloc::vec::Vec, + #[prost(int64, tag="27")] + pub packing_fee: i64, + #[prost(int64, tag="28")] + pub withdraw_expire_amount: i64, + #[prost(map="string, int64", tag="29")] + pub cancel_unfreeze_v2_amount: ::std::collections::HashMap<::prost::alloc::string::String, i64>, +} +/// Nested message and enum types in `TransactionInfo`. +pub mod transaction_info { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Log { + #[prost(bytes="vec", tag="1")] + pub address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", repeated, tag="2")] + pub topics: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(bytes="vec", tag="3")] + pub data: ::prost::alloc::vec::Vec, + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum Code { + Sucess = 0, + Failed = 1, + } + impl Code { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Code::Sucess => "SUCESS", + Code::Failed => "FAILED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "SUCESS" => Some(Self::Sucess), + "FAILED" => Some(Self::Failed), + _ => None, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionRet { + #[prost(int64, tag="1")] + pub block_number: i64, + #[prost(int64, tag="2")] + pub block_time_stamp: i64, + #[prost(message, repeated, tag="3")] + pub transactioninfo: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Transactions { + #[prost(message, repeated, tag="1")] + pub transactions: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockHeader { + #[prost(message, optional, tag="1")] + pub raw_data: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub witness_signature: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `BlockHeader`. +pub mod block_header { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Raw { + #[prost(int64, tag="1")] + pub timestamp: i64, + #[prost(bytes="vec", tag="2")] + pub tx_trie_root: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub parent_hash: ::prost::alloc::vec::Vec, + #[prost(int64, tag="7")] + pub number: i64, + #[prost(int64, tag="8")] + pub witness_id: i64, + #[prost(bytes="vec", tag="9")] + pub witness_address: ::prost::alloc::vec::Vec, + #[prost(int32, tag="10")] + pub version: i32, + #[prost(bytes="vec", tag="11")] + pub account_state_root: ::prost::alloc::vec::Vec, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Block { + #[prost(message, repeated, tag="1")] + pub transactions: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="2")] + pub block_header: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ChainInventory { + #[prost(message, repeated, tag="1")] + pub ids: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub remain_num: i64, +} +/// Nested message and enum types in `ChainInventory`. +pub mod chain_inventory { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct BlockId { + #[prost(bytes="vec", tag="1")] + pub hash: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub number: i64, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockInventory { + #[prost(message, repeated, tag="1")] + pub ids: ::prost::alloc::vec::Vec, + #[prost(enumeration="block_inventory::Type", tag="2")] + pub r#type: i32, +} +/// Nested message and enum types in `BlockInventory`. +pub mod block_inventory { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct BlockId { + #[prost(bytes="vec", tag="1")] + pub hash: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub number: i64, + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum Type { + Sync = 0, + Advtise = 1, + Fetch = 2, + } + impl Type { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Type::Sync => "SYNC", + Type::Advtise => "ADVTISE", + Type::Fetch => "FETCH", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "SYNC" => Some(Self::Sync), + "ADVTISE" => Some(Self::Advtise), + "FETCH" => Some(Self::Fetch), + _ => None, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Inventory { + #[prost(enumeration="inventory::InventoryType", tag="1")] + pub r#type: i32, + #[prost(bytes="vec", repeated, tag="2")] + pub ids: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, +} +/// Nested message and enum types in `Inventory`. +pub mod inventory { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum InventoryType { + Trx = 0, + Block = 1, + } + impl InventoryType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + InventoryType::Trx => "TRX", + InventoryType::Block => "BLOCK", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TRX" => Some(Self::Trx), + "BLOCK" => Some(Self::Block), + _ => None, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Items { + #[prost(enumeration="items::ItemType", tag="1")] + pub r#type: i32, + #[prost(message, repeated, tag="2")] + pub blocks: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="3")] + pub block_headers: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="4")] + pub transactions: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `Items`. +pub mod items { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum ItemType { + Err = 0, + Trx = 1, + Block = 2, + Blockheader = 3, + } + impl ItemType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ItemType::Err => "ERR", + ItemType::Trx => "TRX", + ItemType::Block => "BLOCK", + ItemType::Blockheader => "BLOCKHEADER", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "ERR" => Some(Self::Err), + "TRX" => Some(Self::Trx), + "BLOCK" => Some(Self::Block), + "BLOCKHEADER" => Some(Self::Blockheader), + _ => None, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct DynamicProperties { + #[prost(int64, tag="1")] + pub last_solidity_block_num: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct DisconnectMessage { + #[prost(enumeration="ReasonCode", tag="1")] + pub reason: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct HelloMessage { + #[prost(message, optional, tag="1")] + pub from: ::core::option::Option, + #[prost(int32, tag="2")] + pub version: i32, + #[prost(int64, tag="3")] + pub timestamp: i64, + #[prost(message, optional, tag="4")] + pub genesis_block_id: ::core::option::Option, + #[prost(message, optional, tag="5")] + pub solid_block_id: ::core::option::Option, + #[prost(message, optional, tag="6")] + pub head_block_id: ::core::option::Option, + #[prost(bytes="vec", tag="7")] + pub address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="8")] + pub signature: ::prost::alloc::vec::Vec, + #[prost(int32, tag="9")] + pub node_type: i32, + #[prost(int64, tag="10")] + pub lowest_block_num: i64, + #[prost(bytes="vec", tag="11")] + pub code_version: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `HelloMessage`. +pub mod hello_message { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct BlockId { + #[prost(bytes="vec", tag="1")] + pub hash: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub number: i64, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct InternalTransaction { + #[prost(bytes="vec", tag="1")] + pub hash: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub caller_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub transfer_to_address: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="4")] + pub call_value_info: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="5")] + pub note: ::prost::alloc::vec::Vec, + #[prost(bool, tag="6")] + pub rejected: bool, + #[prost(string, tag="7")] + pub extra: ::prost::alloc::string::String, +} +/// Nested message and enum types in `InternalTransaction`. +pub mod internal_transaction { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct CallValueInfo { + #[prost(int64, tag="1")] + pub call_value: i64, + #[prost(string, tag="2")] + pub token_id: ::prost::alloc::string::String, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DelegatedResourceAccountIndex { + #[prost(bytes="vec", tag="1")] + pub account: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", repeated, tag="2")] + pub from_accounts: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(bytes="vec", repeated, tag="3")] + pub to_accounts: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(int64, tag="4")] + pub timestamp: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct NodeInfo { + #[prost(int64, tag="1")] + pub begin_sync_num: i64, + #[prost(string, tag="2")] + pub block: ::prost::alloc::string::String, + #[prost(string, tag="3")] + pub solidity_block: ::prost::alloc::string::String, + #[prost(int32, tag="4")] + pub current_connect_count: i32, + #[prost(int32, tag="5")] + pub active_connect_count: i32, + #[prost(int32, tag="6")] + pub passive_connect_count: i32, + #[prost(int64, tag="7")] + pub total_flow: i64, + #[prost(message, repeated, tag="8")] + pub peer_info_list: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="9")] + pub config_node_info: ::core::option::Option, + #[prost(message, optional, tag="10")] + pub machine_info: ::core::option::Option, + #[prost(map="string, string", tag="11")] + pub cheat_witness_info_map: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, +} +/// Nested message and enum types in `NodeInfo`. +pub mod node_info { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct PeerInfo { + #[prost(string, tag="1")] + pub last_sync_block: ::prost::alloc::string::String, + #[prost(int64, tag="2")] + pub remain_num: i64, + #[prost(int64, tag="3")] + pub last_block_update_time: i64, + #[prost(bool, tag="4")] + pub sync_flag: bool, + #[prost(int64, tag="5")] + pub head_block_time_we_both_have: i64, + #[prost(bool, tag="6")] + pub need_sync_from_peer: bool, + #[prost(bool, tag="7")] + pub need_sync_from_us: bool, + #[prost(string, tag="8")] + pub host: ::prost::alloc::string::String, + #[prost(int32, tag="9")] + pub port: i32, + #[prost(string, tag="10")] + pub node_id: ::prost::alloc::string::String, + #[prost(int64, tag="11")] + pub connect_time: i64, + #[prost(double, tag="12")] + pub avg_latency: f64, + #[prost(int32, tag="13")] + pub sync_to_fetch_size: i32, + #[prost(int64, tag="14")] + pub sync_to_fetch_size_peek_num: i64, + #[prost(int32, tag="15")] + pub sync_block_requested_size: i32, + #[prost(int64, tag="16")] + pub un_fetch_syn_num: i64, + #[prost(int32, tag="17")] + pub block_in_porc_size: i32, + #[prost(string, tag="18")] + pub head_block_we_both_have: ::prost::alloc::string::String, + #[prost(bool, tag="19")] + pub is_active: bool, + #[prost(int32, tag="20")] + pub score: i32, + #[prost(int32, tag="21")] + pub node_count: i32, + #[prost(int64, tag="22")] + pub in_flow: i64, + #[prost(int32, tag="23")] + pub disconnect_times: i32, + #[prost(string, tag="24")] + pub local_disconnect_reason: ::prost::alloc::string::String, + #[prost(string, tag="25")] + pub remote_disconnect_reason: ::prost::alloc::string::String, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct ConfigNodeInfo { + #[prost(string, tag="1")] + pub code_version: ::prost::alloc::string::String, + #[prost(string, tag="2")] + pub p2p_version: ::prost::alloc::string::String, + #[prost(int32, tag="3")] + pub listen_port: i32, + #[prost(bool, tag="4")] + pub discover_enable: bool, + #[prost(int32, tag="5")] + pub active_node_size: i32, + #[prost(int32, tag="6")] + pub passive_node_size: i32, + #[prost(int32, tag="7")] + pub send_node_size: i32, + #[prost(int32, tag="8")] + pub max_connect_count: i32, + #[prost(int32, tag="9")] + pub same_ip_max_connect_count: i32, + #[prost(int32, tag="10")] + pub backup_listen_port: i32, + #[prost(int32, tag="11")] + pub backup_member_size: i32, + #[prost(int32, tag="12")] + pub backup_priority: i32, + #[prost(int32, tag="13")] + pub db_version: i32, + #[prost(int32, tag="14")] + pub min_participation_rate: i32, + #[prost(bool, tag="15")] + pub support_constant: bool, + #[prost(double, tag="16")] + pub min_time_ratio: f64, + #[prost(double, tag="17")] + pub max_time_ratio: f64, + #[prost(int64, tag="18")] + pub allow_creation_of_contracts: i64, + #[prost(int64, tag="19")] + pub allow_adaptive_energy: i64, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct MachineInfo { + #[prost(int32, tag="1")] + pub thread_count: i32, + #[prost(int32, tag="2")] + pub dead_lock_thread_count: i32, + #[prost(int32, tag="3")] + pub cpu_count: i32, + #[prost(int64, tag="4")] + pub total_memory: i64, + #[prost(int64, tag="5")] + pub free_memory: i64, + #[prost(double, tag="6")] + pub cpu_rate: f64, + #[prost(string, tag="7")] + pub java_version: ::prost::alloc::string::String, + #[prost(string, tag="8")] + pub os_name: ::prost::alloc::string::String, + #[prost(int64, tag="9")] + pub jvm_total_memory: i64, + #[prost(int64, tag="10")] + pub jvm_free_memory: i64, + #[prost(double, tag="11")] + pub process_cpu_rate: f64, + #[prost(message, repeated, tag="12")] + pub memory_desc_info_list: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="13")] + pub dead_lock_thread_info_list: ::prost::alloc::vec::Vec, + } + /// Nested message and enum types in `MachineInfo`. + pub mod machine_info { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct MemoryDescInfo { + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + #[prost(int64, tag="2")] + pub init_size: i64, + #[prost(int64, tag="3")] + pub use_size: i64, + #[prost(int64, tag="4")] + pub max_size: i64, + #[prost(double, tag="5")] + pub use_rate: f64, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct DeadLockThreadInfo { + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + #[prost(string, tag="2")] + pub lock_name: ::prost::alloc::string::String, + #[prost(string, tag="3")] + pub lock_owner: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub state: ::prost::alloc::string::String, + #[prost(int64, tag="5")] + pub block_time: i64, + #[prost(int64, tag="6")] + pub wait_time: i64, + #[prost(string, tag="7")] + pub stack_trace: ::prost::alloc::string::String, + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MetricsInfo { + #[prost(int64, tag="1")] + pub interval: i64, + #[prost(message, optional, tag="2")] + pub node: ::core::option::Option, + #[prost(message, optional, tag="3")] + pub blockchain: ::core::option::Option, + #[prost(message, optional, tag="4")] + pub net: ::core::option::Option, +} +/// Nested message and enum types in `MetricsInfo`. +pub mod metrics_info { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct NodeInfo { + #[prost(string, tag="1")] + pub ip: ::prost::alloc::string::String, + #[prost(int32, tag="2")] + pub node_type: i32, + #[prost(string, tag="3")] + pub version: ::prost::alloc::string::String, + #[prost(int32, tag="4")] + pub backup_status: i32, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct BlockChainInfo { + #[prost(int64, tag="1")] + pub head_block_num: i64, + #[prost(int64, tag="2")] + pub head_block_timestamp: i64, + #[prost(string, tag="3")] + pub head_block_hash: ::prost::alloc::string::String, + #[prost(int32, tag="4")] + pub fork_count: i32, + #[prost(int32, tag="5")] + pub fail_fork_count: i32, + #[prost(message, optional, tag="6")] + pub block_process_time: ::core::option::Option, + #[prost(message, optional, tag="7")] + pub tps: ::core::option::Option, + #[prost(int32, tag="8")] + pub transaction_cache_size: i32, + #[prost(message, optional, tag="9")] + pub missed_transaction: ::core::option::Option, + #[prost(message, repeated, tag="10")] + pub witnesses: ::prost::alloc::vec::Vec, + #[prost(int64, tag="11")] + pub fail_process_block_num: i64, + #[prost(string, tag="12")] + pub fail_process_block_reason: ::prost::alloc::string::String, + #[prost(message, repeated, tag="13")] + pub dup_witness: ::prost::alloc::vec::Vec, + } + /// Nested message and enum types in `BlockChainInfo`. + pub mod block_chain_info { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Witness { + #[prost(string, tag="1")] + pub address: ::prost::alloc::string::String, + #[prost(int32, tag="2")] + pub version: i32, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct DupWitness { + #[prost(string, tag="1")] + pub address: ::prost::alloc::string::String, + #[prost(int64, tag="2")] + pub block_num: i64, + #[prost(int32, tag="3")] + pub count: i32, + } + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct RateInfo { + #[prost(int64, tag="1")] + pub count: i64, + #[prost(double, tag="2")] + pub mean_rate: f64, + #[prost(double, tag="3")] + pub one_minute_rate: f64, + #[prost(double, tag="4")] + pub five_minute_rate: f64, + #[prost(double, tag="5")] + pub fifteen_minute_rate: f64, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct NetInfo { + #[prost(int32, tag="1")] + pub error_proto_count: i32, + #[prost(message, optional, tag="2")] + pub api: ::core::option::Option, + #[prost(int32, tag="3")] + pub connection_count: i32, + #[prost(int32, tag="4")] + pub valid_connection_count: i32, + #[prost(message, optional, tag="5")] + pub tcp_in_traffic: ::core::option::Option, + #[prost(message, optional, tag="6")] + pub tcp_out_traffic: ::core::option::Option, + #[prost(int32, tag="7")] + pub disconnection_count: i32, + #[prost(message, repeated, tag="8")] + pub disconnection_detail: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="9")] + pub udp_in_traffic: ::core::option::Option, + #[prost(message, optional, tag="10")] + pub udp_out_traffic: ::core::option::Option, + #[prost(message, optional, tag="11")] + pub latency: ::core::option::Option, + } + /// Nested message and enum types in `NetInfo`. + pub mod net_info { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct ApiInfo { + #[prost(message, optional, tag="1")] + pub qps: ::core::option::Option, + #[prost(message, optional, tag="2")] + pub fail_qps: ::core::option::Option, + #[prost(message, optional, tag="3")] + pub out_traffic: ::core::option::Option, + #[prost(message, repeated, tag="4")] + pub detail: ::prost::alloc::vec::Vec, + } + /// Nested message and enum types in `ApiInfo`. + pub mod api_info { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct ApiDetailInfo { + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + #[prost(message, optional, tag="2")] + pub qps: ::core::option::Option, + #[prost(message, optional, tag="3")] + pub fail_qps: ::core::option::Option, + #[prost(message, optional, tag="4")] + pub out_traffic: ::core::option::Option, + } + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct DisconnectionDetailInfo { + #[prost(string, tag="1")] + pub reason: ::prost::alloc::string::String, + #[prost(int32, tag="2")] + pub count: i32, + } + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct LatencyInfo { + #[prost(int32, tag="1")] + pub top99: i32, + #[prost(int32, tag="2")] + pub top95: i32, + #[prost(int32, tag="3")] + pub top75: i32, + #[prost(int32, tag="4")] + pub total_count: i32, + #[prost(int32, tag="5")] + pub delay1_s: i32, + #[prost(int32, tag="6")] + pub delay2_s: i32, + #[prost(int32, tag="7")] + pub delay3_s: i32, + #[prost(message, repeated, tag="8")] + pub detail: ::prost::alloc::vec::Vec, + } + /// Nested message and enum types in `LatencyInfo`. + pub mod latency_info { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct LatencyDetailInfo { + #[prost(string, tag="1")] + pub witness: ::prost::alloc::string::String, + #[prost(int32, tag="2")] + pub top99: i32, + #[prost(int32, tag="3")] + pub top95: i32, + #[prost(int32, tag="4")] + pub top75: i32, + #[prost(int32, tag="5")] + pub count: i32, + #[prost(int32, tag="6")] + pub delay1_s: i32, + #[prost(int32, tag="7")] + pub delay2_s: i32, + #[prost(int32, tag="8")] + pub delay3_s: i32, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PbftMessage { + #[prost(message, optional, tag="1")] + pub raw_data: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub signature: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `PBFTMessage`. +pub mod pbft_message { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Raw { + #[prost(enumeration="MsgType", tag="1")] + pub msg_type: i32, + #[prost(enumeration="DataType", tag="2")] + pub data_type: i32, + #[prost(int64, tag="3")] + pub view_n: i64, + #[prost(int64, tag="4")] + pub epoch: i64, + #[prost(bytes="vec", tag="5")] + pub data: ::prost::alloc::vec::Vec, + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum MsgType { + ViewChange = 0, + Request = 1, + Preprepare = 2, + Prepare = 3, + Commit = 4, + } + impl MsgType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + MsgType::ViewChange => "VIEW_CHANGE", + MsgType::Request => "REQUEST", + MsgType::Preprepare => "PREPREPARE", + MsgType::Prepare => "PREPARE", + MsgType::Commit => "COMMIT", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "VIEW_CHANGE" => Some(Self::ViewChange), + "REQUEST" => Some(Self::Request), + "PREPREPARE" => Some(Self::Preprepare), + "PREPARE" => Some(Self::Prepare), + "COMMIT" => Some(Self::Commit), + _ => None, + } + } + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum DataType { + Block = 0, + Srl = 1, + } + impl DataType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + DataType::Block => "BLOCK", + DataType::Srl => "SRL", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "BLOCK" => Some(Self::Block), + "SRL" => Some(Self::Srl), + _ => None, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PbftCommitResult { + #[prost(bytes="vec", tag="1")] + pub data: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", repeated, tag="2")] + pub signature: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Srl { + #[prost(bytes="vec", repeated, tag="1")] + pub sr_address: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum AccountType { + Normal = 0, + AssetIssue = 1, + Contract = 2, +} +impl AccountType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + AccountType::Normal => "Normal", + AccountType::AssetIssue => "AssetIssue", + AccountType::Contract => "Contract", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "Normal" => Some(Self::Normal), + "AssetIssue" => Some(Self::AssetIssue), + "Contract" => Some(Self::Contract), + _ => None, + } + } +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum ReasonCode { + Requested = 0, + BadProtocol = 2, + TooManyPeers = 4, + DuplicatePeer = 5, + IncompatibleProtocol = 6, + RandomElimination = 7, + PeerQuiting = 8, + UnexpectedIdentity = 9, + LocalIdentity = 10, + PingTimeout = 11, + UserReason = 16, + Reset = 17, + SyncFail = 18, + FetchFail = 19, + BadTx = 20, + BadBlock = 21, + Forked = 22, + Unlinkable = 23, + IncompatibleVersion = 24, + IncompatibleChain = 25, + TimeOut = 32, + ConnectFail = 33, + TooManyPeersWithSameIp = 34, + LightNodeSyncFail = 35, + BelowThanMe = 36, + NotWitness = 37, + NoSuchMessage = 38, + Unknown = 255, +} +impl ReasonCode { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ReasonCode::Requested => "REQUESTED", + ReasonCode::BadProtocol => "BAD_PROTOCOL", + ReasonCode::TooManyPeers => "TOO_MANY_PEERS", + ReasonCode::DuplicatePeer => "DUPLICATE_PEER", + ReasonCode::IncompatibleProtocol => "INCOMPATIBLE_PROTOCOL", + ReasonCode::RandomElimination => "RANDOM_ELIMINATION", + ReasonCode::PeerQuiting => "PEER_QUITING", + ReasonCode::UnexpectedIdentity => "UNEXPECTED_IDENTITY", + ReasonCode::LocalIdentity => "LOCAL_IDENTITY", + ReasonCode::PingTimeout => "PING_TIMEOUT", + ReasonCode::UserReason => "USER_REASON", + ReasonCode::Reset => "RESET", + ReasonCode::SyncFail => "SYNC_FAIL", + ReasonCode::FetchFail => "FETCH_FAIL", + ReasonCode::BadTx => "BAD_TX", + ReasonCode::BadBlock => "BAD_BLOCK", + ReasonCode::Forked => "FORKED", + ReasonCode::Unlinkable => "UNLINKABLE", + ReasonCode::IncompatibleVersion => "INCOMPATIBLE_VERSION", + ReasonCode::IncompatibleChain => "INCOMPATIBLE_CHAIN", + ReasonCode::TimeOut => "TIME_OUT", + ReasonCode::ConnectFail => "CONNECT_FAIL", + ReasonCode::TooManyPeersWithSameIp => "TOO_MANY_PEERS_WITH_SAME_IP", + ReasonCode::LightNodeSyncFail => "LIGHT_NODE_SYNC_FAIL", + ReasonCode::BelowThanMe => "BELOW_THAN_ME", + ReasonCode::NotWitness => "NOT_WITNESS", + ReasonCode::NoSuchMessage => "NO_SUCH_MESSAGE", + ReasonCode::Unknown => "UNKNOWN", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "REQUESTED" => Some(Self::Requested), + "BAD_PROTOCOL" => Some(Self::BadProtocol), + "TOO_MANY_PEERS" => Some(Self::TooManyPeers), + "DUPLICATE_PEER" => Some(Self::DuplicatePeer), + "INCOMPATIBLE_PROTOCOL" => Some(Self::IncompatibleProtocol), + "RANDOM_ELIMINATION" => Some(Self::RandomElimination), + "PEER_QUITING" => Some(Self::PeerQuiting), + "UNEXPECTED_IDENTITY" => Some(Self::UnexpectedIdentity), + "LOCAL_IDENTITY" => Some(Self::LocalIdentity), + "PING_TIMEOUT" => Some(Self::PingTimeout), + "USER_REASON" => Some(Self::UserReason), + "RESET" => Some(Self::Reset), + "SYNC_FAIL" => Some(Self::SyncFail), + "FETCH_FAIL" => Some(Self::FetchFail), + "BAD_TX" => Some(Self::BadTx), + "BAD_BLOCK" => Some(Self::BadBlock), + "FORKED" => Some(Self::Forked), + "UNLINKABLE" => Some(Self::Unlinkable), + "INCOMPATIBLE_VERSION" => Some(Self::IncompatibleVersion), + "INCOMPATIBLE_CHAIN" => Some(Self::IncompatibleChain), + "TIME_OUT" => Some(Self::TimeOut), + "CONNECT_FAIL" => Some(Self::ConnectFail), + "TOO_MANY_PEERS_WITH_SAME_IP" => Some(Self::TooManyPeersWithSameIp), + "LIGHT_NODE_SYNC_FAIL" => Some(Self::LightNodeSyncFail), + "BELOW_THAN_ME" => Some(Self::BelowThanMe), + "NOT_WITNESS" => Some(Self::NotWitness), + "NO_SUCH_MESSAGE" => Some(Self::NoSuchMessage), + "UNKNOWN" => Some(Self::Unknown), + _ => None, + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AssetIssueContract { + #[prost(string, tag="41")] + pub id: ::prost::alloc::string::String, + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub name: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub abbr: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub total_supply: i64, + #[prost(message, repeated, tag="5")] + pub frozen_supply: ::prost::alloc::vec::Vec, + #[prost(int32, tag="6")] + pub trx_num: i32, + #[prost(int32, tag="7")] + pub precision: i32, + #[prost(int32, tag="8")] + pub num: i32, + #[prost(int64, tag="9")] + pub start_time: i64, + #[prost(int64, tag="10")] + pub end_time: i64, + #[prost(int64, tag="11")] + pub order: i64, + #[prost(int32, tag="16")] + pub vote_score: i32, + #[prost(bytes="vec", tag="20")] + pub description: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="21")] + pub url: ::prost::alloc::vec::Vec, + #[prost(int64, tag="22")] + pub free_asset_net_limit: i64, + #[prost(int64, tag="23")] + pub public_free_asset_net_limit: i64, + #[prost(int64, tag="24")] + pub public_free_asset_net_usage: i64, + #[prost(int64, tag="25")] + pub public_latest_free_net_time: i64, +} +/// Nested message and enum types in `AssetIssueContract`. +pub mod asset_issue_contract { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] + pub struct FrozenSupply { + #[prost(int64, tag="1")] + pub frozen_amount: i64, + #[prost(int64, tag="2")] + pub frozen_days: i64, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransferAssetContract { + #[prost(bytes="vec", tag="1")] + pub asset_name: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub to_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub amount: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UnfreezeAssetContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateAssetContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub description: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub url: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub new_limit: i64, + #[prost(int64, tag="5")] + pub new_public_limit: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ParticipateAssetIssueContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub to_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub asset_name: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub amount: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExchangeCreateContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub first_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub first_token_balance: i64, + #[prost(bytes="vec", tag="4")] + pub second_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub second_token_balance: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExchangeInjectContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub exchange_id: i64, + #[prost(bytes="vec", tag="3")] + pub token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub quant: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExchangeWithdrawContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub exchange_id: i64, + #[prost(bytes="vec", tag="3")] + pub token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub quant: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExchangeTransactionContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub exchange_id: i64, + #[prost(bytes="vec", tag="3")] + pub token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub quant: i64, + #[prost(int64, tag="5")] + pub expected: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MarketSellAssetContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub sell_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub sell_token_quantity: i64, + #[prost(bytes="vec", tag="4")] + pub buy_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub buy_token_quantity: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MarketCancelOrderContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub order_id: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountCreateContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub account_address: ::prost::alloc::vec::Vec, + #[prost(enumeration="AccountType", tag="3")] + pub r#type: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountUpdateContract { + #[prost(bytes="vec", tag="1")] + pub account_name: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub owner_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SetAccountIdContract { + #[prost(bytes="vec", tag="1")] + pub account_id: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub owner_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountPermissionUpdateContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="2")] + pub owner: ::core::option::Option, + #[prost(message, optional, tag="3")] + pub witness: ::core::option::Option, + #[prost(message, repeated, tag="4")] + pub actives: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BuyStorageBytesContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub bytes: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BuyStorageContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub quant: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SellStorageContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub storage_bytes: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateBrokerageContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int32, tag="2")] + pub brokerage: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AuthenticationPath { + #[prost(bool, repeated, tag="1")] + pub value: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MerklePath { + #[prost(message, repeated, tag="1")] + pub authentication_paths: ::prost::alloc::vec::Vec, + #[prost(bool, repeated, tag="2")] + pub index: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub rt: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct OutputPoint { + #[prost(bytes="vec", tag="1")] + pub hash: ::prost::alloc::vec::Vec, + #[prost(int32, tag="2")] + pub index: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct OutputPointInfo { + #[prost(message, repeated, tag="1")] + pub out_points: ::prost::alloc::vec::Vec, + #[prost(int32, tag="2")] + pub block_num: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PedersenHash { + #[prost(bytes="vec", tag="1")] + pub content: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct IncrementalMerkleTree { + #[prost(message, optional, tag="1")] + pub left: ::core::option::Option, + #[prost(message, optional, tag="2")] + pub right: ::core::option::Option, + #[prost(message, repeated, tag="3")] + pub parents: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct IncrementalMerkleVoucher { + #[prost(message, optional, tag="1")] + pub tree: ::core::option::Option, + #[prost(message, repeated, tag="2")] + pub filled: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="3")] + pub cursor: ::core::option::Option, + #[prost(int64, tag="4")] + pub cursor_depth: i64, + #[prost(bytes="vec", tag="5")] + pub rt: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="10")] + pub output_point: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct IncrementalMerkleVoucherInfo { + #[prost(message, repeated, tag="1")] + pub vouchers: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", repeated, tag="2")] + pub paths: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SpendDescription { + #[prost(bytes="vec", tag="1")] + pub value_commitment: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub anchor: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub nullifier: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub rk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="5")] + pub zkproof: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="6")] + pub spend_authority_signature: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ReceiveDescription { + #[prost(bytes="vec", tag="1")] + pub value_commitment: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub note_commitment: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub epk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub c_enc: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="5")] + pub c_out: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="6")] + pub zkproof: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ShieldedTransferContract { + #[prost(bytes="vec", tag="1")] + pub transparent_from_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub from_amount: i64, + #[prost(message, repeated, tag="3")] + pub spend_description: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="4")] + pub receive_description: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="5")] + pub binding_signature: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="6")] + pub transparent_to_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="7")] + pub to_amount: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct InventoryItems { + #[prost(int32, tag="1")] + pub r#type: i32, + #[prost(bytes="vec", repeated, tag="2")] + pub items: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FreezeBalanceContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub frozen_balance: i64, + #[prost(int64, tag="3")] + pub frozen_duration: i64, + #[prost(enumeration="ResourceCode", tag="10")] + pub resource: i32, + #[prost(bytes="vec", tag="15")] + pub receiver_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UnfreezeBalanceContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(enumeration="ResourceCode", tag="10")] + pub resource: i32, + #[prost(bytes="vec", tag="15")] + pub receiver_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WithdrawBalanceContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransferContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub to_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub amount: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionBalanceTrace { + #[prost(bytes="vec", tag="1")] + pub transaction_identifier: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="2")] + pub operation: ::prost::alloc::vec::Vec, + #[prost(string, tag="3")] + pub r#type: ::prost::alloc::string::String, + #[prost(string, tag="4")] + pub status: ::prost::alloc::string::String, +} +/// Nested message and enum types in `TransactionBalanceTrace`. +pub mod transaction_balance_trace { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Operation { + #[prost(int64, tag="1")] + pub operation_identifier: i64, + #[prost(bytes="vec", tag="2")] + pub address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub amount: i64, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockBalanceTrace { + #[prost(message, optional, tag="1")] + pub block_identifier: ::core::option::Option, + #[prost(int64, tag="2")] + pub timestamp: i64, + #[prost(message, repeated, tag="3")] + pub transaction_balance_trace: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `BlockBalanceTrace`. +pub mod block_balance_trace { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct BlockIdentifier { + #[prost(bytes="vec", tag="1")] + pub hash: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub number: i64, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct AccountTrace { + #[prost(int64, tag="1")] + pub balance: i64, + #[prost(int64, tag="99")] + pub placeholder: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountIdentifier { + #[prost(bytes="vec", tag="1")] + pub address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountBalanceRequest { + #[prost(message, optional, tag="1")] + pub account_identifier: ::core::option::Option, + #[prost(message, optional, tag="2")] + pub block_identifier: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountBalanceResponse { + #[prost(int64, tag="1")] + pub balance: i64, + #[prost(message, optional, tag="2")] + pub block_identifier: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FreezeBalanceV2Contract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub frozen_balance: i64, + #[prost(enumeration="ResourceCode", tag="3")] + pub resource: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UnfreezeBalanceV2Contract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub unfreeze_balance: i64, + #[prost(enumeration="ResourceCode", tag="3")] + pub resource: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WithdrawExpireUnfreezeContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DelegateResourceContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(enumeration="ResourceCode", tag="2")] + pub resource: i32, + #[prost(int64, tag="3")] + pub balance: i64, + #[prost(bytes="vec", tag="4")] + pub receiver_address: ::prost::alloc::vec::Vec, + #[prost(bool, tag="5")] + pub lock: bool, + #[prost(int64, tag="6")] + pub lock_period: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UnDelegateResourceContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(enumeration="ResourceCode", tag="2")] + pub resource: i32, + #[prost(int64, tag="3")] + pub balance: i64, + #[prost(bytes="vec", tag="4")] + pub receiver_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CancelAllUnfreezeV2Contract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SmartContract { + #[prost(bytes="vec", tag="1")] + pub origin_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub contract_address: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="3")] + pub abi: ::core::option::Option, + #[prost(bytes="vec", tag="4")] + pub bytecode: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub call_value: i64, + #[prost(int64, tag="6")] + pub consume_user_resource_percent: i64, + #[prost(string, tag="7")] + pub name: ::prost::alloc::string::String, + #[prost(int64, tag="8")] + pub origin_energy_limit: i64, + #[prost(bytes="vec", tag="9")] + pub code_hash: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="10")] + pub trx_hash: ::prost::alloc::vec::Vec, + #[prost(int32, tag="11")] + pub version: i32, +} +/// Nested message and enum types in `SmartContract`. +pub mod smart_contract { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Abi { + #[prost(message, repeated, tag="1")] + pub entrys: ::prost::alloc::vec::Vec, + } + /// Nested message and enum types in `ABI`. + pub mod abi { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Entry { + #[prost(bool, tag="1")] + pub anonymous: bool, + #[prost(bool, tag="2")] + pub constant: bool, + #[prost(string, tag="3")] + pub name: ::prost::alloc::string::String, + #[prost(message, repeated, tag="4")] + pub inputs: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="5")] + pub outputs: ::prost::alloc::vec::Vec, + #[prost(enumeration="entry::EntryType", tag="6")] + pub r#type: i32, + #[prost(bool, tag="7")] + pub payable: bool, + #[prost(enumeration="entry::StateMutabilityType", tag="8")] + pub state_mutability: i32, + } + /// Nested message and enum types in `Entry`. + pub mod entry { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Param { + #[prost(bool, tag="1")] + pub indexed: bool, + #[prost(string, tag="2")] + pub name: ::prost::alloc::string::String, + #[prost(string, tag="3")] + pub r#type: ::prost::alloc::string::String, + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum EntryType { + UnknownEntryType = 0, + Constructor = 1, + Function = 2, + Event = 3, + Fallback = 4, + Receive = 5, + Error = 6, + } + impl EntryType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + EntryType::UnknownEntryType => "UnknownEntryType", + EntryType::Constructor => "Constructor", + EntryType::Function => "Function", + EntryType::Event => "Event", + EntryType::Fallback => "Fallback", + EntryType::Receive => "Receive", + EntryType::Error => "Error", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "UnknownEntryType" => Some(Self::UnknownEntryType), + "Constructor" => Some(Self::Constructor), + "Function" => Some(Self::Function), + "Event" => Some(Self::Event), + "Fallback" => Some(Self::Fallback), + "Receive" => Some(Self::Receive), + "Error" => Some(Self::Error), + _ => None, + } + } + } + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum StateMutabilityType { + UnknownMutabilityType = 0, + Pure = 1, + View = 2, + Nonpayable = 3, + Payable = 4, + } + impl StateMutabilityType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + StateMutabilityType::UnknownMutabilityType => "UnknownMutabilityType", + StateMutabilityType::Pure => "Pure", + StateMutabilityType::View => "View", + StateMutabilityType::Nonpayable => "Nonpayable", + StateMutabilityType::Payable => "Payable", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "UnknownMutabilityType" => Some(Self::UnknownMutabilityType), + "Pure" => Some(Self::Pure), + "View" => Some(Self::View), + "Nonpayable" => Some(Self::Nonpayable), + "Payable" => Some(Self::Payable), + _ => None, + } + } + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct ContractState { + #[prost(int64, tag="1")] + pub energy_usage: i64, + #[prost(int64, tag="2")] + pub energy_factor: i64, + #[prost(int64, tag="3")] + pub update_cycle: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateSmartContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="2")] + pub new_contract: ::core::option::Option, + #[prost(int64, tag="3")] + pub call_token_value: i64, + #[prost(int64, tag="4")] + pub token_id: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TriggerSmartContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub contract_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub call_value: i64, + #[prost(bytes="vec", tag="4")] + pub data: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub call_token_value: i64, + #[prost(int64, tag="6")] + pub token_id: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ClearAbiContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub contract_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateSettingContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub contract_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub consume_user_resource_percent: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateEnergyLimitContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub contract_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub origin_energy_limit: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SmartContractDataWrapper { + #[prost(message, optional, tag="1")] + pub smart_contract: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub runtimecode: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="3")] + pub contract_state: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WitnessCreateContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub url: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WitnessUpdateContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="12")] + pub update_url: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct VoteWitnessContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="2")] + pub votes: ::prost::alloc::vec::Vec, + #[prost(bool, tag="3")] + pub support: bool, +} +/// Nested message and enum types in `VoteWitnessContract`. +pub mod vote_witness_contract { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Vote { + #[prost(bytes="vec", tag="1")] + pub vote_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub vote_count: i64, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ProposalApproveContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub proposal_id: i64, + #[prost(bool, tag="3")] + pub is_add_approval: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ProposalCreateContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(map="int64, int64", tag="2")] + pub parameters: ::std::collections::HashMap, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ProposalDeleteContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub proposal_id: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct VoteAssetContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", repeated, tag="2")] + pub vote_address: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(bool, tag="3")] + pub support: bool, + #[prost(int32, tag="5")] + pub count: i32, +} +// @@protoc_insertion_point(module) diff --git a/tron/src/pb/request.tron.v1.rs b/tron/src/pb/request.tron.v1.rs new file mode 100644 index 0000000..0aa07b5 --- /dev/null +++ b/tron/src/pb/request.tron.v1.rs @@ -0,0 +1,49 @@ +// @generated +// This file is @generated by prost-build + +/// A single payment event from the ERC20FeeProxy contract +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Payment { + /// The token contract address (TRC20) + #[prost(string, tag = "1")] + pub token_address: ::prost::alloc::string::String, + /// The recipient address + #[prost(string, tag = "2")] + pub to: ::prost::alloc::string::String, + /// The payment amount (as string to preserve precision) + #[prost(string, tag = "3")] + pub amount: ::prost::alloc::string::String, + /// The indexed payment reference (hex encoded) + #[prost(string, tag = "4")] + pub payment_reference: ::prost::alloc::string::String, + /// The fee amount (as string to preserve precision) + #[prost(string, tag = "5")] + pub fee_amount: ::prost::alloc::string::String, + /// The fee recipient address + #[prost(string, tag = "6")] + pub fee_address: ::prost::alloc::string::String, + /// The sender address (msg.sender) + #[prost(string, tag = "7")] + pub from: ::prost::alloc::string::String, + /// Block number where the event was emitted + #[prost(uint64, tag = "8")] + pub block: u64, + /// Block timestamp (Unix timestamp in seconds) + #[prost(uint64, tag = "9")] + pub timestamp: u64, + /// Transaction hash + #[prost(string, tag = "10")] + pub tx_hash: ::prost::alloc::string::String, + /// The proxy contract address that emitted the event + #[prost(string, tag = "11")] + pub contract_address: ::prost::alloc::string::String, +} + +/// Collection of payment events +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Payments { + #[prost(message, repeated, tag = "1")] + pub payments: ::prost::alloc::vec::Vec, +} diff --git a/tron/src/pb/sf.tron.type.v1.rs b/tron/src/pb/sf.tron.type.v1.rs new file mode 100644 index 0000000..6cef6a2 --- /dev/null +++ b/tron/src/pb/sf.tron.type.v1.rs @@ -0,0 +1,127 @@ +// @generated +// This file is @generated by prost-build. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Block { + #[prost(bytes="vec", tag="1")] + pub id: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="2")] + pub header: ::core::option::Option, + #[prost(message, repeated, tag="3")] + pub transactions: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockHeader { + #[prost(uint64, tag="1")] + pub number: u64, + #[prost(bytes="vec", tag="2")] + pub tx_trie_root: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub witness_address: ::prost::alloc::vec::Vec, + #[prost(uint64, tag="4")] + pub parent_number: u64, + #[prost(bytes="vec", tag="5")] + pub parent_hash: ::prost::alloc::vec::Vec, + #[prost(uint32, tag="6")] + pub version: u32, + #[prost(int64, tag="7")] + pub timestamp: i64, + #[prost(bytes="vec", tag="8")] + pub witness_signature: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Transaction { + #[prost(bytes="vec", tag="1")] + pub txid: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", repeated, tag="2")] + pub signature: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(bytes="vec", tag="3")] + pub ref_block_bytes: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub ref_block_hash: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub expiration: i64, + #[prost(int64, tag="6")] + pub timestamp: i64, + #[prost(bytes="vec", repeated, tag="7")] + pub contract_result: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(bool, tag="8")] + pub result: bool, + #[prost(enumeration="ResponseCode", tag="9")] + pub code: i32, + #[prost(bytes="vec", tag="10")] + pub message: ::prost::alloc::vec::Vec, + #[prost(int64, tag="11")] + pub energy_used: i64, + #[prost(int64, tag="12")] + pub energy_penalty: i64, + #[prost(message, optional, tag="13")] + pub info: ::core::option::Option, + #[prost(message, repeated, tag="14")] + pub contracts: ::prost::alloc::vec::Vec, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum ResponseCode { + Success = 0, + Sigerror = 1, + ContractValidateError = 2, + ContractExeError = 3, + BandwithError = 4, + DupTransactionError = 5, + TaposError = 6, + TooBigTransactionError = 7, + TransactionExpirationError = 8, + ServerBusy = 9, + NoConnection = 10, + NotEnoughEffectiveConnection = 11, + BlockUnsolidified = 12, + OtherError = 20, +} +impl ResponseCode { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ResponseCode::Success => "SUCCESS", + ResponseCode::Sigerror => "SIGERROR", + ResponseCode::ContractValidateError => "CONTRACT_VALIDATE_ERROR", + ResponseCode::ContractExeError => "CONTRACT_EXE_ERROR", + ResponseCode::BandwithError => "BANDWITH_ERROR", + ResponseCode::DupTransactionError => "DUP_TRANSACTION_ERROR", + ResponseCode::TaposError => "TAPOS_ERROR", + ResponseCode::TooBigTransactionError => "TOO_BIG_TRANSACTION_ERROR", + ResponseCode::TransactionExpirationError => "TRANSACTION_EXPIRATION_ERROR", + ResponseCode::ServerBusy => "SERVER_BUSY", + ResponseCode::NoConnection => "NO_CONNECTION", + ResponseCode::NotEnoughEffectiveConnection => "NOT_ENOUGH_EFFECTIVE_CONNECTION", + ResponseCode::BlockUnsolidified => "BLOCK_UNSOLIDIFIED", + ResponseCode::OtherError => "OTHER_ERROR", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "SUCCESS" => Some(Self::Success), + "SIGERROR" => Some(Self::Sigerror), + "CONTRACT_VALIDATE_ERROR" => Some(Self::ContractValidateError), + "CONTRACT_EXE_ERROR" => Some(Self::ContractExeError), + "BANDWITH_ERROR" => Some(Self::BandwithError), + "DUP_TRANSACTION_ERROR" => Some(Self::DupTransactionError), + "TAPOS_ERROR" => Some(Self::TaposError), + "TOO_BIG_TRANSACTION_ERROR" => Some(Self::TooBigTransactionError), + "TRANSACTION_EXPIRATION_ERROR" => Some(Self::TransactionExpirationError), + "SERVER_BUSY" => Some(Self::ServerBusy), + "NO_CONNECTION" => Some(Self::NoConnection), + "NOT_ENOUGH_EFFECTIVE_CONNECTION" => Some(Self::NotEnoughEffectiveConnection), + "BLOCK_UNSOLIDIFIED" => Some(Self::BlockUnsolidified), + "OTHER_ERROR" => Some(Self::OtherError), + _ => None, + } + } +} +// @@protoc_insertion_point(module) diff --git a/tron/subgraph.yaml b/tron/subgraph.yaml new file mode 100644 index 0000000..7bf9d1c --- /dev/null +++ b/tron/subgraph.yaml @@ -0,0 +1,22 @@ +# Substreams-powered Subgraph configuration for TRON payments +# Note: This is a template. To deploy: +# 1. Build the substreams: make build +# 2. Package it: substreams pack +# 3. Deploy to The Graph with this subgraph.yaml +specVersion: 1.0.0 +description: Request Network TRON ERC20FeeProxy payment events +repository: https://github.com/RequestNetwork/payments-substream +schema: + file: ./schema.graphql + +dataSources: + - kind: substreams + name: TronPayments + network: tron + source: + package: + moduleName: map_erc20_fee_proxy_payments + file: ./request-network-tron-v0.1.0.spkg + mapping: + apiVersion: 0.0.7 + kind: substreams/graph-entities diff --git a/tron/substreams.yaml b/tron/substreams.yaml new file mode 100644 index 0000000..9ec3f75 --- /dev/null +++ b/tron/substreams.yaml @@ -0,0 +1,48 @@ +specVersion: v0.1.0 +package: + name: request_network_tron + version: v0.1.0 + url: https://github.com/RequestNetwork/payments-substream + doc: | + Request Network TRON Substreams module for indexing ERC20FeeProxy payment events. + Indexes TransferWithReferenceAndFee events from the deployed ERC20FeeProxy contracts + on TRON mainnet and Nile testnet. + +imports: + tron: https://spkg.io/streamingfast/tron-foundational-v0.1.2.spkg + +protobuf: + files: + - request/tron/v1/payments.proto + importPaths: + - ./proto + +binaries: + default: + type: wasm/rust-v1 + file: ./target/wasm32-unknown-unknown/release/request_network_tron.wasm + +modules: + - name: map_erc20_fee_proxy_payments + kind: map + initialBlock: 63208782 # Nile testnet deployment block (use lower for both networks) + inputs: + - params: string + - source: sf.tron.type.v1.Block + output: + type: proto:request.tron.v1.Payments + doc: | + Extracts TransferWithReferenceAndFee events from ERC20FeeProxy contracts. + Filters transactions to the known proxy contract addresses and parses + the event logs to extract payment details. + + Params format: + mainnet_proxy_address=
+ nile_proxy_address=
+ +network: tron + +params: + map_erc20_fee_proxy_payments: | + mainnet_proxy_address=TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd + nile_proxy_address=THK5rNmrvCujhmrXa5DB1dASepwXTr9cJs From 8deb691a56e6217d1d40a61d296ffb66fef29c15 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Wed, 28 Jan 2026 22:23:55 -0300 Subject: [PATCH 02/29] fix: correct rust-toolchain action name --- .github/workflows/tron-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml index ba21f38..28a3f84 100644 --- a/.github/workflows/tron-build.yml +++ b/.github/workflows/tron-build.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@v4 - name: Install Rust toolchain - uses: dtolnay/rust-action@stable + uses: dtolnay/rust-toolchain@stable with: targets: wasm32-unknown-unknown @@ -78,7 +78,7 @@ jobs: uses: actions/checkout@v4 - name: Install Rust toolchain - uses: dtolnay/rust-action@stable + uses: dtolnay/rust-toolchain@stable with: targets: wasm32-unknown-unknown From 95f4ffcbc06f5d27109461a91a9e4b1bde4e370b Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Wed, 28 Jan 2026 22:27:16 -0300 Subject: [PATCH 03/29] feat: add automated subgraph deployment to The Graph Studio - Add deploy_subgraph workflow input to trigger deployment - Add deploy_network choice (nile or mainnet) - Install Graph CLI and authenticate with deploy key - Package substreams and deploy to The Graph Studio - Requires GRAPH_STUDIO_DEPLOY_KEY secret --- .github/workflows/tron-build.yml | 100 +++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml index 28a3f84..b00f8ff 100644 --- a/.github/workflows/tron-build.yml +++ b/.github/workflows/tron-build.yml @@ -20,6 +20,19 @@ on: required: false default: false type: boolean + deploy_subgraph: + description: 'Deploy subgraph to The Graph Studio' + required: false + default: false + type: boolean + deploy_network: + description: 'Network to deploy (nile or mainnet)' + required: false + default: 'nile' + type: choice + options: + - nile + - mainnet jobs: build-and-test: @@ -127,3 +140,90 @@ jobs: echo "Integration test completed successfully" cat output.json + + deploy-subgraph: + name: Deploy Subgraph to The Graph Studio + runs-on: ubuntu-latest + needs: build-and-test + # Only run on manual trigger with deploy enabled + if: ${{ github.event.inputs.deploy_subgraph == 'true' }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: wasm32-unknown-unknown + + - name: Cache Cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + tron/target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('tron/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-cargo- + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + + - name: Install Substreams CLI + run: | + curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz + sudo mv substreams /usr/local/bin/ + + - name: Install Graph CLI + run: npm install -g @graphprotocol/graph-cli + + - name: Build WASM module + working-directory: tron + run: make build + + - name: Package Substreams + working-directory: tron + run: make package + + - name: Verify package created + working-directory: tron + run: | + if [ ! -f "request-network-tron-v0.1.0.spkg" ]; then + # Try to find any .spkg file + SPKG_FILE=$(ls -1 *.spkg 2>/dev/null | head -1) + if [ -z "$SPKG_FILE" ]; then + echo "ERROR: No .spkg package file found!" + exit 1 + fi + fi + echo "Package created successfully" + ls -la *.spkg + + - name: Authenticate with The Graph Studio + run: graph auth --studio ${{ secrets.GRAPH_STUDIO_DEPLOY_KEY }} + + - name: Deploy to The Graph Studio + working-directory: tron + run: | + NETWORK="${{ github.event.inputs.deploy_network }}" + + if [ "$NETWORK" = "nile" ]; then + SUBGRAPH_SLUG="request-payments-tron-nile" + else + SUBGRAPH_SLUG="request-payments-tron" + fi + + echo "Deploying to subgraph: $SUBGRAPH_SLUG" + + # Deploy with version from Cargo.toml + VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') + + graph deploy --studio "$SUBGRAPH_SLUG" --version-label "v$VERSION" + + echo "Deployed successfully to https://api.studio.thegraph.com/query/67444/$SUBGRAPH_SLUG/version/latest" From 6dd2aed64fca2e3a877e7990f828fb62be71a2f9 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Wed, 28 Jan 2026 22:30:41 -0300 Subject: [PATCH 04/29] feat: auto-deploy testnet on merge, mainnet on release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Push to main → deploy to Nile testnet (with commit SHA in version) - GitHub release published → deploy to mainnet (with release tag as version) - Manual workflow_dispatch still available for both networks - Integration tests run before testnet deployment --- .github/workflows/tron-build.yml | 147 ++++++++++++++++++++++++------- 1 file changed, 113 insertions(+), 34 deletions(-) diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml index b00f8ff..94030c2 100644 --- a/.github/workflows/tron-build.yml +++ b/.github/workflows/tron-build.yml @@ -13,6 +13,8 @@ on: paths: - 'tron/**' - '.github/workflows/tron-build.yml' + release: + types: [published] workflow_dispatch: inputs: run_integration_tests: @@ -20,17 +22,13 @@ on: required: false default: false type: boolean - deploy_subgraph: - description: 'Deploy subgraph to The Graph Studio' - required: false - default: false - type: boolean deploy_network: - description: 'Network to deploy (nile or mainnet)' + description: 'Deploy to network (none, nile, or mainnet)' required: false - default: 'nile' + default: 'none' type: choice options: + - none - nile - mainnet @@ -83,8 +81,11 @@ jobs: name: Integration Test (Live Endpoint) runs-on: ubuntu-latest needs: build-and-test - # Only run on manual trigger with integration tests enabled, or on main branch push - if: ${{ github.event.inputs.run_integration_tests == 'true' || (github.event_name == 'push' && github.ref == 'refs/heads/main') }} + # Run on: manual trigger with flag, push to main, or release + if: | + github.event.inputs.run_integration_tests == 'true' || + (github.event_name == 'push' && github.ref == 'refs/heads/main') || + github.event_name == 'release' steps: - name: Checkout repository @@ -141,12 +142,14 @@ jobs: echo "Integration test completed successfully" cat output.json - deploy-subgraph: - name: Deploy Subgraph to The Graph Studio + deploy-testnet: + name: Deploy to Nile Testnet runs-on: ubuntu-latest - needs: build-and-test - # Only run on manual trigger with deploy enabled - if: ${{ github.event.inputs.deploy_subgraph == 'true' }} + needs: [build-and-test, integration-test] + # Deploy to testnet on: push to main, or manual with nile selected + if: | + (github.event_name == 'push' && github.ref == 'refs/heads/main') || + github.event.inputs.deploy_network == 'nile' steps: - name: Checkout repository @@ -194,36 +197,112 @@ jobs: - name: Verify package created working-directory: tron run: | - if [ ! -f "request-network-tron-v0.1.0.spkg" ]; then - # Try to find any .spkg file - SPKG_FILE=$(ls -1 *.spkg 2>/dev/null | head -1) - if [ -z "$SPKG_FILE" ]; then - echo "ERROR: No .spkg package file found!" - exit 1 - fi + SPKG_FILE=$(ls -1 *.spkg 2>/dev/null | head -1) + if [ -z "$SPKG_FILE" ]; then + echo "ERROR: No .spkg package file found!" + exit 1 fi - echo "Package created successfully" - ls -la *.spkg + echo "Package created successfully: $SPKG_FILE" - name: Authenticate with The Graph Studio run: graph auth --studio ${{ secrets.GRAPH_STUDIO_DEPLOY_KEY }} - - name: Deploy to The Graph Studio + - name: Deploy to Nile Testnet working-directory: tron run: | - NETWORK="${{ github.event.inputs.deploy_network }}" + VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') + COMMIT_SHA="${{ github.sha }}" + SHORT_SHA="${COMMIT_SHA:0:7}" + + # Use commit SHA for testnet versions to track deployments + VERSION_LABEL="v${VERSION}-${SHORT_SHA}" + + echo "Deploying to request-payments-tron-nile with version: $VERSION_LABEL" + + graph deploy --studio request-payments-tron-nile --version-label "$VERSION_LABEL" - if [ "$NETWORK" = "nile" ]; then - SUBGRAPH_SLUG="request-payments-tron-nile" + echo "✅ Deployed to Nile testnet" + echo "Endpoint: https://api.studio.thegraph.com/query/67444/request-payments-tron-nile/version/latest" + + deploy-mainnet: + name: Deploy to Mainnet + runs-on: ubuntu-latest + needs: [build-and-test] + # Deploy to mainnet on: GitHub release published, or manual with mainnet selected + if: | + github.event_name == 'release' || + github.event.inputs.deploy_network == 'mainnet' + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: wasm32-unknown-unknown + + - name: Cache Cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + tron/target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('tron/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-cargo- + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + + - name: Install Substreams CLI + run: | + curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz + sudo mv substreams /usr/local/bin/ + + - name: Install Graph CLI + run: npm install -g @graphprotocol/graph-cli + + - name: Build WASM module + working-directory: tron + run: make build + + - name: Package Substreams + working-directory: tron + run: make package + + - name: Verify package created + working-directory: tron + run: | + SPKG_FILE=$(ls -1 *.spkg 2>/dev/null | head -1) + if [ -z "$SPKG_FILE" ]; then + echo "ERROR: No .spkg package file found!" + exit 1 + fi + echo "Package created successfully: $SPKG_FILE" + + - name: Authenticate with The Graph Studio + run: graph auth --studio ${{ secrets.GRAPH_STUDIO_DEPLOY_KEY }} + + - name: Deploy to Mainnet + working-directory: tron + run: | + # For releases, use the release tag as version + if [ "${{ github.event_name }}" = "release" ]; then + VERSION="${{ github.event.release.tag_name }}" else - SUBGRAPH_SLUG="request-payments-tron" + VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') + VERSION="v${VERSION}" fi - echo "Deploying to subgraph: $SUBGRAPH_SLUG" - - # Deploy with version from Cargo.toml - VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') + echo "Deploying to request-payments-tron with version: $VERSION" - graph deploy --studio "$SUBGRAPH_SLUG" --version-label "v$VERSION" + graph deploy --studio request-payments-tron --version-label "$VERSION" - echo "Deployed successfully to https://api.studio.thegraph.com/query/67444/$SUBGRAPH_SLUG/version/latest" + echo "✅ Deployed to Mainnet" + echo "Endpoint: https://api.studio.thegraph.com/query/67444/request-payments-tron/version/latest" From 24e7bf33bb6da5b2e238ca298fc7808d82949e73 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Wed, 28 Jan 2026 22:39:49 -0300 Subject: [PATCH 05/29] feat: add comprehensive unit tests for event parsing - Add unit tests for base58 encoding, address parsing, uint256 parsing - Add test for full TransferWithReferenceAndFee event data structure - Add test for edge cases (short data, zero values) - Improve integration test to output JSON and validate structure - Integration test processes 100 blocks and validates payment fields --- .github/workflows/tron-build.yml | 83 ++++++++++++++++--- tron/src/lib.rs | 132 +++++++++++++++++++++++++++++++ 2 files changed, 202 insertions(+), 13 deletions(-) diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml index 94030c2..3f42d3e 100644 --- a/.github/workflows/tron-build.yml +++ b/.github/workflows/tron-build.yml @@ -81,9 +81,11 @@ jobs: name: Integration Test (Live Endpoint) runs-on: ubuntu-latest needs: build-and-test - # Run on: manual trigger with flag, push to main, or release + # Run on: manual trigger, push to main, release, or when deploying + # PRs only run unit tests (no API key needed) if: | github.event.inputs.run_integration_tests == 'true' || + (github.event.inputs.deploy_network != '' && github.event.inputs.deploy_network != 'none') || (github.event_name == 'push' && github.ref == 'refs/heads/main') || github.event_name == 'release' @@ -113,34 +115,89 @@ jobs: run: | curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz sudo mv substreams /usr/local/bin/ + substreams --version - name: Build WASM module working-directory: tron run: make build + - name: Package Substreams + working-directory: tron + run: make package + + - name: Verify package created + working-directory: tron + run: | + SPKG_FILE=$(ls -1 *.spkg 2>/dev/null | head -1) + if [ -z "$SPKG_FILE" ]; then + echo "ERROR: No .spkg package file found!" + exit 1 + fi + echo "✅ Package created: $SPKG_FILE" + - name: Run integration test against Nile testnet working-directory: tron env: SUBSTREAMS_API_TOKEN: ${{ secrets.SUBSTREAMS_API_TOKEN }} run: | - echo "Running substreams against Nile testnet (blocks 63208782-63208792)..." + echo "=== Integration Test: Running substreams against TRON Nile testnet ===" + echo "Block range: 63208782 to 63208882 (100 blocks from deployment)" + echo "" + + SPKG_FILE=$(ls -1 *.spkg | head -1) + echo "Using package: $SPKG_FILE" - # Run against a small range of blocks to verify the module works - substreams run ./substreams.yaml map_erc20_fee_proxy_payments \ + # Run substreams and capture JSON output + # This tests the full pipeline: load WASM, connect to endpoint, process blocks, parse events + set +e + substreams run "$SPKG_FILE" map_erc20_fee_proxy_payments \ -e tron.substreams.pinax.network:443 \ --start-block 63208782 \ - --stop-block +10 \ - --output json > output.json 2>&1 || true + --stop-block +100 \ + -o json 2>&1 | tee output.log + EXIT_CODE=$? + set -e - # Check that the run completed (even if no payments found) - if grep -q "error" output.json; then - echo "ERROR: Substreams run failed" - cat output.json + echo "" + echo "=== Validating Results ===" + + # Check for fatal errors + if grep -qi "fatal\|panic\|failed to" output.log; then + echo "❌ FAILED: Substreams encountered errors" + cat output.log exit 1 fi - echo "Integration test completed successfully" - cat output.json + # Check that the module was loaded and executed + if grep -qi "module" output.log || grep -qi "block" output.log; then + echo "✅ Substreams module loaded and executed" + fi + + # If any payments were found, validate the structure + if grep -q '"payments"' output.log; then + echo "✅ Payments data structure detected in output" + + # Extract and validate payment fields if present + if grep -q '"token_address"' output.log; then + echo "✅ Payment fields present: token_address" + fi + if grep -q '"payment_reference"' output.log; then + echo "✅ Payment fields present: payment_reference" + fi + if grep -q '"amount"' output.log; then + echo "✅ Payment fields present: amount" + fi + else + echo "ℹ️ No payments found in block range (expected if no transactions in these blocks)" + fi + + echo "" + echo "=== Integration Test PASSED ===" + echo "The substreams module successfully:" + echo " - Loaded WASM module" + echo " - Connected to TRON Nile endpoint via Pinax" + echo " - Processed 100 blocks without errors" + echo " - Output valid JSON structure" deploy-testnet: name: Deploy to Nile Testnet @@ -227,7 +284,7 @@ jobs: deploy-mainnet: name: Deploy to Mainnet runs-on: ubuntu-latest - needs: [build-and-test] + needs: [build-and-test, integration-test] # Deploy to mainnet on: GitHub release published, or manual with mainnet selected if: | github.event_name == 'release' || diff --git a/tron/src/lib.rs b/tron/src/lib.rs index d9a023a..9361e2a 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -220,4 +220,136 @@ mod tests { let encoded = base58_encode(&hex_addr); assert!(encoded.starts_with('T')); } + + #[test] + fn test_base58_encode_20_bytes() { + // Test with 20 bytes (without prefix) - should add 0x41 prefix + let addr_bytes = hex::decode("a614f803b6fd780986a42c78ec9c7f77e6ded13c").unwrap(); + let encoded = base58_encode(&addr_bytes); + assert!(encoded.starts_with('T')); + assert_eq!(encoded.len(), 34); // TRON addresses are 34 chars + } + + #[test] + fn test_parse_proxy_addresses() { + let params = "mainnet_proxy_address=TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd\nnile_proxy_address=THK5rNmrvCujhmrXa5DB1dASepwXTr9cJs"; + let (mainnet, nile) = parse_proxy_addresses(params); + assert_eq!(mainnet, "TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd"); + assert_eq!(nile, "THK5rNmrvCujhmrXa5DB1dASepwXTr9cJs"); + } + + #[test] + fn test_parse_address_from_data() { + // ABI-encoded address: 32 bytes with address in last 20 bytes + // Address: 0xa614f803b6fd780986a42c78ec9c7f77e6ded13c + let mut data = vec![0u8; 12]; // 12 bytes padding + data.extend_from_slice(&hex::decode("a614f803b6fd780986a42c78ec9c7f77e6ded13c").unwrap()); + + let address = parse_address_from_data(&data, 0); + assert!(address.is_some()); + assert!(address.unwrap().starts_with('T')); + } + + #[test] + fn test_parse_uint256_from_data() { + // Test parsing 1000000 (0xF4240 = 1000000 in decimal) + let mut data = vec![0u8; 32]; + data[29] = 0x0F; + data[30] = 0x42; + data[31] = 0x40; + + let amount = parse_uint256_from_data(&data, 0); + assert!(amount.starts_with("0x")); + // Should contain the hex value + assert!(amount.contains("f4240") || amount.contains("F4240") || amount.to_lowercase().contains("0f4240")); + } + + #[test] + fn test_parse_uint256_zero() { + let data = vec![0u8; 32]; + let amount = parse_uint256_from_data(&data, 0); + assert_eq!(amount, "0"); + } + + #[test] + fn test_event_signature() { + // Verify the event signature hash is correct + // keccak256("TransferWithReferenceAndFee(address,address,uint256,bytes,uint256,address)") + assert_eq!( + TRANSFER_WITH_REF_AND_FEE_TOPIC, + "9f16cbcc523c67a60c450e5ffe4f3b7b6dbe772e7abcadb2686ce029a9a0a2b6" + ); + } + + #[test] + fn test_parse_full_event_data() { + // Simulate a full TransferWithReferenceAndFee event data + // Data layout (160 bytes total): + // [0-31] = tokenAddress (padded) + // [32-63] = to (padded) + // [64-95] = amount + // [96-127] = feeAmount + // [128-159] = feeAddress (padded) + + let mut data = Vec::new(); + + // Token address (padded to 32 bytes) + data.extend_from_slice(&[0u8; 12]); + data.extend_from_slice(&hex::decode("a614f803b6fd780986a42c78ec9c7f77e6ded13c").unwrap()); + + // To address (padded to 32 bytes) + data.extend_from_slice(&[0u8; 12]); + data.extend_from_slice(&hex::decode("b614f803b6fd780986a42c78ec9c7f77e6ded13d").unwrap()); + + // Amount: 1000000 (0x0F4240) + let mut amount_bytes = vec![0u8; 32]; + amount_bytes[29] = 0x0F; + amount_bytes[30] = 0x42; + amount_bytes[31] = 0x40; + data.extend_from_slice(&amount_bytes); + + // Fee amount: 1000 (0x3E8) + let mut fee_bytes = vec![0u8; 32]; + fee_bytes[30] = 0x03; + fee_bytes[31] = 0xE8; + data.extend_from_slice(&fee_bytes); + + // Fee address (padded to 32 bytes) + data.extend_from_slice(&[0u8; 12]); + data.extend_from_slice(&hex::decode("c614f803b6fd780986a42c78ec9c7f77e6ded13e").unwrap()); + + assert_eq!(data.len(), 160); + + // Parse each field + let token = parse_address_from_data(&data, 0); + let to = parse_address_from_data(&data, 32); + let amount = parse_uint256_from_data(&data, 64); + let fee_amount = parse_uint256_from_data(&data, 96); + let fee_address = parse_address_from_data(&data, 128); + + assert!(token.is_some()); + assert!(to.is_some()); + assert!(token.unwrap().starts_with('T')); + assert!(to.unwrap().starts_with('T')); + assert!(fee_address.is_some()); + assert!(fee_address.unwrap().starts_with('T')); + + // Amounts should be non-zero hex values + assert!(amount.starts_with("0x")); + assert!(fee_amount.starts_with("0x")); + } + + #[test] + fn test_data_too_short() { + // Test with data shorter than expected + let data = vec![0u8; 100]; // Less than 160 bytes + + // Should still parse what's available + let token = parse_address_from_data(&data, 0); + assert!(token.is_some()); + + // But fee_address at offset 128 should fail + let fee_address = parse_address_from_data(&data, 128); + assert!(fee_address.is_none()); + } } From ec1da40e6ad53ffff38314ad340fb04b90ef9de4 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 29 Jan 2026 14:21:30 -0300 Subject: [PATCH 06/29] fix: address PR review comments - Fix package filename in subgraph.yaml (use underscores to match substreams.yaml) - Improve CI error handling by checking exit code directly instead of fragile grep - Convert uint256 to decimal strings for TheGraph BigInt compatibility --- .github/workflows/tron-build.yml | 24 +++++++------------ tron/src/lib.rs | 41 +++++++++++++++++++++----------- tron/subgraph.yaml | 2 +- 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml index 3f42d3e..516225b 100644 --- a/.github/workflows/tron-build.yml +++ b/.github/workflows/tron-build.yml @@ -149,29 +149,21 @@ jobs: # Run substreams and capture JSON output # This tests the full pipeline: load WASM, connect to endpoint, process blocks, parse events - set +e - substreams run "$SPKG_FILE" map_erc20_fee_proxy_payments \ + # Note: substreams run exits with 0 on success, non-zero on failure + if ! substreams run "$SPKG_FILE" map_erc20_fee_proxy_payments \ -e tron.substreams.pinax.network:443 \ --start-block 63208782 \ --stop-block +100 \ - -o json 2>&1 | tee output.log - EXIT_CODE=$? - set -e - - echo "" - echo "=== Validating Results ===" - - # Check for fatal errors - if grep -qi "fatal\|panic\|failed to" output.log; then - echo "❌ FAILED: Substreams encountered errors" + -o json 2>&1 | tee output.log; then + echo "" + echo "❌ FAILED: Substreams command returned non-zero exit code" + echo "Output:" cat output.log exit 1 fi - # Check that the module was loaded and executed - if grep -qi "module" output.log || grep -qi "block" output.log; then - echo "✅ Substreams module loaded and executed" - fi + echo "" + echo "=== Validating Results ===" # If any payments were found, validate the structure if grep -q '"payments"' output.log; then diff --git a/tron/src/lib.rs b/tron/src/lib.rs index 9361e2a..71ad5f2 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -166,20 +166,35 @@ fn parse_address_from_data(data: &[u8], offset: usize) -> Option { } /// Parses a uint256 from ABI-encoded data at the given offset +/// Returns the value as a decimal string for TheGraph BigInt compatibility fn parse_uint256_from_data(data: &[u8], offset: usize) -> String { if data.len() < offset + 32 { return "0".to_string(); } let bytes = &data[offset..offset + 32]; - // Convert to decimal string, handling large numbers - let hex_str = hex::encode(bytes); - // Remove leading zeros and convert - let trimmed = hex_str.trim_start_matches('0'); - if trimmed.is_empty() { + + // Convert bytes to decimal string using big-endian interpretation + // We process the bytes manually to handle arbitrarily large numbers + let mut result = Vec::new(); + + for &byte in bytes.iter() { + // Multiply result by 256 and add the new byte + let mut carry = byte as u32; + for digit in result.iter_mut().rev() { + let val = (*digit as u32) * 256 + carry; + *digit = (val % 10) as u8; + carry = val / 10; + } + while carry > 0 { + result.insert(0, (carry % 10) as u8); + carry /= 10; + } + } + + if result.is_empty() { "0".to_string() } else { - // For simplicity, return as hex - the consumer can convert - format!("0x{}", hex_str) + result.iter().map(|d| (b'0' + d) as char).collect() } } @@ -252,16 +267,14 @@ mod tests { #[test] fn test_parse_uint256_from_data() { - // Test parsing 1000000 (0xF4240 = 1000000 in decimal) + // Test parsing 1000000 (0x0F4240 = 1000000 in decimal) let mut data = vec![0u8; 32]; data[29] = 0x0F; data[30] = 0x42; data[31] = 0x40; let amount = parse_uint256_from_data(&data, 0); - assert!(amount.starts_with("0x")); - // Should contain the hex value - assert!(amount.contains("f4240") || amount.contains("F4240") || amount.to_lowercase().contains("0f4240")); + assert_eq!(amount, "1000000"); } #[test] @@ -334,9 +347,9 @@ mod tests { assert!(fee_address.is_some()); assert!(fee_address.unwrap().starts_with('T')); - // Amounts should be non-zero hex values - assert!(amount.starts_with("0x")); - assert!(fee_amount.starts_with("0x")); + // Amounts should be decimal strings + assert_eq!(amount, "1000000"); + assert_eq!(fee_amount, "1000"); } #[test] diff --git a/tron/subgraph.yaml b/tron/subgraph.yaml index 7bf9d1c..bf7825e 100644 --- a/tron/subgraph.yaml +++ b/tron/subgraph.yaml @@ -16,7 +16,7 @@ dataSources: source: package: moduleName: map_erc20_fee_proxy_payments - file: ./request-network-tron-v0.1.0.spkg + file: ./request_network_tron-v0.1.0.spkg mapping: apiVersion: 0.0.7 kind: substreams/graph-entities From d05e0bbe5ac04db16e4b220116f2159413123cf0 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 04:36:54 -0300 Subject: [PATCH 07/29] feat: configure TRON substream for mainnet-only deployment via Streamingfast - Update substreams.yaml for mainnet only (block 79216121) - Use mainnet-evm.tron.streamingfast.io:443 endpoint - Add CI workflow for build, test, and publish on merge to main - Add Dockerfile.sink and docker-compose.yml for SQL sink deployment - Remove subgraph.yaml (Substreams-Powered Subgraphs not supported for non-EVM) - Add .gitignore to exclude build artifacts - Simplify lib.rs for mainnet-only proxy address --- .github/workflows/tron-build.yml | 211 +++------ .gitignore | 19 + Dockerfile.sink | 38 ++ docker-compose.yml | 39 ++ tron/Cargo.lock | 782 +++++++++++++++++++++++++++++++ tron/Makefile | 5 +- tron/README.md | 48 +- tron/src/lib.rs | 37 +- tron/subgraph.yaml | 22 - tron/substreams.yaml | 8 +- 10 files changed, 1002 insertions(+), 207 deletions(-) create mode 100644 .gitignore create mode 100644 Dockerfile.sink create mode 100644 docker-compose.yml create mode 100644 tron/Cargo.lock delete mode 100644 tron/subgraph.yaml diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml index 516225b..970d976 100644 --- a/.github/workflows/tron-build.yml +++ b/.github/workflows/tron-build.yml @@ -13,24 +13,18 @@ on: paths: - 'tron/**' - '.github/workflows/tron-build.yml' - release: - types: [published] workflow_dispatch: inputs: run_integration_tests: - description: 'Run integration tests against live endpoint' + description: 'Run integration tests against live endpoints' required: false default: false type: boolean - deploy_network: - description: 'Deploy to network (none, nile, or mainnet)' + publish_package: + description: 'Build and publish package artifact' required: false - default: 'none' - type: choice - options: - - none - - nile - - mainnet + default: false + type: boolean jobs: build-and-test: @@ -77,17 +71,16 @@ jobs: fi echo "Build artifacts verified successfully" - integration-test: - name: Integration Test (Live Endpoint) + integration-test-mainnet: + name: Integration Test (Mainnet EVM) runs-on: ubuntu-latest needs: build-and-test - # Run on: manual trigger, push to main, release, or when deploying + # Run on: push to main (merge) or manual trigger # PRs only run unit tests (no API key needed) if: | github.event.inputs.run_integration_tests == 'true' || - (github.event.inputs.deploy_network != '' && github.event.inputs.deploy_network != 'none') || - (github.event_name == 'push' && github.ref == 'refs/heads/main') || - github.event_name == 'release' + github.event.inputs.publish_package == 'true' || + (github.event_name == 'push' && github.ref == 'refs/heads/main') steps: - name: Checkout repository @@ -135,30 +128,29 @@ jobs: fi echo "✅ Package created: $SPKG_FILE" - - name: Run integration test against Nile testnet + - name: Deploy and test against Mainnet EVM (Streamingfast) working-directory: tron env: SUBSTREAMS_API_TOKEN: ${{ secrets.SUBSTREAMS_API_TOKEN }} run: | - echo "=== Integration Test: Running substreams against TRON Nile testnet ===" - echo "Block range: 63208782 to 63208882 (100 blocks from deployment)" + echo "=== Deploying to TRON Mainnet EVM (Streamingfast) ===" + echo "Endpoint: mainnet-evm.tron.streamingfast.io:443" + echo "Block range: 79216121 to 79216221 (100 blocks from mainnet deployment)" echo "" SPKG_FILE=$(ls -1 *.spkg | head -1) echo "Using package: $SPKG_FILE" # Run substreams and capture JSON output - # This tests the full pipeline: load WASM, connect to endpoint, process blocks, parse events - # Note: substreams run exits with 0 on success, non-zero on failure if ! substreams run "$SPKG_FILE" map_erc20_fee_proxy_payments \ - -e tron.substreams.pinax.network:443 \ - --start-block 63208782 \ + -e mainnet-evm.tron.streamingfast.io:443 \ + --start-block 79216121 \ --stop-block +100 \ - -o json 2>&1 | tee output.log; then + -o json 2>&1 | tee output_mainnet.log; then echo "" echo "❌ FAILED: Substreams command returned non-zero exit code" echo "Output:" - cat output.log + cat output_mainnet.log exit 1 fi @@ -166,17 +158,17 @@ jobs: echo "=== Validating Results ===" # If any payments were found, validate the structure - if grep -q '"payments"' output.log; then + if grep -q '"payments"' output_mainnet.log; then echo "✅ Payments data structure detected in output" # Extract and validate payment fields if present - if grep -q '"token_address"' output.log; then + if grep -q '"token_address"' output_mainnet.log; then echo "✅ Payment fields present: token_address" fi - if grep -q '"payment_reference"' output.log; then + if grep -q '"payment_reference"' output_mainnet.log; then echo "✅ Payment fields present: payment_reference" fi - if grep -q '"amount"' output.log; then + if grep -q '"amount"' output_mainnet.log; then echo "✅ Payment fields present: amount" fi else @@ -184,21 +176,22 @@ jobs: fi echo "" - echo "=== Integration Test PASSED ===" + echo "=== Mainnet Integration Test PASSED ===" echo "The substreams module successfully:" echo " - Loaded WASM module" - echo " - Connected to TRON Nile endpoint via Pinax" + echo " - Connected to TRON Mainnet EVM endpoint via Streamingfast" echo " - Processed 100 blocks without errors" echo " - Output valid JSON structure" - deploy-testnet: - name: Deploy to Nile Testnet + # Publish package artifact for download/deployment + publish-package: + name: Publish Mainnet Package runs-on: ubuntu-latest - needs: [build-and-test, integration-test] - # Deploy to testnet on: push to main, or manual with nile selected + needs: [build-and-test, integration-test-mainnet] + # Publish on: push to main (merge) or manual publish selection if: | (github.event_name == 'push' && github.ref == 'refs/heads/main') || - github.event.inputs.deploy_network == 'nile' + github.event.inputs.publish_package == 'true' steps: - name: Checkout repository @@ -222,19 +215,11 @@ jobs: restore-keys: | ${{ runner.os }}-cargo- - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '22' - - name: Install Substreams CLI run: | curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz sudo mv substreams /usr/local/bin/ - - name: Install Graph CLI - run: npm install -g @graphprotocol/graph-cli - - name: Build WASM module working-directory: tron run: make build @@ -243,7 +228,8 @@ jobs: working-directory: tron run: make package - - name: Verify package created + - name: Get package info + id: package_info working-directory: tron run: | SPKG_FILE=$(ls -1 *.spkg 2>/dev/null | head -1) @@ -251,107 +237,44 @@ jobs: echo "ERROR: No .spkg package file found!" exit 1 fi - echo "Package created successfully: $SPKG_FILE" - - - name: Authenticate with The Graph Studio - run: graph auth --studio ${{ secrets.GRAPH_STUDIO_DEPLOY_KEY }} - - - name: Deploy to Nile Testnet - working-directory: tron - run: | - VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') - COMMIT_SHA="${{ github.sha }}" - SHORT_SHA="${COMMIT_SHA:0:7}" - - # Use commit SHA for testnet versions to track deployments - VERSION_LABEL="v${VERSION}-${SHORT_SHA}" + echo "spkg_file=$SPKG_FILE" >> $GITHUB_OUTPUT - echo "Deploying to request-payments-tron-nile with version: $VERSION_LABEL" - - graph deploy --studio request-payments-tron-nile --version-label "$VERSION_LABEL" + VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') + echo "version=$VERSION" >> $GITHUB_OUTPUT - echo "✅ Deployed to Nile testnet" - echo "Endpoint: https://api.studio.thegraph.com/query/67444/request-payments-tron-nile/version/latest" - - deploy-mainnet: - name: Deploy to Mainnet - runs-on: ubuntu-latest - needs: [build-and-test, integration-test] - # Deploy to mainnet on: GitHub release published, or manual with mainnet selected - if: | - github.event_name == 'release' || - github.event.inputs.deploy_network == 'mainnet' - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - targets: wasm32-unknown-unknown - - - name: Cache Cargo dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/bin/ - ~/.cargo/registry/index/ - ~/.cargo/registry/cache/ - ~/.cargo/git/db/ - tron/target/ - key: ${{ runner.os }}-cargo-${{ hashFiles('tron/Cargo.toml') }} - restore-keys: | - ${{ runner.os }}-cargo- + echo "Package created successfully: $SPKG_FILE (version: $VERSION)" - - name: Setup Node.js - uses: actions/setup-node@v4 + - name: Upload package artifact + uses: actions/upload-artifact@v4 with: - node-version: '22' - - - name: Install Substreams CLI - run: | - curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz - sudo mv substreams /usr/local/bin/ - - - name: Install Graph CLI - run: npm install -g @graphprotocol/graph-cli - - - name: Build WASM module - working-directory: tron - run: make build - - - name: Package Substreams - working-directory: tron - run: make package - - - name: Verify package created - working-directory: tron - run: | - SPKG_FILE=$(ls -1 *.spkg 2>/dev/null | head -1) - if [ -z "$SPKG_FILE" ]; then - echo "ERROR: No .spkg package file found!" - exit 1 - fi - echo "Package created successfully: $SPKG_FILE" - - - name: Authenticate with The Graph Studio - run: graph auth --studio ${{ secrets.GRAPH_STUDIO_DEPLOY_KEY }} + name: request-network-tron-${{ steps.package_info.outputs.version }} + path: tron/${{ steps.package_info.outputs.spkg_file }} + retention-days: 90 - - name: Deploy to Mainnet - working-directory: tron + - name: Package ready for deployment run: | - # For releases, use the release tag as version - if [ "${{ github.event_name }}" = "release" ]; then - VERSION="${{ github.event.release.tag_name }}" - else - VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') - VERSION="v${VERSION}" - fi - - echo "Deploying to request-payments-tron with version: $VERSION" - - graph deploy --studio request-payments-tron --version-label "$VERSION" - - echo "✅ Deployed to Mainnet" - echo "Endpoint: https://api.studio.thegraph.com/query/67444/request-payments-tron/version/latest" + echo "==============================================" + echo "📦 Substreams Package Ready" + echo "==============================================" + echo "" + echo "Package: ${{ steps.package_info.outputs.spkg_file }}" + echo "Version: ${{ steps.package_info.outputs.version }}" + echo "" + echo "🔗 Endpoint:" + echo " - Mainnet (Streamingfast): mainnet-evm.tron.streamingfast.io:443" + echo "" + echo "📖 Deployment Options:" + echo " 1. SQL Sink (PostgreSQL/ClickHouse):" + echo " substreams-sink-sql run map_erc20_fee_proxy_payments" + echo "" + echo " 2. Direct Streaming (Go/Rust/JS SDK):" + echo " See https://docs.substreams.dev/how-to-guides/sinks/stream" + echo "" + echo " 3. Run locally:" + echo " substreams run map_erc20_fee_proxy_payments \\" + echo " -e mainnet-evm.tron.streamingfast.io:443 \\" + echo " --start-block 79216121" + echo "" + echo "Note: Substreams-Powered Subgraphs are not supported for non-EVM chains." + echo "Use SQL sink or direct streaming for production deployments." + echo "==============================================" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6415cd --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +# Rust build artifacts +target/ + +# Substreams packages (built during CI) +*.spkg + +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db + +# Environment +.env +.env.local diff --git a/Dockerfile.sink b/Dockerfile.sink new file mode 100644 index 0000000..9b3c876 --- /dev/null +++ b/Dockerfile.sink @@ -0,0 +1,38 @@ +# Substreams SQL Sink for TRON Payments +FROM golang:1.22-alpine AS builder + +# Install git for go get +RUN apk add --no-cache git + +# Install substreams-sink-sql +RUN go install github.com/streamingfast/substreams-sink-sql/cmd/substreams-sink-sql@latest + +# Final image +FROM alpine:3.19 + +# Install ca-certificates for HTTPS connections +RUN apk add --no-cache ca-certificates + +# Copy the binary from builder +COPY --from=builder /go/bin/substreams-sink-sql /usr/local/bin/ + +# Copy the substreams package +COPY tron/request-network-tron-v0.1.0.spkg /app/ + +WORKDIR /app + +# Environment variables (override in Easypanel) +ENV DSN="" +ENV SUBSTREAMS_API_TOKEN="" +ENV ENDPOINT="mainnet-evm.tron.streamingfast.io:443" + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ + CMD pgrep substreams-sink-sql || exit 1 + +# Run the sink +# The SUBSTREAMS_API_TOKEN env var is automatically picked up by the CLI +CMD substreams-sink-sql from-proto "$DSN" \ + /app/request-network-tron-v0.1.0.spkg \ + map_erc20_fee_proxy_payments \ + -e "$ENDPOINT" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..94afc9a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +version: '3.8' + +services: + # PostgreSQL Database + postgres: + image: postgres:15-alpine + container_name: tron-payments-db + restart: unless-stopped + environment: + POSTGRES_DB: tron_payments + POSTGRES_USER: postgres + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme} + volumes: + - postgres_data:/var/lib/postgresql/data + ports: + - "5432:5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + + # Substreams SQL Sink + sink: + build: + context: . + dockerfile: Dockerfile.sink + container_name: tron-payments-sink + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + environment: + DSN: postgres://postgres:${POSTGRES_PASSWORD:-changeme}@postgres:5432/tron_payments?sslmode=disable + SUBSTREAMS_API_TOKEN: ${SUBSTREAMS_API_TOKEN} + ENDPOINT: mainnet-evm.tron.streamingfast.io:443 + +volumes: + postgres_data: diff --git a/tron/Cargo.lock b/tron/Cargo.lock new file mode 100644 index 0000000..d170a4c --- /dev/null +++ b/tron/Cargo.lock @@ -0,0 +1,782 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "bigdecimal" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2", + "tinyvec", +] + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-literal" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" + +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "indexmap" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.180" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "pad" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "pest" +version = "2.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9eb05c21a464ea704b53158d358a31e6425db2f63a1a7312268b05fe2b75f7" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f9dbced329c441fa79d80472764b1a2c7e57123553b8519b36663a2fb234ed" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bb96d5051a78f44f43c8f712d8e810adb0ebf923fc9ed2655a7f66f63ba8ee5" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "pest_meta" +version = "2.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "602113b5b5e8621770cfd490cfd90b9f84ab29bd2b0e49ad83eb6d186cef2365" +dependencies = [ + "pest", + "sha2", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes", + "heck", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 1.0.109", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost", +] + +[[package]] +name = "quote" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" + +[[package]] +name = "request-network-tron" +version = "0.1.0" +dependencies = [ + "anyhow", + "bs58", + "getrandom 0.2.17", + "hex", + "prost", + "prost-types", + "sha2", + "substreams", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "substreams" +version = "0.5.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e47e531af83a3cbb78c627ee8232a0ac86604f11c89e34bd4b721ec41e03e5" +dependencies = [ + "anyhow", + "bigdecimal", + "hex", + "hex-literal", + "num-bigint", + "num-integer", + "num-traits", + "pad", + "pest", + "pest_derive", + "prost", + "prost-build", + "prost-types", + "substreams-macro", + "thiserror", +] + +[[package]] +name = "substreams-macro" +version = "0.5.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4ac77f08d723dace35739d65df8ed122f6d04e2a3e47929831d4021e3339240" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "thiserror", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +dependencies = [ + "fastrand", + "getrandom 0.3.4", + "once_cell", + "rustix 1.1.3", + "windows-sys 0.61.2", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.44", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" diff --git a/tron/Makefile b/tron/Makefile index e9d1c03..2de0949 100644 --- a/tron/Makefile +++ b/tron/Makefile @@ -10,13 +10,14 @@ protogen: package: build substreams pack ./substreams.yaml +# Mainnet - uses Streamingfast TRON EVM endpoint .PHONY: gui gui: build - substreams gui ./substreams.yaml map_erc20_fee_proxy_payments -e tron.substreams.pinax.network:443 + substreams gui ./substreams.yaml map_erc20_fee_proxy_payments -e mainnet-evm.tron.streamingfast.io:443 --start-block 79216121 .PHONY: run run: build - substreams run ./substreams.yaml map_erc20_fee_proxy_payments -e tron.substreams.pinax.network:443 --start-block 63208782 --stop-block +100 + substreams run ./substreams.yaml map_erc20_fee_proxy_payments -e mainnet-evm.tron.streamingfast.io:443 --start-block 79216121 --stop-block +100 .PHONY: clean clean: diff --git a/tron/README.md b/tron/README.md index 4bd4c89..1036fed 100644 --- a/tron/README.md +++ b/tron/README.md @@ -4,10 +4,9 @@ This package contains a Substreams module for indexing ERC20FeeProxy payment eve ## Overview -The module indexes `TransferWithReferenceAndFee` events from the deployed ERC20FeeProxy contracts: +The module indexes `TransferWithReferenceAndFee` events from the deployed ERC20FeeProxy contract: -- **Mainnet**: `TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd` -- **Nile Testnet**: `THK5rNmrvCujhmrXa5DB1dASepwXTr9cJs` +- **Mainnet**: `TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd` (block 79216121) ## Prerequisites @@ -50,25 +49,52 @@ make run ## Deployment -### Deploy as Substreams-powered Subgraph +> **Note**: Substreams-Powered Subgraphs are not supported for non-EVM chains like TRON. +> Use SQL sink or direct streaming for production deployments. -1. Build and package the Substreams module: +### Substreams Endpoint +- **Mainnet (Streamingfast)**: `mainnet-evm.tron.streamingfast.io:443` + +### Option 1: SQL Sink (PostgreSQL/ClickHouse) + +1. Install the SQL sink: + ```bash + go install github.com/streamingfast/substreams-sink-sql/cmd/substreams-sink-sql@latest + ``` + +2. Build and package: ```bash make package ``` -2. Deploy to The Graph: +3. Run the sink: ```bash - graph deploy --studio request-payments-tron + substreams-sink-sql run \ + "postgres://user:password@host:5432/database?sslmode=disable" \ + ./request-network-tron-v0.1.0.spkg \ + map_erc20_fee_proxy_payments \ + -e mainnet-evm.tron.streamingfast.io:443 ``` -### Subgraph Endpoints +### Option 2: Direct Streaming -Once deployed, the subgraph will be available at: +Use the Go, Rust, or JavaScript SDKs to stream data directly to your application: -- **Mainnet**: `https://api.studio.thegraph.com/query/67444/request-payments-tron/version/latest` -- **Nile Testnet**: `https://api.studio.thegraph.com/query/67444/request-payments-tron-nile/version/latest` +- [Go SDK](https://github.com/streamingfast/substreams-sink) +- [Rust SDK](https://github.com/streamingfast/substreams-sink-rust) +- [JavaScript SDK](https://github.com/substreams-js/substreams-js) + +### Option 3: Files/CSV + +Export data to files for batch processing: +```bash +substreams-sink-files run \ + ./request-network-tron-v0.1.0.spkg \ + map_erc20_fee_proxy_payments \ + -e mainnet-evm.tron.streamingfast.io:443 \ + --output-path ./output +``` ## Module Details diff --git a/tron/src/lib.rs b/tron/src/lib.rs index 71ad5f2..92f0232 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -1,7 +1,7 @@ //! Request Network TRON Substreams Module //! //! This module indexes TransferWithReferenceAndFee events from the ERC20FeeProxy -//! contract deployed on TRON mainnet and Nile testnet. +//! contract deployed on TRON mainnet. mod pb; @@ -17,30 +17,22 @@ use substreams::log; const TRANSFER_WITH_REF_AND_FEE_TOPIC: &str = "9f16cbcc523c67a60c450e5ffe4f3b7b6dbe772e7abcadb2686ce029a9a0a2b6"; -/// Parses proxy addresses from the params string -/// Expected format: "mainnet_proxy_address=ADDR1\nnile_proxy_address=ADDR2" -fn parse_proxy_addresses(params: &str) -> (String, String) { - let mut mainnet = String::new(); - let mut nile = String::new(); - +/// Parses proxy address from the params string +/// Expected format: "mainnet_proxy_address=ADDR" +fn parse_proxy_address(params: &str) -> String { for line in params.lines() { let parts: Vec<&str> = line.splitn(2, '=').collect(); - if parts.len() == 2 { - match parts[0].trim() { - "mainnet_proxy_address" => mainnet = parts[1].trim().to_string(), - "nile_proxy_address" => nile = parts[1].trim().to_string(), - _ => {} - } + if parts.len() == 2 && parts[0].trim() == "mainnet_proxy_address" { + return parts[1].trim().to_string(); } } - - (mainnet, nile) + String::new() } /// Maps TRON blocks to extract ERC20FeeProxy payment events #[substreams::handlers::map] fn map_erc20_fee_proxy_payments(params: String, block: Block) -> Result { - let (mainnet_proxy, nile_proxy) = parse_proxy_addresses(¶ms); + let proxy_address = parse_proxy_address(¶ms); let mut payments = Vec::new(); let block_number = block.header.as_ref().map(|h| h.number).unwrap_or(0); @@ -52,10 +44,10 @@ fn map_erc20_fee_proxy_payments(params: String, block: Block) -> Result - nile_proxy_address=
network: tron params: map_erc20_fee_proxy_payments: | mainnet_proxy_address=TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd - nile_proxy_address=THK5rNmrvCujhmrXa5DB1dASepwXTr9cJs From a89be0367791e94a923a051b37b687b3cc4652d5 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 05:16:32 -0300 Subject: [PATCH 08/29] Prepare for Easypanel production deployment --- tron/Cargo.lock | 12 ++++++++++++ tron/Cargo.toml | 1 + tron/replay.log | Bin 0 -> 13 bytes tron/schema.sql | 25 +++++++++++++++++++++++++ tron/src/lib.rs | 28 ++++++++++++++++++++++++++++ tron/substreams.yaml | 19 +++++++++++++++++++ 6 files changed, 85 insertions(+) create mode 100644 tron/replay.log create mode 100644 tron/schema.sql diff --git a/tron/Cargo.lock b/tron/Cargo.lock index d170a4c..6f80cd4 100644 --- a/tron/Cargo.lock +++ b/tron/Cargo.lock @@ -486,6 +486,7 @@ dependencies = [ "prost-types", "sha2", "substreams", + "substreams-database-change", ] [[package]] @@ -548,6 +549,17 @@ dependencies = [ "thiserror", ] +[[package]] +name = "substreams-database-change" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed32ca6fc7fa4b7a684d3abd5bb0545aadd2df82402e7336443cdbb6f8b350c3" +dependencies = [ + "prost", + "prost-types", + "substreams", +] + [[package]] name = "substreams-macro" version = "0.5.22" diff --git a/tron/Cargo.toml b/tron/Cargo.toml index c805c20..4b89e20 100644 --- a/tron/Cargo.toml +++ b/tron/Cargo.toml @@ -12,6 +12,7 @@ crate-type = ["cdylib"] [dependencies] substreams = "0.5" +substreams-database-change = "1.3" prost = "0.11" prost-types = "0.11" hex = "0.4" diff --git a/tron/replay.log b/tron/replay.log new file mode 100644 index 0000000000000000000000000000000000000000..ce87d9ffefbda2d56a6979204018a98f70ed4b50 GIT binary patch literal 13 UcmYdE%FJVAU@I!f(JeCs02=E9#{d8T literal 0 HcmV?d00001 diff --git a/tron/schema.sql b/tron/schema.sql new file mode 100644 index 0000000..915510a --- /dev/null +++ b/tron/schema.sql @@ -0,0 +1,25 @@ +-- Schema for Request Network TRON ERC20FeeProxy payments + +CREATE TABLE IF NOT EXISTS payments ( + id TEXT PRIMARY KEY, + tx_hash TEXT NOT NULL, + block_number BIGINT NOT NULL, + timestamp BIGINT NOT NULL, + contract_address TEXT NOT NULL, + token_address TEXT NOT NULL, + from_address TEXT NOT NULL, + to_address TEXT NOT NULL, + amount NUMERIC NOT NULL, + fee_amount NUMERIC NOT NULL, + fee_address TEXT NOT NULL, + payment_reference TEXT NOT NULL +); + +-- Indexes for common queries +CREATE INDEX IF NOT EXISTS idx_payments_tx_hash ON payments(tx_hash); +CREATE INDEX IF NOT EXISTS idx_payments_block_number ON payments(block_number); +CREATE INDEX IF NOT EXISTS idx_payments_timestamp ON payments(timestamp); +CREATE INDEX IF NOT EXISTS idx_payments_payment_reference ON payments(payment_reference); +CREATE INDEX IF NOT EXISTS idx_payments_from_address ON payments(from_address); +CREATE INDEX IF NOT EXISTS idx_payments_to_address ON payments(to_address); +CREATE INDEX IF NOT EXISTS idx_payments_token_address ON payments(token_address); diff --git a/tron/src/lib.rs b/tron/src/lib.rs index 92f0232..f08c536 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -10,6 +10,7 @@ use pb::protocol::transaction_info::Log; use pb::request::tron::v1::{Payment, Payments}; use pb::sf::tron::r#type::v1::{Block, Transaction}; use substreams::log; +use substreams_database_change::pb::database::{table_change::Operation, DatabaseChanges}; /// TransferWithReferenceAndFee event signature (keccak256 hash of event signature) /// Event: TransferWithReferenceAndFee(address,address,uint256,bytes indexed,uint256,address) @@ -81,6 +82,33 @@ fn map_erc20_fee_proxy_payments(params: String, block: Block) -> Result Result { + let mut database_changes = DatabaseChanges::default(); + + for payment in payments.payments { + // Create unique key from tx_hash + payment_reference + let key = format!("{}:{}", payment.tx_hash, payment.payment_reference); + + database_changes + .push_change("payments", &key, 0, Operation::Create) + .change("tx_hash", ("", payment.tx_hash.as_str())) + .change("block_number", ("", payment.block.to_string().as_str())) + .change("timestamp", ("", payment.timestamp.to_string().as_str())) + .change("contract_address", ("", payment.contract_address.as_str())) + .change("token_address", ("", payment.token_address.as_str())) + .change("from_address", ("", payment.from.as_str())) + .change("to_address", ("", payment.to.as_str())) + .change("amount", ("", payment.amount.as_str())) + .change("fee_amount", ("", payment.fee_amount.as_str())) + .change("fee_address", ("", payment.fee_address.as_str())) + .change("payment_reference", ("", payment.payment_reference.as_str())); + } + + Ok(database_changes) +} + /// Parses a TransferWithReferenceAndFee event from a log entry fn parse_transfer_with_reference_and_fee( log_entry: &Log, diff --git a/tron/substreams.yaml b/tron/substreams.yaml index 1210054..a7eb5e6 100644 --- a/tron/substreams.yaml +++ b/tron/substreams.yaml @@ -10,6 +10,8 @@ package: imports: tron: https://spkg.io/streamingfast/tron-foundational-v0.1.2.spkg + sql: https://github.com/streamingfast/substreams-sink-sql/releases/download/protodefs-v1.0.3/substreams-sink-sql-protodefs-v1.0.3.spkg + database_change: https://github.com/streamingfast/substreams-sink-database-changes/releases/download/v1.2.1/substreams-database-change-v1.2.1.spkg protobuf: files: @@ -39,8 +41,25 @@ modules: Params format: mainnet_proxy_address=
+ - name: db_out + kind: map + initialBlock: 79216121 + inputs: + - map: map_erc20_fee_proxy_payments + output: + type: proto:sf.substreams.sink.database.v1.DatabaseChanges + doc: | + Converts payment events to database changes for SQL sink. + network: tron +sink: + module: db_out + type: sf.substreams.sink.sql.v1.Service + config: + schema: "./schema.sql" + engine: postgres + params: map_erc20_fee_proxy_payments: | mainnet_proxy_address=TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd From 720ba6e4002827bfde294e143e503defae268ac0 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 05:28:37 -0300 Subject: [PATCH 09/29] Prepare for Easypanel production deployment with new docker compose --- .env.prod.example | 13 +++++++++++ Dockerfile.sink | 52 ++++++++++++++++++++--------------------- docker-compose.prod.yml | 20 ++++++++++++++++ docker-compose.yml | 10 ++++---- 4 files changed, 63 insertions(+), 32 deletions(-) create mode 100644 .env.prod.example create mode 100644 docker-compose.prod.yml diff --git a/.env.prod.example b/.env.prod.example new file mode 100644 index 0000000..cdf71c0 --- /dev/null +++ b/.env.prod.example @@ -0,0 +1,13 @@ +# Production Environment Variables for Easypanel +# Copy this to .env.prod and fill in the values + +# PostgreSQL connection (from Easypanel's built-in PostgreSQL service) +POSTGRES_HOST=your-project-postgres.internal +POSTGRES_PORT=5432 +POSTGRES_DB=tron_payments +POSTGRES_USER=postgres +POSTGRES_PASSWORD=your-secure-password-here + +# Streamingfast API Token +# Get from: https://app.streamingfast.io/ +SUBSTREAMS_API_TOKEN=your-streamingfast-api-token diff --git a/Dockerfile.sink b/Dockerfile.sink index 9b3c876..8b232be 100644 --- a/Dockerfile.sink +++ b/Dockerfile.sink @@ -1,38 +1,38 @@ # Substreams SQL Sink for TRON Payments -FROM golang:1.22-alpine AS builder - -# Install git for go get -RUN apk add --no-cache git - -# Install substreams-sink-sql -RUN go install github.com/streamingfast/substreams-sink-sql/cmd/substreams-sink-sql@latest - -# Final image -FROM alpine:3.19 - -# Install ca-certificates for HTTPS connections -RUN apk add --no-cache ca-certificates - -# Copy the binary from builder -COPY --from=builder /go/bin/substreams-sink-sql /usr/local/bin/ - -# Copy the substreams package +FROM ubuntu:22.04 + +# Install dependencies +RUN apt-get update && apt-get install -y \ + ca-certificates \ + curl \ + && rm -rf /var/lib/apt/lists/* + +# Download substreams-sink-sql binary (v4.12.0) - detect architecture +ARG TARGETARCH +RUN ARCH=$(echo ${TARGETARCH:-amd64} | sed 's/amd64/x86_64/' | sed 's/arm64/arm64/') && \ + curl -sSL "https://github.com/streamingfast/substreams-sink-sql/releases/download/v4.12.0/substreams-sink-sql_linux_${ARCH}.tar.gz" -o /tmp/sink.tar.gz && \ + tar xzf /tmp/sink.tar.gz -C /usr/local/bin/ && \ + rm /tmp/sink.tar.gz && \ + chmod +x /usr/local/bin/substreams-sink-sql + +# Copy the substreams package and schema COPY tron/request-network-tron-v0.1.0.spkg /app/ +COPY tron/schema.sql /app/ WORKDIR /app -# Environment variables (override in Easypanel) +# Environment variables (override in deployment) ENV DSN="" ENV SUBSTREAMS_API_TOKEN="" -ENV ENDPOINT="mainnet-evm.tron.streamingfast.io:443" +# Endpoint configured via SUBSTREAMS_ENDPOINTS_CONFIG_TRON env var +ENV SUBSTREAMS_ENDPOINTS_CONFIG_TRON="mainnet.tron.streamingfast.io:443" + +# Create entrypoint script - uses sink config from the package +RUN printf '#!/bin/bash\nset -e\n\n# Setup the database schema first\necho "Setting up database schema..."\nsubstreams-sink-sql setup "$DSN" /app/request-network-tron-v0.1.0.spkg || true\n\n# Run the sink\necho "Starting sink..."\nexec substreams-sink-sql run "$DSN" /app/request-network-tron-v0.1.0.spkg\n' > /entrypoint.sh && \ + chmod +x /entrypoint.sh # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD pgrep substreams-sink-sql || exit 1 -# Run the sink -# The SUBSTREAMS_API_TOKEN env var is automatically picked up by the CLI -CMD substreams-sink-sql from-proto "$DSN" \ - /app/request-network-tron-v0.1.0.spkg \ - map_erc20_fee_proxy_payments \ - -e "$ENDPOINT" +ENTRYPOINT ["/bin/bash", "/entrypoint.sh"] diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..a48c4bf --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,20 @@ +# Production Docker Compose for Easypanel +# Uses Easypanel's built-in PostgreSQL service for cross-app database access + +services: + sink: + build: + context: . + dockerfile: Dockerfile.sink + container_name: tron-payments-sink + restart: unless-stopped + environment: + # Database connection - use Easypanel's internal PostgreSQL hostname + DSN: psql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-tron_payments}?sslmode=disable + # Streamingfast authentication + SUBSTREAMS_API_TOKEN: ${SUBSTREAMS_API_TOKEN} + # TRON mainnet endpoint + SUBSTREAMS_ENDPOINTS_CONFIG_TRON: mainnet.tron.streamingfast.io:443 + # Optional: expose metrics port if needed + # ports: + # - "9102:9102" diff --git a/docker-compose.yml b/docker-compose.yml index 94afc9a..0a4062d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3.8' - services: # PostgreSQL Database postgres: @@ -9,11 +7,11 @@ services: environment: POSTGRES_DB: tron_payments POSTGRES_USER: postgres - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data ports: - - "5432:5432" + - "${POSTGRES_PORT:-5432}:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s @@ -31,9 +29,9 @@ services: postgres: condition: service_healthy environment: - DSN: postgres://postgres:${POSTGRES_PASSWORD:-changeme}@postgres:5432/tron_payments?sslmode=disable + DSN: psql://postgres:${POSTGRES_PASSWORD}@postgres:5432/tron_payments?sslmode=disable SUBSTREAMS_API_TOKEN: ${SUBSTREAMS_API_TOKEN} - ENDPOINT: mainnet-evm.tron.streamingfast.io:443 + SUBSTREAMS_ENDPOINTS_CONFIG_TRON: mainnet.tron.streamingfast.io:443 volumes: postgres_data: From a2217adced8b5e80789a4fa381d1802723d8e021 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 05:31:58 -0300 Subject: [PATCH 10/29] Add compiled substreams package for production deployment Include the .spkg file in the repository so Easypanel can build the Docker image. --- .gitignore | 3 ++- tron/request-network-tron-v0.1.0.spkg | Bin 0 -> 651006 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 tron/request-network-tron-v0.1.0.spkg diff --git a/.gitignore b/.gitignore index c6415cd..50f31e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ # Rust build artifacts target/ -# Substreams packages (built during CI) +# Substreams packages (built during CI) - except production package *.spkg +!tron/*.spkg # IDE .idea/ diff --git a/tron/request-network-tron-v0.1.0.spkg b/tron/request-network-tron-v0.1.0.spkg new file mode 100644 index 0000000000000000000000000000000000000000..c5aa24e55e0b6f909ebc1e7a712d4d71df5b0551 GIT binary patch literal 651006 zcmeFadvK&#mKWBNO0O%GD(kD4I{Q`qb~p?z!eK4w&=RX1jK++T7o7 zHfCDwX15uP$v@TR-pg;B$*9(89<-~qh30lGIBUk|=T;W)EG=%_EIbhyGg4Y9MK?Yw z3|Cof4(;gA zX_kH=EBvwePnxmrVXIa?XzxuATpf66JR0TqW_vHVXol}s_6};(gGir@^ke?M zxqt!AWSW~FLt|@%)7rqtuh`7p=3b?-JA(-)BVyy7Yxf$>2Mvy{we{`6p&M)SKR@{F z4H^54G=c%n+^OyDeZX=XtP)T2TO%9*7H6^EsW$J|+S%m^*UVU{vE6Fc8{J^qj8?X{ z+qF(dW;YqR&mb^oTFrJ>CN~_(@8Gf-X<$K@wx@?=%JwV#i2*aQhQ(M$JC)s9@L6+a zr`_C_CMRYC9RV<7#`POXeh`|$Zc}>5FNIu=5R>TCn+@r7IC7uC(`LL|->-GLmHpQA z84PGBN)p0d45@kgAz|9J>RlZarp@2!jyUsFM{P58z24YfsnvJyZUN~#C!T&0xK(NI z*17vd?-)bl2~^F|A4)Q|e*^V)qeU!eleA*?wl$;zA{m>O*uFCj_4}=V}jI^>(F;9bD#q zwOe&6N!~yz2VMnD2PCA>uxvA4RE$| zW@2$^eQs?nTD@Ib1bdq_WAWD@zZT|J7D~5}Hx&NyLD1oc)w^H;GW(kS?Jb*2!mAdShCF zd8KCgyhWPv_nL?j?b`k6NrB^;7Jdt{ ztUc^bpVhPmeuvlGrh8B*(+NgJR?b>#EyS7)`g=n%})*i|h zEae?A`>jf2`$2uXdw2Tt(!|TI+M=ta-CAyWz1g03HG;@|_JnP}ENzEz>Hcj(dT8!} z$wQznx0(-X?dch*JBd_E*=tM--ZaK5aSbJog4j6AYDI`SvOwi#3u0jXo3-ufub}o= zG$qNaE;TDID#!E190(eF04n61X3Lj8mAwU;w`#Lu0dsG!`9K66ayLlX6_)@6aP2*S z8e+R$d7y$Snc7ff+q+}4q&*OVDo)Fe#ql>q`Ff{}78*QqPs!BA>mAf%0{0%WsaC0X zyS3W%IVmtv?<}~a;0MfEizc0eR%`EYx^N6WPHORWDIL6Q&MScHoz4MJPPX`YbTb(# z9?iiSxMHCON&9nJY_+x#ha~~5Ai?-c&&G*-IDd0kpJywn^q_1m=QWM_zAKHt+&kav*+$$%FZ48z8G@5r zxI&Qc9PHbp*d>|fdCgkT96|6mja?&Ptd^JYb$Q6UER`;$DsePY5xbybSqzRJR|KcV zZ3@JA;2i|s&@sCN>NU8jZ&o^Yr=OKc#NWYtrl3a=Aof1?8ueGtNlzD( zp4Q^L=$w>J5`qO2STa%enz(vI6X$JtuaP!8B+oR zJPV~}F`0k`(F|Aio3-1sQCv3oiZKU`xaJE|GlxfSHsZQo`QWyBDP~5NE#98(!x&!# zOopNt(|($jBU|eCi0}HJW^pf-z%$sMG^2U^zMA>gyk9?Njc|;uoq;2Cjm>A=Gwu(b# zzeN?|Ki6lM^bGNqc_H4hd4jKnfNE5pi;L=}>S+z<;7+&MhNxZMgWSkNf$(OVc#CON z54l1rm8*7T(kAM9yl0-apmW-{va2MFO(pp!wT#o>t!v-H+;G0tv8NcA3aACm@p#yp z`Aj^wd_rddp>pfChe`p}?r@Q`c>k-}bBclQ4rM z4CGWz;-EqHM7CA7ZR?hpa>;YjBZUl?QuYb7qI=--N>p--bQ8X5hCYDuxW8!)(|JHM zOgtU^3jf%kIUfVxfr0u2>~b}xLC3(~Fq=BV*cJ(`v2NeX2^&itP+vDTM~+fHG12XNAyrS2FRa22aL~Og<|HU_My*sP zTyiwM`|-Jo<#cFldY?1ihI;))$gKk}@;NPfz`U zg@T03K87Rw${PUJW<1IaK+JA;+qKSJoU3Ewrc0o10XCLeqe~??VLTj-X#&LOXN`$Z zV6>F*Z0DtbDV>3Fqhl2rXOqbQYa_`DzhtJ;(+S4S@G4d7(8$8%Vb80ua8Ok%B4c4N z{Heh>=LqbF9VfP3+5Ma((8Sz2*uqGhiCMoWX3zvrRD>oAKXD#AD@sY2p|%gIP!uSx zr4yleS8e7pWN?&Gyz-N9+L%&eKEKzj-dj1?7ZcJ@lu2cOT5f%>*<~^11nESMzutMj zxz!OR{8(ha!rx?usl4hO0hlj9=?vA1Xtw~EJk{423TQJZ+^9XUg@^JBqkt5Ko_uWM z!_|Xs>!6$1v{V*RuLa_a0$L6;x+lDp@Mj0i=*EXj4Yu$_Ge+&lcBNafo6b|6+CnoZ z5sl){B1#dNJN4a01qK8)|G{(@ClpI&2n9uN`VcAx)nK3L;y2UoHxC@0l;8a@gtk~W z$xiT!8AUye*4Y6(Cj?gtb|Wnk{?ed1=jd%ztJdnR?ny*99AhmT+<~q}CH8Smxn2{+ zIEd74y-~KMROnDzd|tDZrm5tS2o6#Z#v*9p?cTS7gB09gdRo1xsGq18ub5Guj5#dD z_z`?^ObccNMCD+wYwe_8NOu25yVB_J_y^Y;00U)W*BkweY*n&EJEK;uQQ7O#uEnA1 zhOpAlnr6vh!@mHJAy0e0Sfhp@9nL_ zKIaT%LOozl$fgG`nR85=KRAqwDtpT&hyT;Gnebo|e5nWRJ(G}E@Cejb^GkyI(6|h> zp}|%?w|6@Bo3p@Y!Q#I)FdIl5eh+>xE2IP#1P(KaDbY!dVjTHJKzXZHM0)Pg>%5Ve`FY zx%qpv`7ZG81zUt#vl@EE{z-(?FRbP;?CGjB`MP%g+5Hvmym{=JMvmVI!IUdA}k> zT@N+^SmVX@S~nKk;>leAADCJ=z%gt;PP@plY1ixf0BD@?ESuQ?-QBIV(>c%4KjTI% zDSB0=E-Qq7yKrEOTX~)Xb*H<`3_tJZEj7Mgt0qmp3|=?w>N$|dt$qPoo~K-{x5wiG zufRa?q(WRdgB)Dr>{qdUp0n^tHcSRfX1FC5_G*>(-275p^^1ZaGS~Swd^~tmjx%55 zsMqh-YkS)@SaHAy{N40At19&-iA|%zmpEe0T%h4(Pl$Qk@*Aw1LfPB1apsq0wrQmG zvfl(jdDg*D&sPpl<0jtX$laL;A98$Hhh~zphC8-xnQ1kIpw-+o^qwp?B1oVVc&lW>^AL_2n4z~~uENFrLPjpMS* z_g0;v7S8|TbpgSK1_{qi={++kIVuKqV1b~lpYKVdWujCCh$5HcS=+O>h22v!>5DE` zcZ~&F+e}wwiqu!(H%hWgv{^M*UDlSfnZ+fyzp^=}*3*X1syUS> z&h^cO()v1>KYm}ITcSVRK=^kD;ZPB8EXuDusVT)VbY-r||Kymd%#3_X~g zMY5cf=a~rd!vtHdfm5*_ZzfzR9F%D}P0HM*wTvP+Btut-hfW?r1((HB)Se~06gZs> zQ}4rrHMfhW=!w-qk(S`GQBJ4SnL=g8-@!XH)+t|@o{$zi-w$u=#)5Jbm*-aQRNFWe zcB~JZ`{c=%T4A`J!UvtC*LMvE?;8i3uo`J4i(^O-rXKzigB3|A%2H#eNxdGZkOG?O zBFl30XelfQ`V3hUz;(-t;4mn7Nz`Y^Cza7~!;5|6GpQ`+0HSP0jvf%cFE&=OjW=wnn&Q zCcQG90Qcp*MxDmeSE?pmMyaCVzaKOc^W@Pt;f4ywyCaoUUct1I>I=sCj=1kEd zR)8o;*R*w)Ui@8FLP)VbJrpIpkleic5XbOZ)NHE$7Q{A55rwl@Fht?3sKR?AuxW@i z0OW!+K^CV*TKh!@Iy)lD>#A`aw0@P2jgdo?amWGW?U%|{*ZOXiH|8pq6;^^aB-^u#c? zcza`My#zxS3}Dww8w)pK=Q=dw3B=z>X<vM z8_|at2fCiWwYu;D4mp2d&DMB z<5t&sxqH}XK&R(!G`>P{v(kb89;;44MGl2`x5?|Qk)(^Gf-MvN#2GVr6I!yStA5hE zupU7ou6qP2MQHVSthpP!+D)z?{@2*TOxC~7Sv|KARDIMQR zs!s4#GeIKen&2tn_$K@+zO+HQ@7+gE*$_$heH$V)vSYlNOpF)9E9~L!TMWGLO7C>t zI@>EwQ}FfnQYj_yyl~szHddPNCp{`<`R9Y?LXPmBOHSb}ScTJh&mFe2n(Elst0oYU z0eaevX3Xl8jh;_(T=B0NsehZ-)hUwzM<}#-TF0F6%`9Lbag`|D0tXM3TurR*kn;GO ztI)1dA8sw}V^RD~yEE>1wJXBU$0PkH-Y{oVz3@QInM$`-P)ibs9$melD13^S@%1zO zBLn6cr{~>vXH92HXl&OW3Ti1|j|Exl6#^A1y=rV}N0d`(BF{AA5<>tV<(W7otq4$y zVzNoYzX`~!0JjKxo-?;>V=B$=0Evt0$wp`rOLT_nN zk7BWUbBgd+?N@zmHSF^ zhN6DibO&hEYTKO4b!=F61g3I-_ZE!8jq0JO83!USg^mk^%|`Qjty{gz z`ww!lXgJCyLqB#oQxYH$$0k)!_Q`eiWc{MrHx9rX0Y!F1W6^LV^?GxOI|mIN)nS7K zO-)AWM2>%p6m1DNz1mf2me-Cj{!B9QC|-GQ)u}%nkMgpJNA-@np-t0z1Uz!zq@;+0 z0>2~LgNAYapC82J2I#R;Mp}J_qa=Z6ntDS>m6~|$7w53es4DS7cI5I3=8#FoIs6hP zTiHv*NtG4lBFlJ`pUD-#{sJfMsYVOZc+@Ai`0WuK1XE-!E6nJ2_JtWafzP&_v_qM5 z9FZI16z1=N7}vO7YNi~HycBL7nKh2lrAB3IPyIb`Q!ky$a>`st?_}MTv1C#ST+2D) zg33^`$z-6N8X~T^_PAw-qf{DO+pjzXP$8Qe~34R2_J$EVY(1<#k`@XOhTl zN#GMQEDIx5B=n>wWtVHzXb22Q0fuq0-v&={>4cW1;r6jcOrb~haFj_U0&j1*#p5M< zAaI-jHNZs#M@k$`;L{a>vWSIZILgf<#CW3+iw&s3paE}d?)xzim~=AXkJd@G&}h9W z`+XovrAe8}!=w!NI?H%zIBQNr)N4Kv{|XFobq75|M6ANjqSlhW`6LojcW%3aJE8Y+ zXOPz{WcLq6d0EB3Hp+YJF=yuv>B6D5vaQ&`9WosGN$g`A`L{r|HoTI0Jj=@>A*!|x zv_T5vIEJ`y>5n21kN}z*;dfvGA_Qp?ciav<(rp3t>GM)3!J;);NbZb*$bGWyuUGC@ z96oSEj7NSFNm{cbURm4*U`+Z&eEa(Seeu$>{Sxir8IVpTkw*$WIczZ^`%silWNSDa z<4%2N!48yoJ^=6LR4PQIU|+znSnE_{v2RiiC9fvuYwmF7&UouKqy4*zQBFfa-CRyD zT-?Q3>B74in%l)eFEH_e0H<9+8}k=>DcOSK|PYLpADM+4{sE+y!^vT-Jk* zQbs-9yHDm|!$>7PQn*iBM^J%y0#rZ~{4D-M1d8Y#f4@PIBMVk2{U3ARq%Zs}KHv73 zkt7IHm1sL07Nkm$3mpGYM|io2IEubW0{6y)O1&$YL|=fweG~K11hyGAzXq8BFG^Cv zzYSl^}mdFAXCU?v;}u?~Fa6MoD$@JVM-pQjnbpp$C?{EDEjJ z8dlb&2GMzARM$KRxjRk^38%wIo>e|5l&Ih0F^kUb!#n3U&k->+3v zNMoY|QT)wK&}`I}>x}~hKcN)I#s{KwB3bVawRj)v+C-dz7{-$vNUhJ(X0MBcYAUfFgKy)&i zl&V7zp$!j2Jvuahm~LZ4=}Ne%GRo^#RECiFOw4}%Xgso-6PcQ;S^URCh-;(>M#}yT zPVUPU`Dp(jtm$$>Ei20 z&)rUudr2`vpkSLQ{(}K?HkFer3|jDgEO78 z*5RC^UkTae1fd2JvRnMlkeTohho#`e^7h+;B`75yF7*w;0-O4VO?~qXA;+5f<{Ok` z5_1gUP4QH1<(o@DOI1}}~$w*Z4t&qjPIbeoR9E4+R zzq4EJ(i%y6lX6_}+g|SMijjU4#rXrF8OQ0Zs#V#3%DvIAx`<*@cZ?OJ@+C8Jzm7|x zdV*oRQhcoty0uobs$RE9l@HPYR&@3|{zhczQ9B~q*>5kE?vxj9&aJ>{S#JGCrLS$m zKU%|f!wZ`K&qXD;P%{du{TQNCHvFTPmo^G#;IuvF2Aa4rh-H60x&?oRMN{CUG`tne zcJ$hIBO~OT_b!eJzGspIe~lC1Ix&Ric$Vn2t;rK`*FrAgNjwoj5oAaN*}J37B=9HzO-0c*;v~62%h8U5k4buF^|)X zR7bTk9mnBA4&QMs^X57lj7oFsaCt9qk)qOiX`^tS6Qv`Jc#9VT0!bWT^!oyrnG@gm zuy9c$yf2p3N#l~Z<*!B`06v#lZFA+;(#i*Om}B7z=*Y#?tl{gvPH+2ZPCAtX)LU99 zJjn>49B`Q3#+C)qy6uJF>PT`^%0#v-jHfC0M6gCmFTHgkJi7yP z#-Z_#WE>h3_cD@$Gcc%$S0FT=lii1Kn6B5#?R*cz99KY!DZQ?MaJ*8-L;Anbpdi?I za*KmwNv5t!za)XqnmFxssqlxJy1kXo@n)|eh)^f_1Pp>IXlcYEK0}Wk(VURSW>FLj zr3G6C%zU^8AVn$0Ky@WCIe9FBgOUB@3fo)lP^E5LjfcJ9zljtE^0Ec&wRf@7LID5ZQ>n-2sZKW#vXRm|0n_6EQL~ z-tW+?VN%bHxwX}Gn=rx~o+QrmOW-=Zev~Rdif#OKD*3~;CA|-28yI7YU{K%^<@wEZ zGB(g`&|}L3$T>q}rzlk8x1 z<0jhIIb58d|M;tYUm8K+^BRo*wO556r`!OKKV z_cTY(+atdS3H*9}uSO$>mc;#JNR?+0x_}ZTk>tgmoBHV*!haAh2sK{*O=Ca$zy0E` z4itVX{}%Uyd-@%GX@(Dpc;mVM8dJ)wgxFE8^D?fNBK8pu<5W2pU(KnN?i-^mx#Hm` z!{$OdTZTs31-H$#nFPC&S0@-Tm%=afcJ`C!s_h!~-L_~1$X8$?NKyijQ3NpAt5-4Z zxEOVzFtTdKVw^5s;zbLPS!OHpo$zH()SUQzjs6?)(@vA+cPZmnSK4EK#q&a60 z6y#uEThLGsy^B{uiEJxltY(`S?ZDcBXw^6ya`ivgGlX@`&$i*}L7y@nFCmVRY~(XN zja=sy@N5%FJ?MHz8R`o(Rb21M+A|N`%y6k0@e5@TU`2nxKdYcuvk{MOyM}weppU9r zdakE|b$f?fO@GmpyVGsG=fDf#-O{Z*6zYouzJ5U=I9h|NFZvZLH=lsW4y~m5kt-Pf zHH7TT%r+M--!;QKgp9D$6T?mGqyew1cY46jnF;v#GDbATJS$fnkB4~3g_U~IP!ajG zX!s!?^RQ%~3=t07RPp&*53Dm_or&o|BzMB``iE^tzG;Aij=Q;oEm>tCnSAtIWsywF zh`z6>)jiz8a2O|wl8M<~>{{0C+=HQ;yrarJ1`zAa^qT3+u``2^A=PwZ5Tm?LhC6Wy z8g7gv3D@&oB5kk5Z72IcghMR6V zJMZF~=4@&LC+#}?`)ACh+_r-c88J`Hv3Ti$D63Rp`j?gJ^djA+Us^{PT}U;diNQx^ zg7|@8G_ub%M%L`fraZHl)SMss*1%xow*`|0ZstmWs?PK*fX@5)S^9BZ3xK;J&aEvR z?Bo5OTDuN=f)0x7Fg5#DPvu-#&D{2?(mY#x2d8BSJ0hIuFjLJJ{}Vj5<;?_Ajk|uM zsN&8?yn1|qM@)ppDlZ*l0ufG*4N6AHW91$REl>_AMJFV_+ltDX*TRf_zi$10|IFB# z!Y~5Ho$r|nC9B2K0&czQ4R_JAB(p0FygWYkozcRN;=jT0?~Is>dE6(L9w(C~w1?wE zAztO#t8CRYXcmKN^sHbGe}g6zRU)kk&Anc$;aO&C_T`hcK>BLI2)L6%E8KbF8IR-v zIe|N1TqE7vw&B8%=e|iPwre{TD8S0%qbn2)l)@(7rr$2lC`u*~1iSW7SSXzGBx#8$ zym9_@D8C)8k?xrw-M^Vo3!bCsqmT=rERmqRB+~2ab}Pf{g8p3a_0wdnP}vLr%AmbO z#dE+%Yo+qy>L%4b`p_Q}5Sn0)K^OS&AHSDYHop8Ngj#SFHZ|dlU*PpwXv?7YkqXzB zJ}fPw%1Al|Wk#unk}~tFP{hg6K|a?vA}Y(q<2G+ZtD9>$H@G&PUS}dMG5^s%ofINN z@L)9uC25id6>ABHHoP9?r$HGQA#D(mF)!wE$lNXD;R2~c9xg~*SzHMJS6pVv5ms|M zc`tb(kqrIwJ?O@U1hcbD-G(LfI0lyP$wjj%bAeGcauG@5PUut1hNQOFor)j zU@ouco-1<4@PlS#zlO-HPEPI>Mqv0vb_U*&t>uevI@VtC&5ovLq_~uPDYx<5f#Sw% zouMofGs}21E-4}@lgdhDNGEKQjMDyyDpKIB1gOqbRPNpwh5R z!i{!Ux$Qf{J9yWw7M;`Vb(hN;!iC#j4f2(-xQ1rOHNrnTZYI1_7$aHIIkfCf))W-1 zcj%fPw$aH&DS|oT<{2ccPDca>vWf91VBRXT7F-T)SYD7C`(Rl07SshhIQP-}$Q#*t zmRPn0IHC^Z{AZ*ZuPj1}tCexj0P{u&sO_>SR_UcbHa|E$5IxC)H*C3*6q{>oi>~z@ zb6Hve3<1D0JgyL==AgUtmPA{KAtNIMTu=r#W~%o#Q358@$tF&vd|QSAhpq0gmo#}0 zoZ&LE!ZHr8?+mZQ1hW`TxK`kt#w*mj%^1M+R{%ooHXV2YtZKC^bB2O~>m~0_@t#CH z*z?t@OtxONIL`aDml9z46@~e_^_N*@tD?u&VQ-K0s!n=r9cHV2Mzkyl86u({ALfWl zQ`urO;J#A8d=TIhUjJok$txXs++ysVGu`$<4f@-vUJ00!JUGCgZ*G0Ps)$uaGduN% z(=Q5?&M`yKYE6>)K4rCYx6*Ej4ATM9)}}wBMKztGj3g7WI}hN?Xs0E?480RCph9yd05W2+-20Q!BkKPkd^9Y-p2SdK?Y0^uvV_{2eKb z;_p~t9Dm0PCj9BMW>Ti(79FRzD$h>VW#WY%LB%gUvp`P#&WOtP@aJJoo`yj%?%|j! z3yjD6iPPcM!7hwv+pwX@J)C$@ z&~6|rk{tMxjZ+naM@pd{CHI(`ef4PYDku;mbO0t>QP7&^g()CuwLgCXKjsfty%LD1qGN z2bDIoiMv9lA-Q^4cQhxMgA!XI#^-XIQ22_$|EO-KY=ub6^PyTHKXi1l%7rHa#En^4 zjri&__@Snj*Op2P;E>@PW<+TUS!YaD3QyQi+lDY!=58*}Beuz42yD#kL&lDbN*na@ zfz{PTcYGq9?D+5i*0qq7USHjeWHi5b&=j(pl8!_hj8C~yR)vQR9H{}ey^QOKdx<&H z>BdVfeTXs9kEaYHFFa%hv+X$*%Mgd^*Mt@J)*?KlGRdnerPb?D`!Kw>-w)L;BTz_Q z&ZffpyMYLuquGvWJYK@I$7lfdD=n8cZmupC#`8EJOL&=T?kc$azU~TFL{XP$`6g+nPkdI`OnEk7de&6(e1RN3!P$qT|rZYmhhiq zqr_SmhX!eRkcbfTTwfmaC3*t?#PiE?brSKohZI-OVOFY+IEH(sY5Mn$S$R7x{3p0K zX%D&%us+1X(?Be}BG3Eq@>k@0vJHP~$ec~-elq*4@94f^&f`&q{T6QjjVI~x-8 zocVxxTF*>mTA!bFFeVrl;?giQ_&E26hu|#RYioo=pq?mdPwW+pbL!0SbiW1*EiRDK zq6V!6zzg|$rw#?0%2M38RZhrIwy^pf7F-S_rMPs1uS2Ix ztEU~pnP^U28k&afCfs0ZwpEhk0T?Q~?rxinyM|N| zI29*L!Q%V4ziQ#Y^DiL*C5M=;2Ql?ACJ;!})ZkrXv31F<)xoQSFO5Zb*EqI{hX3p= z{EMyB3}>gG0DS-~@g5RnJ4Abc7Ko&FD#wVB)PnN~YOL7`^Y49YVBnL1GoK6$e0$(* zFa|GaIAAYrO#j%Zd@n8A?_bvMIR87Nzc4Ta(`0m3M&Q~D_IyVk()8SeWIPA4Bk;g8 z|9Kh6hzw*R7+JWrx?Wn8VT=c75CVJ!wsG5K;`8&#fVt9!&k|K}(5?~`07G-zNw-t8 zul3Lc4-}EDDj+G@iu14bfCO&lb}Sg#8seAZD;~`yH-J)H@1caimnd8umXusK!Rb20sNz67*p&msfzv!PCXQZL=CoII0__I$rJ-R&Kz{5f>T6n1{jGH92QHa}|T%1|z&`Z&W9xN`+o?hqoM}yphuLZ%emB zpA0BMTnPfkf(NCZ$K?uAveig&)C9wbBENbk0fb?%R?GFL2h7D99I4t>u{HxOpz=C| ze;{{s?x8$cijvmD=0&x2)|y{}O9T+~6aK~6ur9+g!qHC##y%Ms|MtN70H>Oda8E%; zD{D0sj7!?=7iYgT{VM{mUm1-8J1npH@Q2M=!J&9FL4+64pYUD>qbfN@1;P%Gf43Py z(edTBD$W%k`W9Tgg&~&DAw0P_Mmdd}jRy%DXS2r`9M8DZ&>jwLx&v{-x@|7yZWOwd zI%{iL$B8knF7oz7a_T}$x?^;d7_;mqw2OdbX>_Oe?dHbyx18r~`uK*16z4HP43v8T zp)Jph4d9B*x;d9YT)0(F+w&AoJw2lm2&GUN!^63AQSOq^d^{N5G$z4Fa@hBA{i6)b zTb|qSCJ3FcU?3X6>8Te@(b63g^kNhJdP^&44$HbShYKt>@H_!=CxIOX6r&EBmosyM zU0~dQet_N~zh|ZRa|6LM_!*4Ow6B>ezcLz(F_rd`Vu8Qj z$FI1+Q)B;XG#Fv>ZnHSWe{Ud;mb&`{FO2=`(ZDdVbqMohqlmZSwr1Akw^!(QuGm7n zIq{k;B)?sumq*5a&r0FPSMcwTuM~b_<^7SdUmh)dXEgk`Lng3=ps9|vR3DnLZKw89 zr{1p|LB3qInWUvsO7j!Ntx?B;on7CD*Qr%q9IxZB6>OW*MCD=p{VJyrtb`S8 z6UBcABX+;RK9ZVh#ax8Grrib$p^UR*S5W45%=zkqSJ95CgWJxKF&>h=x|TS_V_Jex zfGVyHoD>HNgZMjGKtL1MPWVS*(?~nA!t}}LD#|T&wO{I4?Q|79d7$N^xMuOcMJxfA zj6HbCM+KJ=7kDuMBW!Pi4lMd+eIv!oI1$f_-`L6EE2Pxn5-JoWD z)5Q~gCb8Y%YLob;t2=PwN1RBN#g}s&)6)=5#LfQ>Z|#cplj0Tchb)05;%z2VX&{uT zze>I5fu4GJB+pes%)a<{@n7S8;v}o@azRyNXGJ5rsA?GgM*N^@hNgN}B8JLh!5vgS zKr+Q0l#4PPi92Y7c#5@sMDDV|4W?#$9bS$a{LH$ojW~?J1S3;(h=@%6$lkHWEP z(p87N@j3`=Ch1EBumSKgSL(GgoVf6O&&sWjFj6mL*2@@#@&1ad@izW@)64wn-^Uv) zsqDAB>_6I@{kE6=GswOGt(=|n^4y1oU&Vi;^FIQAfaZR7_s!VyF=-eFm_*HxK z-)-)}aeAiN-c2r&bRq6^t|eQfwe|0C)EOMQu{QtngT))o=I&l?Mq1)EkEph@hgf(J z*3Ex8VV;w#fbw!!8IfoXYS>ZG&clpk?-lY{M~QMB{=`V$Glw{6^Q{`SlJl(^7|@%1 zAvlgk%<~!^`H@5yh}d2F;OU7`gL!sFT4ig?Jtrx@d0>=l^kRkCOGisvhf!tkFjzrs zAbsCe$_B0h!i0!39{l+6+XkW@ z#kXW(pUcBw_VSs2u)X`x3Y9gCC7nhv0H&-+Ad5Ru1xUa!fmM^6z%WYr?qPhR^# zF5*r1tG&r=ukSq&YeaRIA#l(FLx#qT`)1sNPM0IV&{s}eJ`Z{JcAB#_!@oR```G7+Dl-6~hj9Y1d?ci}VUds; zBSb4u%+s0R1>*;baB$pVrbRj}qgt;iq_4?UFDc1aFphpw^<*>1t`RJz)kadh_6UJU=;XUtPV#O*EN{serb&kMFE1B|5}3K0^L@Q32| z(oc_`tUW;TK;9uOlPJ+^1sgu!QUeSQY#u&+OH9w8F&fTHD)ld{h2YqW8?zs^;CvI})g)1?f-HaK*xn@tCvW^;pEd{gG2;MKCmmYWG3A(YxxkI%gFZSYCtUP5x z)8H}!99HBaBN61no$5)fGhM+2Cqy7iJ-+0lg!Kv+JPf<$>7GejFbS&tpc%WbP;-dp zQKNn}qqq(?hi)%!j>$+r!hbek3hTVzyl9;oA@cE94^6y?@cWSBh+Y==&Ph7Y+M0|b z=m?&Gy=y%n@n)NTQO0fHc9@v21ni*6ae_eYo`923yGLUA&3jn;=8ib8BZz|iL`df+ zI~-n_`(5H!doPMnte%XnNCDCa$xnh?{4GSTjr6s`N1PoDSA2&A)Xz=WN+MHC_Q1fS zbL*a+D1YLdHcXG^s-5K-I51Z=5%^(ed8P_%@F%Yma+42#-%$Tow1H{UI9@fNhv9aF z4BOn#u#(GO{&l`bvb_yU7POlpjH0wYkDLgj`&L@LVa_YieGyDUuN0FlnnjzaAeDSj zFPjTE=!XV8osgU8>3`#f%%JTg<`R)HPWX@Mw^=sd}hl>*JdkWT9N{4_Gq?nC=b6fb|`cerED#e>t3DbUYqY!wbG6@)BP5MfDNaFy^mxWM5n9fSn7 z4fjU#EH3bFKoqu3AaLz@xtL+Up{i)^1m06-aaZyfMbUd>G0xG^hEL4j0VQ{mHdbcd zLHkC#Rh?T~`uNShF+C`pzv?*IHN^BlbsNV6zqUps>vi*|hRr2a#<0M(yWMWfE<5gi zh^ht2cpL7_P2_;354R6^BSxj8i%!{tGBYd?Av4kosxh;ezzO_vFKMtBP*EFx}c52l3fYfsdVU2g+z<{A$#Hl9kjNg1B z;s?{f1qERw4If}Zc;Ez&o{*0+QNDnE2rRh=$6%p~Ot;@)F62@OG{+sw4EKvn+cIRNmHfH!5y)F{KeQ7?(}EL6hl z0NZLD!Lz!S*3h}0@<;w!1WAQ?C0d>NaY|1zs1UdLdPd6e;h9%`uo>gyZ>EuND|A&K zKfh}b(J0pUVb=5GGGS`i)&@SF>(%k?)*6C#*E9=NI)ZhHa=G)a_xsy}XKnz=V_f}{ zgXU=uSG|(GC|k_O>f*6+Yu@<)qBwE=S%=&*Wa=7I9#GSN{ulp72#n|ld1++6(F3DG zqB`%aJvLDN-64B&+6NtnPRSk5vm`zIU*M0iEM?a5zMrVa7OcwjWQS8cm5wclSDyJ~ z8DB3|;yuB{4SmK8vhoG53@*LloYpJc5G)sI-o z--GZ0A-CdIPu-v(t85Z9C?8?jTv*3$vEw{li(niM z4E|8z4JWXXNyAO$it4oH+t`tW+37mLIcm$*l%YdaA16G{rT+UP=4sgg@x$-ce)gPy zgInFDhj{7&@q6Uyom0*cp#c#F4SM(tA)Ay`M|VKU{8C#fi4>9M(SQ`SqACLub|Bc$ zGUDi?5;G7@CcAcVRXJ78HLMgZ@Cw_O8RRma?^1)$Q=V>3asG;dYN@tFIaCPZ(P@yp zc+9F9cF$6B%PShIF2bTQoExXz3g7{RyW8!`gJ0`0{rLg&lpB+G^7u6#7Uft-!B{h> zk93LS@5i~F{_3!$oVYQ{2OauS&fb&Wk3-Fe%cHFID7%Z!x3*76q>yUW{Dh#GHrc5K zK5rw{5aXt1JuRl~T&~(lFdL9fH=>Nf9_-9@MpLZS8co==6C13;kIh9mHrbAswqvBB z)x=H)J4aQv<2D5wr^jTh5>d(+7UDsp=WNSswKktkfleYbkDi9Kt5icgl8G%^=rV;- z5m#v(NZO6G2;?vq-dtp_ex+R@mghf7CrM41>xt zXPpY+v2uyl({I)+^^BMDL?A|pRBJbNWLf0_YjU-1GMi1Nk zh0_7FpsH@xy?UveXt;0%#AYIL5Rj(c?o%}Is;*4K4&GDe=lP0N z3Tn6Q(^lDTQ&8xsrm?w`;kY+e6R<)~rSk-48^7U|Bp`g!liq5Sw^VjRv~33C7?MSJ zKB1m{79qOgwc$?+4>g^WAtwXm+VoiUur_d~VL)yrBK9kM-%MJ5fS!R_fVCZ=aG0UU zebOtTwTB{in|q98UX`WThCU?>imdvw`Ge7}cZ`a&#PX)se zN5SbuD06w!D`BVV2iPl}=_;R9Pi{SHKm0)eKd(>QhMo7HbfWzvBKeE+u*=1DSKsul&lrc}-f~yz2 zXQfLnFGJ79EWh6f1Q5v~om8<^Ih2Rgx$y8nv!6j3sxig}UOwmoIrnG~;JQ!EdN2R= z>t#J%QTofaR$MZ}0uPP>Hmn-%x7bB-pE20E91iR`0(JNeGagS2+ONW9<6Z-&?l=v% z`w;4Nfvej-pmh?S`MBVB{h%SP>A3%fJ7=Z)wMG{~PMLv?#n)>QAp}obSjPjz1z{;Z zMp+mMD^Lpe&XUh7+0GNVarzhmuGp;|v}@=Zzi#7^EOd)|<15XE1v&cWlUBMMc*g3R z<}8Lx`L`=w(bdTALv>*$3gb0zO;fjJ9GGp99aOU(H!#L);&n-5JL>vat{zr#_e1&N zgr+Spi8AK}RV1a>_+;!ELEPv@i`^rGx2lgTeXuh^koiOr2^U-;bgJ7F9|AkRDW;1; zR%xEE098e&Q-FrQgj=c`pyj)@_9F}*@_-xqaTGpHmKBa3Sq82$VxOhv@*DB9dMBv# z{HO^k{f;NNWeN+p+tdbWbSQGNr8)WB!k@>nLp5H|vUTB4^SF8fAv}hADPWJ_ULibP zp47pX5`Og92Hb})>M(oxV)!>8@um=w&(qy$S6X1t2>w0QNeM6Z0M~cFoR#A7 zL+y)$wMY&si}*?Gq3T2yq3Kp6@p^Er389J3y5jQrIOVth27dG+ztKZy39;%LAXFQ=53;TwL{q%LlJ+{$fewY2+wCHDG0wa_|`!98sc-LlZ`^XpdvD=C9P~WNSR?JW2-)-dZ>P!QZg?j2q;IE% zxA0sX^)0w;T7#c6w6m$p6DlUhmnV3Z-V%+C97UC1>Rk&SM#CR86VP(u4WrJjdZ&v} zkK=Y1#D10M6Y6G5MoF0v&rv#>Ck=d&H#wCZxYH|QJ=lA$yeTW3g10+uA-3R*;;sd^ zCvsYFMI$_!rQQLZaK%iCpV1O8*-9HTuFGqTNbUC>LSf*`)|D5n-&NQe`{Epy2!@#3~+ zAWP=_w$*3G85TI6)~Ba#)LRP+_qiLeY2QZ>1Rlzr#%+OyeXI3%(>aN46sYvl5$!4E zat(r`iY-AP1CA;ma87z23cz^q%aw=g2uhzBOP(OsGd|sEDf4*vo(XeXPmc^oJw*Ay zrH*f^w*agy_~tmmJ@YvA)91i}d(2@*U0GI{!EBqn?o`F*cs=a828~E+W0HVscy~iSvW`?*i z#ZSc3a7H9)a$?q_Ty`5ou0;5n8MSGYtMT5XyU!!PnbvCJjvQAJvNnH*Qy^6Pt?r?n zLHImg$rR(6n-at}-cwfq@MriUUaqF6pDPiIak>~P#)bQE*~fv#75bvNAkin58q2uT zRabW_RpG%Dnv;bKYv*wxC{vz8hu*R$10;V;NmuO~Py>$F@p@QW?%i=vcn`9^z1qga zC?hb`NPSPBfG1(~3%kr%@`x)>R3ze*)$XE(oq7Dt7SKI&bTIZS+^|M-HB_rM^+j_Q z`V&V$h0qaS(~0a&w6aN?@i)L&u%@@Q3KZMW=4}g3sLe13Co}^%p+7j>=FSe-fE%uU zQTSF>upW8!Bm6DUx?t7fzTEPW>?f;fyYs+Y5+|1{D zx^_W8_2VSoU$LJ8cRSTo8g-OtQ(Dj|yHCO&Ia*WIQ1N&0HF!FaiMpz)=6yBUw03op z;m!ynw&nF?lxiZ_!1=&7seS6>jx#4|Qz~eq=|%#e+6Ds9?8P(DTTSUioG7PUsXH~f z4yu-bOlt8xtb;dg>Cr#IjURJ@D}L3+{&2%NbqnFYABnBbxne-P`rliGxSfj-vptKK z8S}AN@lifjynf<_zelKn)6_*lA?jY%nh$Dii%2vU4Mn+mL{8q8lH#%hX+6RV*r`M! zXPlrrgQldRD3i)JeN{y$O`Vl8UJ9i|PlYJYxgUw90)eO^7v1rG{9bdnW8YMMCTYl^_6D84(snm~lhc@#w8cxfThu6^SGZXDW)?u{FAt@Dsoh^+Vcp>lwg4q zd-LC_k84G#I=pVbrRRNwp|g%%sbi<~c~df@2`Q={;xodUz#6N^k=*)rxQI(8%%M;o z_X~S@>SXL)DwV=U{W^wagYd+g-#F*!K)Jf8NAW!&5D<;mG0rTwSmFII#XLQFyCd_D@UcRDzN#$ z4Zw{tQL#Vi5(ze9Ga@d?CHDs^ny8p|)~4DK;ITlv&2<}pHh1?WLq_~EZvS|5XBLHa zyVEU7@%Il><0v!*FgEl^ z94J9lt)(bh#bY6?wy?Uqwuy(h z<`x$bRCm3sSwpnLCq3BIGql66Zrm(IHsNB3*!8~qu9_uks^K}&(tkCxrZ43J(r@>> zzpDRuAYRq?Q>*&rlMd#T>$;s?R(KAqZ!Rog0kD|;S8SmFiVgOz&2Kgrm+s%g)$jIU ztDBf)AOW416K+|^7y`=kU0@|6bn|F;E#2Ycz%WBGG>2bO89f-ywpR|Sg8Kb9ItG3+ zbj?#q_jrbJ8LI#9%_z9B5iks+U>FiSgr(#kzxdsV!;&=ag@DoO_Yg+S1V;GD{XJ>d zX9br_`CiN@!;Wk`biC3N4*Y^MEWYtDa;1y6&4?yJ#yrC&EP+m`nBcG}d185m044mv z2~$uCC?*hCaX_U13ISI9j=6|XL;OH?oG&ChrMGy`Xut7zMvL7s2BWFOC=ss>I7HPu z62v6DN2MA+iR0+r`|$dKOlee~Eg0AZzb&*C0`N<2)Y=q?>< zXbQIq**rEfer6-usLu_459+8_sGN}dr{_4PjW8<=(WOY7*(8c}FkX4XJy?tY`pBoOCP3&h7 zS?gGK_O_W*?Tw`QiCK>w_ExqXsetk_ zd($=X47$DTM;ObG!1k14M{dZ{h_3%}jc_?y_ZA)b#m_wE$A#!&e&PQBx6*Y>^(;e_ zxOG^Tc!BZDt+-v^lTvtHT$SCD#Z~47p^dF_{ixfv!kw&?($;}(H!*cw=N$7UMk?An zu^%y0WQX3SItJ5XDT{#W$J3q4O1YS-tYRsP^Ngje_soQB9DB6H;ohEexu!5w=@+?y zJsHaKc?ZRh@e*UAXyKyBxq88z^YkxF2KrMI;f2M@)Qhq;!XJZPM@B~wZA1&RUyNt3 zD3>cXP|#9|M$y1ZG=K>rc4^Qk$RzwNwn@q<7EY8?WHFoctfvlj2tF3!Cqw30%kUfy z%3!=j1BRTQ(qttIjsl_dJ;?$uV>n*#BnveKc^aZLfKDb}sO{&wAYSN}IDvS1kI?N;xMJO9R569WpN+y)>R+lHFNYG>R9NSa`x;!VJE@ zL@L&PiY59bT(j=CZE|BlDxLVQ#Ddf-*dAlD60;Zg@#L`}6)SpULE=_~rHy(=Nr}mX zO_O^{5-w7%6(ndbcYuV!xCY*pdq=}h`FVz4JX8Oiv-G+@BfMZd!T8D9LW-%}8PcJP?! zQHm1)MQ3_6P?9N<(kD~=OSp0G>o;VbDP1?n8)L1F7q+*jbdNFwU^|WO1|ADwhj(GsELRwz_hk|vRdGGx82v-89>IiohxYu+PIgnA zE1kW;&ZdLQy`60x!mijS zJwV_Byd34GX9Fn&UMzGw@i@eS2Cu!EXs)sa)b}u)lTp3PQ9TtrnKLR4!x8q+3jP#s z+hJ^?%eVdGNB}SFFC@M9WM-p<6g^Mbp2Fb`8RZ;D`E2mCH_9#AQSC(p98{{c@W|W% zhw<}z$;CUh1fGy0$zJH1q9cn0qPKvt?*JAVu>}K$61A5PY}0{f>G5)po7#d*?FTru zr-P!K8Y7xM&|468is2D?KxMns04lGF`m@yO*^GEJ$ItR(b6%^e---A;1)f^0C-W3- z-%dUE60glM5Ila&*nS1w)8YUrmnQ=6+>)fmgU#QV;d`rgGP6`NXO7GlGn<^u z%#I;7Gn7b7IMK-@{6HCz(9vOv1>T=0yeE3Kq2kGLG29aM48HmT>6nG+B4 zcu0`qT=!!o`fHrZIBw?o`*KIxwi0Br#;IhkajL7-8mDsNK^#A`+vZ%V>h0OUJFI20 zPSGv`uAOuDpsYCVH=N0e8}5TIKOp$>Ch_IT;EKbS0~<}u!L46LaEHNIcKr2A%`%f0 z59WC2Q94LB4EXudK{oRgZ3~yP^?T@w>s2!1M*Bc7ALkBi+p^UXoJ%DW=Tcpza4wY- z58`;J5jQ|><*r-~Ze+6JhWpGeA2%M@_Iq$6lR@0bbeO`8OkO;g<7c^TF1yO6uo?C@N{lEid~RW+okhP(ee+Qpf_Gz@M3aQ>&-ny>%S3^efUn#-kcxNE%;2* zd`|W$+W)4RP!UkKjwe%l$#HvqQ0omLJJ(2dE(I52vZF^n-Yp9A67gE#q}R!;e34OlU#d@`Gg+r-*BdQS6V7Tmqt%>Kw0aA-8{-ER z{3Aq?dWzOC_oSZa4E?!hvQE+N3M}BsD-Hh2d&#G053qDM>s2uIVVTZ(v{v<1fV@`I z?*$Z($5N0YHzG&Yd{UInJH>cGEL?4oW%YilPb_k>PtiWGK^#K6TqGqJo)DDDIz_t> z545t(Q7Y}+ePtkVC1Wt>w4c-6fV^lQb7wZVc?^)=xxUm$n65S(}1We;sN*jCt^6yWXc z%K(R|WrHST;`+@W9yzZ5>;41) zCKeoTiqJAUGR2mX$W>kV; z=gnUR=4-9Hf~=AZC?cAI7k&<(2)Sj6nnI(NxMWgpKiFRxlBG;?!nlN6!^wUb9hV-8dPD+cTACBha2;n1|*pxhM`PjIVZt)aI!LY+;d} z@)^M%ntb4zOc+5b8PAJwS2~SN9H+}aC-r1HhUCGjr;Lp2353h0c-WH*rKE>)J=v$| zpk}V-bznuRC0@bw*>Xx;^7QdNL+~2_>hGHHxNb0~e%tF59UTb3a6F4gWJ8Mup4&)H zb~>n6@s)&g*#+cr9tIZ=uWpyx=WIRLKqljQD93$B^BDJyz+; zJ3anL`WEUxk|U~QM}jj1QP?S+`X8jcHFt#t_xtb3RvghVK0|O%#>oM0ukwr;hYIoA z^(jqU!0nfQV_6l+e~FTR7+m!v|CWn?$kf`z$vtc1w|mmH@#}=guZ`=x|JwK^?Ao|K zPP#U(eE+p^o%F1YpAr0C70MRwR_YCyL2c|}pE9OSVxATzQ>DLPhG?F3JPzR6PCRgc zCz(7tex;9>T>rkK@s2v_^KBo$HguTiCuDh2{(!OSf?2`O;k}z1-mXsfa3t>ZAJ@9< z>}Brk7lSZwXJ-a@f-+ZEU*eH$KWUwpfBKwd|=X zMch2rM;$B6qVl{be4^TeN_#t7Jtdy@-C0jSeNzCy;L)n@Vn1p#Ff%A_#4Y(or%cv~ zk>iQrWAmgv^g0*%bwqMbD_5wAd5L z#aHM04U5))J3CTb5b{Tw+!s30NasZ#=v^}JOJcp*`q+x$d?-hkoD1uITYjCQXS>g- zmYlc|`5Wjyckeo*Qs5qRpE39=;rD~FX$vdT!pbAH@I&Sj#?X7|+{fphyYWTO^`^IK zGQpbye(!R+KgASH@swg-@ua0S8Rkmufx9c?0<3s2OEu`3lQLE8eyEFv;Nu#^ISJ(A z8k|YkN$=Ep$5!+xcDkix@b8!rz&Jwimwu!5(laZJyJAZkk|yxPCGI(I19mvsb|ueqxesj+&N zCO_Q+OMj>?A&{9|-p~=o_qF^5@`Gj^F}QD-tA10pZO2fOf%uL{N8fucdVJcUZRP?O zR`qubn3s?1Gg+;`(^(wdds63QpVBt%af@Jjn;mk&jW07%YXt0ckXxD4~VRQVjX8+I& zW=b!Lt~dAU+jz|qobdD)Mssaw9owRRan#w+a`J-Tj&LYgFnctW({zptNpDjA0XnCL z)B(CrK5s&PI$KQcO@g>LYJwibHW_!5AU~UWhVP2<>T7aZ|A43U7lP;QX+7?9w?~O} ze39TkdmPHFs*LkDaGb9MFXxOiR##_~TBj%r_m%IWOU)C%uDxM?%OiTjy)=6A(A2C7KysdKus zj6_Vp;K1Lv;5NGgC~T*EGjD&p=@C`3cGF)!7Tot#08>ln)^bLuI`;_{IBf9txL#6TS$kOv4o|oO@Q=)wTqROc*zdXK+ zDxX@L_5WWL&+MN)gDc4rcuVwB9lr7O7hv3nDCTL*I#jl8+^u(f_Yr5@cfMV|-qous zD#fz!?T^T}Uk+Zfd>bwiwFY~n>c(T-ogMVnMQ`DWO9pt$r_Yd6F`atG?74?##_a3q z{xkwYWSZY-ej0e>$}xT60hbj*!^ttnl!IBE&amEeIy%_z0wiXCYS4_)TYIb0sRal; zij}jPPWSk;r`=7dP_uf___=5tnwHf&_z<^(>Q%b$)ewB+2u-M`*Imq3LUV6DqC$cm z7mut4cw!cs#nI(vquy<{gNI^DUhh`A9ctzK>U2HZ+cF}T)vHoGdoyfbTjf51>w33C z(H5T8dC9Zm@>b@9X8Yd!nwf02cW3x8-wd9#pC7%^ZdK>jmOg%S7q-TOtr>(`zt-u( z@WzPiJBV3!jb&ejm!_QIuC=zVq29Z#EhgjF79Pb#*6ZeP51Vke+1%Z$U6YipgPm*D zR;#>&0Bi^CT1RcR!C-5vcr{xNSNy8&dJ9m}QsFP0F%t`|)^%Gq_R(t6R0ZmHYK(`)a*$b>RzNxLWUA-LAFpbOdgU zY+r>&o++K`-P-oS9um4u)VSJ)D*QgaP^ShhHb~di*)Pt%F?03mdaZW#ZnxWd=UNPq zneEzre(b`7knnwV_n?lsUt{;zUI4VN?x6eqX1j*=@Dq=`p~0x2gI$oBmryp?;k$%w zw4mW@8BB9(7B>O5W<03PtVExBmF`Uc3Scw@5Jg5? zX0>436gjps@8=E?^vt9SS!)|ioz76$lhVKrLBb63XLxfF)p zdCv?1gfIjudMPRa4QDJGA>!HecNo)jVip&;QlN@h)BMX3^L!RHcbkuf!GC%f)(jX) z6#0X{1+BG3;Dg3~rQNxUmjl1vX*PUB{!v9_1*L;t4_zE)aTy1rCe6x=%(7-p`n&3$dNlwjZ(dXkplQH*!3 zKp6x|W$eYB`a?mxsaY69Q@s;|S{&+{l$!sd3<9tmm2o^3Tqahn;X$>{ooy1w*b z`GZnv4Fe(K13mFlR;r0`-Hf?8@s+OJc>pgbr5I*WS^;iO8JW|~kLIH#VyOMrITnUO z+^jv98Ef#od8T)897U7+|||ZMW$dL2JwW>VSDJ zyV2f`@W;3S)|Mp= z^HXt?Yh+_<10T;GJC%DdLNu<$<85vIJ20NXp&M)SKR@{F4Pk*Z(i&;c9fVQ%fE7qj zJ2AKXgX88iSqNZ!t@>WAeXX^3fXBft9HujHAcvM>Ct#yhGkTkEp+JHMSoSMlZ?=VJ z0xa?&sr3d@EwI3pAgQ1%f}Bn&cO~hAOip+P_TZ5|6tHuT!5454L%-P z0S~v@Ts+ZQ*ui|t2tB>4d3?f*vA3s~zR|QbYQfWHyyd*=WhmoOk^q~$5s9MAT6ox( zuU)*DUCEj2$Xtx&2!THu;i57Jr-3VaBVJl5ClW_z`ur(cyrhk!JL|y6UU17&me*$x z$(!MnCuX1T8K^5bW0xj6=TdA!_&e}mX9l9G?B>eU+HJdv9?taE=1cvj zoI5L7x=30m;-Gm()(fwSQ0NeJ9mgAY_|5Uu8yy}5z&BfTu(ilC6(@_^EvZAbNw@v3 zyaSC_RqQ9?qF!*gxQ!*U(FR`YTwG%Q zdSP(BZJq{d^bE?O%lzb;5DLNd&c~m(gYQp+m9Dh5etvNJMuto+SfXP7p8@l%Hk45C z?E~yvH5@D18g!FT`XOn+q|_Q66xO)F#XDC@xKr-v6)vpty&fD znpLl|zpF`qSFLFEX#vII`OU@$;tsr!_qMO%0C=^Fv-9p=6R`xZR@==^=T!=P2YA_7 z2IT?44QeKu;&78`L!)B$D(&5x9(~9r$L61Q(mIat{~vYl0%hlM+;`sZyYKJL3m5MJ zNPKe%5)Xm{5+uQgM3EOS5+w1^01#iY2LoUL%m5ewGXs#26asqKl2=k9+j1;NUR$;$ z%WFw-96wfx9UsQ4v#}j}SLaxf?$RN9OGxzV=6Ls%qJ4elbSxrv9UwYOc zrGd~3$KL2-#opnSBP8@=-hxAx%o54|$|%Y#Z3#5? zXaHNkTuI7%)ZFIQq;!VYnoXhxwk_hsQm)Zw$TDUbo4b<6aSrlL%`lIo4fF+{I_Y;n}bT2#{XzGyB`udTxL7Mvla0{L<`MYdP%@d}Q{lo^!Kq2~Ur! zmF2O-K82ewlFEgN<2*FIN-x&&0HQHR{UYO^2ThMb){4jg!PsFvfDduIQWL-icz zlVb;t92`n=4EuOqzWwCxp+=r##|wv1<9#`bBThztUWNQ$Lj%nvNx#*2$jE|-!3Ce7 zbSTGi$gwQx`9O|lYaT~^N4Dg=-Ps=7wU_nH-or0+%>%1&5_BbWErJ%LjO~8=k-cNP ztH>OhjL9bk;a0z4HxO^CQ^QSZ9-RqML`7VWei>+@xl~i2E zE?Uv%q?~nvShDOomb7QCjCq#LJ8|T@vP3cuy|Djq`+2;yESR^kh+gpNeum{zyr`b5 zYr*{P#V6mo=AvxQy}7G0`1dIDrj}rzs3zA>pckfYG}+$Lj5_=}^LOiC#!0b#VQSGX zpij?Da)>aWZLgoJ*kmMqEX((11_AS1=JoRVA_Ko$GcGp6xv5w1@-Xi#ZZqst@>s~l zWSY&;nu%^coLc`hPAblbMcIfeb9T~R@Ujgzn*lX=aAk(?5;0ALcPC4-oNOofHmXgn zwXqBZ-hcnz_m*uE&s(9HHMu(Qd2@3_49_^ctl+3?&F)aK1xBy17AaYOh|%E{V=wk^E8 zbo_?aKVh^Lm`VcXEBC<66Yn}-{X}|fh8CCXFpfdSa&$KQ{j-5ZBks&dzsVaT*3~x>P$PX_A776cS zbFA|*peMVRmfL_cOrfkMy~ZM~RBVyuSJldIz>bPr*V;tNb2QN^m(`p(I%09HVui;- zuFV*pITK}Y?LYGDvs(2Y!O^?p>f*B9@Wy1~%|4hyBLMsV8x*k^d|f zn#EFKbCM)+sn9G{3Ih?p`4lyamD;l8e`9B_REWt{kB5i<*9cECUVQJU5bZQ)-sPhm zT2eU)j;1)&&MEwA{`ACrIyIjLceMI?-ijPQKkK%U4wI+kojQpdRIcnxlj+1Bk(wmwOUi0$S#7Ok5PYatmuFBBXw_=@CB+re`r|dj-}?WLD<+y- zQY7`lb$o&K8NcNIC(q4zb`zHMuqlE~{W+T=v7)*nuqlE~{i}x&wW!)Gu@a0Vbyb9D zNxVVgRV^TvL)AO{cS+y*sqYnjH&*&@a4uPed7|%NT++HL55)Mw5OdCu1Mq~hOXZfms=%t!m(z2z;X)0b~~x4zuZ(#C3D)J}gasmbrioN&R^RbyLv zqZXL=ao@xROslHO@KeDVR(y`Yk4anTXditc#{vrs!6D_8b*6F#aJ}=8A+ckz!G$Qt zUSr#a*F|M<#(Qs zm=$l|oA95@A1}>kYtY+oNSfUtG8S?-AHsiaSAwnb&5U(7EXNKM_{TzaxiSgUn4cn2 z&=_N$)6!U9_-IWf;JVKeH7&7!wW@AxTYtkktQ6A~dEteQAv-WkKzpMrQI27k*C1vA zf~r0i!n0RGB&f+u9ricutJ_gr&#}Za*<@(3J#ycxM>pP(w6_bb=1IFgWe%K!hNSap z2ixuTX?RI8xFGxR=A`-z5+I?JH`;jV;j!-gO8k@7)5G70le#jy_#ICA{k}kgO3qFl z_jTF8wyig$G%q^pH`N`qVq<-d#UX+_5}SZJA-Y60*%y(}`lBd&8Y|?-b$a9=`)9ky z4<2}S?@l>S5A8mT&RfpQdOZpHY*ByLeIDPtXMF#G!{fW3-+Sn=cJr<)+unu$^!m^H z_U<1lE%LejJRWTPu)Q_44-)IR3r{vtk-aI9Hhu^Pb9MN>WI${(k@C@Y(_Xn&O3F5N zxNWB5TP`Mijcs?{uq!P8sBhOGF`*cPwb)T;H`Yg9+EtngG~b$(yEWO3$5E&^=rS)P zvV*Kk+1#A$T+l5tiHXln$ zWSF#3Jg{xk&DgBwN|#TLS+Uk#Nl8$%o|H3bWh41XlTS8#ckO=ma2qikzCEdUTYHz5 z+2Ts$dP=%g3~(*D*d&*&;&<$Mao3x%bD7$EP2C@Axv6{UdQ&$pu-j#(ZmIB6X6ou^ zZr|3s?OS$%GV`_?-<}zH*dtZ!kzfvDkyIN?G6OsSS8i9w*@35)#7y_DFR6? zM-qXgmLrj|R3kLlk;qu8-FADj2MauEmih{V(eR_`4znXTr$F@d9Mc>}7|x%Y#DF`Y z|5zxgon??E>~o$%U(SuvP^@>=&{rEU!Xg>({lwg>IsmiVh!Ap!jQ#cg43gb8v?LTG zX&_z}l4R};#MKN^T5T|cC^mp=Up$VRr6mPAMpVc?UJ|H?MMX1E0RXyY>{I}eu^FfU z0$md-`skXt#-e0tys~Ij0g-cQtvQT!1Ld-nt3oks z&*i1tLdKY4%S+CI*ibGXSe2zwZ26kCp%}o5(x#A9q}Ym*Gc}Hj)V5+Nb1X~+QqH?J zhGGc9>exFwj!U$Ab>43JySTdUiwn{ywwlF-L^6)aI2@!2z@Us>Wr_{gGn8eD4I@8Z z46@e7YXcz_>Rua!FpeuqYp{1}L{>nucFD>N0?FFpH33PrS-dUud>mIPc3Vzzm14Km zz2`}z*lqN@*UbWRUA!h>tU>a+yjYE5>*~Hfh~pZ?*0DbDV)bTmByVY*+D786JL(i0 z8OT~%r`QNBHNjxvTDl|N90a2%!MGz?o?tbX;-W2B*Oyi#14-3Es99f1IxyMSGa&PH zP_JLM9N3CW>h3IUDre~?cXuX(IeLoURk=M&jx{>&s`PbWrT4Gyz@WbiMZtZQMh+6V zp|YiQcbZ#6rub8{lH3(x^Vv8)=DGB-^nSdk8L1N34Hc29uY>d1>aj z#fzlG9Zj8`z}+dAz`0ADpYy;rV^xxFJUev;Y&?CoansQ)_G5hNvC`4W{E9nG@7YLx65*hMt zWYki@)bS)q4^3RbU121p$1k0`bXE@+rPhzKs#7!G(|c9defzc;3bIe)%{bwulGiDA z-#(Swwr@0j?)2nL`toG@^27|zl=C6TZ)z?HRh#>Sb8y_$H#u|sip51vq$fDh;LbLV zt7#>?#c=3|(YZ-t`^4}hoqzefW1+d+(5+yVQ>w$fD;LaYW}b2Rqcf4mx0HrDFunbj zCE3^@9eI4qNGk|dQF8Xy(r}(#L+7ozV3Dl!Mke0C6n`sP(MKkZsb=YIrTy8+bVt?O z(4m7#4Vea(bUn`497^ih2T(p64G0r)uM@wvPZS=yDg!+TPEpqF*JFYm;cPfyb4 zSI%EbxsfvyFY8e6J;|tb^1ME#FSFg5bXBGHv@0vSzfgG_U3((0oDVxIn}-kGO6Av! zv}CJ8%E_r&yk3h@BF^uu+}TA*tco{oO3vq$!0g?y;d^gN$;62hW-979+XWMVv18Sd)s3N${$4E}6RBc{f_ zN;>?OMQG$?b9#&e^ZA&Qy2Z^b<=vSTdTNw)vahnHtHvrd?z>%9xu(2Qv-I}(P&O~A zf8U<03Yw`T#W9vod4TloSgx6X$v&1(dB6;ov3$xaH%mw23mIy4&k=NzYpt^EiFcG< z%Cr_R>0G8CsxGVQ=PIj$QUs*yp3ChCV6s2gzqFH1)z7V1nHMMd`ARcSmMQ#vrQU&+ zPG(oxWz(t8V`2MTUzQqpp_0wzfE0hB(#W$*alFu%8B3&7`wJLLS#iJ@yNH)*{9+gJ z8saZ@5ij%jMTif)ks7;RAO)A8wAGifG`&L@zcuJ!kRLkLeJlifwh zHdP~Tva6`*nyNK=zfp8*ptn{&P1lz8WD`55S&nw2lju(`(a4cuUPd%a=St^0T_D*# zhb(5iGuw40*Si!jH8IoG1$?2d3`ihqzdLr z%fjFTM2_cjEd)&VIaust8JKRFYc9=qM*hXBMRrECA;)2lu(5jG&dAO8R$ni;{3aVQ zt#6f+>Om)fz_P{##f#f^Y!<+AYo|i}G%0Rxt`q5sT$A6wG?quM-QU^R@mQ19H*${6 zb#`{zxxbC5y9pfr3M;wcehL9+6Py^D7z@rj!Gv}91tyOhj+)^ZxxVtii5y8I6f-Qe zi>IP><%jJE5UCx&=7U@vF*S3B!;dp3r%tW%ZI;DDGZSUpY5C+*w_30R`dmMAC1`N~P zH{^+Hao^Yo*nF2Hd>Vdd(%)0rA^}+sW-&0@PHS+O>$*LyfWaM`Ap}H`S;LPfOKckH zCSZ{o@?aFzkhwyI;OSB=9xAs!7w1$4=P6Tf_vTL~_SEMIkG}H} z5QXYM^j-5{e+*@>V2y2Wz=O>Wx`H(-1Z(Ig(?GRwhy7#@s}(ky`xRR%DWn}2cY>4l zy?F>nfBg9He7b*f@&v9Gy9bA(9ypeLWzR6hx6B%skO|J#ok+(|OmU6Q{Mjqx7LAdl zobpMJ?v=VYD#ryO6ce)B=g)ITi+LDMaV-(uVqOg_cXO$nKg)VpK1WvOtmOK0r?`yV z{>EsQMuYmdKAJ(yYW!%A*SVIL;kbsm&`m ze^|MnpnVpsK+WR>`^R7?~pc!utNvuwQGG57wZZ@)= z26cCH_|7b+%CT;@w#5`%8gB_nC4({~C6Fv_xc{`E?SfMO&{~IQ zdQH4^cxP(Un-1J+kpjGAOiW7(M|&VuC^^@ISF>m%dyJAlSI znOisw%wFPB!dtEFyEd!;KkRSZAOy3sFJ0{HONXDD)ysuV%yqV;t`+*C;RjMObv@3eEG;GLK@6CT$yl%Zekl;L zTxSjK#YjrR1|TyX#fTXV>PFI&gbhHS1(UD=$W+%XHuC9AvtT1^2l_17Ses2?8gLCJ zutUD*JxGM$@RMoQaW`x=s`};AQ_MbWe4IExvjIOhcQlzUU%&-XIf&~(%`xRS6u1CD zbFxX@mETa{0uXc!1ume|G>vy}fG-JLAW3O~3$FZ@bgjXEBThzo$B+$l#VE>M9tP5i z-ld6U!I#w<=9DYBWZNpY1t@YzQonaR`{L7YDug1dzc-NL?{iE>0$W?m3|*JU3{PZ% z6ve`XDLbspiV9`&RtY=uw)axa`&{N;S0Dv^Ul>S{&1m9#b@gzrgnoZE!Ohnl8jfMP z_42l@vj2EmDR6LEF9*ppdU@M_fvaNpbv0k>S~00+w`37D&Xs1f^B&_j&Z!%Vc`9;3 zRG&?h_jBbVbEoISE}jcFcGYzNhfF)|lfu;5F1*l%NvjzaBl?;n;?UVi9UAv+bK~b{ z&R+35GsXrj!E(+W;InRA!Wuro85~`?#M*z-PR!TF20EWv5ZSTo5OGH)+yUWyc%Ogt zHB+<8rQ)HGx8hPcl59LNdF;|DmRBANX*;6hT={WV+q^h*w5eszTw6j;wl+Ctu}Qc#P7On z4KE-d+jPLt7#mQTcj$&7!`Ec2c46rm`Ga{@AN{TWor{R9R9F8$md74@-8YaVq6&Rn zcs(IW|zhpKRr2h>a<_eQySxnK*Y@G ze#*W#-=284Dk5EX{8-4fM)nP5b|LwL)?~Gs>P^WG_dR;wwm#1lHw((x$h&E*>BC9o#N^reiR{qBLce%7<9SmFzj(;6 zD|ZySXhBS&F*SWK>xMXMZbL^MnT_MjsoNJNw?4(-Tp%F1v(Fpm&c6GTq$6-a;1_p` z*U9Gsz$i~#+t@9FuEB0F#=OKXO=Wwza&W9}1@*J_FL-V5I&oW+$o)yv>+?zQ4YG5{ z%34jv-?{G+{U?&a1+5eDXV0I?O-}u8-l!s?^Lsu<_UoNK1i*noX^Y<%T3 z^wRE}FV9ZR6Q2?E(~?f+=RBb`%hiXP-PK{v4l|xm6b|V-)p0S8;o!SNxon8rEJto2 z8+Lwtfo!xs8zn`$PMb}}Myrvdz6RJH)peSc>&!DVT1PS%IKethMh|1Ad{zY54VY;Mx9p6Vt}jN<=tgTmSbh#9Cz<7*8>%^T67#|`q9Rw z-ZcorW#NgSAn?0Gk)4!ayM+Q{OEWZ`Z*$EjlH0shbfhNtEW|RW%{O*eTc$%cduLe! zefK9Tx-n>s1eR#$w=}l2Q*?|p=f;D{%I-oME|Z~@=7G}KvQ8-tnMp6UGr7IH7#f`J zCp4dXl|yM=SXCPHo-%UL)p;IA!l3rX%A*{VhqhfA)b?Eu7u&!_L542({0gS)?zVm_ zIhsHcX~ytc9GG&bHO_AlGa^HZlT zoxd~}td~Knaz#jIcR3`RaJQaIn%DRHqEjI%;CPqVI>7x?)n1XT2xL5d8z+Oc&}P2o zQ%OA+6jLGt+cqz-Zm%;(Mh|3iGuA1r@oj;vEUeu1n1R{urQ5=G$p>}}=WN3b7E*A1 zV>Lct@L!sgkux*-a@W-uB=W%$TaPC7y!P(XHXO3qIi_2&{B}h@jK#SxKYX*B@5R>B z++3hhY?|WcN)kGV;p?$AYkV*i+YZ@vD4elx?&UbDsYnj7FS_vyi4=OhDPv&Hwl z(T;sDKJ%u0QDDNA)8mQa)6-wupH!RWLg7C|i+Q7N%e_&@I^HPz>F!hC3B@Z{VJB4k zqxd4Lg}dags^G4w7aHcSs+iZ)&!kk$U6sW5%Cjke(g}e)0RlnNZ{9zp;ml0dnfp=@ z?yBT2cD>wV+h4e^;|uF&$2Ir84usHqis1dq&d+#N1MG_UrjXDL5V@KAUI+8dL-}3@ zdwj2h;k=0ZUI)W@5%awc<+W+EBlB^(?{%o2)h6HT5Vh&fZZ`gamc_RX|4fuVC!ccn zicc=4Ef)E#Uz|lcJ~?%nZ8MV}ysjMMS2+9>YQ*l5A|(FNB;C-B!WWGjh>G@CEVzw{ zD`@fK2GtbY*^2C(IiGIm@^^$X!mJHxtsAnvH|@zR%a5LGw`Ez?kL=JKwTEE0Kj*O# zT89U66PqtztEF9=n5PMjSEw=*JOT6yq@R3c^7thSX(i5EPr1l3wQ+7!Itfo8fCpeE z&z`?<4kEl1n}kfK!NbO}c`%KpySj3zMV%a$VUFELc6I#jgHR*y&YVBlMcWqT;YN5x z^-t*H;CUkY$9Oyu@C;od{zd#6zy#B@YFc1v#4K2BmVT z>+Evg)D4)F_lQCrlPB`b&W2Q$p6}@Us^0n{Jw`;A9||C7fa?`z<{1y^jw|rW?(^MZ zBuvgQaY5fDj!v-675E58#W4;aNaQdP#A9*n#3UycX4CUl5e%I=86Km83&+@zo}{n3 zxaviEyGHeNIE3r)W$roTB8hO6ql=Mq9QM#@5_<)x3#&+TYNqD$^o0_TG4z($-_`Vv z2(h)Jhni?E-7%vq3uq8O4`p{pPw=kV)G_Wl=JJh`86Uflb+!30UGF{O!!8@Q7-T9d z$#5>va_`~|bJoe$@q6ci@)ItM)Nn6anqOmW#zUHU0j*y8;+{OdMBx(m5MRQ*w5UJA zCGL%%7;dHQ{OFXa^6Q3T){rU+^WHoLMFAG~W??fHU~z9Vi_lSk#l4U5BBO8NJy2-- z9H^bK2iSR2sB5IS_Xp!AJk%A4v7`;b$e-TYiZg(`|XBvCSaFO&-X{5DZ;YjAuw^4#;nL#zF!LOZ=E$9$>*(MV^(*zqN zx#2_HdlXCIyzz=oeXMlf@Ufc;g&!(%fe~+RaX;s%Mk|3>IseL#_E;(FIEndV ztL_e@Nz5M`y*H3X#>Y#K{C`NAB99*D%!l(yL+SCg_h%5KJ-+?n)E-E1b%n&xA1Xi7wl`_bd9+iDNuLmu~3VDKN`wLn`~^ zn5H_jt8g=50?gcV{PYB`3t?nvS*bZ=K9#iEOoba-?h*^e>cQyFU){MA&SO8>9gFi+ ze4n+IcpLceRM1O6@ZqVo9<$`JI8SZ8*F@Z6arWk?b!DFJ4dy9H6x*AhOI9q-Ue5YR zK@c7DY~dZQASBVx1}ZE%W?$^_PykS|FOOOg75iAIsc$^IWnVapP1H)WxIgxgB>;-; zkF$)TV*hGC%ugCr?C12M#wQ0Tn#BWQM;`#<4+P?YD0U$1=mSyg0C5fPuwnpXaXP#= z-A_OC9Qb62oIQK~W#m1Nk-J9$*RqW0CoXccxdJnIHkEN}T^0sLkpl-p?2#2fP%u_^ zSp-t099(k38S01QZGjbv@jD!pG)F9G{oxSf2LzJCYrN}#KyrBNeE|uz9f`LGBxR5s z$&qM?9%;BzE80wSJN2gv0 z4fBIjFVsDL%a2Xz^pF<=$BVHCM{-{P6uy`jQ%Am7ciA8fDqc)SLNPk>rM#Fr@}<0( zI`XBwm^$*Mycobc^J3!uJM&`V{yXzx;{H1+CgJ5|*LY#V+brcZUh`hDQ(H%aI01m} zXh7#DwvGmI0s`Gp#7XFgxHw)o?dYU%j@NwUXD2^S#2)eK=RQsZbbjjNLOPuh$&;|oRtu51%9&0@kSFZZaz z(|E~+`Dph1C5&n|*|dUlqB%;gY04J=T47>rowGCOqLGz0ics^CqGvDF{Njt6WZ-g; z0RUv+a*zQaGF}cc00d_*2N|e|=`Y9k7}Eh51uutD07Un^97X|99L_Pa%i%=XKQr4uy@l zx`EG5ox`rl9m~PgQ-9vK?cwy9sU0ljLMx=ruZBetjZiDXMT$VQ@G2ImRta_3Ub@Cb zl^lUn>(M>}D;Y>o^R=kjpMlsC*CM)oH>^*Zl@COPk3|uI>pqt9C>`fci1ly=nOVvj z!|k&N@4fe&oewCM2&gW7AfnfPkd3NR!W*t1jN<;`_eWYi@V4-!xwBUuWl&w<=1O?r zHRUUfY=AzN-uD(sJcktWa_P~KdXx(mEbL^?nQn_6RLe19z;t8*=ZAc08pxK!+bw!f z*qB*@Bo*qi79JQ<$*0QYAQROOM2&$gl`4NA8eEfsbi)rs*e4HIl_Y*RiZ>14mF{*|8kJy@ z&fBdRI64qIb4xilvMLy+Dwc!P_~D2X)=m!+14x{E0IBiA(T0u5TdhW#{Lv_0J3NXe z)g~_b3CAO`X4EWhX7NKOf{W1|U0GE)230%7sPDQU&E z+${Zri0Q@?b(#|}E6S_~xFpR|Ei*GtAJWQuQ9l$FegsX?K+GEC{Go_2abaz!(|$PO z4k}>OEC4UcuoIXS6&F7q)z@aJ6#aO_v@e4C znmlAx_{l&}A31r~N~ah~r9Kh#V-ePkumXV<(6IuN_s1gan~)0DAJgj&UX;Xt)F~>0 z0JEYZ=pS{8q6q-=qIBygBUGm2RW|{8H}#oj_+*6A45?uHWQ5iXAecTGp*9K3Py+ye zB0_Ke<0#$3#W7s#@^?gidULR*M8B&+T0>)hB0_!KcU)H(6tf>0&)7fYx zm7<>(_q{0n_?Zajgcp@c2h56Ue0?TjMh>YI{Y(^QgMRhf&qgI5K|mA*%!-N)KN~eN znlLK?!~G8Z5|__*2$tmzm=$Hc0vOZ_c`5o?Cpaz*G%G(J6}}KSI6%&y&ql(4IQY4Y zARsCMbX5#UC7+A9-au^ur0D0OWlkR;m3%IvZ$Rz-d{nw8P;1PD`H(i)TN2H zESweY)A=Wx9uoX=ZZ>SN9or3tYl9r#gbr-*J4vXB`;LOgJw0)WiA^wT`HKH<-2E!Ml(#GL~y(DyP>C0N_BEk$dZS3Hq#$d^2 z?i&%K;Y9@*F%q*cMvXfHF&a=`j5yNuq7ei1Yf8q+XO%@(p|$7J&oxE zsVvqC^F_-+t$3C0TgSv^EebVyZzKe4CaA`YIy@DC4Yvv)2kKsn*58@D%cw)u{11{y z?Zqkx(^=gW4YLS&&N2&%xmDWIjaKL$EtYdORv?thGeYr!05)_%m_{!f7=U+fNdC1; z1vX9pDD3%_+nhfDk@L76Mwl<)Z`ZKm_E%W=G z8K(iQzaMb}sumeT&B|A!!v7LXD*~QMUyW*RCJt$~{~EKs4FDjp0yb}gwC{d#8C4$0r}2N4@m(l|gA1FNEHxpL=D2o3iB5Vk}z$E`sR2?F@B2bO} zw^3<;%Y>>9lYtNQ&Ibtlw^5%i>hcm~_~VET(5!@-#fPNxff9cl^$+AFfWOgQLapIL zr-T~+jqVb(@85NokcG{MPKhEV{+&w5vR|TB{3**SZ=|+t1U52|!hag|xn)mYkpF3B z*)I_-e-`1IHU3za0lK`CXsMh452+OWv#iUOi0VI&aK?F}x(qNYD#U*tailqDH9qMH8!v!Ys0{QFK(&Hw-2 zi(<+&D}NbTD4R^&COQ97f+DOS*wWI?#MLS5aFtB++yZsIw6&UL( z+qyrgAIvaiF{BZd*2gS{bkSRbTCc^)K*oh|sPRcVl`wxvhcNUa+`{J!7Eo(}CsbF1vL_w+uFAo+6+-+e*4B^J`N7+{n0 z7EI6MWCpZ8NzZ0veYbnIyVLyS!Oc3Ymy%oPwBn+j=3V(+=(KG~!%kEA2om1<`E7W<$5-|@a_JaNL5FbE50$P^KLw? zUy74ui{-lRs*}zvBA)yg%p#rBV7)5g?~o9;9!UDfCePu0%w~w|^!j4@hC_K-snDs< z>+GNJ2inQQH$O*n4};_JPR4lXJE)!4H$>n+W9AE`{%aH1+|OIJoN~dNE6e0f%9IYu zga$JK9O3}q8*1+td3wnU{he#BNgxj9H`c-bJdy}{vA=6g-i+!V>ZmI3_GTlg9@+oQ z{sYhL=YcGMu_OEU@7@0-P62>D?Y++muwzgM+eZ%V)|*!(96Ee}m#cR1(p6tlJ9M}` zc39cUN>Vlf6;C3cpsJv;-TMx_Lr~2j-nSA|-}Z${Qe&RcE&sF4$)w^`Hn-f8b`BCd zyzoAXg>$SU&CFy~<2Kk$tI13?o&uShziBmD?jRoHNy%)2g@@u6QfF3#8(+gWvlcvW zrvlA$&6`!wH86-THF)W_{PICgGCw$W0s3rJ-)xh#tj6Z~M5t zX>Vu4`__6p%N;tys?of53)OT@e>WAX-f3^g!58|3T_U z{r*0Vw1tn=#vIzqUhtaCj{21f_S5e__49p%6IBa$DxT2K_cbm4DxB}Li@&n-eGlS0 zxzYJPi=NL;^xb*C!oYyQ-H5YdcvXsx{8*sg({1!;#qcW@8+kF3`r@sjHX-TbN_DRr z|5dS%t>*wytZ(F=P#ZvhUJUPBu|F?{>y0Z?vto*&?9Yo4O*Y^m!BDJN+ySoacl>&$ zVxZ3gqLoImfjcaI8;GE+!MrwwvkvC9=>>_wyf%gX4(7EH3pbRrL}9B#IZO1Y!%)r= z9Y7h%S;7I7C3!K$dM?R}>1Bo`c`+R)Swbd6c8%HXsdsV|uhvL{(U$0u8J^jXhYjG8?oU18#iwc~l zXbtimx2ZV7_z#~`)@!M0-%_k{RT0I0YpPys}-d-BUc#j1M(tLzxW zXplWW1~D4OgCBz!t@?ecehgwX+;EC7{Jz3=CtgjwF9?x^{%;FH1OV~d0%tt*e_IeD z5B=YU5Q&BMI^g}G!vH9Df9NnE@ZTRg%tQb04;_Zga=t8dm_L*EKxi`%#U2P921J`5 z2pz_&3miSm$x=T*m={x5JQzBRjLI204FCGWg-5;3(v=T~;|>=3|487xhyFhj(0S

acv3oY3H@xVe4_J2GO4+P4`0}DOa|M9>=V)&cIC&JMm z0Em1dJk$q7u_wYqeL%_?o+PYDakhi@1)x|vb|nQwvG!ng>_9_B4`Vq?=%O7t6LeB? zM^2==Vn^t(ik(l{5ju=$f!&2Cox_@Lb_WjI(SkiCSLS}SU=LedQk8zRU{Ax; zOkPYf{|wuXUQ7e_nQ+X);?kcj`6(Fyianbb6Ut{BeoDsU(w|NJluS(>wl6OxnctTe zQ-|%#i>br*QH+Zd2xl)IEUZ9YizNlKAEe2WUG~Pu3WuE)x`28ta8}{Q#Y29Hf?|*9 z?L%Rj1fsVO1`>|_|A46T(CAh}&TjTQvSUT;B^TdO^G7!o7F&ESs49z!1#&$L zM8@Y}mly^Fy63_)*$`8n590{{DxMFb1f;Yuo`5L!d>Bs+>6RD5zyN?@*&!w%ioFm9 z1`x$w2))`6@M0Jk0Mzzk7#Khldoc_QAmt1LqoINEQWzKj6niNQ3?PcV6b1$m#a;>n zqam{1nYTs*BRj-I62;yb1_ltt-suCQj7>FOIAh&c7URatb^@zxHq}wDR{%*zV>?AE z2!0%8JDLFrMAAf_QCytJGs-HS$TI>Q%QLFju{@(Vd@RoheaD?spcki(d*=!w<8k8M zy=pjhBF8A+oX9cC);*D9gc~Pg8+zanH%_`N3L@i4cCj5J+&-0KlrBD%W0XC6D#wTg zdpgG`m2x`AC=2#^OB69h;xuvEW$F z@AxSfi;XQ_4%7`cOIHf-adZTP7O#ZHDju}>u0S0C)V(WEXK|m!cLnM!?6df;@Up_7 zr0(6}Bo6?^-kled=)QZYYfRGM(YsA!DpaNXYT+7-QYk;2QpHz;zE_|MXIZ>e7N-K_ zJhw2F;?>Y9i&80GrBw=jAzb8rQQ`YQs3-u1i@Yy_Paa#qhSeFKt#n92K;fS2LHA^TXM>hNUpB^pUKY zK+p>4v;va%BUv*6!TOP`nM>(Iozd`S0#Ot&E2?IGG;1cQ6#Xd8%!3{N`(m<$Ds_ewGwM85F9Z-&^&boB|sz1xAHyZy$zr~g+wCqSgtvsRBs?2a_G^)}%&rzFC1ID| zuZAIPQ$j6%7_rD6ZRxyZt`S%xelDa@thRyO3(v_=s%?Kr8kR*dN%dfx0#K|T4vGRP zEgaDXqF8;TmG|7A3?>^F3sbpxwkt#>yF`6;Z-=_0^Wxd8Q#-*SThCvR9E5VMUn${N z_Mn3%&)m;(1`*D2}1hiEl7y}rynJ=y`CKY#rE+3|_v+U^XY15KsjnYN_1r8LKqLG~dp%}(f5 zXkG!BIT7}Y7v8wsO#nNTl-Lsrj14%33~ruCmUEfP{HfWA3#WPWr-NBn?lo=@abi3j zJ=j$)!#B398(a3Zc_10MaO&mBV;%JVAlu^MH39vTJi(G-80)w48Q5$m6~9i12iml! z`Fb1(T|2tl?jITp1-Uo3;$L(b8+Q^-&a)4}UV%4Yat@u(mgP6>jB z4|a3w##whf^x}iJ;J~$e3+|a?lwCNc%h@iTefrBae;;7uVydN;yJ?^8xM}UDyJ^ig zDUg6fddx=0?ek+2BI9pEj z`GYBzLkImjsYKBRC4>psd96Zvt@B!i>><5Y5prU&CChdbOIcHJX6+M9(8XlM&W`?S zLvv)M2hu= z>mKYU^G7^nCiio`(A%H|ML)+2y*7v(2v>UG_NCZBxRD_^h*$c(5WyuJ zuJi~lVZTfRfMSDgp3+j8(1SznIRm1$LA(gE7YgdyCGm2<+Xsl8OYD?xMQJjan#8*5 znMwmm<{G{Z3}>1c*?RR-=_D^L`4h7S8r+v>XWlO^Wp$Tj2V7S2_i&Y6#g}!}re(%5 zoS)7XTC_5(>I$)Ld|4T6Hy{eG468aI+P4z$bXpieA;$Tcf=S#5Y|Z_nOsQ)6!L_Ry~5^qz3w zg++qa5g{HRGOp`+GHD%0_e4CbZWY!$@e-I;SWlay@s5BF0CaZ*bna-pBcO9f;~fDV zuD`nqC;?dtT7BIWtaEeyZ3yT9K(`^FbJyR7fX-ci8x^iD2R<4CYxpfoKqjtAQA>D5)fjcto=Eq0+A zJuKDZNU+U1z+CHBi%Fv^RW}-2x?2uo4iLW>UpV9OmY4wiZa$y%>7>T_IbAnPnoos` z1_X5zvNJ1laF&}8|B0AGhXN%>W&Jzw)nQ+vMd+Wo9upQ?HLf-_Aw%(s4u>+cugX7lY`kL)zI zJ$5txEP`TG_to#_nA{bAqi6V`q@I6zL!qoklCp7Y(J;53duBb*Ex%`0m(X@@sFfJh zJ2%wsIQ`eVk%^Xp8lI)FWj-1y}%>d2{G`jHU3`5Uif>a zu9!&{yeH%j#@Q@VjW?OT17LpZdQS*NUiIBdO*g2eYW^mkG;fuw0)iq>vfV@}@+7S3 z(ZQP2v%NGauSS>`T#+|=6nVoGdAQTAFCO%H&+oMB%Ta>Azm#cw`FHz+$JMvz`Wrf3 zpKZ_er)1G?sGhFGJvbA^VtZr(Z=c*8UBUHD1 zas-P1+l!(0l&G#E;b_xw7F$F-r8*=x$xjYT*%>sYUDnmf9Dc&6J3h~iuxtf}>m|AD z%qD#!gf=uwt2;1kYT~Pv5ukLEmv$wqbC-sfvn`qIOF21_Wd~f=mECOye`s6T&1UGz z4$GEzWfw!2cVU-K)aHo?%siP*{a|H zj$+-&mF+MCfn*goQg|`hVXL^1B0wNng+Ey0jpeYWaGTG~YSNl;ofO7`_LO~B0|0bu z^9@mrmbELKUfEAlkM? zIT9|G@-51dyqG#{BwQ>-8jTtWJ07-0*~*K_aBk(r)XG*~Oe3Pzb;#wb{mJdK9@^wC z9W03p6Ltt9^BD|=ba%*LI{eSEUMRObibbD4e`a!KoY(bcwKfm2q4u%u-xO{;e?Al>ydUJ>^~}M^$;t76NNe%>Se-9z z!>k*?Ejf_oQQ9hz5k>s=Ne&3x>X`U#{g!>=G1fJ+4IE(I+Icb29vbI81)afUId$%W zUB>zuuj^d{{~l;*Jwb?FV0!Zb*4N=T z%#_ivYIH#laHht%Pc(YS`Ska57rNf2yL+*@WEHR0TAT>JtZ4Y*w9VnynNutmLvg>s zGZhO=7wsO~x$WLPlX9-Saz&cS8i9}p*H@WU>3!L%ln3mF*ZbYd5`;Xv-dmJJq#F+l z9p{-f7SNYSXEjJ?n23Tm7zpX)VY_6#AxChNcxZT~A?J3csSCO{Im4Ub)3ni9!P=CS zKhvl|lJG#`PQ!-^>W`NVZ#R5d(_MbjjVMO@{k_w3|*JwxH9 zNFX6b|2%HBpaqx4tA@8(Er@seMjNDPjHP*lq<)u%Yv_F8yOe9_Hd<9=ToJDxUXxdK z!#>eA+ro#9v*;hKidQfbj2ce#?CQ8VJYqPxMS>vHtb@~y=jKjvf==IZ#&8k(tE zM^^_;>g&N0+V*4Fbxk^E|r9 z-$`B@OdEeEc`c@m_b}$!x_Bi$yhFz?I!}wH8;{IPag;mL5%^)aJ&JL3VlHopUPNA( zvt1it>w=Ol=yZ5-9lCv;HG~bYR=i@knRfZWQ|X(GU=D5P`rcnjZiR&;5U5&9m-AYx zoXotEd?zA#zi}I{YS-w_xo%cRV2No1V^mfbr>;TaOKR{z_MP0bXZe zFLjR)5S4GfeOcOkY+2h;p9oK|lt>(O>PjQ=HH+9=%t+ynP zoWtA3``)2s&}xqz-g#u#!53x@J#yly`=7hKXZOVJhhE4=2@#?GO=D)83lwN(6kFP?RpaTDvNqF_uLi|9nI5~5<;s>5kL3R(| zY?ZY%56R4+tVtc1ojgSp_~a~NH#2p-P$~Xm{0ls}j*F^Xi~N7w8(YRYEyt4UVxe3r za~Eb@FDKPnREP?tsE}a6bGKKy#omYhM_Lo6Wsg&z+LV#+*{Rd^% zO&VTh{-b~Oqr`us^1xtJESAdruLO4e56nZ+5cL!Xi-o}@jK~P(Pkc%fx(bDAiGUXH zm*XPtLuytmB$0diH>wbvR$96Y6p_l&f>N=_(u>6x|64BXW$GhDp~&xupNh7lfC z-|F#di&g4@Unv+Wy1Qr=p*X{!R4z(N9HR zkA6D-Ptmud??fMqKNSC9{6q1z_-EsP9Dg?cT>ORjGx2{H|9t$z@jatkw`{xbfxSDP zdFtTFQ>Uk<&s@03J%^VrzjEbWKN9`J=trZo=Vp$bf9ZS1kN;xy3-ND9Ux|Jv`fBvG z=o``BMDLH^7k?oBzWBZIkHkL~|785B_^0BJ#N40yq5n|*h4`;v|J6IL@xMa*-ZQPz zdixnak;X$G(8pGJcYi@3e^QL-H2&M9P-vv3_WEgz&$yufl!m@fdHL99A8Y#9mw!yB zN!c<@=I!J!rSbN-#-H-`xa5#NmNv!fABtB|RbgYis}<|dTc4!TLi?@LL*Fm_jrfW7 zdeK1=6t&l%72@?yP=OE8^!9icpYEOZW~7C|MjMicKB(e_#$VqR*BGYp6W9MkHUCGn z*P2>r|L%9*y|2H}rZk@$)2*oe%EghmO|>8R#%u7TxVyj9UN=$_vF-o(o$pkifvC8B zR~ofzmru0{XD+v+izG$!XWDO@9w{~2B%c|H$X{y5^X+f`Ay~wZR$0}IRQR{h7n5zI z0-i#9HTj~;XZY{BJ!|Gis!A_Hby{wfVK?NoYH19)DSyuJJ37GcGNo%HQCc&k5wLyh zD>YI|EhC%qm(yzdw#)6(MF<#bm7iRruWQI!h2D{BN{7dNg$B&-{G+B{v!<8ZL&lT# zw~K0FWAB<)+%8^jMVDKJcJZS1PW$Sd+8<4~s_o)D-@pAwYHur|z_ovyH9aQ8w^iBG zAEm6lw#U5Ol~xc8*dP{cj6bCM_Vw3jbwLfvm|xi4Ur!6C7x2-!Vq6vNS52nV1x0ru*Uka z(jSFB)Mwh2BI|viv?fL1YA>7SKSR@LVa-Uj_(WPAsihTo!{>s17KKz_1r+v5hM2)t zYir~%=ys#VjTqIkw!?xJ?JMjt=`GRZw9IeD6s4BIytuDMSwZw&f7DlP&}v~!;Yb;d zq^0dP@<2M&s#qV2aEMSgo(#68k^pa%uq-6>l}$?c7|pkFqN=Y!dS>?G=~hi$A7xz+ zm%F;2E~vGtqOmG;eW0tV>mv=6a{JY^_VUH;E^wj_0h^Vs;Ma7^bP!$Fj>5NSS~yHV zOk`RS-7InWm;`7f7Q;I7i;zP~@$!7Dc2QCV1vLLs6kY@>UXic@NHR!d_8h%Z;;FiSE+Y+~H(?@>HVJza{YNGFL#cqLBL=%9E&%2ecv2jWp+%7)@0VVM%d zAQF~^1e1d9kszviM?y9ZG@-is;Fn}68wdRIaX_;e)z%Mu8~W(`u3gh)+&c=&?M!b} zeH1W_=A!^L7j-F)vMUb0bu|zjWr85o$+uJkKgnX1 zk;9Y`dQ!#*pcx_CZe0$$ZTIp z{gkJEKBR`s_LbD1^VDAssUfp{CH0?p>aT~?klDVH3cdf)o8A7RXZ%vg7|PjKGKSRG zLaP1U9{+AH_*((AzuV)l^nzawp#9w*|6woq^#I!6?eU-Wg5LfcBTJ{^QWq`b$>_Fr;1!;DhFfsklDVH`dgm*m5>@T+gDP*?5TekQbT6@O6u1=_0K|T$ZTIp{f4K0E2M_Z_LbCc zdg^}+sUfp{CH1d8^>0IJ$ZTJI7@PX&Wc;>g#4LW^l#!`ADb!%$@N2rg5sQ%`Ec{TZ zpOSV!r=V2JS}CDjwPZu}^l2g@A3uYh5u&ub7e!_t0Bh5%(1PA_y_RV&%vUX7DC}A* zW{S^|<|T?x#JRS!dSx1rP5O9mSd!FO0Ae8YwD*lRkk(b&N2g_yy<)S46#FzQv}&8y zz>Q6=5J&15Wkb_~|5{4pp;(JQDfYC^Z)jLli)yB_{9;$oH5Gb z8d=AYlzKI-%Ak4`OO-3H^z{tWirc(q2NuMiFa<|xAxy!=dR0BsP9N6u){*ok<*FCJ3I#%_b{tAtZG}l#FC$}S+bm}jR<;u`!%zYvQMJUn=Yh`kd zR3xyKz&NJzz%zbLYr#MuCAFg%bW59rmA;v&Jg86Z#MfVz-9!k_z83hu79Dimf zW-BeV>AwVrttez+Weck)rehpyr9FrO@_`gqG8$86#)-kfWaXC)WDOr1FJ}1Wi$ZUw zvCEJkhuOMVC2d^{w$Lzo4&K@Vld3YEnz2r7p$nbuw7k1MvgbqwTQg*Lg7fTZoQtL} z#~NqxF499qYkAx*Jmtoyt;=ZA2m!nZ9P6sg-B_ge_}oZ~9k(4!GxsCG0Ga!ddVJ^> zH7ac#QE0pnMVTveh>ly&pt^=6&}eedPIOKif8o&Y={ranW2o)+djVh3x`n)QTLxz# z1&5{`M`NwBvu3e8LqDqWg~rfl{qNrtqk31p#ZYfi9om-`caZDa&_j5`X$CH~mX=d# z5j{!w!Gm@*^aDbqfyMYQGi7}V1y+1QJj?!}U-cO(J-L)tMq*oL$Zn3(=$=A>Av<{S zp2D|&@3m_MakO2!oI%n{(X<>EC>7x(^%_fB7XC10qy#4aHpJ}MravTSkf?0eN_$!O z(ji)l)<)`NESb|ct)0P3YAs=*+tm`wI#RbHwX{C1`34%}_Tv}Z*RIa8e2&|d%Oi=f zNW%z_BX}@NOB$p+d3;Hx&zoSRu z%Ax1wh@d)JtlYV{u~e?LN*!@yHt7~OIR}Hd?FB6?F!@vuTpL1j2cBF@`7P{2AC}a} zMNJz3Khg_+)MV;F4}ozY5MkgS#!$Ngp(?IlLmz!F2wT`r2}`}9|62$~l$6nx78=*s zpXrkIfUsR3DHbJD;_Gz#Rgjt}e&f@xT`Ry!*n4$)q^PgYAeq<*mqA>Ti6BD$;&;e~ z|1c|mb-GnZMc~LHIw93WZaW1LOlwy!kHpe<#V7c0qzvs< z<{-8~&n^dQ^;CP^T)Td@{o8Q5a(UVZCfS)VN6J=Yz5A4VNS6ZRS==Ar~u9s6(jF2(ETtq46XYEun`_E)@2BK$l}yg2^4MpZTe;z6QS+r-vKM|EhlAAWDll;i<3Rz z$iICndHdz#!NpXXPVsIq(CX7Djar>#MS%a*f7l^j&3M)<`Kf zzR6za0--CkQ#Torz4bFAMVeDG*>iPq+PWHtIC8pJMPgV%d_WtR?8WW*TM#IdJ@#*K z-w5>$WfTosmL0-Q5W{_%Zn;j_Y@%APHb_UbifU=8@t1M2#1JzrxNwMlxiE9x7<<@= zej{TH;>`xP$xz~=jWwI$%R@hCn$Ns=a+UI3Zr!q(qKgdPFcLSK#8o7kmBmFjkFg!^bbV$O{D6}g@sb}`&cIM zy28IU7ht2a;KgEK0PVQ?eLJqb_kADu(8oUY+O@0iA2In-uD(`hldZU;Fs4Sc?NWRK zQeJx%OCyabjvPy;w^%mF4(cFkbwh7A>F!GYKFL2T4VYsLf@hkoitqX?%a}9mRcEK! zUAkahUYGpU)B5#-CDDd^#T{4QGa`GU)_%_|ltB8Dv`9l!mNBm@wG~Ziwoix^uURY_ z`d8vVy-}WSykGNVJJRlx#+^;s?SKAp<~e5SA67mlZW1m#OHD4Kw)voo42fdce8=oH z%Zv?YsRBn(%r?BSeYJYU63$FujC*uSX2JeKF{*S;*2VSIdkw|V{SR1;Ix`>{Kru{5 z;(WTGJDGiGrqNe=t$p=rvqMVl@37du#^PRszohl-s+Z}L^1O_dYo&{Do4>V-?drV$ zycS=aon_lu8}`xVc6?DkV*A1VNOdBq`YD!1BI4Quc8B=9ib~$HF`%J(5MszR% zD(aR*m@KN@If>nG{TI~7~3#=+>8cCUy2m_P{M^J z^YrsSPB(&F;(=6OCK{zOt*uNP0v-^6Y-*3a-4}$1g_NYv{7K|8ir57-@o9hklb}Pq zC2X(~RmRp~wf(!l%IEeM^4$EfmpJo^HYV3c>lJ? z8|~LBex>a%ykAXFRqdbqSNt6Mgje`0<*3%Bi?WpnQ%T9a1L~ISAD>~w6A6UO2Rd;t zQmxpWFl!RkQ1;5H@{HL`hSTcE6f1 z4oILR8ljOy;|joFfGzq@Y3S=V{z^mt$^I6Yhir&D#h7)JA!o`jMw`(c2{rA{)LGt; zuXi`Z+iSj4jnN|J9Oa=ECx8^PSg0ly&+t<#Jm~}}+49i8agwA@;Jk#wJc)JOgKCF- ziVE(s5t%hgEF#26WV<{B{h%7PW_SG7c1njT)F`@Ct<>ORv{A~d(8Ns@;$gPpZM?l_ z{T!`_%xhxU`}9{e=RehAn>zRdyFt|c%zNo&a(qg|I_qtkOpc+S6@o(J$qxQBSNIZn z)5b!Gif%`5i5P>f2Q=vVK);N?%ch4u$iM{8M+oo4fK$t9pcV}6|MNGgwLLKOk5tnL zbxJ#_U-?rSbTvq3qS>}+61BOVrYFxZ&Zuh|`-TLYLse+#lfol+Lt6U6j_*Y8f2c^m zNZQmOEmI_E6vbfR8yRiBPQf05T?RvSej5J|F0O2xcm9%DwuQQMOCb*V2bA9mcrqhS z$wfTqLbu$Km5w(|#hHW1uM%ItdLU=Xn}teH0evYiB*ihyb|AHKgNiZzm0S(UorQ1Onn-=9|B{lboiJ$pOB=T>jrtkcpm zEo;j^r-gxjV=bas=n{UH_{}Wu-IEd0F7p*hFMlEbQsIk2F*;wWe8KqY`oie2`O3OF zr?T#2rrO*0X^9bJeUDj2-#4B{s^cfxt1>GVX)FN+zbT^?5nQH0D=Ck6h;{bAs}D(M z8T^{rN^#>ai1S6Ti&ukS9UhhhSmvlywAQ(Lr|sI!?M z0@JcYzN#+x0-{qri%anf-=CH~V3LHvtGWE@v)Gk%U8P-@izi|Y!vz0~?boFxIDjgS z#m5Chjp~$H{JcH|p0+!z4>anNgO7alNUy ziiIA&G}?`lEHcHfrv&&4jR(*HHoe?Ka!jn%#`x=BdQC|iPj;|vxFQ_qmjRlu>Wy8KS;tw|A^Oz%43~jOBX`#Oq zKcOVsCs&-I`a3GZGOeS*A={GpCfn(ch+HD!JL?oRWe99@4&`{==A0UpZO(zk+ozuB zY8O>$$Qa-Kr?E**pjr!oXqEQ$8w0HZi-Ux|Sn0O$#}u`R#)e=A=vEbGBcufjn1JCL z$p|A;3cqS>8HdI!vPbAt8$oGKwSIZ8xDleteW$wERwnIKtKZuQRT}3z)eAQGi&9(* zHuw>$uAOS>s0ADRn4_o;NkmO`t7h*gc}T?wItsxz@0U6Xm1G?itE2RvyrVD(U?pYR zS3`73qp=)yr+(IQ8L18npPxwB9n9pq_b=qWXS!v}m9oVF*oZG{#8<R7k12vley)YRP#z>L@az3;r64@{-)p=XH4Cy-PdV^aJL#VF`6Q6Tkc49CuTmAx$# zK=Aq^#7U~i#W9?aKI!g_dw0fq}-l`;01Nik0PEJ!5{hKFAlT z9MQ8C1bSq)t!|XxAW=1m6oL;>`Fm7Jo=FxUez%@Xd>Q(*RD|e~mzL=nRE|;E(InVI z3)`#FrUu3xraKdDF|RcshbC};ND6{>VZ|;eXct;2Eriu}u|L7WL(kxgAb3EFKp4WZ z#Wa^N(R_tn%SmDDxb7CAJEUi^)dCj`2NA0o7f9ac}xZyg|wY-~Dfwc4a9KK3%Au|yG_K&}E1K!r(kk$@2EBK6t=Jd6sRKC!?MwN2SO znM1?8Gp#JXIT=_MCmhs1glHUw2m+-WRWenL6k;Lvu~feScA{mBZ6Sy#Q|y(%G3{+- z;UnHm1_-F%$aJ`P)g~dD=B!F@Lx?6(8%$(aE1K7knGD8etMQ5ygJzcYd)lwKJAxwz z7a7vXkoo74AQttSSSu-NPJRRQnTE9_4oR^gWRdi&l(F2jQr5mU7HHRSsbY>?2VuF=5w2=lcUEa#i!WXTi&pxQf1M2B4rCx*rtkk>_TC1_uB*E9Js2zJsHKt`g`l++L54XnAKen4)X@^LEbi&sBPItLyk zhlYr%hSU!~1Zr5-s*xZZ1SEy>s>%2~NH%pyR39OP@={*)$YG;(RWS@& zQBdUIg#mT2{`PU{Dan53@^fb5;Ch=gQ$J@?Ctb9Ud?*FQX-&eMX=zY(i0(o-mF7&o zLkXsK>(QcNmQQ*BHFG9hK(Zmkt3Wz@hwN1lVn;)uer7l4l2(R{_*bYz(Rb05ncmK*Bf)l|}??6B2zC zTaY~2u|R~p$kWz#DcaBg1HY?cZF)Afb7u{ z^&*7_DaAj%wci`+vQ>u#S@Om*3Oec6M@lF5w9TNX>#RunM!!7*5Xz_|JAf*6(Qg7! zjMiT<7P8bFIgUYVze|mJgGrbJu#;Fed{Zh3@u?BhSv5oo^}rI)kYCiBR0x|RJwOvR zAFT|S%PTpK0z@Vplg*Jfkcx)Qb*52FadJruC@-|V=Rt{uS1*y0i&k0wn^nDk55mR5 zz>FgQ9(Gi>s32Z)Vp3FuuHzWWB#&(HKdO4s6p2hgBC1?~({k8!kb*N-)2xgbZJP^l*#_dzCo@Q)VP-cIj^K z)+d){#8rFfL&QHh@IV1Ipo28zV#KD5+Yu|bA-Kx!STRMXsS#rtN?3^iqKkP3?Hja@(h9NNFo_Ipj((d_7V(iZ9Vbx{fra8o7O6 zfuSugJFDE21R}ax*{Jn znTu95F~xa^BfV7&Bnq&_K*l_YfkfxbGg!E|wM#LuuNX)ae^~>yO!1+VigFZqMGPbm zT3%%$ufEpv7)S=6ydkpDa_Mso{#J;j=|TmXra|Md)4Tb~f!M!zJ;(?9h{btBM=qV= zEM)UCGFjsr0^cQ*C6Nl5%#VgeUD%Yz=!)b@5x9@WO!pUBi;hVn35_S3WLqmC8I4Rx zwgI%&nITz5`w)q$vGjurl98U5MpHa0mqwF3ss)lK_*Ede#WWDh?rZs#k^IV0^@wHx z%y)5`klk{zUp!fEWvh6Ew=mo<%CI3*gIcm`> z5g7`JSi?(py*BXNLwIAbx5doyH2k2wjCUroR(DdWbsSKZWKB=}EohxAG4W{<^5BI} zJ6ZheYy;|;BBf<-r5L85H z419y;yrc&}<`CKhO%wBkGfwQxn<>==VBiUIczMSbtA#xuTwmLKKldpWb}OioxL$UH zqGtwmlRyXtSYixq!AGA!KX8F)LffLWqL;sgBPM8wA1s&f(QA2b1c7NrE)>}jRfQuu ztg)+8O?S8+Z(}5^ zZkm>jn+gG|dOJxO^kl~%;M$?&0Y~q#a1tbj0`vWm02DRfG{gf7nz^HC;_@-06gb!u zO7s6jV$po;xss&<1So~uCXW_@Ox>!@AK(lW@HgKFfV}bxT{HG;0V`FP)dpbn0~eT- zTg|s$l-6;Nt;>bPX)IBF*_Z{vYz@|G{3$1gZ9pse5Mw+ z_bsAn47AiX#7U|N&B07I_tiEU zDiMQ?6;m8*Du`EY{bX(HmXf$Yv6GIn^sgvORujCR5_6EN3`$u(@H4B-L1+UntH04? zgwAAqfU)BR6Iwzc1fQEFbIQhsmCHzZL<_jB$qPw6L~3nYa+P)NGWzy>utu}dBqujT zT9Nv{8MD*03^CSt%R*Lc<%1FjV1_bVSbI{rn`-l%8k?)od59n+s?W5sYTy|uPpFWqo6rYiV195kikbf}lu67IBK;&xekLN{b z%L)ljUha>9k>?3iW<8H17xi3>#a6S)U7RjpPI$L~&{EtG!5H8qYJWmCn)*P~CneEL zT6|K;DtR*Q!hJv%h$(}%qII#xF-tZk560V)y%Ia3Z7A2$LCr$w^~+$G zwX8HYZYYf++Cg<)N8X^+T_Y`sBZM5c9a-jdD08aJd|$1g+%p850FB>6<{44wOWjA= zY;%L!P2J`5?s_Vv`^{{PS&3nGR$oVuH*Ri4=J< ztBa)4>(sKyY>h@SRT@P+nWdK5$V^R(%#;~28_4X*tllRx%f$q=#+aD)?vwcyb`5*7 zJq^lgRZ9iVRqXacDdcyWLNAtr>tP(?&~H*qK(5KwLJ0g?Q|j@W!5+i7YeJ9f)I*Qg zS%t<}>(sltIj&uwI5_M|WMRujID= z7k%}JvA(V=MmO}elzF+)^?hWH4ZXH5HM6zZnw_0<)mc+8jmhOHhCe z>h#EX``d@jG7H-!;7)v1K>|RA4OlA`FBiptg>0G^jQz+4jW^s)WMgS)(xK}9>z@zE z5R3E`Plr+_UR3H;zEsZRXH=}uO}AHAb^nS|-GlN`x8uInrtkyX%Th%!~Titm& zlh!j-6}&)Xlva#uvU8Bb?$;2tYdVp}FtNW`J($Gv=~}FURJni$G8QTIZ2|)0>;j1v z*iAym=4>Df!)_V971kKAn8n3_b$7-NZd^wVlCLVCPvd!R&w&?|qzwnE^|Te7;W9;E zYy~7w5Y1?0d9GBMy5y>4C~vK-SuC@8h2Us3{fnx&Ec z!&)tiOZWBw^$;*kl(-bTVn~n>!PYz7Kw0i{yAZ1jSLIct0M5!7ABW%OSdFDsN5S7%#MLo zfR={r7?E<3kGi+pF^%p`%B;uTvS$Tlj`;d+mc-b8wW$Tl~|VlzpIm^Bzle z51itc`ypFxE%~6j1qU&Y=M^Ha&3Dqb+BaVW6gJ2pUJI*Ok2vGyH$>373R%H)eJUg4eqDGY8*w8qCo7pD4Dq-hE!GjW?sb^j)BmJ zEsTSBYux>z86Btt+7Gyj3{NmvxuZfL+ngA9AynJl@~?nZ^`mqe#L}H&$N)Q(@>NS8 z%u7kb&a*C3&X;0*r5P|hcP?aO3mjx4sR+;EG_XaEp+duob`AUxBvyn#Q9M0r58 ztdrO%=d~x13@oCJhytOQn$H$I@7C(FnG^!>M=n8rm~%sGwQLMNgCxxT*~%I_Js>bd zPDd>Y)-LaI+AeNV607IwXrvZQl*xlip!p#1cwGCyx0eSVzX8Bc<-pg@4!mZgm4KfT z@a(M>R;GRq;KAz@6u`eL&)eB)X?P8fj2|eHCwk0q0oO7g5n-xEB@<~#bl=`o!IqGWWQpHgKX|pL+;e$-A z$R$~G&70Qlj_-s*_;h}!rAGs=z0Ts0JHU@`vLjR2!I-eOcP_r=DyjJ~*!O$lIi20R zp7Hk6N&d0twsxL;0gMkDaB(#g?=;_8l}%~xR<&6>vt4c?5DuYV4Qqv29U5Gnjfrz$ z8i9(*RguVmy+&Z87I+CuooggpWxfZRapl04F^y-QKz3F!G7SYN8MJ8{tqE=$GtC1e zY97#zWmsXXg|eWCvQL;zITxk0>Fys$(FtRiQvn6bu~=%2K|~*nL&vh!0A-7PgKQdE zBF@EhE-l(j3Q(;LLN=z|$?lPZ>W9cL&Cy^Cef^->rs{`K>krN=*N@N8~pAT^+1eO5P^Cp6_ComJN zi}E}Lnp!WKB3(4a5Gh(AX-%?rK^GgODH8Ky(K52-G_7}{06~$}mHi_V{Dto%11-zi_TF@MeFDLIP{$e%+6AVhPeNYA? z$}ni`4d=E++CGXHl*fq}D4{Jjih46iLE63u3b&FenM#kYh?gxw2C;=_H{iZo3rq|=nuk2Mi*zzrW)+OP5JzYnz& z#d(APIL?Mi)@uzG2_Qg{1w?0O=>-!RNQ9Vv@MrXiRr>?V2vF7n8D#EKs7K2e&i{v8 zAH@t9s?4jkTLna2MpRZk3vC72eAcRO`|34prokvA#)4GuDkK8mr zSxe$LZd4&T5aJh4%Tr59nzoxB5r?O zsC(W-)0o~V7RLQ3YJWqiG>RQ5^TCL`b-ejV?J2O^+Kb&+t%uf6BS>^N_cVu)JkNJ} zf)x<5<}O*&MC^#bKdxGgNU13+Ldm zV>+c~dC)Vx<%5VUgTNjV0Gw5qBbz9-tJvM9z&r=x5D3kRNa)w(b=;E_*f2xekacSU zs#Z1a16JpRmGkwg@O@`5%zO_HnZl$BiHIy@*QPn9fvz01exZzgTdT>p>);1KJdW)T za?}!9UqVm(S#X0S!yV@Ey_T=oZ|niPl_|!%S;mKk5{ei{5}h&dlQ8tw45RHU3|vRz z60S3=@vnmT&_n|9)s`W?@fAS%)ev797Ko3t#aE=ib}kYaLhr{AH|8{nbasDlh)x5d zA7g@vGAQ10%MUG&#(Y94mq5e4U1@plDCOLjwqRsv1oD@PP%F zc~;HfO`R1W}+Yo;&5`?!6sgwHaTP_Z#_86L*!c@rEvWs}S-W0xRaVsgfXP~U_rrZFW-JWKakxC%AwEYIdOdk<>4L6r-kYbLe?Zr_cAPez` z*!a1{Bh>~9m2W9vTU{7nCGBpq3BHU|FM6LAaH^?Ynt-3f+JC8jHFK%~HC|wI3P!nO z6DrmImf=9ofrk5n)+TweARrd3NIrPBuf!xnm{e3p06Yo!-&<}39|fL{T&hT%XyZ>& zW_iHyfoLeB_P0H7OR^6%fk`eGGTtSk?ASfzvXY)iReog+k`rwEUNPVh&DV`3Iz%(* z42uzal*2bF&>=`XWI)6wj7B83%*HlHcD@!18GRcsc(s8{uKQDuY_G={5pLSp(a>&g z*4tF*-umUmo^mzv;6_L?)W`D4>dWe8h&&XtC4`)NrI}cLY&Bg{-+PAY3#y?SbZ^u* zhvkHZhh`z#8tO%8^<-%E*1T2ssI1t+=1DBtG;OoC72Xt)EEBTdU$aH(eq=g-@Z8kp z2YR1i5^|ogpv|0GLP5;t;*one?^cqKZenunGr!Nce<8X{H(jhC>Kd_^WXP3n6Zf` z%Egf*R6tVqlpLN2QC^FI$~=PxO4rKFol&-Y6Ioa-#jL^FpBJuN)O@HG*Yk*Y)=F{S z4glx&2MIqyZ=K!8!XvDe6Jm{Q9Vff3WVB=>t4KLK*ahqE_7G;ge#F0?&nS`ys+dEX zD{fkgPQ`j@v}ef31u4}+kZQKV_F+5RwMRl057ZhtG?^>I%FIsF$8I9)QpGm}MrGhg z5k3Y3s;__6#P1Rv#Ml0b`Y%?`ETWW`X>Va-O{ne?JZYZ^xmPK)CtX>h*+3f{%xuIb zf#)}HkO9@(!=?&sU=28(xh80(c$oc0f=A{s6!-T10z=D9pa*PWk_i~-S!;8Gr@0{c z<@d&>!m~2x=dhM;fao8eYF5HcLaeO5R_}Uxyp~>n#w1mrdT!Zx=vR z`pB8?8WP%F1PLS{gAu65<}JxWx74X>ClVSY*NHd^NI(}VBSGsA2m~bfk)xOn1@6|& zE@*p5a-X?3)8)GX4Hv*?mYjy#ry-no8ZNU7qLvCYqUOv%$yXbjp|1+n@el$wRXzcYz%}sKKtf zbyvuw?RuMoOSr0%`mja5Up|~>SZtEDHRtB2cOTM7<|>;{2NKx~?UAcnkA%6cn2y;p?l^Fyl?V5{dZW3TTpFn)FOKlFazJ#pBqCQ)KC2xSFXT^bF) zSq;8rm^F5#(Wq)Pz`BW2Y6x>kl|?8#tNA1Ba!NJ9kul6|X8X+es?qvPJV2?nKBfA~ zWmlJ*49R1}s#q1tOaRrxrc&)Zrur=9EQr*x5mpUzX(cI{PKtoDnJ~U6YNb+t1e4}O z-Z(}?5ADH%)9ejAn0Z#TC51-w`wftu7+DEC)B~h`LH2LtR{Q>%3mqqP!|8DDO2;gs zfUu&InwE|nLfOSj<5wC zV4>+lBVvjl<89iTZHg?T<)al8GJ$2>=)1URr$|_$@3OWUk^^Im{1-7&;|UFvX$ML- zEO^U3+9}~?{PW5RcnD(hf6<&wY^dl=`%W24Xw$cRNj#~!nNlXHX+RMJ{K~W%uXP$J zB915kw(xjyVW)&Li^-~Q1g!o8NyS}l?piFAw)VCp^LKD|n@=J?8WnVs8ks!g7W5JTPjy{;dhKK-iQ(S{~BeW83OSG{zxCh%YLyMTb2oGXKAXp?;+TbXmqGxG*X@6O8F><)7ijjMSpyATc zkqzt0(C{e{><$j0617ZX7ickz1mLUvo_*RFh0%YkNW@5!C-!X2loMl4NE8*Ej;SEK zG&(AT_Q_$9WbhUBusS^wGakObe&hv8KJ*OUJWl(DJCvg$bUW_gi?KmZK!J&|bVp7h z{>k8JF3swlNfS*p!*J@T1D^sDj#G9r9DK-u3w5uF;%w4norq4S$YDlp!k?w;dPvX- zYs4w>T_;swBd0JvP#wphs4kg>iOb8H0GJ}(nqDWCz*C0vI-D!e5!@jbAcvbK4PrW$ zLktjt*r$Y2*h@r49tGwRjy=RkFGYU^8IBInhZxd_JM_H<#FFYdeuCLj3kNC#GA*bO zz19USUz#=@NFa~vU`0hFA*JaS=XqPtZIy!zMSUO^je5Fucd6n6sG9f-5~SV8@G5Vw z)Ed>Lnth;0OmrG%aDH(ynChW~FqYLqQDW#+gTGBCO9ee`X{unpqo^z>m%6(?ie$>e z38|eJISrq|>mg7<@*;G`G26tH;~XJ(yj;!+(26^3X&)7530g~gu$%^%X7#sygxXMK z=PK6RrN6_{?b2O41+V%GiY-8;ZcCa;x-~_T*q<6ewpr-FC^MZEPV&NFL%@>w0t(q7 zf)oN`Uxn-lkb!v*h~JQ!H7>ORx=iQ2Xm9@BxygCNL+7?_77l5yFCwf&Iw?Y8(aU#; zm1Uwd1Fb$Z>uHXx>A{5{dbIqENvNxSO+z?5W`L0gVOaEsYmL~=rR&0M7$Jv@YUgL6 zh)FlIJDYU9pD`OZc3;P9<9hqW+syUXaT=fSrGNzL5QzXA*DxWAx{RZ~rm9@OnOW_( zd0Q30aEI1c7y~L@cEcPEKN?-O$Q%woTHRH)pT;iqcrLlY)eCu`Q$udj#IE9jV)!B+ zM9;ib)tyfa5RVy!0ja-)t>~rQUAr~e#rw22yt5N=Yx3JXR&PzN*5^%~b$ZNd!9&vo+bxW1aTTlkYNiU-8)9A+$WYq%OF;qL9D2P*UJ+c1t2*XQ#Jf4I0!gwvai zY#!Q{()Umg7!I|qa_|1g*S^3dg>Co1Pj30ZEAx67&*9==a0wXG?uYL>{s3#6weFh> z-~4=<7bhfdxcG9duXbPgpR;~z`v$N!ep2)^$W4w{?9h-5YztH(=l5Q6&E;6FyuHG zyW9Tor~kxY^W*loJMHfI^7jwF`YFP_+TH(|4;_N#*SODq{I;KQddFF@CWupa8hD@P zA?APj(uey{fcx-@a377``(E>&J_+1{*yH)>9%BBdFMYVL_UQiYm9YIX_x*jJy9e3^=w01)?o03d={?0Dj|}tY zp7@)8c%@)I@xZ>`lW}K36$-sGS~1M`VZO%0yn7{>Z*ZS`=iBalmBD-?^zoxV>V4$K z98n{~{QrLG@H-gwHSRAy``)d2=@pm?5)SAUSrg4f;x14@6!eEVi{F@*A+d`nO0C%4qnFfAtcKrAokA4`6^z69KJ^0=C z9_8xUT#}C{LT~;0i8s7LaDU+Sul<7?^5QGN-DgLUNP+!6zDHumKfnKP7d>Uej??ZP zfAPc{e>ZPMwsN4w+4EM1;KQ z<~Mu+5%d)4<4=Bi@4Hjs`Tqa*j*k^=u>#BmMVJUFu-=DxB!2w-gWvhF7uWk@_u)66 zIq}pLgCBkSqxZ0yU*jG)@S}&GOjsB6@C!|jKltn$@5{N-{kK~`b@-`H>8st|h1mIP;G8jLwUqj{@_3T#v+yfA{r!-kI~F`-dm~@z$q4$^88f@B6TE;!i&J-Jc9i zGTmp$2o!Y4?giUW|Dnd0vUQ9F=A;}L7)a3KXVIy#ys|TnW2+R6U(cR#L^}}1vI~x2 zlI#$vKZ`Q1?P7X+u32ZYi4JSoOuksw7gEW!V}*5qcC4VhYsU(!0PR>oYj5#TC@l{h z`C1F1*aMslCt)pgtWv4ml(ILpi1q0WoB}s9FEfSKAnoFT6@pTNKEe2IdmR0WT*5;mb8=)&{)~(Nt-PXnOHkaPEKr)M?TjpkOTOgs= zd%S+j+{|tE+Iwv3mbu1l3k$?)#JBNH3A|73_4$;30q+#g8gtwCE-Wm_yPL=e`)^nR z`HW+QJ$$2bYD49IDXB3wcTwuFZM)_G+f+y^5OwcPFR^+ z4Vi``G5^t5Re55p)nI9C&K0vsiBZ;0_CKG8=xYJC|KCHTu@2{(|4KbXznS}h zvA96TSZ44)>edTr3&Q$}2E>v_bNzDm{4p7MUDMsIXC5u||8UtvFdE^UOLChLWEhz# zP<)bm!y!{~LjvK;zhzt@f+YwfxWRn@iA0C&7E$g7m!J(K`!e4xb5r6rwS&KvTZg0K zlx#nwezA>!-|Digo3I{@aE6}TP6!P@2jE!K9N^uK{zh5mfvINu>#8AY-WOX-h_d`j zTC>Ar2~|P%)@atyUYB$yGm~Z#c72;?1%VERFXvJOvZ#ABYu2Cw91jehdDWr`N&Z?M z@(3bw?0Q?P-W3OE*v<$htd(=)Au3%on|I?k1%Y7;R0v!ARLB(2g08~B@7rg1G$8^# za(JhqgP)eO{VkzI2TZVs9EnXA_#zbRtjJi~aH%8NLG@MNNFJ4>2rCM>7*DH4owE78 zF4YN0!n^E>n^09L{%(Vr`JMx&T{uG|hn(F(OCSe4Xz^ z?9?ji^lzF+L90>nUm0w)R?z;#G2s_ot;OQ1}zVG!-bipoDj^;!PFGli!a_g=R z;JiQ~JXXDIv{e-j7F*2c5cza_LGAefF9u8c5(9;TCDP!~bLd<+#?eVYm!W}Lxp2I$ zi+QOS;+rlmq_mN+Jq#v&{2h^WnzoIwAa=+{FmypG0fqG0_Hk93&5v^^$?~J2u2X|Q zt^l($ztce~gA(!98I=KM=u*w7%-s0{R3^i<5gTmVr!qgh@N(!Q?q)?h7>Cn&PXHOV zb{pfAG3H->srNEtY;ng>O?iw3xOkB0vYe6wEs`zB0wjYd*uaQf29vEoRB}NSByu4_ z3mn9>Ak23o?+Oy)L7Vw*nimJ+@m~c;B$8`CECLYs1h)7;sH@KvY0eeojpTtxwkjOW z9aVU@dlqQm*7g%NM|{s_i1({LQ^^rMUX+um0QEl)a$W4}2NnSfT`L~n3zWofE6Wcf zvR#z`p?Qr@q2|(ILyEb}n?Wk(0LFa)_umf8`RPbqx=&s1kP;n*Axl_m72x+G`>*)| zP+^%wsR9oU@!)}cVIdc{LZuhd%g--iFQS1CfqJ3pBX09F&-WS?QvA5#RkL4VV0PNf z+ppH1S@S`e`RQeyX+LV*Uu zxXJiMXkLzGAf-qF&YGnM3BYcmM|d=Mg$dNA%4NitznKWpl#4IUZFWm0NfWS=4-!a# zXJcU+P!m{%R}75Rx{%s#dnOxJ$HyRg}kqdZmc_=B=NB2vq422SUMZ{xaWm6gvNgfqO*bVFb%}(a%Uf(yx!(zk}t;N?3XpkC*&~htZcoY z3&OAc4L}l+P3Kxsvw2UB6csT}Jv&;!{^+V0B6g>0Rq$1ogz#dIg%YI%{J4TNhIAiI zJYdl?#!{ln<(r2)|K)MsJP|K9%Nk5FWaVP;gX*^+dMY40>k}-fn)r0QVQFfB94spxtT@0ZHLf*If8~;; z&AV!SJ+p5l5JW5g&0_3hEJf^3S_K#RkMgsjA9d#1*gX_oK7pxsNPv0w-vcb{+~MwE+|Kj#!-EH`sM~O3xm`E_ zhjiSM9VT`EMAo(N1R8bak~n%!WEY!87|~)z-#v7iE-LgR>nA-DD@j{Ri(C&|62UC} zq=zg?ms1qE?zSWX1QXW_S1A_XzG&?j@-0paC0qw@Fe>dmLjHs-X6uG z>1H1=`z&yM+(c!gtK(d`W<%EqYNOHG>t#9CmhNN+@ilzYU1VxhtCmPXj9#7rN|x&I zETS>B--2yRM8EQ`1_@A74AHoS<`At})CeSsHr1^^o{N1O{yH-qAEOhk)JFrrK6?znKuWvPVOu`Fr-j2zJf@`1h+TNJ`mYke3vS75Mtw?!BH z4mZz|&e|Zba-e42XROsE5SIli;nXd{CVeohhAB=paG~D{n+(CQPu6W8a!dG@wE|!R zt;8AURk5|KsLT{RQiX!?0YIZn=B29k6qc*dDMn+>7eoMuEP(oCYt?+iY&nDj7yIjM zJ?vzX#g}a5>YBIchC-U65|_^FZlHu9ED6e#O*=va|7x^G8#JXKj0L1okSgyYRf$CH z3J|H1y(*1G8*Lu%mv;`s?g|qHFnPdpcM6 z=6wOnmRqU9c%DBUb*L>|RNXaLYpg?9Gj`G;9j~QmM#ukmG{qix2IRxh4}QY zCmrXjSmtCmIwA4w?s1(qN!VMCKqHyuU^96kjm_F;reZpZo?d|9FTf6*wkN3Cjw)bOSfBC$7rBD9Z74z;NzWXBkapsooFQB`+ zRO8e!`U0lDVNW$KLe)hlbhu)Shyt$;ZjRzEw1!ZiBm9EHGTVO1gHutN-$=(st-jRU z?b;HD960PI*Yjp3_QJxN+z3FIxPy%@QI&e2Dd^byr~|Bi$ezPk1-21z z`Wr+$+i?^HP9L=G&K0-s{ep0GoC1;I^uc%qoLYsKck2UK)zx>}fCC-a4L#x#gs&EK z%VYTT9f0ML0;lyc{FvXQ+sE)5*6Hd>< ziug_`5K;5z^No6Mr~+b{a+o6grKjK81DO0S`$m76^?&l_Uv2$A{uii!d)YUQk1qCl zb%sI+KV)!%mgO*u4kBjZG2i}!n{D7eSdW_}18~KcgVq8AyRIC|?QX5K=JiT&*kC7` z)TRU;(hpGB2-`447~G*rl0|>B2{aoP0_O7L*ena>HyJ8;GTO1rqS(fvJ=5b9;8F)k z$8l|cp47z=6Ji2833pOy6!C}gaSAJ$ZFAZr+5IgO6KHHc^Mq!7T>|OL_@nv8`$zNH z>O{Jt3@twKf%AFC?FcTN&1_v__Y-oQ*8NpQsHkSX;6Y_V0pTtE zV+pn0BPKIQm-OeMts0hVEZ^EE7@{nurZM-(JE8pIygs=mSxwXAP75CBHcBRsu$hl> zvZ|RYWIq|80`oL!65+B;l<9Kea1wafH>^<$7um2hYilCbIjnwBhfV{AG#A^+zB<#0 z9+49E9BV9nf-mTatyD_)N_xW3MXKDsI&L`7jAR#l({X=M5;Qo3R$ajsP|KD=+ttuV zuk~Tfba2UG3ir`0TCD@WpvZIikjma7&3==0tUXS52iX?%%0|?b-)V`NT7XeV* z58PwrfqSr4-Yt6)aa|4Ejy+ipCA2X!7z1*QO$^d-J@$(j3o?cUu*~FI?$%&3SQK+d z)rYXKTtiwoW`6XF_yx>Q>cxZJPkL^I5<0V|%LofErRW%QNfl=m8GDXE6umVG3%_ z|E1CVP)5Ju4BBN3D7Dh1A1V;1f;`WipHOK|N3>KFPCrG{{&GD)y(#s8 z{`7m$RnPpPOJAnZ!q)%L}%&B-o&&-f^9<0jcH}KByUg z&I(@x*G8UWNC;f31ShUl4LW!f!EUqy8GvYcpx3W}&gYY(PY@v2{a#KsynBKWl3!a& zJ>SR#6!%fj`%EC7uPlS@{1}MHtOMZ~h~L0u59$)(N%Ajl@7vSEV8WZ0FSq^aVo$P6 zrt`stzG#iaynu*4X?|eP>7A?x;9e9cmO6B@4k>Nz>$A5koaXA7WDyrcx%x-@_XP#k zYB!Fy*8V3|!}ummH>T_0d{)d0Y~Y9nEvl)O0V0;ED?1vC%Jm(TaLux)cJ8}&NShX- zG(~x)Xb#!#H^30C(7@@#V8YvSe}M+Hgv))pS=9VvJ2GV){e`Xa0Zoy6M0YV^egu5& zp+;n~_D?`@9KA+BgJ+S`yOQO6CLT}vKZ`db*k{b2n>g>V zghBmMH(cc|Qn0(;#i=?W6f4g4T6ZE_T<<29VuA;%wB;pI^(=S2M{f1??wad#dwT_H zWJb08g!wOX*SnWS;wj@L*r#kx^TG;fR9Va~n@nkZLX}~cvQ`oa5n%|ALgYDCDFZZg zA}(vji%gb@XFIYz{uPj^36qAHF#9PjQkdOzt|T+*G>-*wy251=c2q0&n479}yN%+H z`6>p~iF_DYFye%1jNWI7#5XH{v#3hNrF)qs~SDZjh_eBTLxo-y-uvL=67BoLVFvy%ZL) z5oHX3t@-xr_b~Dj#KfN$a*|KEV*@Gn%7I9yP@h}n1+}ECr1X*H#q`|NizVmgDtng| z(?Le#jLX{={S^{4ZT@v7ZeeZ?LLZ7yZO{pr=g~lEV`;`eTePXJ&$Me5s-hrbhqnGbw zx#z#hV5=`t@g=$rNoRL9`G@+^f{D9a0YNCO33^r*fN0%Aty2A*4uB71Cn)F`sD`-7 ze&6Dyz?!#=l2H2?8M}5&fE-hZ8!4v+W@t)dk&V&FSS||3$btoi;}X~*j!b05B^ap9 z2BWq)^3#UfYf1@RJEV~yLRs&5a9gy>541~UR6ZU$y&`7)(~;WW(quk~Zw*SJD?^oO zZqfovORwhDIJ`wpoD%4XD^=}MXQBX9S^$Naxa<#MqLbT%CJ3jz-1G-PAX9lV@TX!u zs%cUmgHZcm3}5Mxxke{84A_99m}he8Gq+mo0FcOLMXCWvafMqzlAEJ3bDqbVCC8Z- zp?DQBG3wrGiV)xE)iA_{N2Ve>0*=<8CU^Ua`E^q|?&eg6vk#~J2^-N;^%D`Tn!{&v zgdQfqsnQ1ukNp` z$`x|34W8=&k#oI>e?3-69=ifs?E|#IweQ_P1RTo&q0!Ls5O{yNOU2n(YGOsP57Dvq z*4V~$DrrBZxI4XR%4Ma=sJ~H?mbR)nw0R0(uy5aHsuGk&S^mf$1&p{eA|Hp%nvMH| zBWhP52(oGh;p>QVEh^SqUlHH0jg7n+oo?(G0*sKaUCRPbUA%bmE5^&>P29HwVxj1v zfiW|!&lC=p){iBb#2Wa@rAvu|j+azEC@A$%g4~KAC{a+g&k{%mPv4>;bxtuOEdBem zWJh=nHBA-?VPCV#fO;#EpEJvkp(6hDQ(1CtnA83+GP;m6 zS78lUZai+wXw~ZBEjHH7ljXe90a;;``xJy^-KwW@rZGfH-Ti%_(1G%jNqxq#GsH5p zt%wmyY$V73vdps#Yk<`!VF~F-^+KqX0WvF5AD6Y}kK?|&gx$HB^Gz;vgu@|z2I7Hqf-Ft)T1@4B1~m&+tIqfo1$tZSS9`#`tj&}}<3HS&#OW#@9ze7}}0?;|Y1 z`31F_IQsjw`mxN-`{N|(Z%XX%x3OB)XL@b5rH;yEEFi(&F&EHw7W*UYQ5?{xrK;jP zT4l-ed$R$7d$E+q|}Tjb=mBv6lEbS67=4eRmKi_BNv&nro$3&!0+ z_H-XM{2-lJpz204>qw&I{V@zTbDFj|JS*W`E!lBeOr)RC%LyDES{xk1havasBGGpb zkg8J0CoF#aCZdx((IEZbG(7X)<)_AqLzKa} z-r!joFee-a%orq(U&+l4yojjypk%d5C;6YX)mt?tDtIuSpr;$tLoo+-5s*XD(WE=& z)YTg<*EfO>xISCYV`#(_2OTWi3v4jdG*~CB1A55yMFY#-kKah0d))j-*1UT(Achmt zP={d!aZln8V1ppYjoCRW&LV@bb%!=|ZB_(+QGq7BbSBwh`E1ECkpmo&>Z|d6j%W?NJIMGR+5-*oew4lZ zZzzzNbXae2tPATWJr5ERbx8uxbx z3Ws*Mn(Sn>OS@2@_U994~Vd`>pzgjp@jHHjg349#qQK+#D-!DA@LR=v9pTBK6#BJ zmFjH(L>(EL@TpAu1sqZ9oe2rZxPx{RP(*`vZHEL=hBZs|V*SoyAJT7ZeOLntc!zib za&k}*_dX#=7&;AYfMm6YP$)(#|V3P{-LX!kD}B=p}PS+xu# zV7UazYWINQM1r9Y2@rsjWZy9UzHNEo&=USa-aF{o0Ipwac>_*D4@2HZhx4BLNREyE zxcI#3-NShww!Gr;;k?Q5;k<7#7y>p1VR&db?*}dKa`kd_;ZWZ`Zh0jHv!^cV;|J#jE~!}V*ghwV=Y^JgO`qi3LStnn0l9`-aVAMXsO4CQt!9a zlS8SeEcKzG)Q2tgk)hNxmip*W>f@H$O9mm6WaC7haw;}w8HTb3t93*ST80wjRE3Xa zx8SjpFhkR8q&=Bdff12ssdC*T;J;)`zRZR%o0fcecKEV=$(KbF^9YpV_A=1Y{rNYJ zsT+pkRQ~OurQeu_J&2Di{l>{K{u?vOaGiz^@Pd}Y!Wa}0(9h}3y_`tk$F}a1HR+1A z3ChuQX#ySMLL_d<{1nOdms#>n9w8`pJe!=$_8!5oXOcH+?>CBTA~5}gsZ(DA`Mt(I zQFe<4W*j4YkvRfKME5;Wf4K~LT3AimY~04+Oio`rGtjslAdLGas5nfleh!Y?r&K$$ zk3s+utuicZ_sT>>uNCNi!OPv)F860>5Vh;)6#ydg(3G9}?BqfKCOi0rx@LMv+J2p? z^)3Z!oR-GAVtoYak(GZFs*qd2y3?{FPtU~*uQ=lVO{sacKA|~|I-l>uVp%m`cgHf> zXt2WmU4>1s--P_nCB9G39nib*wtm-q`ws;r6W^WTM&NJ=J0`ic2y!ODgyCYWafH}J zG>kXUP4wc6JH*t?)%SMSVk<=DFazS+%a$+Vf!`kP@)JNzu8hX)eEU6nfF|@VM{0r6 z#Qjez0THnM&)N+E&L(`VdnWbX>S)U6h2t5I(H|+!5|H!_!qE=T!}bfhu_GZt?A%Sa z&dDUacmJWq-c7e`W3D&*E@H}b@FPNp*edE;q%?0FflUS78fiu_s2paLQCM4-xODVh zKjR~~m!n*N0hY4xclj(3xABSTcQ)S4C5V0F6MBQ|a};t}zW7-RfnWuMB-zICnbc!dZe<}$ninDO6&34N zp2YouMEzFF$gf$X5a(~6SXk@{0-AOwq`>AuPT9nrb5F##$oE4pwSOM%8Y+_@YXKiB zNh4o(xzh(!G6YYT)-}} z9{!6)VsTNcR3Zr_CRM_U_|L4P^f?Wm*V^aO_f+dF{@gUrw5yyIa#AfJjyW*ZVPJgC zRbO*$g@$YXbA6?T>-~o3&c7|2ywNw0B=A-dd{krIRnBhyUIiiqPju~dcg}71ncXj67_5u z%GzuUFfT^Fe8=!Oo#PSAtUVHz`e=uV%RL zE~!9HL3GH!TF(Y#YWwx-2)XE=!Nq<6I+e=ML9!l)kX~M`24{N5z_DLXzU?i2>xFNR z(Wt(i(UaQQ_?|wZcgmd(-%gdjoeXJ7N*0oVrlcp0)GLJ{)07!yo~&1^ z)s&1<15J&O+7!pZt0}X+JXuq#)Raus15GKCW29b<`=-o%^khwOS39Q6;iej+Hib1< zy)x_5lQqQzVSd!XUMUn|q+W60gPQv6C}hEX?lFDB2f_acjXOorqIcN|Mrw_~0JZk{ zQCedLVvRD?l638nTH;VqwPZ%mCqtnH(8!}QKp2%#n}TK4l-Zo0tSOTh(s>7(lHFsZ zUYS`ua%P@=vZj!_2oK+s`|GIv0gV=t&Ne?F)Q=@yMpHf+uQbcT`CpU=KF30#H40zx zPHL&n64$V7>b+ zb^lPR=5jz9NTxmkKZv8a)0g+%qDlAUhHYVq%Kf`5ZZ4A49tE6vheW}`Z%Heti)t_|0=56 z)?`uXx*qaw#RI#)jokP2k}pKu1E-Yy!^l1MwQ};iE%__M$$P)9Ot$3WmaP9cLYROp zjJ_az<=i_`oWPxNqNv^rDF}GP2~>g`Sp%5vb_u4z3FKbIP4ulq$(_Z zSIYLfZuu7~xH#V;$;@L&G+Qb2t%?-_U|UIZ?=T;4x-qL@^OFmfn26t%zP8iN;Dt;b z4rGNFyv&X^C4+H`t%#d%)^HSONi!U27!G-!)7?IFJuQue@AF(Q{*UUho!iJTfW2ZE z2p%dAL!1votYN5#{%siOy@o-#%fnCvtTeA%jtD_GJP|pOk6AnTMc6(qxC z9Vo8krcv{3Q}AvG-TfLl&X|METPebMfCnn!JQowljB-NXBz?`PfH8gx(3+d2Bo0%D zd!;L%x0%Ay;AH8B%aN*l$Zd(GQdKkv|HYg@17Bvs7jps)d|9uNEVjRyqh0&&fb250 z;nsUo1y~ZPL6mxvZLY>>@uJ|7q4u==)t9bzaQp1jUG3wf9effrM@>Vf<<3~TgREn7 z(Z9FAl$y~u5nrP3F(AQuT%qV#iDYl-mVX(2mlJNK97S|f6gv}349T*PF-;s_G_6$;Ll1PRn!lkq#ojhWJYCvNz}6c3)#!;Wakv5`NEw8netce#ZVch zHoMZv>G)8cfn_m8ZQ=q1vHcFqcZ)R>*=X+M7ze*trZ*stU;$}Qyy1~Di73LG=~}!K z&IK)-K@7nP7Rw+M93f1RSir2x;UOk7qi#cIKa&H{u?U9CW?4R%f5K-Ki_^MJO=7t0 z$Rx1GVaIlEv{nG+vMLEJ!Mvrm>|$-}Lly-=A6nq#9@Jl;iU@C(a5PN_a6pYBKO$~Q zw2R6HwKGX*>z1*Q5Cm-a$N;eYF=3IO8*V(7+=C{1E(yAw^%x~qu~z-SUC7C<^U^4x zh-hFKlQ*fhsQGv`)rGU=jUH((uBB60*d{b#WN2hy^p=nOFG2)5)FP*_^3xBJ=-L`J z3enL$_?67C$#IO@-wC0Y;-%z!5jpu-sil;Zv{?Lzj+o_9bF1ETOn3uAK&E325W}s} zk#U7>Hke##HKx_F$yKYs00)C81FQdD7+9eWfywFr`kaQ(eFJOwPL#S$I5Mz8Xfm)` zIfW&MrmMqE`Wq zofIsrr4&wd7Jr1gu&^3nV-od@CxSPOr=3)8N{=o=(A+z~8A4BU!=8c0)@bK~F z6FRf2A{kfRmSWM!|Dt6|fyX2atxM&+MYlX;S$(dGl~|I%=gjIyCTq276xWlQj+oQ3 z&!s$Y+E;mi&PsndDX*7SA+rXH^XA`*Osn4fD+miQjqDgIn)Qo%tMf`lClxIU@~d-= z7il}CwCa?@u!w24b+ZB(;+8R^%*%lMoqHD%aKXL|++$7mUc>!NfqO)oVbFv^8I2P) zdOIf~1MNkY5}t8g2*rVN3=~;qm$YC8Z$!7|CFUS*GdDY}CNmb-te=Jiwy^6zYRY2g z&m5DsCT4{Hk**GK%VNnEXcED#JYf>h_!+Q@%AIC_O*R|$gKU;AW>Faxw`D#E z#J)WBh1Ba4D9ZFyC{+iF8L&%2iJ}ln6fwz=qohqnkdZGl97+^<9hX{%Ly2_FW+=2I zlqhl`lqizla=5J!O2m&cI3-JM$QBV%!lP#iHIvHsgrCG+NYd<3%oR zIxJIy&5hCqe4r^YE0naeB}6sa43S4t`e0KD*S=dbjH4!lJfhN?-wmNbZ`aTg^!Aum zd72IIeh{W+X$y!@OH=SPQEC;xFxr}&=AB<)PxpCN+$TU4OGtMJ2NYU8y0&gmB!sx) zPS~k16?cj!*8n(fn(J_7k=u*KiLAO>mVRpBxfQtLZf8d&BF;U=^~%qlCq}g57D!qZ zl4j<)gRkO_lC(xo&bNeL+({~5%ky@Auj6?a&vSU*&2xt5ex6U`xk$cqc`oq#Jf4s7 z8!x&09?z%qJk9eNJk<|czkt^h^dsY`Q0PwhBw)MY9b)WUDB+v(Z}_j+c6T@ra5lN7 zn@V?KS*=)aj(#{L zy0%YaM3oWzB{jt!3Aukp>W|LE~&@jt*sz0;I!?DmYo1BS- zrrG4txI<&JNiWgxVyH{NiEirE5dY7_2(i6eFNflV&PCAV2L9oRMr5q&tR6&07H1p$ zuGxCFfnCk|sx)+Br`@uYWLng|XWk?Yg-@hqI*(b)jk6ALv7f+XY+wOpr*A25RyA`8 zILqeUI7O=M4}%M+NH@!32$)SWW*=&!3azi=&Ia*K3LG@fxNhKE)gOj3&|n0SZGiSR z(14jrH`snt03l*HTdi%ptNG00O|`Aw*^#QZ+RP#TEBh^S@Z-!5Eg*73OMz5lu8vJy z!EbHrrU_Z(I^)#d7I?(&Yuaop&30F)uQvGFe@~Dwg5o(b7Gz^p!lO-a9Mbb&VPg#G z2YAXPvoECY)o-E|j)o_`S^K?T-?{tA7_Rx*ovO>i!t-K9#$W7% zA1*e-4*<(f=A+3f*~RAI<+3VybdhwMv|`99ToPcDMR>bbIJ5$V$i8|2)Ns3-2xGi4 z{V_~7oQG^#XlyE4z%tPY%R2HMjyo4OfvP&+U9E{U%2w;_3vfo$fpjd`O?Cuy0M_7O zHsN>%(IEsNO@Xrt(K^~HQZ_2WW2V0>}Ecq(MScA z*`(pkCK|tNjWivdOUtNGM*p>ZZG093P!n5dOw{Y$Ct}meNkKZYC?X1D(B`1pK!8yZ z$O0?m@0_+^p)m*wfYJI!a-TB1T|;FwX)&M*B#QEQ`x4YbjzlP!++Lauwq)HPaXJ}Q zT)@E2McGAJc3$TqUe@bnJuB!7+}-Ie#09lH!!;1rjZU1>OLrOTS#6&2ljmuBY3~)^ zQk|@xK2U(=?xS&t=^_TSvq1}B#M5djOs%35#EWtow~jmU5qAkgMXl{W$;ar0W;p|y zS7qicu4WuC>PLy8(;*ApRTS{F`5@IL=sVptBy}$ibzU6mGypX&FX>$D2kWIwU7~=C z-Cnc!E%s|xrDm-WCsAo8u!vYWWT%Hw$#aESBI0cBIX1@4hdzVXw%Dm){RnN^ypVW( zi@vfyYub0wYNwjTDs_ihz$lX0g6VZOIbOBNQu9jUHkHchBc=L#aFjqP)&o{5%y*Qc zSAXi!>0nzDPWKahz5AFl13;nL!~-J%M|BcBL*eZFK7=A6mMtlc6IrMKi)b3IgXFVk zA)AbjG56rxDTVjjvSy?DxzUgTi5#^sKwb`~-HVZ5eZ=r8P@45|}Auh0P#u+aqp3dAA zqy);KX?xvYqjs73AHiN_uvO=#A;@8S_L{c(648W&Eq2P*VrHmJ z-T8I$(*GNHa34L^l5DfI>#8oZ-^Js?t;x%HY}%UqHjigYbFOC3+RAO9Orl$pm+;uA zYvx&TZcSdu?BGAyjlfYIx{>sg4OjzsbG}InJ+t+9SX%S#v_AZTiH}UEnCNB@I?-; zEI+UGtDAA)T3(lStX$Ck2m}{#=`7n5fWoslwpI>M$nzDvmCH34LJ9_WJ^>=;l*~qr zMV3+7`Xk+SK(O9+YMkSVp>1)b**VM(h3erX^VNdisR2IVa2RzRier&o6Ti7kU(PYp z7O}P7H>M~lbyNE$r?PcHabc&1ai7=SrP=hiYNWut2KbojaqkHXX?)8@8?TWdAm4gf zM52tp%jZKg#1q0lh4PSpOLw*MuSV5bw%+kj?`7Q$%C{lguzWtuEEvK0cY&`rgp$Wh z)yvj`=BCqB0cdcHOfbM#^KG!e5wFGjE zI&1lNu4>(wHo6Nd&0aryk`255JgGYVB5LR+r&wdC_~-q2lTGFaEVF%z*xa=H9O zxTM({&imxt(E02Fwyn%(-T5q=&(59C*3RqTo%GJmdaE==YU*5@^_`2T)A)OR@NF(n zKy=>rtfai);k*d0)FyOTG`r}s6^IVtMQ6+q&;~mMU>FFqzhOnhMff-$vn-zv-XmTV zf<#Go_WY+WhZMPQH3uUAL7SZ}3hcFx4d zwSrLu6=cA*!h(G1UxcPPeZZ}pExttIYyn<%Leak*&t^NK;+IA zWp?As%~wOH*nQXtn-N}Uv_ zvXs&wMT=TnP%6saN{-2uf=I{`?Ao@r%%pT);|V%Nm6Qa_!`UHnIWJJTP~$K1;p~N5 zK}HHF2M!6O4l9L#c5jz3pSWlXX%?c=#bdcgBa}zgEtP-0#aH?Axm%-DK9S4=re&hq z>DNU^v?w3^i=u(|LQb;z$uu~3P~5%A?xTC4c&%3@B(U%^zGmo`h)DA&WqAh}UqvZb zWz1kOg)tQsH>i*29$W?&4K$jYfxo61J?0n>pg{YYF-Ts)`1qLbN`R(iD zJ}90z3Msf1Jq}4O)6640gYuM~);qfHDLu(^vh?jl__oNnBf>6?wD?j;!2TFWF7j*i zO6~%_U&1Q{^B?!($;Lve8eeQ&O$H)z_^na!@c@2wd^~?D%CwLCFDq!_AX`L!an74i zAX8|U$p8_~+$yga^CQvo)s(>s$yxPEORru&Q6Gw$PsJZ+X#;5UHrP8rSN-2UC4UzzjL;Op-)WYGUKLF>Mr~@! zH}yxOG-c5eqIXeYfx!BxP1*K?s{6<&O%eQ^W^y;EsiIf4QJZ39Btw2W%2+W=^f{TZ z4o}|MMN+g2?)@ckvZRLCJalY;ldr&bY)T1huTlGH!QfT5FbYadD<2Onza435V!1ME zQx@W0?T5Hm-OA*THlAkP&{Q#cvgVFN{fSR-uLwwCI-n^TQi`~9b59J*o~JMk zB46ZA_cHHaCwF7zVx3J>Xv(ry4|%$+IhF_kj686hS|qxMrwP#TE1D=EuXFw6b}p7A z|F$+fiUgbQ_5-WtxV?HZ$My8o6pFX=G5W1Dbk69>w@360-%j(c*r&Udzp^bk5Xv9x zmrrizU32PTrD3X)wr}MZsqCme4sn1c6R$#lWT)Eu&U000P^iHicPL z6VFFRX=<&SlJ{Lr6#{u`)TYLLQ~$U`N-i^2*n`tdJTTCdj(r)4ELN2L%QVGqz7$KR zZ>k`RiBX#hWA&G#^orelX(nHsdUbm*%xJAqn+giut)q;UDRhdUP*b1CiGAdGI`Gv` zM(LHYu!1(!R55vutfmH);LIpZnL?*HkpZ$8SxpUE)`3wFXbPRhyOfE2WHmML)dQpS z%1+o}2HBg;B?QbTI}}iK>NFw^Ggs99q(+bV+;Jr338i*1r{1{Dzbo;i66HBVr(nKk za}&4xMUS&l2irbjIAl5fNwR1WIi+8x@?SPx?qxwnNR~?G!8|8(7m=pZyYuN({*+_- z!Skq|d_0tY)LeNmeB2*C?#(|kN%!>5B>fo68WlXFCoG@|{1LtL?R5Bds`Tw7?{cd= zBGUr?p3`QmU?GcL!WOcc|KOkzG!!g@-s?a?oBwPn%bdq=&35@xR$)dnY-y4Mzm`hFjD);SI)iYZ_YXEN8n(RjrU{I2ydJ-zOH~jAD=?5u! zOz~kuicnuAvB-y&l%Neul^`24zxvNMctvQ#a*7bb}^c8r?KizDX3PS*}jd*U<9@M$D9qX z8Mig6hr*~HERE`Z;=BLZNX{aDS0o`VmRHoHld@gNZUd#mmrpd8*o9bMorPea;k*s6 zIU61R61C^$h{ojm3RWQ&^EuJb{gPoaK~EOV$b%!vb4M8#me)q@{QLDo}>A2ctu#Gn7}R;DY+e3 z;(0kVTNqfr<{evR&CB6MzgP=X;(j>mSd}Yrcpj~ax2D^lwi%jPbh{=|KHMSi^Y&eu zSQH1l-G^ntXJ!UIR&ANiq?M(t0N?2&0im3l18qP|R7M?#V6i&wg@R1cD~ky;ugH5g zptg-nU7@L;jnb5vR}2-y&5cZ9ftY_hN^=qc7VR^-T`DXXzCTL!<_pj1j2niR*jCK^ z{fkht%*e!3Jg-|7IfY3VC4{s*w1^HaB%TT%w_wUndofU9W~CJK3%x0L&sUKbmbf=E zT=4s-3SKN3qtt^w26^2-hNHt~lfs2~pcKEQ+_y8U5D!*LwMwKm5a8VChlJ?&f@R)Y z&O9oOhoO4=y@gl{cD-fRc5FoHo5475b;(dky$c=H%V}l@f~bjq&Er?}TXrR)7%T02 zgkimZ&r;417wcLf>V;I^!F=(&>XR=;J3B4n%DuXDep98lzDsZQCZz-pCjMVY3Xz&ZQq-B`B6)GOr^sv zV&&*rmluY*yw6hi52fC2sfQ}<&*XJ#y#V0|jrZrLsF85kl8+7*zspkZuC$Nm#kCe8 zj*$3VH=B=w;~4k$eac}Yiy$V;v1JB%o? z!g9EJhs`Ob-f_i{F8>aj6lAaR2S-k#bC_B=nN7_T%Wv0V5v)1s<35Oso9|j237uf2 z(U~&mIV)-`Q~VB_6xdzXB9M#+S64wx*5o7`6{HKqgvsgn0?uiaiqy!)bsb?N0~StP zB$Qlma*>(-hnQxzmMc!bqT)XKk!>w0Cm~mM0t8yL9r@4#OvibIQ1ZbqF(}35 z_Vm|ZtA#+gG`h$D0$c0Dr6L3ku^Gg-pdRs-b$vp&a`^1y2It~VkQIw`|Y3HVKf+fG7? z#r*TikQ?nVx=FX9Z91HT@Ita7M%b;w_I(kEoflsTcW5h-TV~}Ctob{%>voasb)6ce zXwgSYD2*ci4s9tcHGjD*dqwPWS!L#KiGj>1H%(s0_tm>yuXlzp5UY~DqUFMtJ2OIz z=nGZ-r+FwAFl#Q;)LJ8c2@(n2M3O;{I+J8DH6hg?%J<@MIEbCu0g$?-!?+^_0=Cc*YGXJB z7Ne*-dtSOJY}0KlcE{Wfwzd%m3O@a%*mSP$Ue(Vrp68hIIrz#Arz-F2*9yhsLRkmm zZs^z8z^|J9s!380W6Y9-GlR;0finOR&UCj4^?@_4XaZ+Yw{X_*IBN)JA_Bvih0hG( zY{CY0ATi-eHH0IW%O~b+@ydMrb2cv``Oy+J=n7qB|GmU?)txyY(xL74Ux*oPEvOw>mM?>( zQ+6ZJQ?j=RlOcl0j%`T%@didEeA>i7a6%8aPkA0mH*&IiU1;YI5ip234s5_?iMT2> z80h_96H7x$FBg~`t^H~7bDm3qQ3$pO6lsL%@TJjq9tO8=(Ma7|od=)lbnH!3CV1N? z)MXr>guwv0-aloa*6o=vG?Wyc2#x0?;g%n=bWlKm4uLx0K1M6 z5+F$>sf-L}M?gRX6mZt0lAI)!p(?2%5Je~;C@40d*q3(b#%>g}rNzEp+X0(&i-?MX zHqNwQH+K78+e)|E-S0Z^KHuNk`<#6$6)diJ-yin{PVH%pzx7+cY5mr3{Y%a-rhK*) z?nCpIWRPg~0i`1jQ5WGvchoJ=v$F;dNu5TZ4M4iO{p>pp+qI?w0k5HVN^`{VT^7TsS#R;gbz2-vHo zBIWd|pgu)>S`^IE`8kSNL}zBTwq!ulsrjHfP^Z^ENkDeZ9H0e9)swo}XEhi^tZB#~ zEo`UAG{%VH%TVB3+`PCo&z5Q0FVA2ALl{4|;fsCRc9SWB?b&MlLTlxZ-F7giFfnsn zE`3B=N!1(98cIv!P$qqAPCsh;Rr+lrJnS21I;Az;Y+n;C$BVDGN89q>R@1HSJ=1Vf zX>^Vikz}(P(VBf#M)jPaG`U6JW1vdawY9<>R=rGnHG2Z;l+KV zRop$UxciNXc=27C;#xWxK*fHU=wx1eM{Dfva%1OoGcUfqZR`^5jG^}qJu4TGC5(?V z%|~~~a~E;t3}(&4W{4$Xh`ME{B*c=KcQ(3G)QqmQ00(qm(h*T{(66FkWsozUN|lMc zd1vib&1XoV;#EQllXc8lb>Ip@)bmq?Skf1iN-j7KiwQ*{JJwLH1Wc>5W+$=*b*d7~ zg!*%LQldPGtvsrBbJ_@_k(~wFI4(*eQU!Nn3!Dq8#~so!E%fXJ1(S0Y=#lzN@i19~ z1fr`EJg4V6b%`I$92z(&l!uy|3AC}*kuf4YtcQ*(lg^A$5QzEu10p zxbb@I*Pk_+bWqxb!I`ZWmC7Fl)bczP4#Sv)A2VqW_+fkM0gBwy+e2_2h95JU_%SoV z4`e-!K@&e_O~MbrRBf@iT(BMnhP_5ud;zXh6>&_e5&IyBNkm9?ghgn{O4 z`CY-9Q3=e%-AwuB%T<3CyrxE*tE6?+|62zUD7;qP^$8x=k>v3G~;d(q* zSY2+n9aPHsRrU&qEenNW2KVLB^I0YbKl2f{ zD6*4QJ}veZkti9>G?r3x5RvB7LBxT=cbGffzjy#7yFb8e9@zY`0(T5biB@R)hwwdF z?D(XwisB!MT6~;)wWfKV!N;*Vx@9|ipRl%kb)NVZ#U8eQ1JlmDO0?omSp>8HF%mJ` zH6=|<<5(nE_crawE3zAX4FD~+0(7&@Mz*k9veeqaRCs@lYf*KpC&Fg6MB7` zd19d>uJeARNr4!kImqm3KS|>;eY{qTU={IwY$icGR}tfw!;Cp2qKRZ?e<^ZkUgd(^~UO!uYg^QrS_9 zd#6*45hWsJx2h>lw;EzBh$wx1I@K6aBDQv`8kuvZ)tecvnx9Ok8Y4=a1lg(vrZBx~ zY`xfve>k0Lj3{A1YgLn*ZZ+n{>c#J$PBli9dZ^}JN!SW67EZSsTO{=2>;85cmV~JiYd54PV)|G1QZ(nBVlVf4PvdubGH9U5&PAR_l`F0z z3jbBt3G%=G<$wP4@%x^>@``KQf|x7Pzm4=-Y{IB*7O9;4(Yk#u-2NHyUYXz|d9I1h za6!wXwQ0yPIo`NX{hS#9>H~z;+47qUpr@tEnI%($&4DgcU2ngZsa9|B-+Zm&u%pfO zo>qxYN7JaE?i$p)9K~PKH`7;V)gw|XKqZfg*pRK(imms{6yCesru)w5)H}7my?%!5 z%K2zr)E{5IbDtTA>=km5B1J4m7v8ms8+*RQB<4#DH2n@9dE&Q6t4yE<7||Mcw|8f> z*4gZ()kk;jO|fi(DZn_uE^EeYH(Zf?s~4zNX=79o3(mm zB;^2VuK!Ys-jbLnAMmEA+U<1-m7H~jWw5j!Nz9@vNuY%cMSt#8Z5MrDYE_#?W+^&7 z%gD$%PinT%W*KPH)TXB`>e+4>FaGdfH>DP~%*vGbBke@7iQd$vA$j?Tb9Y+q*Jvje$*v5}U^|_QUB=Vx-G_6lIZ6 zdk?2YiOtaq3B5IBM>ZR<_b^Y?fQ*FRIo)cANhb;Y?&(y+zQa7h_cGN~r&~=z@ZU2X zps@jl$a&dnrad;1>&@Gz(;Ix}^K7oo^rk%B-VlUOKzqk@*cW>Z^K7imRMRotYLc<} z!gPSf&Wr!uT#`kI-OO|7?rWozF$R}#TUs5Q&xMU(XSP0^#x0wN`rQX?*r{T)z?HG1 z^=1=qG6v{C{ISXFJUtvqKQil+(ogvo7t&0#^P zEQihV*P{4qN2!QfC8o4M>QIx*PJ6D}PD3yL=N3=Gk|QqrN%sb7-sG}2SC?d~nf6>w zxa_}7ry859i?h{Cd#)x{s7I$$4WK=268*jeO}M$uoe4imr$Tr+w+NbhkA#O3l#Yn| zYr_oIr})0sSqRo1z9%wYoi@I=u${K@@LVt5$lY1RPPKGHBU{*>#dUlfaV8L&vv!sx zuhW*j5;N${a>p}QCmj?lJipex$>OMXEgnp~~ z^^j*mD2u2MC7aMwA@sHYO+Nv1#<0Y$KH~0XM|j%$f^A#m6x`{M7}FO{0$<;&6`E(I zDScYibCKa40C(7 zO?tPr^={g5z|B~Kb+UL~wRH$dJWJT!!(L{6N8J&Ut4>F5o1sOtz25csQxo6RG+RP_eF#L*q zO`Q~D+w*Zea&NLyjA1|Lw6vThrj7l{g5l?;Q;lIi;dfiQ$FpTVUz|=g&t$0LtdP9y zQ9rg#&9iE67Po~A#|sie75f?UoFgKcXhFM?>gT>rd;HxN1)nXCV!Gfp)M6NVtU2B@ zEAbBJjaWm=?VT4)KRi!c*{02B5`UqarbEjRjHtzyFqp*CvRx%O`T6OXVV)hR;-~zb z3uJ=_tt+o;IfJrO)KA`X0^82WjFIw*)b`wGf9l=zPA2E5f@fcJzXuf4eGshRX-p4u zwa23m&)Jrz`c=;F__t-_v>Jv=MYbN3LsOv(a`yU?OU%4Qib=x+QSQ$dRwOhfmcDWX)$Y)w54*=7*PLK3_*ZvdEE| zIb$oZZpE~aoOoS0?8NK5mX7n+l2O5gbrL<&nU9iLXOG>^xR?EwXd)Ok1d?ETWbHGlblms25~8(BLqvITxyau-fdHBDR&J141?gS7bmwvEhUK781VhyrgLa2cP*gVDcu-K=jcX$@a54GMkPg(b3iz z1NKG5WRE6q@$6@ls=mwpTqjQ9Hp){~Xg~=*M{E0;J(_%)FG$>t<93OIQMHu1D2R9p z-Oy`~W=W^n+2l<1G24Bq9#PfdT}e6v{Mc&B>0Z`yzxL%+AERkNhpH*lw#w5|`qe@P z+gYo&>oqOsLU)hQ?A(!>&8SRnHdBhSYU~1TQkqJ0!=|7$<#x{?>R8Rj5U@tp;Wop9gxI;#P4emfmc!3Ay~m(z(*v#=Pb3<2 zrOqe|;s@o|6?fT&4)CH!80gub%KyyyRc*Kzt`dTQXd1RfSh(!|b6?mP$xOm_q{C*g zE$WOv$en!u`Lqkye+tOe+3AVjKS}UJ?ClDzh^RB-;7o!IF7}kQlPv&M{QngVAzUAE zqzv!1^OSfu>xMWH?E!x`_nM9D+t5yd9&&YS0(avZ7RZ97BI8GGd+w*y6-kUyvLCe^ zb)MZ>h^kSiWJXG?WlHQ+iJf|XF3qT^V2A=#lK>7o>s`sAN|bJmp4S`D!jSgSTPruG zdQ<^}qM|~p$I*_YY{j@>tE|t)a}bYq-f!)E)U}i8t7B|F`2_|f4d6hT4n(>!AlpF> zcC<-vkKk=vs94+p1T=;ot-G+(Cq6_^RFjX6V5LrJhatu`c618P7JFZp{em_F6IB#F z!}?Sum&U=i{Tktmx*h#ff~cy#Re?WUsfkf_vXvX^O2zTVv)xIC;*RW4(CGr%6!QYK zig2q|gaF!v9^j?>yRngZ(~=9dukhImZ_|-DC9M2@N|x;Z>`R`GENg*to_*2RcNTT7 zaoJ=Z|H>fUwbt621?oXQ;21(8Ibo*LpAUJ*RSRy5a#5QxN^x;Fk0m$@F`f1smnJ3m zL_Q${zZbJ}I_`#Oz^~-x;&XUzd=(GjSX>+ev$pRSmdOtwR+PHZKJh!^^qf1-oC5FO zFz3p8S!aX6jdb)U)Tw-Dy`l=BMR2J2zbF0^LbMuEZVM%T%Qb zW|t^0l#5q0qMj+F#j>(SIfQ^7?YXCI*ZclzDJ}gv^x@M0>TLqZ%FMno!y4GMoZ!Hz&jDq`q0QUh*Ctm9K?; zP{qz@Ry=oqeU_2_s3Pyb&V9Vpb2raBSUjmnWSYS~3q8!_fnKcUdxeJbmSvRWIhvW= zSum5Lh#2u=kgj#?t>S8QS?G>A^pz+q;53h(5sLvpp=Q54Zf>pJY}jW6FO{B-ZEckior_R7BzR5}dz$|>&6q23514j#~(Fv4q1Al z!oGUX;rR^ztk4Aadl)>WY$9G|O2lJ5yeI11#XxlK8YPFo=Bpm)0llTpPGkR-Qq%g_Gsp~wE}NxdS>dPJUux@`EtlkfW3H-G${dw;AioKMHAUwr8+ z*M93G-}|ed=@l_g1VtHgKXMI>gGUX)h3<7OewbaJEFrs3+RjS~HVmWrMN{F*c zMa8uAR+Y_sQ6c@<%Gs=CX(lY9F_BvVF9ttG)YbjRpz=qn3~aukvPpO3W~n z_^FlTq7+OUCDaJRhyP4+TRSWgyu*j29biSP9e(BCd_R{8&66;+4xi7_ZZ2&5k2%`i zVeI{16vp~fVXT0jU@V(NQ;Ze=W)4{>Bcd0M_4=WdO(YQ4WHJG=ciKq3N5Imq_X$L3 z&83NCGFkn^a#AETX>55r)n2N(WYqZcNuzi;Y#IrznxGFWvpt)DCi`bBCj)J^{2&=A zO`&Qs!V}VMXijt6UA~d0-FUc?nTrhSntnWz7^WvX6;ME>hp%|b5Fa56l zK%HRVFfx&Y8_OeOBZGk$7=P39J)pnRx51Hp_1wI8ZVYFd=Su5jVUdr-SZRjX2;fle zSpuBOl;G&`3U#5CR%1rWIy_DnqI4Jol^rn6Pb>3cgTfPkU+q5Ed_-XQma9)5NmwL3 z>0)E%UP^+NFy4G?YCQMsC(n1&FeD2K==__WaharDFx z0ELEG+GcuM;n)5lfnZ1$gCG|75~9FWig=5lYsX)d1aD9ChF&;x1e1=?j=XT~*7u0r z*0Rl{h+O&Cd{{8GmyTgaac#9Jnya^38>+SOFSJcdh10%Jsw}oY?V%tWz)HKuf~8A- zk+cE&S1%Hx%=##^C@oeab9kam*ec&jFT@?r zlG1DvIf{30C|?QJmwJpGekTD^QDTrWFbqkeo79q|`Dw|I+kUi6^Q@E2@g&rpwCzyJ zyM-P_?1*yiRBbb&XNr@YO)N-renb66OLCB6F~el=`v}UJ^vNQ>1tjt0U@T#U^+)hl z5%oB9*7}W5z_LkEw2xl;_0RyO5l68nstSvovgP;6uI)y_`U0$NQ?2quMc3})i`rqxeQs0CyccOSoJ4zvV~Z)AuLrv+09y>7#`-aP3B2lRpdb*S@O_@8Oo$_ zkp|PEa?aj@MFz{TFg*&;?O~4^P6o#VUC`kzP%AS{yvs%MwfM3gvzf@B=qMEh7VRWM z#RY2ZRE*H-NUyrf+K#oPs&`~@fm*AUc&{cY`j-W2Rbqt_Q?t{=E>LS{D^M$~nV7iW zV`na@QDeb@B3xC^Ec68dv7=0sD%0q-QdX>TpQH;={k zK@U4nzL%2yULr#D&I;8LvWvQw;|0AUGT6#`Ik~5|nt-O9tczfaCfZ9>5o~FJWizbd zi9Cwy%E-~GKY`_Uh(g522;s}|MLX>YY7z3ZlM$$pLjDX%s6nj2N~e zQV3-PZO=j5VrE*E)u?Bvj+#Ccp^_33C=^;TRE&d=nu>~o0@x6L>sQ{3>9`j^Z>V0S zwzAa%G_a~LnXCA&#J_qv+{fJsj1PB1vJ#rfq=vQ*Zgs~2rVf?}DV_$p@--3t+8>BB z*0ualRLWx1O=<0dP%{9D)#my%8k^X$;&mmQ^p*{xOkwOmcEW zK53G&nVMTo z(aLjzoz}mRUFpHUSxsAy7H#xR^@E+RiWKK8HtmVB=V`)qKkz z#<#S!nm`W)EHT!gWQ3%?zQYm~lCI6Jc1%@LqO>K62uh&_dbRIsxH^xf+`oZSbW~?d zmG|9ktziG8PtGTm(@N14rEi_HZFXvLu0zMdc(or|;WOP?QwAFIKnddaS%JBvF*DP~ z{F9|8M4HBiu>kc@)G2cQ$a2om<^~@tTfKx)m!eCx|I0oQF)q!YjQ5Rgkf!!R{B@0sO9=Ed z-fwTKsEhG#eui*N`izfuI?7dds&}(a+I*W86(j@Em2?mb;s0$7?9`6$G(BDh^gfK= z)7HkS1kf~z=t3L4=(JrKMhC%hM-DwvkQ5yG6o?6Cyx$5BlLpzkY6`8Q+%%}cM8%Yx zb{2?#J*f<*mCjAdQ1cXNFsBoNQ&3p6^R(5bb5SKLFKKXU&vTse8)jjif5&p=N9FKlBo1X zN+}nD7>a*GX>3}2-jpAtX~-#1$`Jg>lpAtz7=@`a@eOSw55G_7AyZrQ&=s#`C6*|u zgKE=S{s*Kt2s}y5X-yHiS|riygqmuE(~&FCk|yYFS=8oHGq;$dLpUvCNeMD$WE{;Q zkP2Wv`)N>=HX@m|LeTYn^}Hjp`IN}2_9zDmWQW9fzl}x8WTT+zR&wK44?*1Wsko7m z87iNgY%>TFmM@M+!%?wQwO>G6?14K{fw}X0fm5QtMuw8MZib0MMHx#B zjT?$&ICt47mw3-4<`Z=+)rXVvS}&xkOIS&}SNV@1mrvHo6WdV6;3p!U9&n;=r)Cd_ zVJYE#9Ad=4gA@9_cwTQ|15%@KHRPxN(Dpcbg9baCWTjkrw33KXp=4sbog9*vly8s7 z`0|8?qq|38bUxm~`k|qX*+tBF5Pt~FfFw8*OWkxv#K#TZhBG#JwU22{Ll6g=MrK_` zK*Spl;ko|GmmxzBv-AM4G8_ljKKPIu%0~4Mlbc4<`{#BNZJdtq}(bGMP_JZzm2IIs8OW z5dBB~cZOi+mPw6frShG3A&A;+>AS-q-%{B@Hou*=QMJep<8745BeW0w6`l4$<1cu% z?}`hlGtF6KL?Cn-YYG$ZDDxDO)?^~!n8zd{Fo}1FX4MN9LCb^qJ0_&3GD;vkH^5@! zz?s0c7{DPH8dv;#OP+92Uc(k?WzjJ4h>+FM4PqcFjg@MMHkuXaCjD!J@1z8}sB`b3 zpT86|fR8MylT5Y}?o|{R&`Ow;8x`(k1(Y}tEp-A)_y3R0b2>J^n(o*n37>In{w&Cz zv@)f#mtx?Q27L2qV+u75_#zUZPseB0s625`n zk|~-7{4}lbjg%5qbP1aV{8oM@x-;NA`l6YXvE4HrTef>+)lJ)dP#lFe>672#fQ#DKRF^q{S{Uy>+J_tR}7faDh zm%SDcO)4uiIk_e11nZlrJyJhz4ySeM;rXq|cE-HWh4(O>tXW3#jBD4r{ur zuSvKPpeSt{P%!sF?`gKJDnPm>!K7V|H(5tQj`9Ex^BqQ9WQ4rRPyFnXS4*tXa5>On z2qt4rED|Y_vHrF-+fPJ!&rUV&Tr?=B?+(9WbNeXMX;G!@clup^^Ixu5@;iJ#%!PiAKLJbDAs=%gQ?6*HprDdV zryngQAn7DbI|>_w!vjQynG7TiZU;NBwJ9GHRqbCiggg>#h%E^hcH%tAl8+|)PbB`D zZ3Btu$Cj+eJ?fM-Q%r^I)PdKv)sdJT)2Z5}LKS(PN%^nJ54Iuc&9T8kL*S@9;a@sq ztPsD=iZrEyL-Zx5;8aof14Bd=JHPf5SBF5Y7pU;2ia=NE9UFWdtkH32SKtQ;8JE!o z|Mp41>rtuJCO#9oHvYQljtTwgtYH{wekOo!{4M*ON>1G_w8L}VW#E`}86)BpUAFGp z>MuQ&t+sZ_KI?s~MG?BquAA^MBmKNO?`+Y;Xr2P-{!}3Bv|gkzC?5u*E@xV4GND8; z6_$Ok&8kpq61hy0b}OHm&YrSb&HiFID22-5;18Qheu8l|mlk8H%Kq(5uvjP7l}r=b z&7;_>ie`AqHwP9A`6SCy1tKu53e&h5O?h2lX}3q3mFnND&t+F7ZPUVwk|wSl=^V<_ z(`nUf$tHKS-IgibVJiN+YPQ;#B;4%NG(tWQ!tgzr(=vdmJ#7Xswu?*`@V25McIUgL zfX*`Apm0u~$&hOLKS{U`T?M3MVNw}datlyG6K|id5(uO(q$X=eXQi(j4Z9l(3kfY` z=%xI|+c|UDsV`~I9c*&(VZifhZqO0~CCy2J)MiX09AUE$O?&BMHZf9>r$c-h;M9IL z2@6=$i66J5P30;)+>qHWE68rxviT*$CrwSmH>qVlHcnS{)9lGoyf1rRk}*s&ChI{d z9!jE%Tk;Dv8b`O?#3s~;zsu&>WGPNPw;|UqBO@`XSY`TKs=TyiZ=zX^8#lpS#OOcF*4_ykl_sKF9yv~XT#1$Cb~ z3!6?Cq%^Z_X~hcD>~`guBozNh71pj1?s+zjkOjBq$$y@*T|X>mLiCXd`8R0s9|AzzsdKX zwPj>nEYCD+7M#s`qP=!HM3qkR?Hs2R1n2=9FfzKn;@BS7kg44p+GKWD>e6vWSorX{ z(WfveQ2r@wrfwc2tSJa2oy{nRaa#T<{{@r}~~)eCySZ?3IFsG*dlkuUH#wy?V@E!5mw! zzUrwgF+9Wu)%i3B==qS%36VlsMHmDuKDD3gnFnaS-f&&&DKB^zEb@p)EnU_C01_D- z>%!d0AndS1ziU^kv}aQ|ZC>mhBm7+KiIOC3um&yln+;KqbOuliQ@(%9v*>#ZECx zb+@WK!fZ~ft;_FP{&PUoMg=}4AZuEB0$b}pUiNANduX zNvUqV(gcp=57T<32^?vfw_a%iN49+4EbD%7H!>Fh98rLdO<*cbC$I=epT^rwU>|G} zYU^cd4*RUudVTCZ5|=cvo~ST8lP7Og^< zpH15U#A0th@d8*US|E)Bx*BgNW*v5CRWG!IEHv!1`#$;$FD9z!$->4uc(%3WAad z0TDKQ&HscWHCN@@RWztAi$PTG)_EZ~&Yl>%WgvZ29}YD)ZUvQhVMB8(k&LVvfyMg* z%>zv>(F|btdtT18<}vmdpMeyOPn}&LKXj7uOxxgG4HyFUR#q$LHpFOv0s9KjW zZ#AKv(9IlnpIw`3-xEzwhFY9~WvBl&mNP|b7*3N-xVj}O}S10#uFe}4y936e!iX?I@+m^M7P$f!i3OFR693qA+J*70=Bxgv(vc9OAIoZ9&*I5v z^#~+Yr;Y%x1Uv#H#v?spTKlxBO$Q6oJx4T!wGRmjx`|RL6M|KZz*&02z_FC!376c) z4JNb{W7w6H=g={9X|EWQOfeR7VB-dM3vM<_zAs1#4y5ZMFOW;AnP{1f8^Z3;DaHhj zNfcw-xY3r_DaM7?#tkbH#n?PZ5_hTs>N{w8jH|`znPQ$1gH!tt5it{Q<7)&B3+Mz* z*-2EUa3O%Q?d-|hs=bYPds{2563&VL_ML|&gnV;$#&_6|S_(tlzMYQG;W=_44)64g zs@Z}Q*W8p1YEP>)Eyfx#=POb&N)a<#O~3D|^USMH02ZNO;{y5y!fjZY58RpL`oqZU zjz78D_3Bh*R@=wgpW4eAYUF*kXqwoBD<2Bm$!yYE72NANnxSG5aX^)cnp6_Ii-<4A zw564r60FbCGsqjAie)WkaCv;v8-lz%>FwSn#9+QI^{)RjKy@lwxWgfkN!wcu1&H<` z{s0}-yct{U-JrBgBjK(7Q~#A{XUr1RuG+5!IQH_uIn;>WkoE|20r55>w(DQ1^1AoM z#vU|tH6sm0X;f~%+AhgTvy}Or)RGubn}tBiuC~gaxPvx7`^sD)lPc4^ zNSzQPukxj0ONV`GvJNZo8^xEH=1_^}*1~jFhWdtVEjCP!LYYUP4Tuejb6jNzopbD$ zwRQ`>;hjOjW|~T}X$9MIBr9!-@&uUU&pBHTaJ7{-Y6{}JBpalLEsnxQvC7CZ=h#XP z63zK3YpYqvA+pk%wsqVp^UqdYbTiowtU|<2-VJlRoyjkEggNsF61NElAQtT#b}RJ8Qqu+*Vmy52p>f zceTTecsak>!XP>A$=6}zlz{%19P<<=`d7|O2sxAQWxi5ESAj~hL7~aOSYkHw68Aej zq`QQYnlub>17H?WFr*B&n0|r~;~t<-h4{g&z{o46a{NiXOYM&-Fx4x@>dTfsUHK9j z7b|ORsj%*{khZTgNOP*4hDAa9`jy7ZCX5D6cP)P&0G;?KY47OZahW@sQqFFFS z4PUkPrCk-NNZhj!eSIC^kWklL<$J$3WylRZ9cqf@?OOxX@7k}0GNQ>)LbT=}T(5cT z{&Qe49B%^)D4&4ksbqd9U}0c@IB-hpl*W3kK_d0_F^6QOvemmp1tYgfiPvY7YE@X1 zIn(@hO-{NCbS|w?`jwimxsb5=YP;%#J+a_KpZ%#s~xgr-J;_O4EK+sbPvI%@l2 zM90*q$=>m13;x|zsef$4bW^1uM~O3WXhsgO(Kbc^MPXM)b^34^Dvp7lY7bFUd&rKk zDarsRW4&mifGmoO;p;*CMYH1t@!vA$w7`HWe;q;c2f`xJfaY*erbfSQNi^|}oJ6uo zC~J{9_oapEg=lWN;m<74LIs#)N;RLY(ou(u=Dw#q@-8ioHH@Y5n?^#bB*A_yyU)GcbnXiUh53c zVsB2pL%|(2jAiSgw*KbN)$U>lT#;B$Rs)NMyXsvrLG$QVZ#Q*z*Y4GwSN?RvQD+V@1mBs{MCKXSTS_##BuGrCzzSSd|2zw0N&5 za+Ixt+!jXLdCWUHMZif7y4(C-?^gKQ4tGK>pXlv;_F0=AIG;3Kn&#b6*De}i_8Xn* zB0H59J#+DGUq3X_jI0T;ipWB;4vXhLKZWuF=ix=sk<=-xA%S|t&Ii4yvoDxFCiNAq zKBy7#yO6(`8B#!70$XJ@=*QGB`UCv5DI8qB=P??icki_uQefC@3%~m4ys(?u+cbVK zdjrQe9QcCuR-_7ZzKVfl2n$H-f(e891k;gQG3Prt|4M8yF2;uw-!vL|m6B`i)wi)O zf;xH0@DkPJ<4L)^bKc-{%3Lf<$KpF{I=4u1=&l)^R!|KDcH^RWk>8>~co` zlZ}>*(~7AoSg>NMNQq)VwfJ$Yy$rQf!0r*Z#AKhGwAiipT}YBH--w}TjbQSUXuHX# zbyMqBlG4S1c)`9AzRehmCnlcq_FK9mH7J*4o0qbpiKPV`<) zHekkt>x^&CLXv??(#ZBef?WuiIU5dTpq07!_DLB!qC9QUj3gNH#6->rkfB-pBZ)JH z4i+GnFnOnVz9N{o`UM!_ZLb%u7Z4m!o#JD`EAT{W+CYTv;wFj<(6oWn+#C>XtvVZs zp=xb}Ib${uqwlpg8;FdqRc8ZHOaLLd5@UpEOYCeQ-5Er$CWww_nVbX=(uKM^@U&1~TF0p@%Yf8Fi+y4Tzlqc)MKm5sMZevKBujH;&kd@gxey9J9tN z(0bIxYIpqjgC;Q=T-`J>fOgRmrjZu!M2hS}WEN9Fx_W_t`!A|m2$A%${c5qIS#ez8 zmK&G6h}A)e6_h%vF^qgk=PiRIQ9+|4_cEGj={!qksSrFZzH~QV66%H_QCOWaO9Ged zf)pgo5~N`@Qp7UDEKT{37q~fW%u?gVTo4Exv#h!?4B`bKZ?(lK35p_4NpS>^G#*){ z1`v+SQQ6VER`FJ9FDdk2WKp1VhhX&}E)7fni>i@@|KuWP2%%fOD&W9COAN7$Co;n& z2AL!^%vu?>p2pfJ_?x=_5Jg+9BYLzVohVeMS`c|%;jGXzov2#_{&%+<5xZHGj?S9D zt9|%e_rV-@+dh2#M$2LDv~3?Ay30P8RMqz33+{ud4{aYFa&?%`rG1F3>aX7}tbq72 zCCV1qiI^Lwc(QGuhpW1*?>@g<+o-eoJW>c?%9&lG(|NJ-iV1EJr~;$u>{WzofC38-EedhS6Ad;iBs~QCU)e1R%=x1oeBAu zq~gebXMFa~c-&ZS{6{c?1Kb*V=?{%^|3x#p*o;N171@_kBzXkB_BZH-=KM@r5Al=? z0(?5tjPz=TEZXH%{IK4XO_m}cFrCX)Afgan{t?9|j5<|Aw=pH>xz;VF)NM;G-Oh6j z>PHneCv$XN(gcR#vaADeER{-;&s>h!o2ckiUb~Hw$UO4c79UZ#t8VHjD`*joEt}xb%{*ygPF8Txq&rM- z&`U6<42%=Op)AZ{23M&Z%rQK(DcZ!GPD`9jhuxViW@_ zN{>dz7!bG!iA~-W)&;Z45$RUKI~O_pcNlG(MD;q$Qp)%gdy@$w@lLReA&kP{PVsE9 z!w3YkRx;e7wmCXw;Q}{y7=0r^Ry(;ByHlwN)e#pL%R*YLngPWc%i>)8NLxLUO7IMd z@5#Ouag%!6w6YM)k9TZ238ET{l9}^Ai1+<%quM_*!t>|SgT2ace7~vDwe))kNs_!*oJ`A7~|1tJz$tTv+Z)RJ-q3HW^`wY5Pa2EeT`GD$HW96VZVS9_Ayx zpdM%=b_#IiUBl3tL_vp8+vL%zeO0J2j1=H$u~sg(@8bjbp@ zabIdQMkqgVfR|CUFtkoXP4DiCrD_J&- zJk!>xCiSyUstKN{8lTo4v5wG|2;*B7u!FV)wGRt*nt?q2-mq%M6ev*nrq4PQEs{}( zFcrsK2IP*qY?Qx6{t|5sj8Omd87B=M>P5cpiwdJ=ngU+PIc`x|=!RW^M7er-)TG~f zu#fp%-p5mX+-3ZkNvT0xzHAgLknPZw3Px~CY?K&_WFpFs?&D)lP03kP2$oCodS0$q zB=%L1Zw2`(i2mZ-F}hEGl~d`w%8xWfmD=@duKLww{R;P!#X7}wk&A|!TZp?aL(lId zMIkQlr#jZdpv%r2m#Y_JN+?k@X5x7Gx?T2IfRNrScs}Kp9OrJZiWI*!3`zEhS(&Sm4G#{mJ!@-u1Kh zf62Q}E|sMXzj?=({_2)@edxB+b2@eiF!IN4&R?oqoprfz{ zTH?l>8#lwaAR#m}M7fbwE^8XEz_B&pkmCf7$ZikRV>LUZVu!(SkZH5?I9YIEg`^0WDP@@#lHt#qZHyWpD#rXPVNq z#a>74h6Lj&2jn0hW$icFLoHUBcC2~)zTZ~DC;V*4fUI@eNSAAxWDHSEfsYjlFbVr4 zEd@Lqs6dC^&2nFE{{}l%drKC%rY_{+q6* zF4de$rKWwDjj=Q|+{%r7&^^U@v;d1j!u z`%<#LgXnguUv=Lf^mqx1yC>2AQrsaFHJX7CD(^3^-TPKfyVAmOz0>NKT)=2NXs)T^ zr(0*61)$pN44l->jJiU%oR;#*$g6x8B+GU(OAUqgj+TTmJ{De#3hAbTNUwDd=rPDP zyJ60nXwvH-j7B3T9(<&@nvfuWEaGEMh@ywKoiB6%>-5P1E#wGMGzurn#}6K4O7UXO zPDg%hpRSWC;aCi;{;;EmsVy0t>3>B0i@by8=dUe5+z z+p};qGRIb>6Wv086E8vqK8jTgF0&jxtC`d6->748;!s4Z-SRQnSU?3xO`j!X7dK`g z93nb#^)X5c_nBT)8HFsrB}OF|!G?E)YEbFvk&YUEO;{TP+t589F_)p8@a)fI`$FXw zi38RRy6Dvto-ebEf)J_S(u)(`#N>m^=VCiFfKN`+GucciW(DYv4V2`~gUyO707?*U ze$!KWCNKz!zFfOqsVkLt25m-+aDlZv1vMBhtY#ht@n5RzNr$Q57>WLr61QXfE;7T~ zq3RCUo5*w%bwXB^tcXDap7~z!Om%}sP6G@^5vPDdPT8|?F!v^03#WoZ`t68t02i7x zAgEm9w^S&I++?8qo*;5q8?sVFkQo?*8o0se*hByhQobZIe&{<4QY_06#N+K6;@W#9 zTR4MC?cvUb~~X?mN%i;9^RlL|=S zh0bfTg z>dA18-=_5?Gu=^60Bcs_7QIdnUTdS*@3%UB2YUVQ|J%vyBi<3{>z`U*n)H=36OF*$ z!pdlJ0>S{MZL|^XiAXg1FbYuAGG(=9Kloz zS4N)b^BP>gR|RVlcFBv=6ch<|FPRpLWnN!60aSu8bD1Btkxsq5g0%)7YW1>?t}N@GGdIiE)hk!jt5HRVSh{1; zsvKe|8)KBom`Vl}Zy23zq4IizY!Dw2~>z+t|2T&_q0rvPgwqN*#g zUr{ZflU(Lt+)x|LSq~RifRWRQw)F}JfN~5dL5*oA$K6;XIb5^K8yZP&QXk%~@^uub zwo?ly1#uoUYKUxajED4GEaI+z9ZCCLAItPXqv+&p3=gegGt;tK)f_q4(TIh%x5mm(hxkAFqd_;IzG|ywdA>AI$I|eQ}cAK^uwXvMoiZRRQzs2o=~~GqYIkb1 zH0tgDN#J7nOQyLeIg{ytUzB0;W_eoaD zjBl078~fI)b{VWw!Gt6*YH^xH!qd30lEPX@zv5Y-hDxjo;{JANN5q_0>8^T{b}Xi` zT2A9aw-}%{%i$3MWazE7q-*n`(|OyQBh@R&#J5na=0`rD#=o7ttsmqjH4HnrsK8_s z&J>+FhU(CVTF--<}&IeMUZp$d{-PEmm@so;~7eE}k#+mpw|iYW<_ z{DHnsuEwqAPl9|a{b7*z9OT>NO!{epi1?k1Qr0BmecHgLs4l;fXOc1h&^U1Sk><{C zQQtmbxv5M1`-6w^Z}7G?k^RbfObE49-~!!)_0TBU0bmB`Nz4JcUxTnt*5ac4+FqP^ zS;55fyX1`!R)&0&1HujR;p)D&j{ce67OrG>M2H(X%!+%~YWc=f$CX!bTxaxV7?)y< zVO@_pt`s-F#4MS7y8hr5@TlS?cV9tG{*_XUuDpU{>`Rr(PhRVL@x;U-ukz$;yEZqr z4-Q4AogOuYwnhsN<#c5#vPf>dT4H+a9=)VfZQYrwcva~7uPVJ6BLhR*8<7>9!lj-z(tX=DJYrC! z?c3DW?PEL0SaTl*@&ugI%GSGOV8|eufMf5#=vcIAq_JmUaELx{S{Ehb=hX&AM;jw! zgTq77rrnKgbh#Fd3~t{swkg^+Fu1$1m82czh!$-dbGP=DTW{vz(EfqlgIl9rjRO&P z;|;x?o4&nlaHJ899oXAweLEB=MRe)Vz~H%=S{kR#(;#->ry^Rgvv*gd>u*A&Gp9T^`T zTe`Kechv5-EZz#BhPLl+Ebd#fY{~LfOGihxEZyDMKCtD$l95qw>7_u7q{CYQ#qi#N z{f##aE?u%^U}XF7(h(*JjXPjjY{Zsq85y82O9qD*FI(HccFVRkTUKpexq0Qv)!UX@ zFBdOcvW)*NhrQUiXM9Zc>>k`a0{Sl<*iF0b^R_+q;kj$Tz|esm!A7e zd@~Sf4D1;Ba6 z&o*LoY^$|l^uXxS(E~$UmNGVt%a;xfZyeh}pSD_ypSuQ4F&>SPk>L?TJ7MXTrOQ|L zZ(g}}Rp08Z{r$^UH`Z?5wr%s46@9ChtynYASh;1*s^x3?wl(@e*aUr=aAXvg?j0B# zYm5v%C*=(@U$%`8Z4vRv!mL>#=(==hd{6dU3!cDo_rMztY}B0mU7FLH9rO>{HdSqV z2Zjc>?3(nk+01c1LWP#@B|G@JyJ5|F?k4%@$~6#@l?kRdhE&<_(&IK54#VxH>hk7+ zExX1>2HeLCf!i@Kx?}Um@MS}yZL5+tjSO72bkFeCY&lKnXb>lTOB=9c$x{Ar)|5Ia6z#sBPo^22;t^m}%VB-Fqwx^>$|hWBh7AKSJDVQ*1{uvd>R8yJlmm+x(C86z9a zc?ZldT4v(fDJCf$>amB>=rT%k6eP@`tue%|AZ44 zE;{Mtr%zeDWNF{BUI=$!LjeEv%=xag%XyZDkzU;c_$ zzUtKjo40IjY}>wLaObW)L&JObjf{?s@4xKw18?v=pZ4otJaj+;(8lqR-6kKM$h#`P z9KVJ9=(cwfzx1E-oy>0l$c^lQR7*Z(7EAu!vv+qxa?pUuY9o!Y@sS}0VPMFOrW3;@ zb^`Lo$nFEm>iBN76&Vd_(DO!s@f^y3Yv6fZT-TIX?BhD0U!LFRcvzVCkkY)!{o^J7 zYW&n@ynv*+*!Z;M##BxmZS3B*WN>t&g!hdm=_9=?9HNtKMQirEk9#ao-g16h2KEkY z85}zh4exJ^Y}-A28SjpimQVIiFv8LWjLsY!-Mf3>z;6f5_)v;!yAODq3N`P=;7WjUe@)}8+YX2 z^XK2W_V~G9dEzxkchtNA(tVhp#&TdYv!84Feu(=He(68Kv7aCIL~9%I@4Pkq*7AF6 z&b4_R1!GNlKK9*;1uUGUI`z#RgpMOrJ@2HyJC`ekDK?J%DRpYe@@Qt zz_BTRa(HUTNpt*YH5qaxPSh%vgJb=5%AV7iJLTXQKM2<1l{;<>>*%JcozT|PDDEB=BGe_PHkP*gBC$c42W8?(YwCL5E)mzefXTZBZo#r9wII`<4XNS-HM)E`VC~+6E&oD`3tZ>vD~Wd+lp6X=lpn9d z4}Rg7b2d*O6d11juuMmVw7=#BX+xNdnY%kw`*=!m}NpC3diqQZMRh{pF2mSec zcr<-3bQ3)^^zx?`J^ux{mx5J5U`cSamk$f2QcyfDcPqiXbIVH{1T{PFcY8&@$4bp_ z^=~K7={Ya=o8V_E9@u-uJw#YnH8D-nV?&^5x4{Ebm{wa`~#|tCz1? zzIH|5ie)R7uUN67f5plbt5&RDv1Y~E{=WWY{mc7T^!N9#>|fQtx_?do+Le7Pm#tjB za>dI2l`B`STDf}V8fhG>maSU8YQ?JlRV!DmTD5xBnpJC8qjs!bzIw&#{?#j2uUfr& z^_tad*YvGfwr2U76>Iv}tX#8d&FVF4)~sDi6W3Bb`Y#2oCDGco9JOx!dv z9m74Pys*scCf_)d`?L6+%`bXmS$fQ#y@?pI4XeiJj%Xm-Gq5+hY!J)IK(rSd&Y)zS zA=Gj53_{Z)t{;P*c5-biz}dD2qM^oRR)%G=l4R-GGA!onm@y1???_|+;P5zRtf5A$ z-0y_0T+rnI(|>gBcl@W>e&l~m$KT{8r+=9mU$bP%lGpM4G5DAG-L`_G^Xc=glb+u- z>3I}nkZhEu*YgaXx1brobvIqOR|3$wb>l;qjSTEvxM&l@z;JK6fYI3GOidoN)Vnqp zdAH;@d9Ry!yEo(L==f^1>G+?XvgzcL`kpv>_=C5f65JInKJJ&%67M&gR{inQx3BuO z-@Do`53F9$*}LY?yWYQc>73qmKRd4X#q0aufAMhxKe*(nodcI%IQ)Z4-*@l8%e{vO zUeWm4`(NRGxA&Fa6Yqc3U;IPwYkvIX4_^Doj|N^Bc|UpmQ~p&OJ?IFOHOLo>L8;Uc zlv%9k%GDqOGx9U%&+?B7jt=H_&d(oPIvyIkGq)=k3O*WsEVws#IQUxdX!RQ%-weJL zeAj;>|AXM4{D02+EySyWqmD zjkn(T_M1NOH=n!zfiHjawV(K_dGm{qFoEPRHt-Z@H^jKJ|=kgEzgS zXL#d%Kl$maH-GBWKmXO!7hm%3_bgd@;=)Vccl-PQ?2bF{y8F}j-e0Ixk2-eU3(k7! z2k(67E4LTt9#en*883MJpMU(*r$7HdE_&YcPguBO&AM~WJO84KFMatdU;WzGZ`#t> zwrlkAH(mACJ3jo;dk#JF7atuO{=(mX|DCU|zcC-?7KhtHf9aBmYmN<h?m|ZT-IrXfy;g(WI-|T#EI4?i%gf+Pr=a=Tn z#g5|o=)_#LV^z2=e@rn~Enal)>J^cTj@~7ulV%@t!u(lB zcU(YaXLimlmJ8>UPV5-3Y&hej!m0Uk;iUyXUkmeczS@TcH9X;`>)3#n*J*T65_F41JDP7!oZn6CG(kts-<-*zJW5XAnyE^Qm;_53ZJ2m5NX%Qw9zf6a^D{i$_te&Cw5#glTc zEu2t3ySy+z^XhxnO+4_LeE%sg&aEx>tj|}99q;|-qG(|B{lC6?MYn%!p(|Iq`o4bazkpi#oo#;B zb?~C&3x$bqoSZ+S*WbH1JSG=hz5e)~b$S2lM^2jf=E*sK;?OF9^~A(~E;>I~&IQ-@ zoO%A~6MuVJ!OvZqpVuE;-E~TCYxU*jiN9ELZ09Mtj$+VNn0WWK-wAud&T!(poNe!S zS95FV{KC>HxuC1##H(LfIyS6?r{<1hm?nOCFpvC^&vRf%u}~^@^pxjU=2qu+*1D?Q zxmq}5#>|e{{?WNP{@n1Gj(Pt4;P}~5cyh3~vc&JpEen?W9|}I4`}5NO41SsaP55-j z-IpJD+uQ%N?-j3n+l@ER|NE})7oY#jUoBbsg4e!o<3AjH`ybr$jt_n8)1UeL17G~o z_n-XX(_YS|#OigYo__9muRHh$eEj&QKl8wszWVT!KlGXt=2Xp?*KchcyyZRb`{Gw0 z?(A8#?$oo+eZ^~Dzj15h?YDf09H0N<<4^wZsm`9W&fVIWIQW%;^xy?PQ`HQ+QSJHJv}KQEmYc86ymwVs^6=INd}rKLTK!#dH-CT`4K^X}P|qprU- zzZ6+3=$g|p@z?dS>clsXxw@90_(8|N|8cmwX^88&iwN1j`MR9Z!P@!9o3_A%if>6`nx9-tNHvj|2;aXz=yZzCjL4k+E?cn zkx8BpuaTT3eJy>KAaXLl(@$TrM0)W#7||j#6-sGqS7Gl(ev?kGa>U18#P1w_(vi;N z_hNqM^Lq)u3;5~Xh5WQMGt?N{xOZgu@&g+Owr(9^wS)IV=yj^U&QChq+HK2LZP~nK z%gW^|wyat`u&QrM|H{6`%5B(ux2@Q`dh@ESn;WZFFK?{IJ~6O$^K#_0EsehAYX{a2 z^bIWEyecj4d=8*Wv65#Ou)#M@uWFXg{4YmAQX9!vS}ModX54`v1F!d*=k z{IX2`i@C=%H8#9=aLcF`0h0RCr6Om!P1lKR5hz&-y!4W@7q3BvlUZu(3lRZcu63q! zhqeu?JsZucGB&)cF|=`TD>fv?Z!>j00-&T@r_W#GSvHLH`5~UA3#ZSY;yKDZpPoGP z%Kq`_UBYj}IA9*RWO(>u*(rg<@c77<#>*O88iRYsGIj% zB`jEOY3$zEEP4O(%{_mC;2)yuZdkM0<3uwJw^+ZlDjD%~ryNYlRf z$Z^7q*1wkwjO=QRU8q{mv`V)Pf@qt^4{Y2wJ}@+fwaQ*#?AqOYGd8e`Hl~f+)An?3 zVsy=nA5CpEE(gvAYA}isPA8u1^ETBOM@Iu%h|WM`7i?&-8(X(Fb`S0ulme7276aKv zgFd&cUA9ucePnoiFT`p)eIFkg)k3djjLhcCq#8y+03zCgfPEoB0< zMcQ*%TEkRr$VOXG$2JNuSP9j@vCA3P!N$gs;bEcq5QH)XR{A(PxP53q*0dzID=ISv z?bEc`JthRyO>j=8g$R#L8MC{(&&|S{v$U}_En#$|v2CN91!mB1J*op^mk(~W4(_lH z4sJCJaI<N6tX*qOrrMI zI!#fVp#alxE*;>c*mTuBDR%Vb)_{u#FCRN_HdJrJ;Mn=*qi|-5hFCsF#$F_3J8NjG zT`$=&I5KwNlFNok?0Kkp#!tGril3E|=cjvXUcO%QdiX{BPU5$m-=%z?#ZUZ4yegxS z@^s{X0rmv`xxYtFHu=l+(u)xs;omcSIzo}s(*0V@->5_EE0~d8DF+)e8uwdRsG|<8`rySE0%9t)!(}j zJ3?CiTPa(#B7MG(@?~2{pO2%j>RbB!Jf7>B=LI}V9(&E}-k44(7W2mjE`QS-k3bdQ z^n!K#d*hbf!=n%p*vX!C&wJBpC|uDQr$i@2cmYHwG3D{9IW<~%%A&0YhN9@?Nd84H z9EW>uYp_hF#kQ!Pw&_u95{qd=JzBhNXkoPY4D9^7;fy2WjWWSSdd+}&ahw;jxalh$9J<9fw$3~y~B`it>K9&%5H^K#1fzF7Lyty zo5-J*{}y1udPEQFz?WX5W+~HyQr5JY>f)5?PKmT}-a?9aBGh&se;b^&rN~7G1Xvj^bbh zcW?IfVj3fy-#b2ZKuqe5XJHOKaISO7Iuprq?4se(3zK!V3mV(g+gCS6hA(1DB1F5@ z8U(zp&6>};dDQ zeI38F4E0lbTl&10d-Ws5ogK{21)1lsP=MCZOnAdi`LZ@WDWfBSJgJgYy=7i})>mG5 z-jz4}`|J3yFKnK%8ExSg`Z2Zj;)+%cQ0#( zNR-HkV>_T_EU%7fCHm1tHJiigZ@}+YJSQH83H{vP*nJ=x*s^b2PJiYj^%Lyv8UxKo z@u6$bi#6}R$4_%G`z#)GKF&brqhjFa`2Vu^CUBBf^`ZY=s`u`h8W>;@)Z68}m*L5D zYF`LRxFZ)Oq7pzP#$>3Kp=V%LMl^&OWDyk=cif3VArTafF~*<{h9vwWK1pH}B1uRj z2}Y6-#YmneyzlRK&b?LDUEN*NfdAz49H_2a_w48V_TTTEgIpppoQNfft)1E%s8+$Q zofq!K(A&ZXiLN(GxeqcH!Eu4nSYH)-a{`}V=41Owu*rp;S7{)qMgs-gcJAD6@J@UM zHa>`SiR!wQx}~qz^O3&GKbBiRTlt2>Cv%nfZ$VLspnw?1p*PM4?U-Lr9|d;K=ac3m zb=CPa_{cwzh2&k6&tiY{E~O?v^V5NTKR37trBS@8B11aPFR-S<%f+uDeO;%3kHOnxEC@Syw9LafvVzak;6yd=pweB4 z9-rU|74B&5B~a`lLL0Uc_j;<0Xf$O2T*^xT1ksIqyZtixU)X*XC4^oI4l&*O@%fHF zJZhT2vwY-VoEGN?l#+jOn$#!H@-KcT`NEChJD)0_9ehsab0Hu3_fo#k7iO)_x(pSMf;nDJuzW&-zq@9oO`6Qpu@wuCi zq=_C7e{MT5?RY@i`+YI zcR%Slc?5`Dwi}yOF#^}#GLp}(OZMd|+iHbICs%2;N~L_Q*vS?nx3EN+iiZB}xR^q@ zW~G+vWDEIhy z)-8#FwNO&Ak*}59){SSJvr)o)HeQm?Zd|&=+}y6l++1AE+*}XLZhZbZ8_Ndz=uNX# zXf<)QHVXuaRyxfn^*lOLjRWeEhg{`U8+Ru?;BZkYF>!cQ(r92#Eaw|pJhzo>xe$$P zr;5a8YlrK5SM0ax+1y;X_iPQ-l$L7sy;zDQaFfQcT2||Hy3y`*vh`{% z8kHWGu(j=MR&3Z{u69=amFKpb(${k~KF{>Gik0J)TS0y*spN_U;$aJ|LcZSV6w1+< zEc=2=@}Ou7R8`7Fp==}9ZdS5&CaP4%u^x?QC{)aXxE$cRIG*J;`)dP$AlT_P6u7)=m_3ea2kZLi3hhP?A62r6$1PdalzhRBNqzJzs7_YhEg= zT-J`8X%+mm;BE#0@7Xgqhb`yAeS7ET>dhuW&vR#Aa*_6Y?NMvP=Tjz`gsbiVz@d zRqRGv3AxDS434x!1YoQHLA_GQwrh<%736Bs5u2p6qOrhZS=f4Az_O67H%pZ)09h!u zi9?BwEDy|?HzhEDf>xAkm+Orhb6Ica+Qn?W60QGfDW_(U0v5$8pRIx^1x)r})XrUE ziQlT}6z?=D6^WQB=ZdXXEnAL``q`v-O*6?JjOrHIgz_SINg>ABxcz3QlFt>JxdxFm z)pDs59erX_L9U?e0E?t1r!_<}XsDY{;UHaBeP!&AGXkp^2P>nOf;dAGY?8%r1dcmIEw8-s=ElJ9^eIGr+=D z3LPYjMgyAE&PLA`v1Gw?mzd*nF&PF@Nw(8$lnTvUu0SYM6r8yAtQYTp-rjBJz4Ejj zJI*VWcb&7fvUTfL-S3er+9zBf3LLW`EhM}Xf zVSs@ZM*rjIhOR7s$;CS^ym&iOm8q*!$>IKNm2)`|uTrc<|FgQxEa%JdEcYOw<<5J4 zqDn6o$Pbm+@2i@W_$}yvDcdZyv(-ukk4CwX&qbS_Isu_vW4lkgRA@JHIDfPC=!6$6 z>eXQ3BbPJbaa%=3qL;;btK6;@i-meQPf%bd`d|N(ni5f?^vXT3GxEX1+w~d|@$Dkg zaH$eKS72N7m7#~YNpb}fgtgT~EXxWOTJ>TMzcfziYPnvGPCQF`Sy1NL!|auc42hWp zI=1tzd?(we*K>$z(dJ*0I;&czF4x?gks#r@My_1MpcUm`CIb_eT+<POs_23pNly;LuwPL%V7R;eBRWJ1J+8J4tLwo8VHSL@|c zty3)JJNag%QOZTxRfxgmR;gYqv^%+crP1ls+fgoAzHYM%x+*lRQ>ztm%~oV{LzM3@ z7v+kXYTYYnCC<~?WPoF{Wu$QCbcw|rJm;NSrBG^@8kJ6&?QC$VLXCD5v`V@Ww|r6i zqUN?exuW^rihbY$tUkJ4k4z24 zZ8Z?UnA2*rRVzhR5rztE@+z?Fu_(J9i?Yism+kI)EQ+BA9;qIy+}DKJZ_22ou^66z-brl%jZmeqOglAYHM@nj!P~Q#h~6PwOF=J zKHng^yqt}~WH{xW8rPdEn5{ZpmQrGKYc=0Qn5P zWmKK=*~UbHB7jZ2N$7!C_+&(tS|^VJfYqSXC|9!4sfvdJ3IdAxg;pJmB`j~QOm!C# z`O`vu+6Q>kz%kgFD=NF~q#-KgR;yts)yQ#w$p=X1?su8}QJu2POp zlhv{`#?mk|h84KuV!}{q6dTzr`Vm|g3Q>=q|9qKwtu(gAEFp4at*~nPh>F@N6wA=x z4tidp9lc;Bnq8~1%b-%rR*NvAY@-~Veg;h&G~KmtPch%xvvU`eWUH=*kmSKbmAQrk zmyjRYRm6x6bhA>6e(s}UmSZbKuMDA-{@ewIrCy}9O=vzbFK-o#BlOHT~- zecnb(4urSN%^3^9>0n!zW70VVhFni&^tM@LzXrQFatKkmLZcqNP)s#X2H+QP`9%T= zTW!ziN*DzOm@6-wh+NT(7CWr^2kB_BiBYvxE2G{bmeo7ai$wMx3Ox+PZxs+b)^J3a4HrNfGm=ulK1f8W#XdT3KrvPiGS{9RQv)O6q z%C%;6mLkjEZ5X5EPYKA74JnA=d*ufrQ42u;9W-0dHfxPiJ~~^3ZYv9%+6%$03vo+e zFO0u&6Z2buu!@c#P8cC6gbua9mVCZe>y+!AR>av5m2(oF-nBgBs>ae`PIWQEpnS20 z1-*trr%|nlT`GF%Q>O;eDdvy$?bNGvjDgX)PXgvT7|e=T`|7294oEIUFIz3lm5~Ta z^(xk+R;gCN;&t9>2`VgsPwKCL0jOZ3l94PWk`#fvrFyZELqsV=zwjKXM@>>C-O)*= z0_Q(;vU!Zrtp-5Rj$SSTZN*CIqJ+=Q3GY=xWz5n2LhB;+h?5*d$lbY1WZa#*R05Ho zG=_Z*d7^`@tA&lD(};diWG&kx?N=W0Vdq7Jxr*y+XREc9pcys96MPKIE~BzG3WO|| zqgSYL&kRQY<|;rm9e$-LBR!_ca;X3$S90xq8(p_njDAV^aZfpsF#4Lrwr9$6Dn_<| z4XlaxCEq~p|7A6`^_0z3X_H;=Vh^N@S_x^iUTRj_jVyLwtdV(iuC2o~ij|PE`6kxr zav2GwSZ<+3M&~Ov)kX)I6OmojG)T0oqP`M9SZ$}+>EsY4I^|Zj64jUMISt1>M~-d4 zTI;x-I_%4S!h zO!Tsil@*szqgc#$in)3|>ZndtQ|4{BtYyvY2FLq1H`lWlxtIKzyzqe7V*=r`{*g*S z%*d?@Ae(Pxn@wn5E`NcVBzrrTx3Cj~cnJ=OC#ZyFzga3HvuzWBwii2cg+6d&IP8LK zVx+CK8XyOF99_6v83SSE4rZ}>GfNDAl^JM7^NXk3w$r=5*+wg$D`#^xR<}a@M6_La zNniJJwwPVlJkog+-3AL_ft{W8XveZ>(B4nveLNYQMI-x03)Mz3pRE-u(M94q?QJce z?|~*Qn;yF`KxE6y#p5Aw9~uj&1wT-4PC90Z8STDLbPwdqMKrN4lqm=%k@GVhYfD8 zay7c7OM1HWD_69jvOk%La=X@K14^S&%2r!dM5p~-`q5LcloU+nqf~&OROj975Bu4& z(4~|)4EEqgw$bR+z}iyu>Mk$qDI6pF{;e^1mGV`jIh2laty(HpqhArhplH-WF%S+( zpNg2fP?(Vo5tPgDwadq%3K;Pt4~tSJr!FR+1_T+7gH=uJ^qqWkxeiOZBLuZ8 zV=pL~H0Io=}r~9)PY!SGpq3Y9V6?UCMM;WlB`|u3!p~I4UNkM)X3vQEIk|s53+= zL{~kT+8X$0vTQTK4_+=KU_@6xnc6A{?%*o`Ogu^@TZ*oEGPU8tXoFE0Z9AM%0KI>$ zJGYE?C&wfaNu-9E(-#evYMM%THELPnMg7diZpl(}3j_r@+*2qBTU z7l}(*Xh&nqfKs)rxV<4vCMuv(#SquwB#L&KQ!xOtH@TwF6|E}247IhfEnRsKH11St z4eSx+MzNa9M{jn8Tj)afD8NK7$?2KaTA6gD#0ecp6$BGyoAq+F6kYF%>8xmo^Rni7 zowja2YB<*=$e>jvB&F8QMQ?G>qoz`?@XHhsQ?=)UOZ1q`rIvTm5Ifa&g}qIMQl)^I zp;?IDI^^7!iv#AqQ(=>7t5wNC|H@d_qqi*vm(@fVnZ~S?UIy*6wPud^IvhETT=aHV zoOK5MEVx)_;~@9S83W^g`dTOzIvmc~D4+>+N`+P}dWU-fEtHM7(IA)3cXA-*+?n;3 z4b@*_>IeJ4Akvja4M$ixhlLwg={wyEpR$$~Sp2eCcr|-}@kv8AO2z11t{RnMem%ek z*}#w0z$b(o9j`NvtQ)%QP*#Ho8*?IOF00XJ=Ul=ODP`knhTyfTg$hwgwNeAaiukAA zy;O1HN{~p-#;n-fSJL=eio?FJKxM0qY_*f;c+2QLZr4xK*LrX9Zu1hEQfd%l(j=@1 z^)`C1D;hxpC`s>Y+WHxs*;>*wUue6Gx1rU-1i{faje4mRz0dH9c(S^}O}=ELseLl` zt)}mM$yqei(?F*zx3d)-oK%BA@qTv+At?`Bi&O>!VG>M5`EEt1d}!H44$?uBYiB#r z2i&f;Ha5hs7#4|TsZb&yi&z`Z|H)ON53ZIbH3=grb(%TCpNQ7P1$*OaYibF7WOl06 z3cg?*1Ha}<*kjp53HI9C&t1kY--DI9nnImof>A~*sls}Rzo`*67=6fnk-&jL=Z%+? z8saD|wT5Mi)lxQ(c8ounC`2NWqF;AMTaB$49d2?D(`#BT63|d10H~gCqq)|j53gob zYfulA{B}NDEMUW~MjvszaZ5=IR_w(x_GZB^bX^Q8So9iI;ItCm?7o_LsTl?(aeaD5 z=-eF9eRFfM+v0_U+nzgEgfRY%I090B)%S61trnFhDHS_4b0xS<2Nx_(C0s+z=$3(f zz64R5!={oxm$Rit3)zWKiWWy&)uP{UPmOUp4oIn;rGY82xid11%8K0xWegp~7)u+b zIzsUpxHO~RG~$yH1rHDAma&^6H?*1(+{kHHSeEM1M_mmO)CL4PmkENLtCUN(YOwl( zNHV*QNhld!)LgEJVHiUm=D&P&+rUz0CX-UcMG+(2u8TNYZDWi0n5rrZ+9I}o`-QtK zRU_69%N?P79W0%lG6vS@ycZ$ZpupKy1@ zpi;npSgDG7j=0wK9}XXHzhKLUf*7%1_(*Fw?l9I6K1gK1C*9*g9zr>ZqLZTs?7<%K ze(K+HUnK}<4FMX;4f&59g=Z6zvhT$L#%Dfxe8VD!g|>=KnebyYrsz{W42?z?3fH{S zLFLs+-E~kS3h+-HO&G{)?P~Pf%G2}NL0dJ%bGf&T*RqSh%_0X=L+}X`$1zupKCS$4 zaPd6OIrb=S70|`YWxOP^=Rq(STLJJ>WPNib+%D1YJS{-Py5$?V^@)Ne45C_zKC>!% zQ|%z-6-pS0E1+q<8U5}cY_nFUtCiqZ1Z`%N~rRmb>Ap1Ya_q_!MSXC5eOST zXyPd5=FB;10z!k9$7~|m+mWbs_SMYEfev$X`*U-1J?Aed=s~!d^I8t)4?zaaY_3?w zBOm>quKfaqnMtC6#Ie9`uFPP(e;ptjYd@JTe)c zn?`hKHMKNz7~ZNx3lOx7%dr;S`Lv)xE8A$7OD#@?tQVVbwdjjaOEcL*JKM_P(-j+5 zmF4*Tr=^)h6SknvDJniMcw`%l1m76EoDAVS5}mRGVJW`6GL`s zVK>Fo(X18(4gWuPM=y1(6c-W4rHPgbQ% zm(rZw6D0k&8xJ6%CQx&chh1$33$+u)CkDWxv1^dfwlBF7PG~pR4G={ysVYhCseM7? zI(z4E6G>a6I^vBv8ioh?%Ch+gOA=d3*bRU!Ho9jugat6^BpHLw&!Us+WxZS01vJR!n(N%MGV?sX;Jtd<~Z z0X)s;2I6TBhqc+zx2G-nndWk%oNYI&N;azq&e5N^;@wi_UDP}|h42@Uy}ie5qcR~A zW$gFd>(OBcX}cz_?mvB6@EEfQvPc<)82d(!$gMwHtp<-ziwN8%C(uzJ0gTaC-B-%Y z8EtBHNY?}2%c%Bx*fB8ySZXRb;akz4uXYUe61*I%ah6>G2$c2cYi{CP6K#QD+J)MJ z#Z4q-f6OD!!xyrVYYV;RN z)lt^dM~Ll5QZ+tBc2Jk|)X^d?nA5B=bJvi0;bPxVycy6BTStkb$#nl3LEv0`!x`0i zj>KkGq6b{rBvLl<@cqL;%*|q$kdljetfAA3Y~@8pBr%1!eb}L!tww*TD%60UB|+5{ zQJ;4K9>z_`10!s3awFd7TA|tGB<)r^`YU(H;A|1lsi2UrwFnQ+vJIKon{qSyYj?{E zOI0*WwYR-%>kjOkRDuz)goILJ9|cM)*3}2ybE)Jh-lj9he!{;|v+ICqvI|)00uZ_( z!Rp*$#2&SL34_Vss>yfhvLespkdA=|eUNBF$akYm^hv1^ebW_R@__Pq@#}ku=de>+ zFN3EYV235a%36yaTE&!RF~Q~Y#ab2XYMp4z=U#3)s*BULr= zrI#udC}}PF`@<^UV82kgQEjz|-yp205&gqb$QQTHCRK4|Z|%;10nE*{SrCXI2BKE< z@QPh9Rj_S<5lEaLSEmrY!{#@38AjhyOY1TdkVkoxF6_9l!`bTioWD_?6w0vmWv)S8EsB-AnKa{hhn}FeOvYSJ#zSSixUG@fa4h9D~E6p{nJut9}~wMCl74B_`(LE1`_Xp-2^8j z+tWaPB>hVC&uTjvFqT}F4el?t1&bVgPnbY#NTDJ;Tg_Svv$O0ltFqheU)&cD#*!FP z@^(^oU&5)Ct*s`Egdk5FiP2_{c#-HbEUCaC=F~^ki#VWXNre{l%q;KSw+9Fid$Gio zU=}9Qr48l4QO>51=wDZXiwKq_j10(wpmU|rh`zImN(fcJrdncDn3xL9Z1mk#RKnpS z>{7?dPM8?+QLX4Pwa=;`XajOE#G1gIIBEq{%GFvqOmzs?oZNx+@_X)Ub-zN^urnhR z8H>9)ftKi9MV=0p9Fav%(_Lz(EmRhI3l3+h&&vj&5^^2=;UUROc24h)Xhz>(wOCUnxQ{q?HZn=rWGQ;weTlF+Bb$mBp1?5e zEk2-yM>-5t*x1&~RT*fP4a~e42cv&?WruRn_^URaaVDET_zYQD3rjd$7{gkg%P}g^ z|5@!oOAYo?<_X@*5fj56fanMAE0#y}VVez7p|8UP*zK?}$!e8W+iB~m@ zNWV|4b{$#;w(C(C}rCRkVi7vT+)g zUga<{#DGSQtsPv%6usFK>bGFR?ZGkTD40Df(q#hk*gwF26YNb0r-kTx?^mg`X6B79 z%06U!u%Ug7kF-Ec&|Pq6s{zBp$6{#L;$jZ%0+Gyl0rMh*!a!9)!eJi>!Qc5pHhPPv zK?H^ptkC}18i7vxt8AR0q&k)|VR_{mvRd?3Gx(>s@h%EA2?Qa6jz9up^qY-*^fvFw zY*FR%t{N(62`!2puQ*5FzB(Kzvwsr!V)G#3|HQ~f?^uyYRx0e?&sNG9esXm=QQ@85 z|FW=Y_HtGguy^j1W32Fnwh8Cre|9tEo1N%gt3wFRw!kwlT(^NZ#i0W?cu62_4+$#t z#aGfkQJE4|fwzd`kl3{pz1v%5WM!Tc@i+vaf%C74H?JPO#}i+MproF8P)lwn&J`68 zw#H|V(hb_q)>x+on8$v^a`fJ08hU!4Gv!PWdxe1US9A8R#+%1`?W>%jfF-_)<)B=z zalq62ydJxiqEM%E;oRI#JtU89OV%>AgoL@sZiSQzv1ac;MULBGy58^giojdWJZuq| z=yLYjv^hJbRjgt2h(6$n>&1Guw8sfiOmN2|^*izX< z*v>YPyPKR{^g-|4{f=;gQWjcgMZW0o32yC}Qm@>!J>p~;q1c*u<-)sSyPB_5b67n~ z1j2bQXD*ERiMOsA-;P~AO;1L}#Dn3OV+xy0KrC_Z*Zl-@a>RI_)D7op;0z^#uvvi9 z6C3CK3YA-v=93tnNOmjo7O@ak0q!R8$JGvpNPK9ucvf!b*w_Jl!$Wh;Y&QCJZ$!=K zH+f_Blza^g~nLkft#;ozm{Bde{6147G<5{C_7elMzN5ZiHZODORLX^qZ@#34a@8szMAl ztRmYgMju^mP58&z5`wyl7gvrPi*EH~TW8-k2Jw|aK`tZ)(fG;)v(FxE)-ZW(HiVSq z94mIgwF_klD6UrX=sD4C-tB5mDH=gZsl_D?)WvrFqP+{xXElK`5_u%?O#P>=E)AlW+n7^PGZ3>nXg8- zd!urK)J3~K;f-(QOh>MEDU2QAI%~HQOaMm^o-THQiAio?o!hfh*4cT{1iMsQmo&L- z#v9+k?wLynBXUz`p`SR@BsDpCq21ctc$GUMl2P-Sxw%?lE*os(EGxF=b0=#+=vaAk zHn%xfJHdIoyOyg_5SfVr)GKNBjz4#*amkMDo9WulJ+FH1+MXYqaf&_nXkinZv4nGk zVRPSRIqRD(^%p#MQU{=SUOjg$wkz3)w)uh`I~!ai@!TUX)*D>Z<+Qo8Yo844xodIG zncHACi=MRix#Mzo&1Sa$9r5WOte>2g^OS#52C;d6?ueUyu%6SyFOq|!-Mif5&i4-- zIN%;Q-_yVH!;xp_d{^GOJZOf?&mSd8Qyu605q%^*B@gm_`Q?0HZWE-;<(E6>k7+i| z5I>rvxTJHw!=tU4CtqqgaQ>7nXDjzEHyylOb6kEo?NC2G8=)22@qWtp+ZXR&(|=I2 zGbS(BX?UyLA^R$c-{#0@XI$Qo+8@6EnExFv{pE6E?l|uGm*N6ot}NtUJh_dSv#%$) zn#SP{UoJ-GmKxukyepzhb(FN>$=W5*LS$A*gax|D~x?w828tWty{OwU&kfJBQ8%Vk3aH}hY|Vf zjU35c$28=wmpZ%=XU$O)Zfcr)lil%gdVTcK<6MJ0!V6mQ<=SJt)tZ}?{Z#50k{F7c zN^#Y)88{cbN>10Co|eoGLt(D`BN(ELf*Y}W{;iuH8RN=8-p2oAzGTAa{yNF)Fbmv} zJ;`WNGJKr@>BERjkC_iMFIvh=&&Xu@<7-LRrnq*QX*X4JXQ(a@HF4MK=sI`9s5`oj z{QM^uegn-ecdmNt97^*~61>#NI(KAZ-LWp;_8*Dn9*fkNyUYC}{^R0rXWi(r{sA{U zc<_)jb-)SleD9t5eXo3vT{bSn1q}8aBhfg2n}{^dH@zd&mDPI#*q8XX(| z2Y+gMX3g64x+B&<hgD{=?qUpY}iF|B3&n{-61ifA1f3-{juwKkWa#`;Y$Lxc}%q zn>YF4_pJMl|2UU{A9&6|{yAZKd&b+SkAbtvb7q~u-Q=wg-*L?$5|5N08#Z~<>okY{ zne_uNbWU<60x$4Sa>n^`%U+5vr|eCWmYNT5(bBvNr{}{fq@DED@^{viY`m15Zg{I^ zTeDQQ4K~|nZC{qCZKKWhWzDwM)b^T1jb?4O2bS;K-Hy%opyp$EGKMP`Rd=$@_ONCf zG1;!_W=p?L2kelLp5MsxK__sgj^z)toZ(MOp2h<={Y@swnfeFc8-cUfRXOBr&y1K- zp*uV3of2?+Qfh|Mo1Kx_G5IakjBoOe&rF1=-7_H1>}bI6_2G379AfEy|4aN0#zJ>@ zX6(4o3;kg1I7wfynlr8z3S?oHObu`PQ>k)^9DXn!q}J&w>o8|Wr`;*rYiXZeYrn4l zfK)>6B|35Z?1UBzMnd-_=eS@b7(c;VUjb4^!pGiE*|JyU}B;^#+?2GSr~dK3GpzKmp-qLpYI!- zWZmRt!?)>RJo!;vfFGk%fH)%<37lZ`Bqv2Bhny}5ddW_NobL;oPe}5>e2>TZzNGomOXd5j>7pC{ z(Ra-VwZ7LbYWKl7-#2>eyJBHJL;An1dB#ke*DlNxJ`&gU9nELQswA~DkhBrdM{4g*N&I!JgNo_gs z(ivxq6Qq7M6moedv*OG;)2XTO$XUsr+H(E>c3uu;PtA@@`})?0x`#9Kfiq97m%*_l z%fZaZmPbF~Umm0`yE!u&KJkRVJABBwI0H}K7yj^rtm8a4&;67mEaLKcM1}Vq*b$7* zn~V#yI8+PCPHlPO&aeOEx$vkF*n>ag&;dv#{idh)+n&NI?3?@S8z}C`%_7Fo{gEx- zbk3#sqqDwJV(m8_$T;)CsCLkgd$OPtQ--O9lc!VMjMtX)7Y?bX<^x)@A7=M(595@u z4gQPE&m-bG+ta^m`YB)?bUF2-C~=E9HSEV}7_cV<8jxm^x zdwD{l9z|!2Re43xFRBpi4geV_81QtGa|~Z_0K^SZ<<}e1lTHM4C*wldA@o2d%tkZ_ zbe*!7H5oU_S1>Xk3RB%EKNRBwo?v2EZ#j6yYp%NX`Wp`&JaA>j7g6At`PtDBBY=M( zaA!sK8=vRThWYgG%cKdN>Hkl}^zqDyiu^7(0+|+0adPM?A$51Fu7%n)L!YE>X^W=Q88i;7Rj4BC!-PpPN-d>TQ(GUt z>3$G2bY*fDG(R&g&5f45bLfScZ&;%!wP%Rth-xS%051eLjEZYipBd5WNEmsU`n)Zvinb#K@0PdeKa?@U^A?tQP?Xn2We)b1>5k5r6Ljep zjt-GTCZRhLCtN?D;im)f-vHm`$&QGnGdZ1jP%>QtPCcfj8RbXtO(0RG>*!=1jJ#y+ z90I&2&j(Ig<>MJ&bW@$>7w~1Km-P$$vbT+#)^yO4w9R4;*db49B48RNKSl)BN1hy6 z7~n$`_Of@rX-AjBwgvEQ^3G4Re}1(3hk&ZAlL89_(xs;i=V)01#uMY&v@v9m{Le@^9#a)xyA?WH+={PVCTA=& zubpzHb|$klo)PED!Go8cHp37DSNjBgKswWQgn7{O^_e(jLy{uzH)iP5CT~;vJ*HEe zyufM*balfHTgTKckVfW$mzT-ZXT0#z-ROO(P*{n-JL4S}xbx^pWbvd6GPIwVf8mVi zW$8DI;JtP#{Ex33VtjMqt@rYs{)V*33fv*Tc>752+vk}9noa{avyR`_yd5U%V7n;Y zHFA%Y^`@piEyg@E{8s-g$%r%BPo7Rp>M(hWNlG!New6X=VeAKe%2HSMz=h{zqMjE@cA)zWoE46 zSA(%Fqc11_=$7%9&v@Y*-!2%tK7FIqHS0}JOwl@BK8LSQNty^u(tE@wKYW|yDtkMm zwNOo~=jo$R%5A*5OZp|fOMggmc1cON!O{?5R@MBnh;TX$hmapwQ@Zb+Dt-%(rKA!B zG8T}zn?@W=y7bV{T@o5UbeB}*IE*fhO$B2&&w9zqjNTmj`vLU>^J{#^^+X~IMp&Vn zWEKQz#2Ez`j%OG=!+Jhz;-x<qG~mW_aM|1W>}s7lN>0$UFc>g1n|I^!B%9 zhEz;Q-L~Zk7mbk-h^|8-ZrW{{7!WI%!no*rO76JMA8LT=^}4#Lv zM@++Ld6IwBrX~%Km}H!il00UUyA9j)(QslG5S5iX(HW=rIu?JkGeHS#MK0Bh?PCy6 zIJ@_tUr&nnZ6xmNmgBDp#x4s+Z`)G6=Cau_D9}nP7mP5#&_jR%%u@2~^E_goQ#@0@ zStC<9IWPue2&QE6W|TKTWzU;2-iRHzn+G9H&;e53yVOByyItxaB}+Z^bBG^Z^6Q<_ zCBQR?EP`g@4u%<*J$zV7h-IM;9;hrN%v0+?IxsDC0XVg*Prc7~#|E1`6X;QpSMJM` zSVMe-EW^`yOuYnTaMZ3bCgV#9-y4@VBwmK|U2VF!r164>mkJ}`dzby*rr)FU{1fjz z#^+fWC}N$Oc12tihbIOHe;<>9%rHBSfmkaWH6_NS1OSTKE%;9fIyo(cu(Z4Y;1~_l zrw1uvx4ZS1yKk0t1&Yp?ft4C?x}Li8 ze|Y0ccjCn`-xPUFtfZnuJo+A(3ET#&RX8;tKJM?9htrQkDu$2oKOqM)a)z+Udt5TV z2s4jEXZih@7IrWpK(D1dV)UiEXM56+QbxmP%W6xbPdqUu8jyz_7K*(8f{e3$Ke`7= z?!N8e&p>-bd+@f;`s5!$MGEhG7cI)j#O4W9$Y&G`l1J%Ncr5wc{oDEb?9-0h2QHEB z3%0u%0Xz}ynRxMd@U@+1AAk!aN4hU3rUB=SYSd-w+FzDT;^qxvYdz(Jrx=r{rXR@Jq| z#5Jw}1b@6d7<=XJvRN1y6-E6$0yaEh5>nAQbj=%9-m(g~;y(QK+9-Lp@7cXAGcJ8V zI5T~aDev}y#T(CzNgu|f@oBm;*4Kyeo<7J-n?CTw*ysvV>DgY;G-gOBjdw}{BSu4W znSI;5AowQlpeTj1xF)NCJt8C+wZDH~My!*ePCUcY#9(w*y&F)Ym4&KK12cAkrN}&gkW!rEX2<+ff-&gND3HQy z(P3nH*Jnma9D7kE2dXiQcbF zM!UpM!Qcdk0XnHo)?9H~xDh?EGsG~M>cBr;ItCar|2(*XprQ&*!ARNLV0x6!j0*MC z5z~8VdxJ%)Zo>LFL1vwDXgPwRZUSdK3D)=)#6;kcCD#t?vS!A_0x>oiz#OSm#?}Qe z@DTtTivet`2f&o=FnQy%5HaoWI7rc5H(5T58}ty+2MaAaxC>Fz;4rYKkPaBqY3;8# zP7Sik)a+5RGYZ0v2$f*Ew(kj2yG5*Idix=DR*1crMFAFy#>eFe+FuYT#6{#Q>|@#R8dEx@u=r@Kl&QMZ{U%j|J{REO5J6;Kmhqv49Z@bC;!- zzV%`PpiH+GV8UoGCTI|oc8lqe#puNZsjZ6%bQg>=@J$L+YT%o(fL<29Nrm^lXfP0JmzQtb;&^T@GbFv=pxjDLudqsP*$3S+|(s$iU2h(v<{e;H?IV zerP0vz*8{;F!REXA56_7ey8`J0t*ZeoR%3wkYH}0`_T-1TPnKNS`9~$zc1SjkY>i| zLpgpgS+0{T839Z_FFdYnUUd6%l}Trj!uy2t%{u-mf&z{ZV@O(N3<7)_`UpRWATS{q zQd}y3yA}rBWCh$8iFn6%*}UgDeB#+%WYnY>mRt6IXn)#N zWyEBDTwa&GtKO~E#F_OisR!jX1GK3&v%V$uT9f*An`$%bTT-t#sqeF?HnYAZ^#+rA zlTEdm^)0D4n$%lus?Dr#Nu@^*+0oo$GJeWtwB__I8ExwAHdVjN-W~lvKVyIDciFqE z|K}n5Q@_jJJ^erLwm+RXZvp9keNOKnqaW_?TQwI=oLHq~aJ29KCYx$A>swN9G^w}RRGV4fl6s3t{gh3$ne{EHx0}>EY^u$yZ%O@(NxjRa z+RXZv)I%oq9-C@2>swOqHmP5=sW!8|CG}pD`hZQfne{EH_nFj(Y^u$yZ%KX7q&{L( zZDxII&{)YwH{-)5Bcc}}2(q~HJ8%Ou78SvHnh!T2o>K(X3{r8uPzSYC2Ck?Yuv^i2 zATFqtgqyMW37wIO0{3)?m=Yd-qK}Tobj#4Rn0g_npN7bjP%TfaRaz-TN{P>`V?|hA z3$@dBMR4P{klxePgCV@Y5wWdryoWnLi0^24{=CRvmnxSKN-q)vnKf2WwE0%J9t!98|9d3R~GBUEY?X_ z>?o6Iq$8$Pv3ZXy?qiPmpslt3lr#i+teGz+M3 zd79W9(0RS|^;aN0U~BN_r3$G`a*C-_vY08No4raL zeU=GYEQ5%_w0DBM{s|gog8F0-W+9oN!;nE#`xk*TLr)ab47M1SP6A_qSqg&5L?>O3 z>bc`4g9ZY@!@PTXR**3`Wy` zB>jVqi6@GPwb5DZDgn%4a{mQFO2sNMb~^i^_5nGw6SOsHcuqX`+LKXwGYT(IIa-`t zv(m%yV3JK)fg|e8*z7d6Hrve!6P7k9`UaWMHp4%A?;)mXJbXaDWA8dOOoSu*GkDNN zznu;=kXfn?oR1QM9s^xKp$GItwD5qmM}UO=6_Jwne5 z#gxJTXQb;8xCv2tr^AW)eW2F#af}4R@e5H<#7^9^q`|l~{jOoQ-PsvzjccZYnP5#a zx76fN95yJVdwP3@JoA~grvsWYFIXXb0R#c1HQIAKEE&L9FqwX<4qzhvN&TLV7efZJ z!H&lchIJU1>7J2U1z^_7Pd}KD7ufLtHeIhVF`v5on0zt>YhQR=FotPCgcrCs<1sTP z-3BD2)3ehUp@JEiz3E^^rVjsxOmt>id-$06-k-s0J$v`;1lS}C%`dg@edc=b3D+A; zQ&$r)fC?z)Y_}2atf)?X45{I?ozaPC29iM6*{w!xf-4gNk%%e2gzh5U0WPL)Ak z3`dL%2w6<5z6>TMFg|_15++HbM!r-iV8$iD6LM(H2-If_%5b^`W#tK#M*i?m2`0tD z1xO?-&J(>6oKveC@(s|To$?L5V8abzbpY==Oa})YK8T|DhWl4VIyVm0NU-b?#j@{8 zZcra`YVhSTS*bqC_YTQoD4%^4$~P$s(N6${)%6p=4fElHZ=t^QAKGRFZ?X3)t_Cb? z+5inRJ7Q>rkRWW$ECdmS3LhEFFycNDlETUer)7lz8(AR%ifKG_uE@o~NctUu9SjFz zlRQJ1;%6P`p(L=?nfe9XWY3{*KuR}eO09NO0dI3yrW8ElFC`1Tl*NT2(u&3_k%>3c z36ghXoTlFCb*nzq%f2M0YEnS%Bu7z1(L|XSFg1vC8Qz7XTUOmzhMokMnoJgHiYMVx z)39}@%<8z*w1jL}E~Ozj!ll4+p|8ST{IF-bCGhLZqbXtS^05;yvy;t zbIUlyNGEH}s6WA30V#x@JOB9*>vxQ0AbeaePdH$|;f7|a84CTa%fUV!dE z;Kd34rpySl8@I|{n&PbQQ!r0AgMn_VPJMJOEiolD5%IAw7 zjqn9)!qqG!AQeZ_1cZ1KNpm7^Y$VOe(t}W9RW`|!;7>|ezVvm;1;MR~mSMyOzejAq zt8VxH`lgQKt#@!bt>Lwh?=9o!K;f_!-;8P_K1mZ~A#qaf^cp5E>9UQqS+UCqIsLu< zqOgIk#E}R)Gy%aloL&pRktn6nsRdz5{xo#?H+0oEB&!a^(-oFA&-5*`ht#n}_I-&D zUVuQd^uhrFi$H;H3=^;KMph3RW#&k%hKt%t0mwiA5$D>N&@BHp3A7UZ6#ochwqLqb za4?Cg1tz@wMqEGPbA+u125+3v(eh9cpr@KhxBOs&S#T4zj2`|+RKs)I6 z%E?f4QHX&-AuNz^uwB80$g@p64iS2Z*lh#7r zq`OTYnYgldDet~29SiB+l4!MTXxceFp=l2+3QdzfS%ev)Pr6TX=sp1!25Gz=R0jf1 z@CNq@Npid=Hcbf?$Zn$3AXlCb8i4sM(@nzFBs^`5T!8Y*;c1g%;BdpwccZzEQfo$d z@HHwnAczPFVa~_FQGNh2-DXCIZDw&4+|tcFrBQH8H}h0S!7beq3uvO?P96{i2e}Qi zR%(*K1u(BQbV%EYvk(FzhY^7J3M48=*tE;C@Q}`E+zd~+k-Krf>iNQ8)fe){I>)~; z9J%v`eNX+E8dZKwji7~H3i-5Bqs3(6nT8sD?Kv~}rbo@#2e zbW8t@snLTI-pFvW5!>!kW><^|I2-|>am6Y#^$SW!uttJM%rGi3(veuDk&a-ZqG!ZH zks+!pibY61u~;Uj8gIQNb^VMORQHs?k-b&ou zP@`e5g*5ZPFwG!*Ax#~&JQh$2#Y_dU6KBzmR34*)B8nwj49FGBSF%STa0kmenBtaZMvR53_ zrzD(c6U1M$QC|^`FDbI6OIX8sMharfwMf|_5aB6O1zH}(+-u*m=T8En~>q}U9PDCTSULb;q>%QrR96=`%GUz9w8FG?L5_#*K4 zbE+=Sil4-;X?fQT9xF?GRq?O)f};!v zTR)hC9VuhNNbx?jl3269foEZ~H_1C|D|=K;3Fefm8+lL4wPGZBg!lNVMZKr1%c=LW zsauKRB31fv+Df*b9rR+m*%7^6vkLx@UDLy67~DO{0if_!oa9_9faRSv1EL71ybmxC)O@>q8*KKj zlV{SdvT2xy;-q~h1>2DnYIPG{Vc=*G$QytcN`0R0Gst)t{bYy7`kS}U9_?E>j0zUFwFq{Vt(vtCJ_TyY6cgpH1nNdno)DSn8$94g<81baAfva)6BmQ z(+p7Q1;+qy_aP{Jv%5D|!$2S%C(6bNTo*#rk4WDpeF4RgEdl?#ogKm)MZ~x}_P7cu zRSJIM^g8iz2Ty>SiGI`X4!mwLAAQiB()VMY>d zVq(}Cv0(JEuKc|;5^U=5=Uy!X18Vm}b-mhBc|% zOlnvnMc9ip^XXxlQ3K9oZ!<&lI@`?e4bzMoa3*@28JgEEW~ocBjT&&4;dNER>$1Y@ z*7fkZVwcy6Uc8vsRpD7ZyiQJGjTs!_^!*=jGe}@sy=N4Syk*Ol2!F-8_If> zh_Ckfhj0Ua>50!b@}6f^0S=mHRc0R-j=>qz{O!@RXOA8b>me@XU@2Pk2%Id@wI6e> zt_?TuI}jz-MUOOS@K_f)3V-k-z9Lz}^OI>aOSmmb*|8u+cc{U5HxWJ%Pqis? zu)7Rbb(g`UUDr*!eqq`T-87WdxX%BY%O~gg4OW{DZ~3eY^vz+GPoiqN=m~NI z5_dOu9K^=fV}f-01tW zH=TGN8Dd-k-4lZ-lOd;lxU%bc>igr%hD>2rm5?d1#DV}pVi;1>aF6LXomhU=-1*iE){ODZ#p+rR)|qO2!!@JfwYk?x0G z^>*pTV%J~a1SX>JN-ZsR%PrlK3XdYG42+&)Q{tx8Mo(>;rCMPiBJ?T)(XB2#9Y376 z?oTGY(V^lI(Di*GJm#=K2^h!iB-AL|rAC`fdcW5RCzbetg#Hwbx5(`l)|L(@k|W%@xJ9x0p^W*>Z z;LXXztCR4HiEflauko3+?^2`0#&CPGU$qqJ25Dn2Q)q{ucyQ&si=h}wVU8xO^C z8%sA6Q`N4eb!d`m9dEB4rkUkQ>fr{Y1_9#PQxyR5?x%Q{%@*e@E<8aA`R^YC@u}sH zrtKGVCG0_TEreR6S@DQ&?7lf(>9WYTCqkd$A;Mo^EWq?)R$>KPJ)yQwu>J8NwZiL| zxrb#-0`Va{{s<1KbqyB@MwN$ny1^CQp3RmnUj(^Hgqv7``p;Yi=S7H$rNcz%9h#0U zW;4eaq4$o(k#5j27gwDsLJ6lCnv^Z(G)uRn!xHfA7333J=}J6pF$-9_B@-TYf(J%9 zXrX#&Ez+kd!$SS^+&7tE{_j20QD1Rrtp^V3(S*pCgAc7WaZHJg#1WY^m{l2d^@rB} z#^F#6kwFpRjHs%c<-0UQ=h#q;o()7lrWlL%4xPhHS+CHUWr1y3OHq9)_t4bG23Y*i98BI5 zXFFg_i6GTaYuS$l^8U9Y6%V=gDkU546v|y7lc#gUAbT4*45%v~1S4`Vk+^FX9Dxl- z2wfr#*yD(d>$wgucx>Le9KXq@x3GCY1i`Y28SaY+2`zoBj_ej(Evt;Yry_Oi#FWP|g!z(q!*2 zZ~ar4hfxeOY( zPz^GNFk=+A+H!S#i!h%y~ zLCs38_OF_k*F4k2g^g`E=4i)pj#_`@5$n=x*UUK1^wi|UIPo}UGr`|>qj#Pu?=Vq| zQ;j+9YV*f2zZ%Mdu0(>MPQQB$OT64=D5o|c$%lFit}$9e`b5Cdn{@?oqye)b^LW!5 z@~3GnG5I}X*w)nb?T31o?n8+li1?HQ&uj7JMvlM`x( znn@Mz{P0Ux9x{rzA1*zU$C}o-Xql6I z;Y<;djdN#qn(wMayc66<)UD%N0<1U7n0Q;~w3!Wy;%&K3%yiB6%Jzwi0ODR%{D)mb z00tZZu|~q&gEhv;sizWn3l1glrdcOFKH)LBUBJd55wxynKHy+a4t=;+8x8Lfti-7< zCqO(b&%^?x!aJBf?dWoW>~b&Q0PifvKituEuBXDgV(0qwF}+>0(&ms|(>Q?PyQa4z z3PktE*e~5R7G}*NlV?nb%^?h#wGwwb?pXS&0-FSoCIl?8O0I+mmZazvXMJd=SEluo z%V!JPNjPlMOk$E;shLSbx%7&(m6~~$G$X;iNi&H&y;3t88{wNP)>djpS&hW*B+VqM z{7TIbsUvh)uV`DT8Ran&iIg;x8kQt#@F#I6S1csJ1J*{Fi^NqW&4?&96rERdu^+x= zm}Zo#V2;hI@*)<&Z@LnQ zoOPT8{~m=Q9#Z`nV)HaH=g9D!uM1I%O@l%O#3@B!(jYQVpDm%6r-h_m*ogSzWxs?_ zZg!*iJ+xbI$s?dwj$2u{SAwl9gJ?JB-NemQ{0En%-SDX8X*a6bP_+9xxp66Ff}X!kP?mv&=G>UM1z+C89a%2tN&n%vlaSZsxb>80J4T60gz{2I@dOAGXz zkzRO{ICF*r@54LtyQ)xV#G1UkkCzq)5|B&@NS*-15yS&<-Q$WNz(r^B=X`l{ugh^^ zd=oe4r9Z0`3SmQKITL|HLL9F z(^`n(qx6luT5PYB57zG9&YgrJx9^fL6%p%Y^WP2|v+^$@UU6fCoO^WOvS8#&Y9j20 zDOl56|13JOs*apcsOR0|wLqKeZH9yEn1m6^xz}7tG7WKB6&u~AhlvvAoc9+g`V~T78lUMx5 z0x&dpH)k51X?~xhddN9CCzJ6+Y?}}8MPdJ77UXO@dD>;J7UAjA`G8HCj)+#tk6;Qp zn|YfuAyvpW3#0x-X#^yMj>!NOZp>AH3NS!k62&aKLe4Zm$vR2^98pyO zTvWP*q#sF7hH6cBC-~uC4Aa_r)7obiwRXg?t*Il>55F=@Yr+%yC4Va~C-T1o8sFf~ z3zOhcw1?X*&$y+_NBkS@yX%+YBWBSCs|+r)dy6M}K`Oiz!w=XW-pF^tS4e8jz3&Nj!50@+A=(5fa-FX z`oVFB+cg%Zm&X7aBkIahE|YRZClDm)+a5QxXsf3r_~y=MBR&zZD&`ZtM!H`g(AWXd z2NL}|H7t_ZX7tYJm73AmfmC?Cf?`5Fh8AzFu&!56uhf((QhhqX(BiGe_4=V+UA zYW9}>?mcp+5@vYB?HF3OysbUX^?s zQGd74Hv4>tXMQ0b_AC5%nfHo8cSwE_i~5xRS!Zx`{Sv!c(X#L9H2`3sf(HS{U`Std zeQZ8dj|}F+VW_`u55=VGSCQ<nrO{=TSzJkZ` z3Kt!VO6#4`O*oZDkcgvMC85|&kaJt9V^{ahHiNA?(yqBvgbpD^OUp0pr(qWZW#{NrP(Mho zo_Pvo9*9O)uy|T!o@X7dU;%~ccI|1Ed7gQ=U1MQ-Wu9J%XG|oX_;`;LQ9Hc?$ z;1V*Xev_w9`G5;_q5Ww^#OE9?w8JvGU3*#)F>|R4S#sKX{ zL~a!i;Lw7)^$~pNt#`&O9AQjR(7fqIL1n5E?yVLxX=Z3a-O60I4%18=?j1hZH4w)Z zl=G0&;b~`z&1!x6b4E<(#W_r=n6ySkO}wS-gVBj6vA@hIm`6NqI$5%lSzyCS_ZavLi|9m*xMf z=*6JJQ?kZH3ySV|>o7Wq;vm;GF4A}=n7yGi9t%`njZo zcYsqsTzLILr%~8|*5uMM6+gKJBzCq2JaXXV29-hCm60THr`LcO8>w)4rSlPt^{>1824j^`$%a_ulfby4#bS$A-x{VFB^iAd`Ju&PEB*Y-FwHDy zzkUq2vk0n>=slbh=|hQtic#1LH>!L}^xVdU;^|}V^vq!k2jdANhC5jiK#+ceVf4qR z@9Z-A^<73k-OuQQq?V1{TKX8(e-(Dl1v^g(JGXJG-x-E8AhIoxb=95xqqF%ZH{fls zH{hY}2`piq7!XyrgzS2lSpDr`X2wg-XTc>CA7T=CQ~%+0&oQ~T_o_3wr)WpJ% zY4lLy2Tt&~m5c}k(L<#=zKs_IS=>o3P&<({>%WnGOt^1klfCuWoY8$eRd?zUdaB#+ zdH)Qakh6I@j;B-jK3>|{wDi%#%ii;Oe9sMPdK3!o8i6>h=hMmIL~;P3iCLf}tiv0@ z^Med=ElcwClwOvaigzjW-8QG!%u$9Vn2eVo{_bB2cBqLzg(w<54^Z0Qz~;dIdsENF zc%_#dDm0q4VOvI^7m;!`CRa^z1896ZBFhuTwo;POBX24Ks@fXf333E~P%bD83k zx$bpU7wL^KF2!R4Z1~r6-Rr=M^cLMC7DI;Kt;bS`eO6#a_7_T!gHC7q5djVXc3ngw zh{DJJ^$>4YKzEihmAJ?}s&zNSwwJ7u%#g=FzH8EPZt z-nxKjkF0!c`R*V8$(L@v?*30c=3FfYS;(t@`m48m_nr4V@H-F5D`eULyQ*Ay=WO|# zhu-nsuRU`A9gj!~VlJ<~_s3tp^6R&L<9EI*uSDDhk%7eY9}C{|^9f>%USeLS!mr>A zapR;D{BcH&C2GSg@m(cPV3l80i4r-%4+s+BE3IO17mK*tFBsiYz2>US=+&9AE$P?s zd*ZUp*wvZwEl0ghA`1fNvW&AOc->{0@vAcvl0)uDb+^pCE^w~SxF&JS6YkYoYC=j) zP;T^UrqkWB?sZ9?%cO~MsQ@t43P=jZ;@Z1SCgpZxnTM$KLr_j14g9!AeDFgsO514gi!CbCRSZPU;?9KGHDfSm&pedbH9 z6r%uN=ZSM;Zx)Y22Y9hxE>z__CHZh|uFE~b@G>|2PtFiwTNaz6_~Gwkfy1$jv8!IN zpGsz3h;;fd1f@9;jMbMs>?;G%J+=ab8z6?aD=2{QMK*x(l@(G+KR0<*wlnc{GAr)_ zDS*kuyxF(_5D<_jdr~pd%Z-azH06FqqP*pxCvVFQf(W?&2(JfE(~NjMSR{MKTn{=g zCt%4v^|CWTD5WcLatE&N4V9anBr}AH?2{UH2hEz2B5*5#P5c}D%8UY?)4k;~y}y25 zF1PP}aW&3Ciik}VIF`{(XCz2ZO|9}R-3hr=)&v?(&1Yszc-^QCEgUuRh9*Ap=FFPi znY9wkxS$6TCKy7D>GRrPRIU*aQ!ev3#_!a?G6Xte{+J|MaaN)LxDD8JVJ&9a-I-B| zD>PAsV=`9<<1otuS86usevl3(uVi>&;5oCY4e$~(Go;(KvaRyA3n&6#CfV_wM9w?@YJ4eOhoXp6z^Zw|?kx8CBn% zx4xmZp*x%MfV|C4N=CQY88I7Y4UHL)u#%9N~7}Ommi||e~u(w`BR6l&|{gf?>n9L86 zeG%OynJ9{l@(rov1+=s(@3~M=xBmyDo1Ne!2b*<3Mst>kFq5os1reRSbx`_)4xfX_ z`y#Sr!?%4vx(UyRz=N&pG*SPsNfsm%39+}FU>3tV$r%CvQYSfLm*|mfrvBaRRrU@* zo;~4VA}FCX15oA{w{Vog)h^_srjfG$<~cxuNoi1Cx|OXPjLl6GY`Md%yK17tIS#ToY~;-}+QIx-XdA z!!0;7p~MGE?n!w^5sxB!W+yfCE>SV)cR0PzWcC+i_9ZjvN9+p^9(>fHpj4S6m)v(h zVa%r~VOLiiOr>8da*B351qz1;H6))$SmtJD&32sveK&@3r0(Hyg*uTdb=x-_M%d&R z4*VQQ%Z>`(Kc77S^mWW+MA9@F$85$kW=3RiyqAn3tWXC($G6L3PG@F%@I^Fes-iE_ zH}T%89~a@YXT^nFSnD9;l745V^m}bEwLR#oPW-_-jR&PuP?#CIVqT=>g{Ln4AhJjGA#zhW>nb+3t)^`wVbM)l$i1;LL9ZS~)*xgjEFqFu5oa&ww$P&S(BFd+!5% z*;Unf-aqgC-uwOD@BQjks*)6`*xvW79x9TO%nY3{f$q+&1qm@A*o$VE9%l_}b+4tX zDvPm-Or%>#e)%H}F4Ul*iArl)z{ECL6CM9VjaY#Iu?coWgxF?D5Y%V~hyr6;!OZ9T z-RItS-}}8^Q6SpgGhMZ+?tS;3d(J-l?7h$4`|PvN)=Pqx^kce(D$LQqHxH{#&6QdG zy|>=^aQ2$xRdzBxj)`;O&52r)^tI`71@qFT)X+_M5an!K(Sp16ZZAvt)Q#)0OL|V+yl*R!H z8S^g_p)v*lji!uWLL1z2UJn)0M{P#;8aM^X2=_O8<|ABqaoP*|8V0zVvnn}N zl#m11LE6w-wJD`}4ADX*bY-bB*d6pi^~jLX#b`C(;HkA{dT0&6I)7d+Bsmo>5=Jvh z!DvnHmAuPFlT1L2v&n;EJKRuL%&Ke|^gAhsx6y02|>y)%rV%P>SXZ5sEHQzxD*lH)MPg?u{vPu*#2JX;{`gP_X1Pk6krZ zi?$94MtS1!ND(Rinq{!WICXwMwxyP3WHsBxz zEhP<3P*F+*2B#k`ZvN5xx0yhd^n_pA@ynW9515M+aHT;) zcGgH0Hp`nTC@9FE`Vsok!Wb&qygrR8ADpQAbI_J50_}xRuZd7yQSo`<)Q^BV^}|UA z`<1(M-3dAfAR-GRkz3veRMD3eRZ7bW)UZizjujryv7*j>vD3M$JVPf>z7N>$Gt956 zUu#t15h+hVT9At|UxDE(55`&%xofh?4;b5p%+(ysed*uBDfKticRkE?^1Hz?^?mxq z(oZF6x|}SeKV(a-3He7w3b0soC&1 z{&OLc)g;M@Djs4S=pC}E`73@!i-nZ!!9d{ATlw}Oew;w^G~f_IX_Ry5gv6_T9ht;@ zfv`z)g|s3eukt(?RD5VjTA~%niU$N%6S(VjlpQ=$k~&icUlR%nIuctGih$W4F893d zUxW12v@3A_;T)PFx(MX}ivAB40CVd1Ibg6D*@Bk3VAQGa zeNm~VMwSIR>RyaLVdmw+NdWb2zYQ~K&gyGT=nzldrfTm#TD^h$$+5d{zNCDv%5|O& z{q!R0>H~*Zpf8VnubIROQBTYJIF<*A37?7bRD#3qyGAdJbd5Djn9D+U?*F8dbE&D~F^4u1xNV+|W|9)vE?j@Nyf!)p0+PK5{faGYv@e>J0jb_G$N+gJ?L;#~dDDtuqUUQYExJ*6724WUR zjyIx7kC+d$c!|B@w=5c#C++#p>$9#U+~(w^nYE#M?OLouYT*I#8GOAte}IvQdqRo{ zY|EUQDxkz;D=Qe+WwFJdsguuv#+mQyeQIBO$9p zMsQssBkquTT{6-WlM!M-I5ZjMb22)MhxJE(;M6wgoqW)U`KL)Yr3Z3Pn4|cC{p36!Hc4`h~{P>e1)ZtVTFG3BaAHYxMQB>G_NRbPWgq zzNHJ`mysghmiKhBhlkygmb(c9!ew)YN4tMK%w1^-`FsJ^GounLA&?O9T8x7v%E{+i zqC%{WUNINCa9uyh0YS*9s5dzCpu@)NiWUatg?OY z|0_yJgy;3CxHZAqmvvH4LZ0DCjHPxk32u{HC&iX4*^FHL3(IOeShLK6yl~h#V@-$L-)YcwttdZku^6RDLs=T|pKReuiS zuidh#Xx7boi4);ddf0=2G&-$DG)`I|W*bMVH{JpLY}_$hui?6F z_JkcLt*GgK*fxWyjb3@RFv$8Ly^}~mOrfDm%pZVmkcK@PSko-^3o`CN2eu@2=%NV; zPoXfLdqN5c8A_CvR786&MyE7S!zR$C=Md^_RiLZqBRMXGBMS5>%>I~o8 z5YvCy3I{$kgUs6&THUc=Yy<{MMg--{*h&-@oO0g=}O;Klaei|JkE| z^1(ZPPpLpghty3qT6-gpEP=@<)Uu|qLy2|%sL0nFN#9i{jAVFovenCrEVl>*2FdK( z-gZjDnt4fkb+y_eOR6z&>bKv<>xORKzNQQlqSt;P3&bB!L~e>6^RyHW9s$c)PGRB= z(hB4-24BQ0zj8IuOg&8SQ_mn4+#wSDeDe4>&(Cz|F0AXT;Bh|ASwzk;GPM$NjqInk z9v)n%MTWVMp=KZ>(8{hSAXAYhsB?i+z-L=fxo_LhPY}~m#~F>rxr}Ok+pP(|jJgq< zjrQyLM>@~NnCI;}zN1abqd@(UNBa|p%XJucUo*^4=3SQ~CKH8$pB^sIpootQyAiCx z{Q*s#m5|!}t@0z;`OPvZ;zUC2ojKPx|Al*SJNMeveV3j&l1@Q<)KRm?`eGgJsQZfB z7l?6D1ZagP?9mV151A~Im+0EbA&Bba%-GLVq3`QAN_VI&`j<>S*JM={x9l>nVV_+Q zK7GWZv`64#e%x8GhkHUSDR+cs$*WcH;^I3X6}R6k^r|0l_429%lJ;eMfus=@@C>|w z3pjf*y*vZdy^hjF9MzLh=Ti+{%R}(V|H9iJYsk$72y|9hK+U=pRPTRjZcP< z8Axwqe1Q1k;&#A7`csvV^d|zA2dS{e^i|ODY!DuQTA9o+O7*c_J|U=BKhP`|nU~WW zEl(C9pP&PQd_no}Z_H$zlY)&^RNN0d>I+i@8_=Z&)zHuA3MZG@T=~lG|se*?> zPM61Yz15~Fb#VU}HTgSqj{hk1&?0ELHP=J~Eu$Dn!i(i}2stfT8A2km;so2c#alWp zzBw-h61c1aKhld63?3N)uh)mj4aep1Y?5Lqi|JlIr19Hxe_{X+BUxr-V9|-Nq~d<` zgP^Wnn|xZJx}j9wpwJnb;=9RbJkq>-jE*>STcYy{I?4{@%!MHQ0#5n9q_|D0u?z@^ z$Ilt3TkY%S`$u`D)=7%TJgn4ra2MBy^XV|4eE`R$=AXdp7^MVnHe;1dJ}V%i&qDe9 zRUWSZNmbn{UuN8LYUw_bk$X1*Pf$~&+mR(NErx2Fw`?X ziKTsYyjOc^pVeP4?W-_4{zBnc+Fze9?E}sB_5-Y_pgBvPfb3p<8PSOH1NG{c9jiB9 z$|A88{e94zd$F%U!M@IV@V@Dq>`mTTLkA6YR_&{Ae+c53FHP(F)qg2p(q{ds_wYe= zR$Wd~Ho&|(>)BaW|A)6@L?Wpr`#|qu9)0}XfBa{dc<3ew89YzCMDIq(01C^FP+`04=&%?e70%Gk;c~6Fr#lA41L_V5XwJsoHfqo#a zWRS8E|C^KNJ{I}u$UadRr4>A~PZYM!x1unU!M;RcA`K{vr8#aKJTee9^-ii~QP{dz zq^DI4Eo|r!bd-vewP*wD&%(mp79_mdFpgSE?qjAvvNK z3Vw%bswcCvoh!eDc4Sx6yl2#?tEa(UulBPdZ}MF4pkRFm3f2<}&JGkPg?K{2IqL4& z>J{2+>ebnL#wUS-v*#!{yE-SKV7)~_Q#ep?&Kv~{NHEzNRT~xHR#vt7s(1I%jq7Hf zS|GU59Z31JW%&`tFH?+ug?r(@ynY!~(VwP=rMfh#SQa@xJ$Do39*WoT6JopSEc^@g zhZXWVx6zerS7I)T5-``H{{`*w) zSrnd!{Oj!>;MwFM^)New5`_eU0!O$Y=;Z!X--O)=CqpXp+?2x=lJxuOI>WQiB2KSi z%Ddcd8$m^N=UPS`KoCCzfqY&ym>#Uon&Q`(ejQr;-_gg&1y-G@oJ!6`aM$0&2(QPu z3o>fyo$@eip7zv!HjIzpJ%00_A%)X-H+RA6UM$Grok8HbP4q zX{3?9M<83)H>Gzh)KBZg1+k9=>b_mPI^SbGqV2`6=~M))%EKxE`Cne^DhoMBwWRG$f37)>N)9X zO^3wSKA_*E4>+YOIT>$v1e=WpFliM~`{52;f>vqoU{bf=+-RjxpEOjyzzC6Jf&cIV zqGc!5+kEzB_{>2>u&-3_Y^*fm7s|=D#bgE#Z(zX8Hmc3b$7>oW}Op0sMAaD-%%q-rhpdsQ%`liaybiyG5^jW6R1>Xi&9CX50=C;!3SL>`ba z7=+NsMKhm#ujcTKZee4WdQ(bqXT%XMOeNC1`~lh@50CJ0cxtv@U-lyKG!&1=5+fg? zW6n#gH6=(w?X7D)hg|V}JvbpLu;xfzCQj@3>kGd!|B40a`n!(ReeqvbSI{}_KyX^y z6;%E;ymkg4z$sTpY*^ngsC0x+cTUlJx5B?C<)fd%I>DnwoRd|_$gNo`bg5otQ zr}Mx3h=yyG>+0}nTvxe<^{_pjrlOWs8Foh!@A4X0$cTK1CbwDC+7k*aWns18G6|S) zQo#WscExQnCfw$CY8?ti*5eVJCXZ=Af~@IsTCJUCyzPaT6O1;zMjPq2zV!#eU403F zY0kXazwR|Y)0~-&Ub(yL8)Bh#npkiyO5hnolSYDO%48m1mTvY3M{-# zXM)F5COm2p*);B5Tq1=k6U#$Nn_O;x9JI+}UPRPofqbe@Sv;pjo%+;oQDpLg8@9Jy zo0K5wLj3kFRn_vOK5#8H0nMsoa_fz${8EFDec1+oWUIR$=E>~%Y>)^|1B7$al*2Yl z)!Y*XrEg3kCS+YW+i1}`gbWAukBUqkri1Y&|w`!WjP zfqD@aF!lWSbs?7&1avrFJcsGcAx=|GbPmqK0XN_!2U=*mi*9v3?nRY+Vgt!l2Mizs z8lX{<40LM!b~ejSDEamlXktQ75447YwdY-7zAFNk1T%g5Yrw22Ep@oQPnFiB{Eu!g zd6MbW(wL;~J)F9iyzhdkjh70Syuzr4JYG3IyLOdP((wGX`WNnH^PRmO9vH&$B8cr_ z@ji8^Sh1M4mq@2zY~?e$861d z=_)FRm_bqxV&F2Aq^m#TMV(feWfzpNh!g)spasR2+2X|z2@^P(7>~&%KiLbDY-j#2 zDl~P?rSweHTv_BLN`0{!3L!?d8r_%gI=Uj!mnFia^NBLiQao59V{f|?m?mm97EzjC ztHzK85rT?9$OBgy3UEk~hP2jK;uk8Ek}O+_a2bWK4rv6)&QOQ_I z#MMz==0Y<932@ecAvWW9#|`SM){Oe>I#eD<*fc5u zz}yZDTUpWhlcU#f)UP^G-_FvA_5Y3f$EiT4&q{#SUms4aO&Jw~`nnVKt7R5!$Y8Ni z;Jer_w%8nBV~^4xYF(Bo_GVD;iOTT(5hh(<_AN~n46_^>^+j4$VBk0E9{`51+HrjZ zt}^2ZE4bTHA&|fn2400;iq~uYmJNY1QjdXI`qK^@vsL;m>XxIc`&m=;6yL>HjIpV+ zD(}9zTEF=cNF>v2p-mA!XxF&VxW?LRgxMsLlH&=I%h6Rm@>*0789{iEfcykdvNTB4 zUPWzCTG0bfj2sn^Uk@XRoC#*z?Jw4(+@%zRxNSjlD|Z$<-lkeD14f4wji#G;3O0yf zH_fX)pjbD3%Jrl;pOG15Bo7jWNh6}t8^KZvwc`_l;4yMkC%e$-vzw?ky}J~)6h`=l zD6q?C>j!c1^1fO>NDRJ0?!g!bE}5AmBLpT~--0QBe}D19DF%2s|_V(KrG;~<=<7a(ZShR%g^jtsJO>lEBYJB)Fs{zub1&ETvp@8 zH-RsgD#piW>sP_(+CMcFF6BR{%LvNafGoE*5indTmYsOXZo`e~W_j6B2ox&+@3ZU; zzAfgrd3&q3)z;1Y;rlf$DzNEIu7ph}4i7wNCX~X|Ahh?3%Ru%za}FcIM6Ue?bn-ag zT>l!6(MwrXQ;rG3=c@j3Tv?PEt{e^@gf(MXP-24NU#EOD){qRFBN-}ZGjSTk-a~xL7wo&l|VJwUO;OqB+o=k9wU)Q zUxzw<)#R}*@>sVN+LSkseK=4}RG7%gw8XH9mhg2!OK`E4Q<=)Rso!`9Q{3bilaajh z31nYC{*x+mUt4Cae#%eYpPq=+<4IFSNjYy@sF~5L?_79tCS}-eS`81{CgF%Qb#P<% z4vy48MuZL~iE%wtI!2COFA0FFQwA}W$iB7IehwF;_C;LKtqyZxb>>jKt3s5Y&o8zY zvEMWH1|bM!KV%ih=OXkykBok1SneSPOp)lze{GZjdCm@WIF!Ffvdvjh=daQB3zYWf z$Wwxg(k>-#NGV273&P_n2^LXZ>v799YCOMUoR(g>x2KTeDmT+=@{BNUtreGEW>6Hr zw!eF=LW#rEB5~PSBwk~ihKjApTS?hi8fD6&xL1eCm*b_;g;G10g*oco@f#?tiYwr2 zyDzn%u6sLvaZl^syXaY$N0p0NQ}Z#u+zTGbf2B9}{K#0red@BBXwxT}Xn7CL&Yz(= zfXW%zumk!cX=9F$!J)MPNS3|P)a3D2gq2EqfO)|-^1Vi`ghgAYTv=x*|g0+G~z*Zwjw+ASE{g#l38DR0xL3<=hQyyEKRQ0DmEigt_+L#6%?F_y|ClhfLc5ifk2hPBfX+hm=*o*BIR9Grn z1Tb)$3r9?beMuBxSGAHI9aNfVWrNTqnK2-VHluOyk8^X2-w?c7s~>oe`ursJBmT%g zD9ZsNL;JL2C>*i9pKuZBaboq$MdUor6?c{)Zd3W067ThAdYU2_DQJarjOp_H)6j0 z*uG+bE&L63B-Gl?xx%sDjIFMA9LEX+)#1MrS;EaaN9hZMSmk<1Or=~pz52m_2btB+ znEbg2jYl;y8T~P;VH=Ic)K7r%6E2%aSswa~RVo|8i(Gm$MaHQDdSPZDy4HHl0(eq8 zKsjqu@8%ql14WtXPtL!!o^SQvS|9c_oGhV@gDsw@UK+aq)@Jp^2 zg!|I#n3bH@4S33+jXSfPeA+GV?YvljnHGwfauk`3vI%PVwZDEmFsUEQtDg|6E0{bI zwFN#kV*c`vcm48(^m*@&fn$Mv=fDYh)EFUVLdzlLmWW+Iy+u@m2th#2dQF*Sit&KQ zaNv&>?JU(j{jzlf>rwkW{>GA~?(x2|SUQH}o=^xZO-r3fc?zf^UaChXHfli;J|DJ#Hg=0iWVro>3W#CGW;5jiciepvm z+cGnsy@PZ($#-Y5{cW+>-Ry<*Ui~K~%d$a7&hni3*ufNOd&--<+ks_&i zX5$Vjnb2Q2-in6m?~8PC>4Q1XD>eN^bDobEr~^Bw|Gyf}Y6(d5#DcVa;g~4|5g_@h z(JH0QnG2<>nDgq-5n~l%zwl&(wk$T4!?q{ZtUpeH(o9?8^&LuYYG^|zfG@GrK&Fe| zBN*gCSprC2BuB$Auo4VCd-+5}CI6yrWJcRIiarKQ)#J+R^qeFhM3yQ?>Ip}e@}@6| z;RhBV{kc4mzp-EcQ{`rbx%>4`Az8SQK#b`X4Y*oAnjQTIM+u3$$@2&nfHLZ7#vr>M zD-w5;BKM}(p*?K;6TCFaxDnq=0a`!$`d2EJqUp8FF6Kz8EmswTYdPSJl8UdM+}day=W|DeJqNhEAVVCr0fxJ6Ghv6Q+xsX$b4itkVAQuskpo*Xj;O4YFnuo z0|ZS8r`ko1-sqnf`Fsl}8@tOxR`H-t>4IF)gk}9=o3PiTzV{vUPlQq`Er*iJwCnxY zvlz;0B?;n|>sl+MTFrG)PNo-m4Q*Ov`4u5gkkmQtXVK zFY0mMEGem}ST!xB3$=S?UrJL!F~$$OkdJrLcGQUN$?pg#A@595cN`S`A+3AO{{IR+ zEf&ADF)vp=9+P1Z^60(VJ)dfqe9$f7Zl+yFHEBMBJaHQ6bAm7XO)+u|d+Nv53P(E; z>I^GO<2re?qAxQ15Gblat`s7X!<8Z<0vh1?uzr=46-Kf1$X*gHWP}e;W2bG9ApJPv z6kAEICjHt1z!=petC>_wqKODL>sF}H$(&X1z|qilc3btC*?kImhi-X@9{-JyHk zN?n@K(K;;-je+p%@guLk{J~s~+h<+sDNqxMRBiQ&EH9Wq*t`e)-tEBnTk2J>RUha{`dXT_1}7MB)KjavuOrhQs4PA z!~xDreid~kFQ(qsIjZ`X)VH8+>Y4o2;?Jku^G_BeAxu6FHtd%%7uFleMCCl~-|)#8 z5wEG|W-8@=U^x!X2XKnK8lCRRpDC}dGMJmhW#x(bQ#?dnyr%x*kDuDkjOd70KN zuOqX0{r2mxMqEb0u2+( zIWL|z$h%-*mf8r}Lo!jx(S;ho+#gV%IB#1YzJg7)b?^!~`A@@NCTkftE zMkKu$b#mD_vlQlbUOypRH<9m#??G=8mGAckRvwX+a~KQ0IF^*3Z1m2r0?3aMa`U$f zWut4D%#%Gix~Z5eRts4t(5N;&o#b?tu?Ah-?Z~>t!zRxaJ|%vAWtq293gdYtZGNuZ zvu`=!ikfN~CMPSux*51)*R2GR%s@%FkZt+oMiW`i&z8vY(I@)(xJzV-l^GwfaG{3D zi)O5AiMgyz=t3gjkS7jn&@{`x4gNt}B`eqXvo~gAuN48shOr6lJ0?I5JSWGdV9r8( zB{c%hRR6ZLrogLB(*M#V;qla?%DgB^35g9dfk%S^M^0;29%+cu z&Xn6gsOqSMYTy}5RT;bx6AFxf6TUi+a1}6|P{G9G#$h%6BE%h_)q)FdZ-KC5tH7fKDRLBLuXrXE| zc8>d!zQZKFRc#($QC@OQa(ynGeB?%cVsvkT9Mzx%fuYE2aUS=UW>+pGfdU2m;|v%% zHlZ<=XS~2F6JB922tp0NHcK}iH|+_$p;^O zQ_7w5!8_jerr-P1Pu%lN;)O@Qzg28pUp5OMkFfxfL`q;^5Tk0nyw)6 zXXh_h7Ux`couv&U!35;RRDYghVW2uKllg{xj-8S9Cp2lhv8J|5E&<*V*1queEG|Tmlyd5Tbl{o~)oFnL=-@!KquAU8D)CZ@OOb zlK7{(DBOHr{&F0C68&ZUETQ?M4s(pgQ5SExK5h@A^~N2X-aL&#$Sy!++;Gzy-hA6V zkDa>V`fy;}fZ&l|q5J%~RIlgHVfg6J|Hx%{Y4$&G0gQ{d5MIG7QWf^49c>QO$*;Sl zsCdjem&A``l*X5y`Gi^2-y4zBA{AAB80F=L^qVyvw#Dkr1@O@Yadr+8{z5Mx^5c4nbK7eA)^#tfDF7M0^?9OH^vD10Xh3Bgo?0iyb$~p zt(Nt3Se!-J#FDUziR&VTBrE~fo$6^82;3h&@Lve`FjFmkyQ*_-uD2L^1`&t!ur7aanEMBkjeQOX4C)g~L49**kIBc^b&*MFuf=W%{U zSNxfPr0~#9mE&3%M!lHvo-piZaxs@8|6alHWNs@RMb>)Km6|+4@F`{lFq+yS>kL~TtZX)hx&(R4vc{b|}3ArQL zKW47w@^YJHU1W)X`%gjtfp;$OG`yvrEq*d1CUDOG~6ub*RRmy|us1%v1bv}hg%lfg_7oClsT3gt< z*O_3KY2H}Mw+^r6=}*zi^RoHTy$jm32y?;u$sYI(eaWXFEIgJhW$5l(zCr`TSiSV!zO6zfIVMS{g9 zunv_kF$W`3Z(K^>kzwi=(~FOZ;#!Nyi4jnfy=Uk2H`BIm$gTIhoRSbuj@YgreVhX* zGG)-%`RY@C<;9leuO9U)Exqih@Ls6{D#Y5+E8Yja0WY! z^AKR3S?Sj~F@mfcfX>AcJlD^5jG#`~S}}r5i>pTP8GgKD1Z7;1Q0&W&pp%X*j^O^U zWCS?}tQo|Y9hw9kP0wmCvc#PyhyH9YpAjVt)UVUlES_^~H9t~kN3Q*Ze{kJbO;O5HyE`_~++ zPx|(jJGnjK+wEJp{k^N>ew+IryTG{H7S$W!`X)9v!Yf>g!LCB=2YS;HQcxGiuU1%k;Nb zS^piFJYYBAO1H}Q=L^CqYg|R(fAVIvJI}3KTt+g@cc>~IhG*IHb213Epq5ved5~7? zb0fd;zx{;Yk>6O(TAg^QARm<#IgzZP`OWwoOU>qZ!)Ycvl0B#`${Mwr0rwB#2-Pzi z^>{kk!$8RbYjQundkwRZ5*%>?EO-}rIpg#)L_8}87OX`W^#uo+XiX8!P=a}7N|RMC z%MwptI`%{gD7w9N7kIyUO>@l&9+*CQ<5NEP4yb&5NvRSVCaQ`PQJ}E-Uw;HdZ0Z-8 z(@;8X1r@YymQY8S&|s%JR2wid%{PanF#iY2+ppLU-+>PZRK+rQ02&`!L}||yRcDhQ zyU}Ajr3Te^o6daEatclOzRI)-L$4mYjaN?8R%g?^1ZAOI@(K@l%z-?6`s@9lA~0Qn z7Ei>y?rk&@Czz;H>39%968+OibovEMn&5qMO5FN96?K7TZxOJw-b=J+J)u+Z@oQS> ziQBeLp7U*DA1UNg%e1DarLAs)Z1%Fu2guA!9(VGX@U7u0M;9_Ru( zhLT;XG={_>ICQzZjA6I7q+Y~L^I9$<#K@AccJtbcg`MMGNO9&9aAbRoO@;u= zQfHNe5>Fg5(^Olo4TwCW_PnVWQG;eK)>ljg;Hic4>*AXF5lM-3E{NhMV5LdT1c?$? zWtShMP6;P=IeMWMR`O3lD)fC`V^Uw|+P;f3d;FUYL^st58(hE>J;DA3_3^ETjBhc2 zuGP2x&FI6;Y*7dhCvnz>Q9yT8O$4!}b71_!>w>)4GaB9ALl##II2y0UK!A~aGQ?Jy z#1_v)yRz$4qAHIg8+d3+)zD}GzazGwo}gC8v^8RjMv_1=5OTw+t|htUx&Xj3t57Sg z%QaH>e~8ZfoIR)on4u3&eKn%FA1YZLH2;0DhFuD3hnmpa(UuMWtI zJzOQdED@=3hir)&lbmS>s6_%4a^-0wJ|;h;3ES-V{5| zt2PyvkZr8kz-I$_iLq{da?#iS$I zDb4tpFVs^ejP{w^S#q#%f4=OF3{+dlO0N#2{xR_hq&Qhbb5i_H$JgYO+YM{rOZ|%7 zO&a%X^wa9WH^2eg%wg?Gw-(b2SW*wKJ0a1)06~ZJ6EcV9K~8!qu_wZ-D7ta&w@dHD zUMDN;LCt9rQiO@3ME!YV+S3bTU;iIunGTq z7!7ez_es_)8La^B?NeU{B=hwgNvmU!=M)?grLPOy6?Gw43!>hih9Je4)2oSS znb07SH#wG|Yxfj9D=-z{slT|EWL$KSCYaDo#m?}nYJo___zQ)Ylo$pGMlH|4EU2Q- z9PC52qtUM|hQ;(ksx(8wN|czUp@D!MTO_hQ#n`}Z2`p{P)et3kWArLm!vj<@K>Rz+ z06CqCL7xv0#M?JCOBAg|9Od)vV7QcHt&tJvCy>0Tvur7v*mZuHQgMeRQUy^-6d*~= zfyQ24!CJe(4WG=V^*2aR<)KJOt;j;v5b|M7O^o^I8?(X$6mKmzB?ofo^T$PZ(s&c& zeA`^e&%;dkIwv_KzBI_3Yy>!8z8@y8p9Mn6V{nVaXMM`DI%V0SSLtLjinKG!_9Fk~ zG1!z9v=FyqLoG)jF%P_HrjdZ6ts;#)S;d>=U&@jb6)`C{aN%!i;Ci?V*9^E&QR~|c zvTcQ>1!2$6rZ~~5;6iu>T%cW@Z=|dGc)Hmn?N&0_jC%;t*um613$E8Z#*-MaQTmm} z<2!br^h`}(vl;K3GmSD}Nac&UVlHT>41Y6cTJW8AqWH@T8;L-m~684$u zvM_I^Y1E0GJOR;UQUZ4>4tI%+=)>q_ni^M$ikSSCL`8SN`abnh{o~W1 zO{_u%lrSFN;k`mCD|5>(Qn|NM&(P2^Q9%dNGm_Tf1r(C0!Q+#k^&Bo8x2t!=?^f?{ zAsb+UHn1nOA=?$Zs$f8o8s?;>oN&RgGr4hN5|jr(cQ8dG*|4_L?dbhqAtHk2mJrdU zIRxx7%?Sf|(2N2_0~E1X)*;378f4TJBe_cL(R>5Sf>#y^$e3tFokp=0b%DDZbIZCk z+$h1)NkEU)VFg~x2QVL5nY+A#8<-XTopd@vx#fM=W+%Llp=a_tret1fE{uK0*4^Q% zN|D_$P~{6XQoHXtu-Gdrk!4jjdk!9byZN65nU#AEw9DWyt$=u}n$zz&cy4#M15iSe70az5z!@>yU@6`EHWW>kmx>9~I<$KQU z5}G(7TzCZZS?+lI4DuhygysUV>|f@crBEn3*f{QlHN{&K!w;hl(D)Q0}=%{M^|QiU6@?u3WVn+ zj+P)xI5ve!bv1`ktc&Z>_xJN5vk-4_);j)-#R1GWCmT|bfI_!&TBD7aPxPa#Uk7FB z4gVB}rV2p~H7ogbZD7em@<-b^(V#GMVq2vJSv6=cVX1&v|6(F=#C_>@3x zIDZ`neP^k#LQ*{4fjXY)*vfAfd$Y4w=?WiN%Oby%N@ z|A@FFcM@l(U=|hEI9fve=BPWli3v%mpB$XP=S}zN!ZZVRXhxRj^{=T1*D^M1*PbNe z>gFNqXGv>c^@77dSAQV~`p&BIWBj2-`Icv32I}#~9%z3ks1!foRnVtz_~HP|rS_E= zs_ov@_2gQG)seYCR7>f#`ipoJi*!OX%3ZWaAWQ@LG^5Y!fmzM?D`C>A5`~Ou3gL}U z6)F6;#Q}vNK`pUAeZ%=$Q(OTVLvxy$C8m^cD6})nBkwpR6==7aB~2%3ayk9Xa%0(@ zT9in)OmjnJ~7*UB>gisO#AY*(u=Uxe`HHaJNTX`%7Q(S?M9-i9m|??8+BJcHqs#H0K3-L~I(C>_?uSbmB#g`{-o?$!L(-Xw&O zg4-4eOyPz0uog@_rOp6j@MT;S^;l%ZGjBf<3u0+eWkk*`)nes{bsE}C-=UwpChbn* zE5uxq)nD-p^5%D1C?nHX+9qGg46=_9njfV$9DeO;&=-rMKi{6Mv^&kL;vuyGs$o5n z4I9m${5Rs5WNY9aRj@9bGagmd?|ekV)x&)b3-!pUgxp&kdoYaRUlkqEX%R;&O106} z_f~KAa3t`~8Uz8M<1SrF`&WF`+64uXOA2!{(I_{%rlEsOLz)M9J-nniq-%yc!roY= zyyH1!7s1wRN3!bD?D;&SAd@8@Z}Ra)09>+PZ~H!bxYUSsFbrP&w-iI6+e9m}FbxzgOJS&z|} ze2->3#P{GxHpZ3CWpkEu;1?(^k}KZsWq#9n{ASIWs%mh5{rh?x8if(h+wcD6+K3_KgtWhzmv*Ue^#$9z^M2Y@~u`S5*COHzjqk z({KV<9x~c8FbGf|+9i`AKH~3(In!`uS7a znIc{4(KQqq5mvzQ-ClD(>C1AN=5=xU*O+mtWVf$R_j>swt>|6OVC7dLHK?|p%G1%Q zTUoBM`fQB-`m_C{^HEBp#haeqFmKp~_5LV-`dHiXrxgmxW(80yHxjvRHJr3?d`hEK z>HpXhA<5(9P?@8WppFOzt@@tPCE#vm2-tbRakw<%FG zny5e0ee|2_-HAlzNx!9b>* zXa}W^NP@*&h%k7l^(8IY-=wEU?33*L7onZ>>{?Hgm)8QOvNy0HJnyLLs&C~oYgMM(LH zx5DskY(Ntrd9xLU_z5t(b6H;u&tqT6ZVx-Xrc#&Ypbz9 zX+smh<$lt-I`V}Vi ztGN5|)3mEsiPoEzZ4weE6w1dq!0>BzuSLBVD=D?C88M5w0Kpn>G)gHHEkT#DnbsovkPjvss1wW zFr5!2`M8i?UOU07(KJWT`vP z-3p;9#(S|z1&+;eU0;Dd=vdj==!!Y+@UCUSY&40;!4Ie13!7XX_=!^zLKtXqUYY{D z>d)(8BR$Woo(CHvy<5+t4|MAJ>7JMO1UhbN=@1&hX$f8S?Bkb#*u*H|co2WA>0}oN zJfb1mc@u-b_&*YD$B8VYFk}M9pxZxEk4A- zDtX!YQ=r`}*V>f!sVF@P_bD`t(^tsHt_+GppT07LL!r#or>_ht#L+1#6L$l#fA??| z@{+5B^}nIc(6KM)BC;lf7vAY`6+Xc_qGPk&dyYv@5!R1RSEPrqG{V1peOl=$DJ*@N zP<{|CZz&|2;s%&)8EJ^U@9;bP2#zkzC_!*$QIXWsV{>CXv4LtnU!6vo?ym%}L zrt-}50d>J#HRyk%P@b7MeCpkZon^6l*ROTN;VmW0y2!pm#8A9}w z$2Hv`Iu&1mwsCCqP#F`H6xUfU$3tw()QTxe75$K|mc~ab(~Mq5R~2nl&JcL?JYbh{ zlv0f_(JEQsnw3HwVI)VgO+GzLhi;@)BLiW*RQ3>zF1}Lf(uQDT>6IWfr5aIU!$>uv zuz%szDt+L$i(tOXF!)N(+)_l2wlhu-$NinlhYWbYQG} znXGy@^z!w_z+q=eKSUd3qCf}4!32|-T6DJQP$Vd#nBi_YT<2jtSPxon;##EcCpNCu zkCV7!5Pq0-99UF3X25hv6>LzEq^H14AZ^yM*%%EP?E!*^3zd1oX{==HK#WQ!&RuUh z*1(gDit_qMAqV_S8LLvIR74?)4`*aCI9`o8GHf=MKc_Dr^cv@2#V#KenbIKU6si-K zi5yTUQEb8BXdcR?@IvefHwiAN8R(DKZqoIkC(r9^D?*dwv>qQDmQwnS;0~)f^js@v zoIWCj2KNRZL4$e*E`^Q`-6HQrG|#nR)4u0 zVys6$m$N1~U(YDwu?Z16g_QQ!PrgOYV;o~UtY!p7A%{1hD-FIvl^m_dOdvf;CT#tb zzvdODL47mClqIi!PH9XPK-)xEea^+udsR%Nn~F`|r28p_=T7SUjFLQ(*}Bd#=H zCQXe8{QRB8pFYcA^exyPsm~yujy6dnCH=CgsH#Z0BdOwjO%>dKw7C~m=aY}==jf5e zHP14TT6;NC7;O$&SmBNrml>m|ox&&>CQMSYO@Kl4FcI^YkcNXxtDWHM-xy!-(f{Xx zQzSUBXdYu$h*i*%)j%xNj%dXb-TkDy z`+Tt1LdOjySm_Xhl8I4X|7Q1q<~z>c>i{l0GPiHH{WsdU|tjo*Hlt1Tw1(yvw`e_BLmn`@&4? z`HQal;c&L*9l0+(iT~Twd{_R6F2}-4Uf;Zj%j@^P7LHJudNtXTM%N6^Gh}#fXOy7BABFCb!6TZ zw}BK}gbq4I0g>70UY4ipB}j<;GeY8ujx2QLC3cGmK-Df=vsZuQJ*SW;$z3FU?ngPkI=rK%rQUG=!W(^q-wV8M5ox_;f%1-;LSD;xd&AX~Eqw7|j>v-1NV zq7w5)R^QX!?-a44-|h9*SngN!QGyBYNQX;;qMHAM_mlx2l)yS{qS1xJ*fa~uY!w6_ zNB;!_;9dV%bHd*{9UR4tP)f`Y_7|n&1cg+Z#c47`@fuA|wanIaNWq59dc_6tW_|IH zf^}9p!tCd06Bc}RNWq4b#C0E1po0`p3ZX_+3e6qEm4_6t%%VdIm=@C^1*|CRkb*Tw zZ_>Gmf;}12fl|^8mW~e@_*4Qnqeg~Dum4Ao1)bM2o3|IK+X8BMG=E(rJJ(3IS`l;XlkEO}MiS$H0kmI9!SBpw;jnNCqm)htj3- z99QRwI2VByHb}u!I=KghE-1D4K>bl4aL>ko$@)@|O6{!Q8ILs*@3|8wcrk`zR#jPep-GaUk{yKKfpWm@_iw4|1f z(lz5zkryBe?ItZ9YBfQh$u}F+XGu;mEyOVBUb@mHnlugW_y(aTiX|;t$=jeo z>!r;>8FF4FqLXMFc4?55lA^)L@o5^g93X}*;AM>9g53|wV0A6gAjfQr26a$|7QakL zd@JGt7n;E}K5KT0L02n+@vqt2DCn&-kKYD-a*{AaU6|ChSTB*aMHy zenST@Gt#M!iWb^eMRy5RCjh_CQ% zG6_InzHjwf}A)*V1T}Yl*jf` zGB~U{ZAV^bHw2KB!UUADW0c(CO*+i9s_xqoV9sGE={~cEs;qC*K`L$cbs#4t>o<0v zesZHcn{(w_vt+y1PIzF%CP%%^`s7W>uqO5v={)Oez`ficl~c2xelBaYW`17E$mKGe z4UkDwiz|F<pmYH`UN~rpwa+Yd2uKgnzv^57 zERNqzt#?d0nG$5XdYM~N&ZGCE>Ku|f&$8+q<&T0hz{%_xuLcumADf+5ovo+m)!X-! zuc^1c6C8f_z2sQ(qcptCb9!Pr)HoK^Gp@!|!1f?1IEjG95sp&IOQCIJQVf_hs=Y>< zh(i>fWGkaghd@0*L@HG{i&!M-%RYK&dRJHRi41ncoSzvHu--H$9U7;i1d;r|EAX)sn>UeFlc(c(Vlx)h>}G-d!;sdBQ~90 zI-@W5xwCT{XX}o`38K>q$?zNled_{s2O&6+kamb(um(>5a+iU=5OmnEE?ERogPEItNOAvr|G}A?32}6K!)P0#eXVNttaj~jvK5pG7w5r0CNuxOj zFpmGGdLw$}_cF<}S;6{ux7Y%531kp+QdAaIkpi1G7Cym&)4VWy5_jw#cgrl^l z1w_N;zB)BRp7x1!Pm~P?oBVlDF&KiZwc;xrxN%L%bvF9m@Go?nS9AY@_#gdR<2(PW zhhji3D|}Yi)*YYKQF{#BKc1>z4ZF%?Wz&TvP8w*Qhqu7K$}{m6NOixe|{IEsM#(^r*R^-XLR#Qf_i}q zctqRfjwxMF0CaImFJnqKGHs)$v6ItFZF>6V-1JQbA$i>9;H|o2lGg-x zY%AL{e^jmwvSG%oUSuWz=@*hAZfh22ascV{f%FX7aViIJaK%(dM>fe_=-%NHq z-qhj5)nM{e@WwuWw_gS@B)S(;3@6xUAko~@7K-M7in4oMR!0w0uYF?y5v{p-o+f>; z5w@QA3Zjn@8h@cmipvyIdRS7Gd4SgVb>ZYM<%!1J9= zTOHPk$?g~CL3jR=pc7=$0ji#4wGUX|4Jp#Mmhoc0>&pTs0je<& zuqiE(#lMz*j3MafJ)W!^)oiXODdUTPrO4vcFMVb5rGPuSgT`W7mbeXC{sYnSnYB1q zr8_Mys?rSJfN4?@#mXZ;XN5&D&@viYMNg|2R1GF}V}9ezfO0Wc)&Xi!r;Z|%zY0VI zy-A-DmGcp6tH#}ue%udP_~i#;ZUuE9SX85>;V{`V8czo|i?yqU_FVxF4s{gj4qS^0 zwZw4(oaGk-zNAn~6FegdvckyBC8NRGe)8cr5?T!rG$m=oo$^+4!4Hk^t+jxdysc#4 zjrcChV#B0l05hvFrIq9z^9OX|LU4o#U`bd70hkY5YFE5U`EABE#7u{>B#Pc^mRUGJ zzFas2d^HL+_I{I1wr@l-vjElrGJvMv?^;`(N(gV?i{=-)GiKkcT#=sbTm7<0@Y9}n zy;3T6HQ0csHSo|Ra(SW>EflFE$$`+!G4ho+txJ)W)-j*of)%W)0w06zq1IheRYkT< zvVt3z9DwI%?etmPpew5DEcYHkrL z__W@qY8&IDdB))41hTWnaQGk+Np#r>a^2&?CL?XXAE_U-2$TFJXtDXSzr?+_!FkkU zHMbnK8(IeCH1O;*m%-6?q7nrY)xvw6m;0doRE$dX;en;D|pwJk9 z8(BTC+{<;WpW#7mnheFbXAde%xva!C9vt~}bAF;)g@0AY%2+K9iwI+|S^IkZE9jOK zSeEmktk9Tkb*0aJ$d#%P?N@Lcrxz{Q6?*dnZ>{F+q90baO z@dcF{7LEKuCFRS!db?Kte%Cmi*9GEfQSL!D9_q`Zd1I}MZoI{@RE8qnp|@*kj}G`F z(;zgZg`oNmU42W3S}R+CV{L_5>Ef7{weR0L?^Zr{sEAa81owKy*5J zlPGNd3`WPihs%=8HqSwRl!c=*F1v7)r;F2b6h%(QQJR-laFpgHK`Pmw#KQ{NZ}Fh- zcjqV;@f#V@Oh;lY;VmSo+V~nGTCRzNUj*MScvYV@6A5#xIr=?$p?Rr6f#*?sHs$ds z>Ywa73q3%22&!VyWcAb={r`K~(OBg#N1AbY{VYFv-pid%naOMMBc=#+CBpie;L0U$ zBmG(s$B}FAj`|bY%Q*S46j%(4a`e$v!A<${%qr*tLK7cE8J%uiS`n3kwQDsYg)1?a zV4#rgTG8&)HO-4=niN>loex?+cBs2#2%mUY@Gez%FwZsTl+tEd~? zv=$sM1#xXj30?~eX+8(fgPWL!I>9w*US>{2=V^nR%*_)#Q4m@9TN+nOwVoQ4ikO0% zP!tv1wB80c**mjd4HVpz&x4yn%Yx%r(rV+HnBM1cP0_9v+Vg6CQPbs-C|^pZBD~G{ z>x<@ogwYTtqqrujva?lSww}947j%0u-H zk)9lySV|H8ltex2Ys=wJgRbU=p1wHe4chRhK@y`Z)cdC0)^7X^d{d`-Gz#6X3{rF1+UC8j_6jVb%1jrZNs@jkV(v@8(oogRv99laOJh-5|CI^>=I!YXm zYhtNFAIT$#SRaH~XP{`2@R;+-Q7dLtn-Fr|U<0#(z)tdaXnB`BjE*m-ouSrgNqpI^ z(++p6(+=INHZ^w&I1~0$HiGE7|*`j3IJPUJgmYknac{f>>uhq#RC@;IR*Y zG&UAIZTOT^Eza%m5IjT6B+nogJes@UQJT_hK_iXC@%bU-XpmfG&X?eUbGaiNLuw`R z#oL?XBitPF^Df0hYWW-Sv&cq2gNLpgocC~sj%*K z%E@Q+Tf0tPV1J->ZeUli^;VJPh*jRbD0Xp^+t2T5zjwTz5aGo9sEy-CnNT!U>V+0k zX;3*Wa0(Hms27?&RV$Kr#)_oE^yFw^9DH_d>?7@^EsX+~Fg=3*xbZ%~I4PYyrF=!r z+QW~$BXo~XVq<3R!ahA+juD0Fsc^YeIKuRX^DsS^5|pW9nz>1($b3>?PwN$lt~4dj zaynB;!YYZDc7OxH+R@${s{HPo={Ez53IJH6`Vk?zm4RrRgcVl|Xyj&nxJgu2ghtWq~s12`;D{lYtE^yc*p?1Kp<*m)pUk$3x=SVtx**kW>n zOiHbEWVLb{@GU!{ngKIqD{RpvHoyY~M+(BQt-*oh1gjC)%GZ(KhuBYO%h7B&zI#(X zPz-u3<0%>6&W^w>ipMj|ly`?`E6Z801Aqn&*+pSYK+)t7!ii>R#NQ&Xs7zFnt*p<% zVyRspkeE*av@>sIqhB2?Y{txksfx?ye^v7;eN}2iW9Jw=%NMlSj(mZUNu~{WXRO*3 zYS{i&T|ytlbA1(#Y$?V`wb2xfG~q}@FW0z$H5FvdaU#JYiQG|mf4jPbL>};r5_&l> z+sFD*)lAzY094bxdVf9BDb`C20NuEHDL=b+MZKW;PA}FH=ot?W6C4q=9s`Oo7h$_H z6Q3!1k_AI5$l#LvNLHCk3USGL;*wB2gG(s!jl{WgdDcr6GiGb^((D^kJ!X{T$G{Q` zMqw^Ggb=|KK#pd{P0j`M;8h(4m)%o+NcH^K{m7g8)G0}w=CmQB?3pWT@Q(cskP7;* z)}hmkp{COcP>wDWV`1Qd%n+@Mi&g>!NE&9_1ud-vmWd<7GirEN4Iy7?;!6Z1&R8%? zni00!XP~KY9>}8^pk2WjFi|4!VTh%P@vY6mMsVp@5q<-J#bpu3WH?U~eFGM9fNUc5 z6idA$_{O;cMt3z}QMELYzm4@42~Qxj+)lBCNDPU|vW0<>BsfW`NLp)Qn`<_@b1*1>^u+EL&jx=p7#Bd*ipIuz?vCeD3 z3({!}q0fc%F%Cx}##t2M7C*;SSkR|4UE67Cl0yizVyS)i3&LtF(S%+z5Zn?1@Q_2D zy8bKBX#W)w8%Vr}w6vm=@n)_|ra1joYdR#6 zV8ULtm}9lH%XRXf$oR*J^27~H3G@K^oiOm08j2`Qo~h)JLV#XSOpt4ooHvt%>Zer& zL$g-D^TU#2XTHkkA%%^UE)=%wP3s}6hI z%XNtZsM}m<4u};TZS`LEX0;M$ZS=cq#PuZw?sS_!g`%y)*&zMN%fX;%esr%r{phQk zgoHmY-*B8+4&By|KBi;fy%xRW)#JHdDI{aZt55mW$_gL#E5)+y_{vAlYnXSw`VE6& zU&Etqa7q0%4irXz@*xeT2%!+cXb%I$rIm0v`nC1Lnx@2!mrBFpS?^lX1a%)Phnml{ zSbVIkXiVPArIq*$N?U%sNwcQG{N%US1qVXvgpz zD$Q{bfDBA*2x^3)`b7s*!iJ*$65lGjE=~5Hof|!#F7nA6P1*?==L9nL8|Fo1oa<*h zka5tD@!l-L!ls;6$asby??A=@nq>nDs_^NNL78P_?Dx*uGeic-!qrhB11m}( z7+Rh@EP3SA{4bQCtu?Y_2(u|Jv+aYOhv~;DUOP;`9(qM%`f<>tHqY=)sp8}TisI$m zQq*3?rZ|=aF$UV?(Yr>zhm#n^2kwmvtn9Ir8J;+``wy?To}X`xr|!R)Hb zDH1C7LUSwy`?;QC{|-6hdCW&h;|QN---gld}dXB96S_C08NBNTpeRWb7ZOcY~&P8|s~1(=3T>pkjp`OkO$mZweX4-9}Tqm?J~Q z8)R&#IFq9ME4^!~4H6}e=_I{H0Tp;Cc!0-trHuwWrE@cQrN9$t1#oo7X`r@xHqkj< ziRuD0aMuN`?MVkT6>mUuPYjwysu}>=Ry72!jX7NZ!gvIlT4%u;DpElORIE-ckV9{d zfiCqFEmYY;Co&b!+zA!Wx}7joY!$@Up*)jJZ1q!J55v;0TmDq@=;8Wtm-$^eci8)M zx-S%IhJ?^M$?0h*6mC-#exoPsH)8I;NW!0-{ZlTwdF~9I(T2Vf>A+?7@-Tyo0b`?P z@&GZtOZV(}fU@KP(!-S0DtUmKq*j^^sd1O2Rz+;olob#jAaB%MC>$Q3Zc-~%i3iAT zbp(i99ZuqW{WqT{?_6O{4ew53T4ADfcLaW1Baci1BDI=(bzstk4+xr`Zjyi z-yehhk=%*jRR_W3wX&9K6eho-3CW?Qyg~eV@wd>~SBOAH1{%X#iA<5o<20*s1_ zzi+BlF~q16CppazlP#i1=m9|j8CW3~#lM3t7R{Ao2mec&m zH#P&nFPG-0Ow05}*%AMtEIq;QhAA zOL9d@7p`<|%V3&FcuebYjdAutYm&llNyTpDtgRKtMV8F`XrN6H8?>2Zk6tU0@K&6>S=g&CztRA2v>A{Tkbb0v2>qrQ^6jlE? zr7#O`S7%!9dVCFB+;EoV`QlrZ=O>xu`NUM0u&$SB*;SPTwLE({|23wn9v#r50}GF^ zb|tX8rEFrf=d01aUmkAy_!18@&Mg`ug%AHEJOvdZCa*uj%8S}x#F+woz!-Vwc*!Wd zq^a%2Eyi9H7<)mBu@?o#ULcIgGIzff5SB0&SbTv#)5~wWxOf3h306h$HXbfGpsvLc z#M`i6vACbbd$rgE!t2=VI`0(o0lb-zD!UNy>AF0A;)6kbk7=(Bx5SSpM%Y2lKkH)c zGI)@)O2uD`@Z=(sfDk*DybBT3*JU9tV=2@wJb30D^Sazri0&0(X~BdM9)epUPW)(F z58qfLF(gLR8&uYXFnvW4Yi$t@6E_Bo@UvmeA;R!UDJcvuX~WJKbxHKS5CY!bToZX1Po}4A^1aeiWJ$~l+d;G`q%I;`liecdwyx|> zd$N_k;YSiu!;Xq|1->m*X;s!gxUgYW9BgsMn!oG1|XwSpn$4yIEilY zGC|fs#R~`LiyF1O>4{Xm=?pDJ{$n#j4gss@t9yA@eDF?Ry!t7 z8Y-=5L1{s=#L*2q@J4*Nq*THz8V@m*9odP?T;l=@^+*5r!Ez5V%dIzi=Pu-68X`e5 z$p}b3)?2u+-U5sScqn|P>RmCFa$R%g1BC1x~Ew*{1AdhGwEHIQ)D3z05Rik}c8=A6Mp42w*Iq11WO6daon8Py|RW z>IOEpieYBGX{#F5|CqgagZ= zW9Ina6BU1I0hSF=yiq&v8x5DGdZyu#mx|~3_hIoZ&jYDFs@}L-b#KW^--@(5@vTxH zB8l1x_RK4wUxjj8Iq}?HrF!DvJupP|(F+j=S(EmXi%waKfJn+@QEgqC?XMsG{`)P%=ntk^1zbnAy;48aG_2@ZumG=wTh;_cHS2(yfReD3u_#{G{L@Qh2-~vZM!W5<_3x&hMwPyzzlO>eW zcw(SsQ>{cTchyO`8|yXv+D_)Gt>O5T>j%3OLepsUM%4cLHrd*>t*oUqZYmN?pV))x zPApeC4;z(C$h}>E{6VnQJgnwO4V{b=8BsV%V+-622Xr{Oe2iEFejmC9 zJ85)56Uc8C;9l?&`Lb>fptyI;2&sZ?btlwZz)S zik7tbeVxog;j)#y<)A7xOM~|ZrI+=SlW_UFxE>n zq#&h+ibOtkQA59?1!$@i`HVq+xtONV#Y_s6H7WQIuyQd!;X+G32h{a~l#S`0#?RyZ_@P*(2%1bm^HF*ftr#c6p)Na|OHE z_e`maiu6JTU|7nKn5UTLThH{$vBdK$q%G@(nwJai#*K08In}%8lXWA=*UO^Q<|JDHE!eqLvt1-P|e$nsS6P>uPJ|8Vay~ zqOKu)Ezl8!R@crF{i6;s^Qx4j2miLa)J{tBoi-NedB1d+vR!va!Vy@TphQo`Eo+voo(8pcy3{q07Q<(~fFar<&%hRG|Hn zK9d!1CUp?Il)2>~&>Pt&;l{GABrVGN2DFl?Z}BdBb7Dket$VXh5?dDbt0smunZ%87 zqqcm7V8feZ>J^tFe4bdCFJf{m>o|RGt|Dv&TW`VE>Y9~FYA@@z|G(_Lf0Siab?&v1Y9HLo9|m~Do7=kwQ5fQr+~K>!o68u_F8q-Ny1!)b@M%&OTByB`R#aJLh2l3ibRE(&tqUpS#wt+-qP~Yb}=h{C`)j3tC zfF{NucI|!kUVHtRYyMhu&NWxZ=dnZ#(nKC41P-B{W}Z$q#+=eAVS^4EvU4agR9wa~ zjv&ogG8hDRRqMj2Gi*+&G@|4DS|He!uQF-e6Gz2Lk&FxR20UMLHAWyGfl+gm&4ptV zxeLc8a+e>QC=Hkra%T%Z9mggT)nA@?ScLxM<#lYLZJE$#`NN`Aacp8oB|0|Im&uiH zJbH+xienSQ5f#XO=tV)A1>B-exJ66BO%6eT*Bx{fUtS_#UM;)zZsrc`{)`~lxbci= zI(NR!ai(PwAe&^w_oAO&Lm`w4<^~QY$Es#h)*P+E&Ehu% zjLZ74Xo;bEkU+hSXJ?H2PHh!!+9{-4r7{qGq+i@kZM*C;#XQ7tLafH~S{;E3Gx3W> z>G=Gop&-QopuFRW!A8R6G}5|qnVBYKtpc3a=#oyeZ(6-rtIHIrVYy6BpQuY~dPA+%*X7kq~Z0r{&g zfi!W}^A`&_e>wAze7~lZ5=Ffk>qxIBV zpZ3<<-um;s1+`8KYMmC;IxVR6=X>jIZ++TZPrJ8%V)ny#-}AYF*>o!V>W;78pLDd| zbL_OB)@ebl(}G&3g_VwdZT7`a{P3aQn@vy1_V4`Zn_kz^`f(ron(XQi|Kat~EQ-M1 zFTP{`^&PDr_pz_aKJ~93H~{2VXMgnv_ud?Lw0_*j-pYRZ?H^yeT??7VKlU#-40W`A z+{ZqiJ^rm9?7m_aF?-7&9{YNq^UhJ*7lCJ_sK!;9o^)pXN-kq(#usv#bc|f%7`fUp za+PBw5lB~1q~-K5;q<^kIpPKL#s$O?;5H>sXuUb-0Gpigoa>C|JTab`_yRE{QTa1M zgX^+u|M*{i0tXn&?)t*__Fwtz&c#XD1E2cKeX#zMvwJ^&?N4hRt@p&kDW8iIeJ)P$ zxmfFS0lWnl;4SU|yu}@Wx3~k-rMX}##g~~%@nxp6b1sky-RHvO#JMgf&T~0&f#k$9 zHWw#m@4N2vUm%!gD*M4h`+v|$mB*bf)@FbErtf|PNpwQ?@E7j>&Om>20q%<~zWo}cUT{5+TE z7f7BzV{@@4``+&R?m{|DW}ko8zueWyC64=Ctjg~D*>`^Y`{K`sKDT?WPq_^4Yc9Zj z%>}rxxd8Vy7ro9+C{p|`wF;^NQW{0D!uy`%M>bMcES zEcEj&=K;yX2#j5Px@BYBYQE69a$KLwqZ|-D}J?G*VS6uAh{mAVm zF5Y(dGrOPVrPX+LZ2o=Mn7G*a4|nXlssj^x&c!dTyx8^7*M0~z#Efj9L;rI3dlJcu2flyv$2z4|&$;+Fk{44_oX&M?)Oo(jxIn9nXH1PcA-n&4tK8P}x5 zw_Sfa%t_hx$8P?!PT6hN##g$v@l~=m%IFBODAfKU zE?t)wz*{{7-dbJ&Z!Ir?_p7;}1gmE#!I}${V9f=JK<8Zaxx8S?auWz6R-0YTF4zOr zCex)hu~e!}ER||=AvEIbAHH(eyO7;u*^htruRA-Jde+`6-46V!X`|7Lra=!`9Mw84 zXvDOj5z~T392QiJU#-L2)jHto*7|t%k3anM2hAMyqx-)5qhhHysrZQ|mZ1htV|*~A z*U=8HI}}ZCHxg+K=^}y9>4XK=J*UnA+?DF(WxqK#DP_$yzviT4M=#Jo%~vY71zG@ za{dnS7v6#cOnwKwCI^$^5r%ksX*zg0*=6(`v%SS3n$Jjy0c`)#=;gW+40|bV!_iCm zl|ApZ{8>Y-aW?we%Vz;V8wZwpr92@pbwd02H*oo-ysWD$b?Zu9T_NmIq0bbKR8eFV zkxhx}aDArnu94JGav6hBVUO#uK-AgBlG_W=|fT$A4#GE{oi4)Xa7? zIje}3Zpv9E@WzCrw62rOXj;CYBFSFVI47#+LN7gY2R=s|f)!r9yav7$&a^(^?nL>c zfCG+eo;{#vjXMUCx>DKZJ=Z?$P^a8{{-1r-CaTGUN$T+?P}kE7F*;(WoPi$H!$OrMsIM<=ot%!$W7q_3Rc6+4fJymUIihJX-}K3X@~Y z0(U&N2O!D8y8FjAXbuI;c*5SG3?N>>1xh%Ns!4pbiC=Jtv;A@gHOUX_p+PYlbUgTn z!#CYgCs@0$jtB^g(KH|2hGJhpI$cXt=NYpp6zqFs1DGH*+bJuGdy)Q}9d;a800lb) z|94mnm$Ts@Dgxh$vafuBA>?}#6nc_re+Yq$1UoZy12$&+BFiMiz^#)+5ZxC?0*T4RP{HFfD;hNY7TzejYQ30NK*}nIueG@ABgOWq60pH zkF@OQE{%K&5ObNd&_v!$D%@Q~)~o82(D9;bOSq#DZyu`O)y<|vOblc{`I!^QDjJ%r z@o!G)P!@C`G_O$DjBP>yBFpn6u-E6BxXivPuW?TG08YDKx$un|uhDOQvAfPXJmBd= z>BR75$S?W-qs{8ZK9B)4q03nvukU(}H?{a~$gHhwWzg!xr7+_&E~CVkjYW>0zfKu8 zh7|h2K-qMRY=oq@(WDXvHvkX`!xR+2b&gG}?-VxV7|E8AJTGcGOfkwtvs+pp74+3< zNkq0LdQKuZuNXyK%Ez?U*d<9~^Q(cv%mvEripV2fQ>4+?VQX&_e6?Gf9W0rhmdy)` zcz~1AMKK|L&g|M=A2pq<+NrPj2S=ogP`^#Yz23!MBNb-NaNBreXLLjr^;E6VEoYBT zgRmm*fPXY>HS5o?^9_Hmxd$VyQPNgsrgFd-*J*zlc_|pxjdEOR?}tXP+~^giy4>(x zUiuIR77X76v2CSe9u^ND)GWkN+;~IOA@&x+f)Umn>=QjLwT6$Z2P6D z0{T++jcUT+Rv9T?vS`~D{+{}hbz2pq&-5qRDcd09S%BUi(ATy}1o=yWG=}Vjt$A&P zDhazJk}Il!0Y=?K4yv1UTFH6`@t>-~t#MdXSgJYE z2BR8BN}9IVzc5yHO!-9tFp?^Zpa)`Gw0FaHmf2V+qG52KgF*FeH#Nb>5M>8Mm)U#u z*QuPILD6iu7n+Z>-t9e03+BNvHR12G@7}-McVCay;R^a)!ixO&AxZtLkDxaN(__I zXb{*NrB-Rbk)7#kPvM%z$7|W04^lx;TdjN%Yu0#ETv908<_3Mn98Dh-mZMZ_JEPqj zlClN(Jm?nS?h^tqci{dx{=>gB#IUdYjv09%RHgXNOd>#a+CwLy!+I}zTdOrDL8R<~PLP4}>XlDfp$|FkgGT zHsA2&ukHQRjc?rD&>1y6ncDo&&HJzUz_?aXd4#3u;LID8ajDbD7dJTLWu(CY1H^H&y)M5uhS9;0VVMi;uD$2B(qi4+Fex5x2uY`qu{15J2l+ zXqEY9E7_=gF+7`feqn^7jjcXif9iE-?+R_Gu56#$$ZoMmK@$FjHS6eMuoPIb_j!9= z0lol|6GlXUvvpW~Z+y2?yN(^tHGYFhw!wj*R{qLbAr;!DTNjXO#TX)*FqgYhXY*N5Zu9B z;O?fN?^PDmC9hUx@G)KL(|jkfqYgct3`-j7*6AqOlrsmx$@#+V2CTdFSBaL`r$Yyo z&MwkE47CpAo{>aL&+2gNJ%;uP}mhz04Bge8NSAd#WrYX7|y~a=nx+<1vnJ} zRdfh`Y@N;CIQgqJnMtrTD~mF-g$E>y^3y6bQ^*6->w*Fpy8;+AqDt3?)glKHg%*ds z>(rTNALb3&gRJKWA*t5%e7LjcYTNd1tn@QkBY}hL!HijUL_~V07f-2 zhBt{Iy+5Zht5lm}3(Ty6-4PfZzob2~u05JsE?_QOwCUQnO7fX(fL!pQxtW@YNu}Dd z5b+0C8BQ~VvvW<;nA8T@h77}lcoJ1%?vic5F;Y{@GJbdDlX{w8(uE(G?#$*E?Pv-K zdjj(R*r|wGs>rXsFjAl!`v=S1vn=@&2S+9|YGM9MD^a zeA2m+7$9Nj`QCN%iDI9hmT83~`-au5Y=P6ZbXdG{0OVH%4T)?~yt80DX7yh;vyxay zSP~3SK5?7~MeUP1`NfTR>4W+zTmcGBnF0dr%;63AWakFU*27H9HHqn78`f-h%?7`u zTquI$)eOUC$Kbt~&sG#I08bt1Z0loUChExgX^=KF$j_FZHKpitm=u|kpu~0qx^lOf>zTPXSENc7J1@WzxM;VXa@ZTbT#avv_Z#6Lt<+!?juc)%!Xi>%M)WO`c0NPJ1|6p0>Hy+ zi>;$-%Y}_4akNTD*>De){E<{bssnPy1|Tt3x@Ppyg_O90mZ$!Q($rzN&{xz^eKU-0 z)jK2n5cmT`mGFVQLF|x53h|W&WQ5ADGG%;h(|Qx_QsOIK0{ozay!8?Izj?zz(4Nlw3?b9sl6;?9l6zYE= z7#{A>DuaOsEzSl^E${?*^l0l2Bk<62uIm976dR4oT#W|$LJQ_+VW5M6Mhz1N6kQ`;ZUn@|2?${UYcmq6j?6~o zlnos@a+Y+Y90lu~aJCbVL{BgB#7u#DGOPq$!wzXp=0uoG zH1RN*dJC%Cq(A~TsUN^&Lz@~vse$bE^4>{App)`!hpi#GnFH#x%CYg}6J|ca zmwhH*fYx>tl}OR-Dsp4Y%Z+g|qUqfdO**rBh-C>MO8mqM54i|#!uPLA-JL_+$b~>a zLPc)|jO$B0n4FIEgfmvO=;kocO=oF*Hy53i07%ikV5uc*Yd%N*W{&)J45>P3nvBcd&aG{IF9Aeq;A=eRWt$^VOW8L-U2? zk9$deR;!(29ZqB5UMQ{w_+C)0h-~OdjN?e2kGJuYRw-mF5jxp(LN+L?&#aJzDfg7J z7cwz0Oo;jJoYP#8bDHzu6wj8JjW^~0vB7aUfh*mGU6?CcJRz1Z2`*;>;ZXRg)}XHRr+Kh?v5 z>?PYvZ245xWds0|DMspWXiGa4q)cMV9+M+SHKJ}(ZMEoxm=k*iHcgE%1OM`pctbxs4Bu%kv>J0U{UX)+SC{dzq&#pF_}RZ%J$=>dsK#F zx=}G4bR$ipG$R3L!FU!DpvKfw{kX6)wiT!!FzkNRkK}l&A6@$JbESR^9xwHy8&nso zALZ_m2S>{@UCIcyT>D^E7;ozQ&zPw6Jd+ZpkmU=s{9%VY68VcQTL@x@df##pHBFaI zp|co8Tk-9%m>3x%S*e}QN-Z^IF)SOxQqAev402soY*ARTk(gHgsZ^`{ST^s|;HgA@ z&7{s#TW4YVg{FB4|I3$a8nS|(L(kwGT2ZRSMO_=|(lu$POZQ1>%12h#r#}1Rp(~xB zTE0J=;wuyKN?>H}x4_E{G=?mW9+)F9)uGQd?8zK`Y6}EU5!_)mP_d#=ha%Gl;Je|( zG6N0Afp#JTi}&S_p-<311yrC%@?LhL!m>T;vp-J(6@)JObF&7e!?nDQ?Mr;e8QyIUAa)srPx@Mpp_!7i#L_!HEtoS=Mr&HF?L~D z31Unng_S91V;q?63uYiYxtJT4E)v$hQSR(~I`iNI4mIC+P|zona@kFb*e!1V$@+Z?KaFCyl&e`G3m^JZ;-4`R;lb z!o;xKtU|sh1KP17180)kOxZCOdPlbqz}>qSxNb-HL{du&U?~M9*L^1Y6S(dQ`=e7S zORn2@f26n&=`Hpr<2nG$E$k&W!ux=njMV1g>W9UF6N?cy-&WSxz3SOES>^G#i~K^Y z-F>bJ1TnvA!^xCO)wqaU>g^Y5Eaex1Mv3SFbRvz?<7I?c_=U*m&D+v1G-`gKQ9WGf zS2bgJTlw>uI`feQLY#0)vef#_mMr9cSg|ekHMbMR+(JDQ<`=qz!I#$coYCuBgoHDC zw+D6oSUetUG}1L^fLO=G0WWIZlMCWk`f~C@#CUH0!dGL%FKhs&{pE`Q@IKg&LO0Zk zTh$74(*>S$H(FwK>TSp(jG+lw<=j_O5wr~Y5qcsW!&rM~PXuI#B+yVdFg`gybcQX( z!nvWXrmK$3erxQoqsbBm^v-R4I)`3v410ReL(&yfq|Lt;53>~TG(9+bT<39!#qK}6 zH}BbLKCki~8kmA#$B{6fVC1B|?Eq{3umiG7Ti@ivp-WFC?t)okT^5EPqyaF_y?hms zKm&8g5L++K_@ZnjJQz(}y2nhh2)Y9FfM@2$H)Ir8Vlqm`w^B$I;9IHcQL0xA61m5) z*0(;9Pf%`_s-RBZKtXu9Nz`?ld@6%e!!TY7K;a?P_cYQBDqIiPZG1|wQ?%yBXAO4w zpfns71lsg&^st;Y&iH{ih)c)ZX$B;+daznm;#qL-02O1qV2ikC-7A(c%b;QMph)p{)!U+yQ zf7lbki-w*XV3D*vto{&!4)nitnN;yso9?r3yE4-(_+s)=p-UAZtvJF(g==H zWjM)AEi|6X>il8HLL4F1b>ytOw6HX;(ZR{{S~`H5Kg?aM2G^3~G2c=n#Pa%IP%iSR zm^-pA6=gBI zO_#f}eC7I7!Paw_bvDq2t>^5|s3x#Ln|<)@j0(QVH|MHOjuDd{Q_X~%9#zXD$v_*~ z{?PxrtxdmpQnV^JXDk~CCV0~5Vsi!)QB@61yH)htFLo%Hjaq?23l)A%yFKnuq|AC{ zrmR9oO-$9-$zwtD?pz9+ncUT$7c3IpqL6<7Gp4*S@+r5Y(^FZHUQmemi=2+~xF^)3 z3!x(|;kAgU($N~>Lm4#$5_Br-lk_oIaDv$yW)ZpMR1Dfn&q0JzFZ8Kpkj#7wU<1Zs z4rN=7IoG@oNI?tBJ|?$ zO9|x|LDB<2sq=0*ORORWQ{!A4DpF{dq71way)RywQl(c^ju7gp;`GsOIiED&&wO^9 zN;~7N;(wX2sSG&p{p@clSLw*nRSR&L+11ijr`PPb$O-0@ z6X8~i&bfWHaDBCoxth3ax+NokogPVPKTFW+@-yKkD5o>8I!YyWCfw@EVOOmz9CjtO zS*^_}S5FrEy*A!w3Hq~&)z4oy%}xVQir&gvsG$!#1YiOBrT$9}5cHo;5d5KMED)QV zrlvbq{1~hVMmK|1u)VK0z2j!(lGWs=LpUdNj4`93nmtis#i#Z z$W@-dR57Gnoiqdlm1=WTs6v*FG+Kc)m>`kHDkF^vCyiAijls*NCqx>9`ax+Y4XevZ zV-P5aG&)K-X{@S{#zd7g)LKp&c3+T&iitFg+v1TaNTU>s?IdVNMkKkPEPvRcBiN$; z{@hT|3>szODl6V}b(NtX7Nlet9wd-xPthREj77LeGb{BCQ%RloQg9B1xypR$rHu&o zu&f+qezjGnQ;|R$UBG;`!0M2ru*@N*+Sb!r&6otw1{cSg*eV%T5Q0qUxvw#82qDBY zR!zq{#I)JDLhiM>q^De6D)ba2@ll!o2K7gwr%KeaD4-X%HUXoOedcl7o{}F{XC&K$ zvBH{R!nUN4+dw>ur3E@3GjEGSW@jqb!VGhIMZbYH3U@$P& zn%a4b9)-NvL~x{B%pg1wNRVd-2%cNk==XhB&{%kL6@DKc)E^8J{Q}1O> zw;>$2Wz8qYqKVvFQ*nr9&+RB&$&NzI>s^*MZb;IrU~RNbsqqq)caTC$rJ^>iuyQwt zM`-o7+N-FoedSEc^~>I7N!HMKK_u$+7VY*n(p4wNjVsoNa(UWRmj=^==t!xI>5PFQ|%H#Sv@WM9Fmw3@%3_`IlzUUgJ zK&k~y<-T}4PjeuVLK!T^x7b47x$!Gu)~Ybo;=W^Fys21y?u)m&Y~OwrZWXaDyj~C* zu_&N{{sCRzY-c8RKEPU43??R^t!ldLZGgh?myz`&?PE(k*0jZK8=$_ITWwfc> zXWYnmy4;rdE`8`LqUYJ#5Rto(yLxyCkH!IHIQ;R2Q4;ir9n3%Pirf{6<1& zvOlGsGqxpT_ZUnWLTTq|pWozBfkh zRa>RxR#5shtCAdkB=+d26q@olc|}`zZ^*qUPaA!(ltOmSNUC7f7!pjAE$S2IW@R54 zc$pQHDOFEf)3Ri9LxlYnWI=r^$;FiHuuaCd`nERNR#dM{w)L!4&5C6SN-XJ^hF<3k zEBzBkmX=*EGqI zRJ~PKWYtvK8v3fU1U$c?LP!i`jIT3?8T3}93A}HtJb z9p$@XBs98(ZMBR<&7sk`D+Y&+vWB`JU5;*Wz-3R5YVr@5T-&Q21T;c47tkipne{G# z3Mswgs2mGZpqVl{Q%t+$-mWj;fC-^NxW$GvfT{y#sOo?jDjhJ1qA4K4MLBG87ay{L z40RO;%!@%+ru^)*2xK7C3vOv!Y|1!Sk497F=BMk?p|EsXVTVBAtXw)hqa6yNz$@$! zxk)Rbz|UxhLVWECJB0A6#MiE*L*_NJDXXR}u>4xplt`YopxCnoLRc_`<-_TQPI-tO z=tPdgMSHd?2!+%ZLdl~?B>PbAG9EI7Dt*}1-UZ|m+XUO@i zcWgRE@OK0N3U+*-qkCuX3d>I<1tsVkI$MGWq}=gU>K&qGkJ}k^B><1Msf2TQwhKxT z!{G-zB*oWtP9C1>%!55_10!bvvV(;8WU@Mud=;L#olT+o6& zMr7jDIZa|-!}>vK_h>7n>xvE83O?(2N#Nk_z2~4@1v| zPc~_1NlFHR38_^==G9k>*_04m3i42yO}?)^IhiqR19ip|1lUz`$6EJl+5VxIv))B5!^3=|76`))p?q1<4D%BnqadRe`BDsbGagV~PAa0A< zd|j$-<{Om zeP=ehNtb|z=Li&LaGVJ=Xm?M6KuhiJIRY)n_&*kb{!enz!?CpP^&=c?smji)ts(8U zzibvSB|jFtoGM;&zQ*Aqjj2C6u#`!)frNB=%g)aDs0Xp|aW3>i!JPtpqr$TaK0Q^oT21Hs>R}LcN zd2RDQ+<)~u{_xnxANYU#bgZxb(;xrE!^htL#;@0OJl36SqE>F>FSF2V70I3-T`YKy z?r_UV3$B4$DhL_12P;AfQNVNdr->7DST&-p`+q9-k~Vqj^*S}(bR^T6ZRnN6+IcSP zTuo&MbdY4+{9n@Jb2(-yuT72>N~+}8NT(d@D7A=8#OFqoxZEtgougC7f^toCFsqY> zWskR9($?u=@APo!G*Tz;^a#o`;#b`n_D)+rM=oP*6f-ru=(O~%Ved4@W1H~pDCM0V zErl8Q_rZGlBN z6uZDvY4hBKJt10_p!)i+&Ck_ZMFgO7Ad}SJPe4wxJM~uQ=Ovr#N{f_WYRm4iPwrL1 z3WU8nLc(LZxn+8c@t8irbQn(jqKu1~9(#$cPRD@(5CIgMWi>=$oJz-Rkv4%!)Di${ z*xbf+>>;PhkHx4lp4?x`60~y>{k}`xuH5@^?rK!oGd8pxLR2SS}9H$ zWLY}ODF{07zLjmC2G!_3I2TdLK^^tRSq9uv5{wXgQ!);aL5BuRrQ>{ZN0`2(jhR^Cxi5 zboF$L;|Nk1s%R;1do0D=yOOpUO3|>KK5APlRt~4w7*D~5wF{<53Z0H==0lpXVLzsn z+2T>2JlBRy8eSgRc(C%0Wn(L-Y<*Sb+%+q(B!OveE35?LEeWey0_V`sox@?yD;jSt&NwgUmvWr2kckMlw7 ze0W^zp2lSW+>d+^rkg?%8e*4m$I>A{uuAbWjwg?*yc6o3W7I@<(70ZmCo zEpVhmfX8_#Mk%^#>)oDEY6$z6hZ1GP4+c~^A9#S0!-#F?0Y)lnFoKimya=ViH}=CJ zsl&G7BXSPf*Rs)|FHm`sEMcP)F7e&;7*@q5O%8M@A9EC55s2K7c+n{v0rR38(4W_$rpm#gxXRuSI0yv_%7dm&%S!{1SB_IA~- z9E$mua^;`9 zb8##OUdS)f^4g}78H~E&xj5O=1e)3}ASQ-GeYUBMPA&_yCSo6(6BN$B^VebMfeWr{ z58Sr7d1ZU}7D!10T|7?KTHIsKY57jqO8mwv|J91~VO_Wqsx@YyK{W8u8tT4E78G zHY~<9q)I8w>M6yT+T@g84)_@KrnKW~jJmS}-vXnvU&#)An``SaAwN%HluQt?v7@lf z*UJJA_8Rl5*{MTBDATzqGp2_Wk`7VWu|xN5nuUU5d@Ug7B$YNr-6LA`jnQONx2*Pj z27#7@J#Z;!uqnhd2eeulnkALVV6O7WOr_U{!dP^QdTnuBw8es)I=`PW>B+GuNZ!VX=pc$;n&4@ zam8-Y3_~EA;Utw9vw^>+#FKr3yfZ+SD&UexHG9bBAz!OJO6&CDh0euALn%&^vX zu4Zb1aIT1f@CEJsmxvDT2AaiG#mcu8dE|}!HVAFI#6-LkL zDD1jmv!V;C6bg=XGyjh^M>MPiHA1RvlwzhP+fX)QF#|HUz%9gp)8c`z%c-YjCkdJb z2Hl4BHz8PwZ8S1wrL1yI)-XB>F->48>}7nZk%3upqR@k|Rh%NcWa9FAAz%?Z2ldTn zU$;Yy2s#0bZCG#%Cap+C-%9fjz=ou%jP(NXZFU`%wSDeJ!mWW)K}+y6d3vnH@J8?ZeXB7;I9#3>s? z?=@63B!z%cN`$x!I=O9-)8|6^)k*|xF{|L_Y0PLii9AEHjd})&_l*6UX;dCg*Guj z)gld7ck8)>IJs+bCx3N}c2sCWfN92q^SC=LKWf&%w_eXF4%f(^OA}H>UHTpRbsF!1 zuln^+*)Q};@0a>8Q}nR2H)@H~sLddNSSi{xwh=%^(>;QFicDl&<#oek6?jXnU%eS_yJJp>3}H#Sda857!n|rwfQ~B2Q9hG zM$cgo>Lbdfd&P;#s?ij^6K^#XzpR4k`2-0i%6Pj&&nsiJ4h|HOf;qmqy zV*O?7_{&cO#JV%%{h|a==Ugs9<)dvaNiN{YpU^yF=5b)huVdQuexBX#S89l30_i?G zy&EYQ)+O}&07|QmU|-!+i1ToNowyNK_yM6plc<==a{0B1FJ$w`#S8q8uQoY3Lnvx!Vl|8;fGX6eK|~D4(mt$#UYj8i+NqudtLeB z4i%#MgSzI059p;juB$q(t2(Yis(zm8_vlCd#V(al?{!u0Bmd$FuJ(mSp!@uTqx`TD z=&BLusu6Hie-7)K7e2%f>%6Y&ysqjzSF4>p0S9%Te{g^wHUM2U09`czu6cKe#VSA8 z#SiPhu6!Vy8|AlCMB~L|&v{2h^{?^5ulBMRdD&M{fR0~SDF<&+r4Vh#8f%9zpQ~6| zw#(_+_!rdiq~jM{0vL)?jH@yGDvRth&R3P)`v(fPc7TOyzK(!5?X@?N*wjtM8zXGd zK@fR1eG{9+?040j@0TWZ3lx48e2YEqf!MZ-qRIf1W$rWF|as73-vkLnr- z@{!8@!@3VV&1gRm_9EJc%RWF~zke|k5cq-Y3;nZ$Cq=i6?+FpLaE7x7 z<74`fBjr(*03D9#DwNliFCJ1Mp}ekn;X`^!;dxz!^14#kxDAE-XEf@|vD$IvHsXB! za~pL?{K;6()%-AC85qdEz(AfsmXkMeG;)w0(N*x*Rq*Hfi^y{DckK|%;c6^ruQb-6 zGL1egWbRnjuWR5t%`Z{&u-|; zo+=|-Qm;|)Ca3H};fwk3#lMwullSL88mD=uEx?)_20MFt zEm)D_|6FVSYVA*ju6zErWIW`UG-kwghnUmxU_`b=D|H`Pn$Tiq3We#kLSOPXQ^lM0 z#T&X7loYKLdM;0SCCi4^1l+P<(h`sbydCr~#Um{nKLeJt-t@+r?GgFm=};>jDb%*? z;K1w#ip}9JX`F;*YKEmZf7pR0b5_*)GK`?scqodJ+$4oDHt|nbuhKq^W=HP_(pjV* zQ!KAnS&jCGRX!$!b86bHHE>Q13z@9{^_Vp;{qndop235f6l6XV2Il_2*4^sY$>@lf zS8LevLadoJo19)#7Gi8SG7$~PYfA(|U45U-{yubv9}ByKZ6Ya5ZE3x6d&I#t^hCpL zlj_`3$jL5jD@ig%%jl7)uhS(94KPb`%v=0~7^&pDVE^zInJVSY!NThw z*D0^lAaELJPlW0)o2FpGq-ccl`RR(iIv=Uo46%@qlM>GdFWWMD5^OhVGqqrnE+dMN z-X;dwIJeuxX17TMv<0p<*@1%HhEQe-V8qm;JOG4_^yE`g$)Ead&k5m@5z9wQ;T!f&IY-^8X zLl-MxLSC{M$0DpE-o&fuwU-Oy65#)F}hAfg%(KSR1S&u@?6x*OH~ z`1zNw!#_5X>Smgu)zuNj6*TmE?3~&V9;wxkR-)dqSj=i{;(xvTnnX>#Y#n)JHF&i#y&5!N2LBWjcACDnU=dwiW7 zhD~>1j6$D!AGOzzQ1X)=!>T5{K&MwZ zzHiNIb->Org>ANYf?4~fBRp*7u24e=NxFa#O(8@D8771bLkxRD$S|2BgSq2|3c&H+ zP-5&ALI!Lb;3H&5cR>bw7qxi@IGaL)Y5~x|3dAa)k2S~D0)_@wB> zWNB*tAz;lN?mSBw>uAsnXh2fV6u-Lk2yQB909ELlA;ZpIXfP&>Q@nu)8(fbFOyo0& z7&bTr%N)w4akY!T3au2jC{YU@49&J47V9ZXDb7xzl2LZ6A;>?9g^Rgo$Zgd`*dx3{ zp&!vUIlhd}hO!BNHuQ1|0fp8#tXh~L1}^^iZv@e5^+I4$bU}NhbwuT|;px>p3}u-_ z!g}mQux&9(j!2YHG5?)K)2kJ|65X~ry;d>sh?gzX@~Q;P&0@3f^SsvjrrMDV5*r4h zn$30#Qd$kajNrK<3JI_F=sL%5&~|ouoc6e^f~5#U#)Xw|87}le?6wwf57-N=qFP6q z%rSR^*vMTxHEtRih=>#$<6ogZ9*(!P2mC$2X%B9eW}yH5*DKP&Igj38g0D_#6W3A7 zeRSFHU=-Ze9@+{phPKUWa&7N^q?g;a5T7)!IY(@*lY@kyMmow2=xl~j{xyT%1mmoBTAFu^JGhVA_TAVdm^*ITSN|XtP)mgTmoZN%B6OGdo{g_r%B8z=QPTn zq!US(wUuBEGtn}*F%^m;QPOcuD1ZXN8Y=9K7|eM^oV5rKw_4A7IC->M4`e{^0J}OJ zr>o_|Y&jLEaW%NDJ+WnaRfA3e4ar4y9Ap_+LUAUJU&7lp=_*}_@)kmoftnmVMy*t_ z70?qX?_m^xY?vnd~y)7NRtv$&+ zUnxC8Q+HcxKX< zsw|X3MX-X9z@maa0>ut7kc5IQ{gVcQjDkC%VyhvdhPX&AaW>mNQ9@Nw!<2pnomp!r z)naBCv*wP^ZTy-!KIYfU*4fnQ_I%CW8r{9ZYF1n-nf8f%XO2!3<|QU`hN$^O)I^vK z7XUlq${C~>fj?g z8J#Df!VrL_pR1;YmeI?c9{7g%d7og#&}&RKnd6#F+5c-mB~Y#5X@OAi$}!V zs3y_)#)3(t-ox>1;7)tAsHNs4djj_38;!*lQ0cd|(e<~sK`8wkx|l>LIGq6Z$J|0CQSJ7lmoQ4IcN+jpA z>Vu`xAw6KJe0nXW1~i>PiZW8BhF2NpIf69FAj4Ny`T6Z+T{@^bh^NtI`22RAC{AwS z?)sE4L_Ff_+A0JnVXlyO-R52aJp)k4h`!)%JyyK8p9oHB06hLPY0Lz zo75Fcd!{iWqdAYT-SnY`-+Zs<(q)8wlz<{As&zVd6OGmvu*)GR&u5Pv;wOqXsaU=) zuSvYI>?Qh&vCaR_; zVYsANAK3(lbK>BkHv*TI0e{_lVu^VcKp|rzJ<@{c$-8%t`^5L^i^9g220U z{+ycP{NM-ZN?CMHZ7mlw-_k9u?A1Hjqt{!X_(Let2d!g=gibtI-|+y5wc&~{73EE~ zlgq>?Q`@SXn7-wh?E$*7UQgF-;bnLFX07qV(`)OqI@(zl0U%~!GTZa%dBAT!7Jy$y zCM)vcIn7YFB98R=LdJxF%;Q#+?$T$~P;dQ618bbfuWa|<(Vp8zMdfHMjmLx}ygF^R z^+Um110&=LJ2RinZP!xTx%o_t^*$Koy--?g72mMn&4t}Qf8~Ng7gY*TVcyECHInM4 z@{8Lxq)VzB#b4ulzQMC{qqzFL-OFC#W%Xohw=LzbX3Uy1A4jcwN02(X4}yA{wgo0@ z+0HWqtR4VG8O6aEx7&sf8h0n9EUCoD(%qwv*c8C`vqOG+Hn$J??HT3M8E)_Jrzy7w z{8nz0y?(1@0COos51}d^wW8=RqCRpypg|V=wvQtY8a| zeuqwG1VZ*?3oqw8#O?)LAhYul8xMxTT6Vj>HE7hbJBoYJK8C~WMx!$466lE_VLK8t z%Fc!n!^BUoy__lJazVR(*|e}RS8~uWV$xJhX7_$Z9cEOEJ8YzAg}!*7 z3PoKDNq!XZn)EBWv;lFr-cr{W=!P_85NX|G6txi%Lw9&rMW6zYOY~`6xuh`aUk*7} zaRq0AFm$ECg`wbBh~gB_SX^?@Qo$;)9|{*bh#%7DY>&_@lXis$^>Lf7P_6MaN(!0u zjWOW2SaCjF1o?An!ZWY~eMs67yHdo2r7NN8sKM+`t3Kzs-kAMzm^#BH{25GexK`LL zcp>HlyB$VFl>%UQ!ksa(+bGA7EYjCicDuN*X46-ZoZT)if(lK~b8iRz2Sw(3NLa=e zd|bi~128TaP^bc3Ovo;BI-pB2DLOe+O=NaVLT4u$f3~!uQ!;T)u_jKPxIwo>}$FEYtjZ`JB``DpBfA4`Ge?0RNPkib_Z}`)9 zedsenna9p9zFT!JZ#zt#Y};v=nNrY^j*`;^%HFVEJrd$`wX;!!o7kM)xVot*}@ z$Ls|wU4d=Be9>LM`Cz4kXB7GjNSef(98KGSm|Cj<W`*c}zI6 zKr!J`XYNwzAOWh|3M4sT!NTCyjn{aM29$2C*-;kRoa^@P}1k|NUArEghW0R2` z{r0??tu@y2uyu_Z;N`8k1pOs3Zhe}WN!jM>o9Zdko^8nI&MKU*%&;o#+6vEKp$6D3 zqVF^KK$*_vH`ehx+Fa&y`Hgj~JmbyZ``B$C{_M^N|LNPc-&hB>MVp^^!`nV_!}ss~ z^hdAyjdhL7Vbaz`r(8`&rNDm^5m#$4Z@xwYT!ei#8rTruB})#H;ssdlt8iv?+h~K$ zb-bzipO)S?Yw3-jn0@jr0TFcP_#-npC=5XSl@5}4G~Sc}=Lc_;)+m$pkSqkPcZxRH zxWdOX@dJ7}M$TXbOIg+2f>4L`9AkcA9M?IM?h1q1I^pkma9;Ba7jajZ)X3~sJ#5{p z`LypTFvXYQlOspFeDa7GNY799E&ECK;NPo)`>v)}jnbNV zxyAqJ^4;oe_9^|8?(ZeZ)Gg?EEFo7EGV2TN}Vv0d15|g=0!T=g5inh z=gWxF&@W}>)3wC~lbb~oU~ti9=8i`q7{&+iQq)1%VY z(bLid8gCK@f44^4j>l|#*-g$P09p3JGvk!Y+&6)Muev-fh7?~Uu-H$Cw~4b!{VvjE z#E3G+vMUNsi8O9}&tt#Bv}?XGq;s(d0jQu8{wY zqOCTT7;P`-9tGWyMD}*6(}p?2+UpN6%ybL}SfU6`y&(zAOzsXCnT1!S7~CDFR4~$q zQ$P`%LU`1Sg-kHjV8B53Kouv793Kzc(||j_-N8`fz)%rz8fmG1-XmydBiU!|s)laR zY-A7la|3jCj~=yx0?VUPb#I(UGeR|Oy5@ziE8{Gc>&(!RfwX?2?==eA=I2j4fBsBA z8`s3$JFJ1Tqgrh^m+?C#`1Lz@4Q(-%Fe*x1c1}&M$tYXBEjy-P%nZKXDm0@) zUe?Fsny8_cJ)(J_xJ7q1+5okpItA6f(7mMFzpr9@pDV3=IoiwR0&Zq=`;X=qoVj7Y zWIM^+6OW=4d=&X!Pdf^ij=)s)-CecwJ-$r8ondI(zjE9~HN!QCnggmoK!tv!Sdr>~3Dxn;BlB0w>v_e1m7nrLw8OqR{&y=7fr&-OV&H zr!8vCNlF~x`m;pX;zJ3{2TX@mD8j_5)RG!sVC$XgmqsF` z{SgL4%Mo&hTu$O~Xc-Zksu4O7)ys8&yXI>{#b~HD)>z&UH>nhF7Ths}0c1?&Dp5=tB=gCYTvoO$e z7G^55a7I20WR@xV^GLt_F|_EnL-mz)NCzF?GHr<9Xx;5Evzy_YRz$$~P>sOW`oJKN zMRpJ!`+fmY23cjBfUhFrjlD{rsA=?a0^7bm=dCOAyWb-5<>NojN^Wr z3B2!`67hRCqmV*HhGpNXwQdoKAunUGKXlxgHjISbhT^h~mYI4LvWdnI+nmv>4g8p5 zu}DuhCPo*sX{BSu4+X7ionkMWqgrx`Q)2`mRG(R&i7&7Q=>#fh_U*D0gNn(`8(?ubvKA&N&jyNq)_xlkVj zzj|tf35#9JI5p)#NYeU-7qib{XP?8}*r#b^75=;u_BkSjZ)8b@ugb2Di^2z1^uVF6 z?9-%0P(Y6l`y5?ahk*Y`Md1q!RAKnz2@I6Ar|VmPDTX6Os18Dy>fkH(#cG}0^-}8s z2mN8G)>(R;diJP4kwlGyS{FEIMc*nI^>WPw@_VA6W{iU>m1CjS6^wehW)>@{y+>oZ z@F;^jQu4^0Q4=91Zfv{uqSj3^5|@mc<&+d-d>(;O`yMW1)LKggn^Fxn?YugFPgZE< zN%pm!SWJ@;*OJo^bDQ(;s28th5h!~vw2qX^d9^sVp1V~kf35}f@#fjx__gGjsqTF( zaTjn;nW*{;hFkv>g5kb%=8y~qCm3svt}J4*jtwm^8r(zhwR}5A(T(*VL&9vHnaeE6 z9*Spko%LvW%b53}PQtena_5*<%O3Nbb0@oWPiCUI@Q#!@#XEMETY1t`82dluW#j#! z?7Xf)0^G{I;Cp*`cSPUDq-hF8FexPD-$=5<2~I|Et!g%4Bp}P-L@2Z|c_`^L9bgGb zTv8mt<}VQ3%5S7kb`MuP71<%Kqg?lK)yxqeZ3cwv`8~$(U0jt&{z;yb?L0fiRaQ%h zoK^e=a_o;uGQh^phXi|@_O4m-eQXeGx!Z$F-~_G*iElrV>pWM6mhI(w64(7)Pv&|j z*L9^3%hv*(D}q%n(pGg7X{>`BMim<3mX*=gj86f&@H85^%g0j2puvqmAa6E!Rmj zS}t%;5CKciT~2%iDfJe`Qn-?c14+w?UH+sh4A)8KPSA`6o=WDf?YEh*T)(lOX4nrQ zO};Xk$$py&HjaJ$G;@-g=~#oU>9-j&w`dLa7yUFdrDiByuEAFK+e|P%e4?LbPE<3i ztIe$Hx0x_E_m}pk-Y9T_nqlK|i2~ZH)fc9Pxw)^O(X3T7ve*>b9b2ONYbNMJU+Sls zNj1}9f71S5<;b%zK^8{4!qT}M7huAL(0|v@ zXv_q;riy8WrE|Gv0^R&$Kh3mkslG9pk`WErjh2~xTDpGg9nwuDv4*FWP9SMbKaXA7 zggJ2bjb5Fco}j|Djmf^NF_OsAc7lHG&3~EVF_lX8qA?J9nY%pg1xagM^B_@JGOr(8 zNyld|$&KYNrE?qzFZYF)q~Y_I82R?-9^GeGcsEyh_XJw2-W}7GdXDPqx=wP0`}BEd zCEK|SoRwT6;mqn7!E4%CA)eRgV3E$#DbF$SEmm|~Avwj}E0}UjKnE|7NkQB|CZK~K z=wUS&?jLkvjacp!)(`n}la7Z~9&zq4T}p6I_EeVdsS54~3c*d}!U8J}Mj%N==|Z_B z^c2^7PI<}L_##WFG#t|n7r`lql=L24Gm2Tlaib|P$4y1!(RvKu%_|KRS=E@Q0jbTJ z%{KS6Yh&8**;wS+(F*6;(TLXc1Z)qrBRAn1E*w{lXvNB!%p;w6kKzdg7%0_w~9uHO0HRug*M^*mE(!^4660Q1G#HxGXaZ3_ zZ5117@+=|LsVhY&Bv9G4cqz7uz;6UAsN$X&vg^#dscP%H< z7Mow}oZotOK+?v2gmEw?tum2DzGI!j8n%BK>fRnu_tpyP?w0|w8wn_peue2Th0=oo zrBAJL%2S%;DfA^Et;CVzxf?&O=}NoC#N_B3 z*8A@2POA>3lb@0S5qy>I_r#kFU*#7Lo}Od=qy`e@7>p!kdwf-sjljRY6lScFYUZ(i znz6$GQd<3HX{W?KSlSIo+-~?_Vg^OJ09T(+uwZh%!}b{uw%+L`OrDUVwU(WIv2>H& zqy|5`Q1^H&H`IL6w3WcAv{-RrnYDDP$`uCs9qgD7_J27K5KMb>1%v5HRhZUS*vwu1 zG-EI|092bw`fVy;$w&KXs*A#w8)pCQ)Xo!nl3aJSv+qSsSUw-@2QnOjRwD6W1&Nh* zkH~q)=fL32MtDa!4d7%Z3LAWJ%0OPb=VGzvJbb1Q32i-b4@G_N>G zF~~1auM07Sv%~}yp<^_ko8b>A%*7*K)#-yng@GP9mcOAq?{=5(_AGq2w|s}{mVejD zOiC~8vx7L(ad%@QY_ErbzX$RxaLMMbr+_Ov9-m*{+Gb}6_QhI*En=>pS~=aO#K7Qw zF|_OHe>oNx^ZPi#;+2`7Lo1kxcOevuP@>5pWaly!}w6` z^{v*>!MOFVvY`WIXSc zlo&2@m%sB#>pgm;`#Wq_46wYcBa|KBh2w5HGT%TW!74$ZAwP8TLvSFN9U`@-=2wsp zr7u^4c%&J>7rF1cFPx>p9vhks0pf&d*BZYcE0Ndp#Vv7y7CYj72Uuk-Ni zr{FyN&5i)`C=6Huw)7O%g!+^XOW3SDNyqiti5Mf(@a-m>xKVY!v0kC}{6LuvLPl=o zw)}d`)1+P%B<s`pyp{QVAkIa(q;!?t9MbUB9s24a#v-rju>_bN{`v+P!tQzNu@i zj@tWZeWn=IX*Md`*JSX^;Z2OuZZ`KvJZJxUF7E)woBoZ|I6o!-gIFJ5sG;WDXum^Zss6?CafBvWZ7r-W9 zR~OtBsKVQsjwyDC7B4%=NiPH0bVXd=p1ok|-a4Epwrk4LG@(Dp7|Li4M?Ns|VdZ%{ z_3~`w;_R=L%2uTc-VCyxh@97 zv$!JAtaU&&X{VrKgl0HJhuov1x_dloHxTBtt@m16IxLp`jFwuFw+P#Dkr|2FF1xi0 zG?e^Swan$^tYjD9S|H>&6$jVY?zr7j#jVuS^DUZLV_X_yi+|=o+?ecI zqBx_MJ7^}pJ|=}AR$h*|iQ8+WVa&GPXTvw&?Z#x!(zUeI=xY9%M;Twu(#6+?q3m0_ z*lN{^?`Qf%$C(357e6u7dT{AtC#cpb{+;AAwLfm3EWn?fp4-Rcyb^Mdm#NQ3lXy%eWzWJRm%6}}bYsle{RR?b=W%W?uN zn{wG-N>;XXY?c&~WV$3JZn}zm$0Ws^P1nw*t7l1In4U13o-~`DJe#f~T`DcIV zw&PvfeQs69XB+?1WjG=fs>p1=8kE7F@Q5td9KNggR*4c1%E1aF6U-t4o36n;iPzLl zFzta9gRV7>#fbu!hB|nTX-&diRHtsNBxg9o?PQ5k#&GI%EifDo!CRtq&TyudEL9g$ zC{a7{Gn&nG$UpIiIy!WR}1%GjXpbYsUDoeG8xnK8B115s9}y4WI_Qg94Cfn z8{dke0ZS@VolbOtFr6EIcUnxEeEs~bG0HfIMN6J!GOwEqU^3&NMo@-(&p)bDrE_i! z7glu=XG}h|+aAE4HG=X3LM1vLDQw&lx-7;jZFxn%V+A9uBK`|XX6n%i8(pLlV6u8-Ru2WlENY>UT?Hz+cG}iig@_$ecy|Mc<5QMe?MoL`CVF;v zsT(H8*ypDEA!#M8ZyNIudI;?dMG)M2Z|4~Ilw}fE+IVt$jh*&3P;xab{~0^N$jOAS zIp-xK94nF$3_>oNb()Me%R22SUNmUbvl;-FPEjaHr1iKljt3xc^Qsf}zLBCT2t`GL$D3S?OC)kx}8~BrWyocJ-I3 z$khisHHBz%;2Cq3!G0^+@ldv%h{=G0LxI$XL;|FoUyKc+8hLl6Y>(2}VS%(E=r_7U zAG#e)lWWukgx6B^t}LY-0WJRe?X!Vy( zDAZT%rzf7fQh29tvyPaOG`hwO5WpwQF?_mlqq^v6>qttT#a$nk)R!5i39yYE zFl*Mi7uRt=syKSGjda6W=bf+QCXEY%2BOpgK@JH{3VZw&zP5GPmAA|?abRt{<#=+mnmj8f;#Upod|zuLM)|=obX8cqeeU~|!UC}7sNS-ql8w&|B;sa6mc|Du>GNK< z193RfCfSBK7`l`+jwJ6DGSn?)#;~LRh{$?q*XEoaqifhb^0S}* zB^stTL?#z!7Z_8b8FJqnm?aPE8*4i1*t9~5Lk5Gb$ArQsr-LS0mDPlyBwIZ1J5+1i zVuV~Uwsg4Nlw8Q>Y?))pe>rqOCuLlo;$2YsZ4gl80OVF(t10B)9O6ec)S2>;TiO$s zwp*?SsnS8zN_tg6w`?t-Zx&w5!3qq0043eqB?XIe z;{;*?>fu}fI!u3>TSQs^FgQ32Ld#sEwg2;Np0jy!4a6JlK1DAyYUK;Kk5V}*#~bmW z<$o}zs{|x?x6mUpf(*?f)ySg&g>F+Cc-WWzy-ZJrG&xcBQ`m-bpl4U{BiRZ*XG6aW zCI8Mg4NRG#bH<@W!79TrfKE*Eu#9{lt%JgR>6I_SBE;nku?YI9bG$Lw=td!(clR;@k*sx>`Xe59s9nI}n4Sj-UuAoL`oB=Thr#TO#ipuTkFJtM|2RqrNz$c;(s7Iq~ zwnYr$55~m|(?*?a8XP$i#2-akAJWKgX^&spo>)Y4&74*Tq0*$awI9f=zFi)g~VdmgG9rm0Z!DTIuLDjEL0ZEKm!|9HD6^%hYJnGLv6!`?}1` zqhpe;^4}BA3aziu3NSF%D2xoN0in9#i}3g~W*A8W>d!DvNEdw;HXsB6p;#P)eNB#j z;F*LGFwjNmoZ7>gPOcE%P0qGHAW(`%K|CzN*}Y&(Eo-$tsOJq&UoB%}3@Ob9LaI0J zOXB#dBquT@ZB4>E44gGYY1n+D%h{rnvl39Myy@bE_-(Ib2yDc_K*gY+BUeB_45zVzrQ(?CQ?yh{NT7q~g!mAOonBR}4J_O(0O z@lLF;t?T$bbVYk$C+C{1y$(JWrL`;Cwaw{uSF{Irwue*#dnyAPyDqKmY)Afb^UtE4 z_SKNSV$#!iCjgE%uez=%bA_51R0UvyRluusAg{e_viL5I^Oxn9MZ?uE)u`IC9;s)b z#1+)8=DDYhh!JqRv+$7MSt> z5|Qp^Mdug=5Xe=*aNU z;6P0R%biY$wdM<1KxfCW^uXd4(M`BtS8=&0U$hJHH7RllF0PkHS7 zG46SLNU8Sc^)WrCOPnvtep55Ky16Ky+6T$J&{@g8 zVMlUIW?|EWUJohT6@d%~Szq`z(V=eXuA(MJXbh@n#y63eDc>f#mwUzW@7J@C@k)U& z{Mr*UhJ8HeexJs}?i$8}xzW1YbGHc~{?E{g#dcuu;D2n}feWL+Y>am$+9s;}U}_-= zQ^fvse&$^ZLBM@>?cmC~_McYTHPqtaTc#t2yiMDX<+~DtRU|uH3C&Wg8PTrK;eO$| z);-L)2M~gCV57)4%F~AM030(lI>{_{HOanrE!;(0&XR1E3^7S|!yE4Mi1vuGp7jbt zo|e(xl040Q@$;brt1ARWgF?(OZ`WEj0zM$ zs|!u}mH?Vc`fbW0os;Zy{WQgtYTaAU=2>4nl1DpRYDK8-CKhx$j+WcUNw}yh3^?q7 z;aI&Y-+}YeWy0~W1E&z9c$=n=Y1Z@+hq|WW*vM%Lupy@ynlw5k;Hw3GyGr}{1Rdc}%q1XebN0rGHB9V~ecU5};#f=>I zfba!52K4_W&0DT$9n=5~PSoF1F)`cjOuRz-ha|8K=~D^ZEmP~eOHlMOm&IJx@&Y)H~v{eN1L z)aAx9lJtc=@oyRR|7l6mzPi?%YI}5Tf%+e$sVV;n%0HA-YOO9x;huf#;)~V(lU(ip zYEBzbE=sk0lMpReik@+T=K9vhTdw*)y1UTFdpBqLxKLM0!pik=+q#xy5BAg4()zfR zaP;xmR8JPdh2%Gi-79S!CDFv!eiXGjzoh1vdf|>sWS+h=4>0>$Fq#Jqy0?lv{T$Jk z>htlTtbEOX{E5D|Jp4H!`V*b#?>R0+Z~0%6>?0*5_HOPOC;Hw^{Tvc~+KuR0X9nqR z#;|;SyhzgTm!x;e{);c+S4>gQ9gJDg2`Yv5r zh$|!f9QRr#?W;W78_Jm(hw{OagyG`MnB+_(Y`}~!rD$(3>*E{1^2d&Ct|OxUD(&CX zVce&ZrHuQBmNf3~d!~&0w+k}$%nVS$xNoZ!ya#6T*VqP^w3GdEPXgORI;+CCzt;}P zmANseee*jkVchT1HPb=*@7gb|v}+x-@65Z(0c76iI14cW64uFn70hKQ-9zAIU-tIJ z3?K-_>lZTsGLE=uzoV&@dJ*ovu3!MYn=&s#Zo^e`#d4zW)yo=RPJFJP=4|yMit89z z-&`~}Exy%HQw1087**d~bhVG_`~5UkaM6c}!tL!zkk<@*8z&l>BT$K(<;t|j+GWeF z40e;2(m6Oe<-;YJFIXndxY%Oo%O2kC4n7Ecpl~7>_5fjUSRC9$r~q_tOb--cls}Lo z75z8aSI>=sDlysNHN92#K)PUTxn#+1Asne#2&*fu&V5DcEX_w z?HEW$N@j1K45j7Hy&Mt=g^LyfS#0fn9&Ep`=-yfyS`RJ;TaS=-@t1*ots(iPK|gnG3_?zv|u4QyBK>T8A*KioxTh2nXTx zoonw}=;AI|_){}JS;iN#jK6WA9PH9m!NQRii&=OuK8X^$E5fF&Ru$hanyysmQm@U8 zPdOtiwb|gGVh`yee~a9m&n-j2laq@hTi{hIM)7Bl`kw!DPkk7J6=3qkWvFkz1dL)? z`c|NVmHDgJ6x7$dsi#SOkmb+gGL)R{M!`pHQ$Scc%45p!eEGRc%SoOo4VOLB{sz*h zhU{M?*s*mb&?oI`SgE09o*6%)GEc~##Fe$05=Tgbyq=Q^q^0cQs!!+H137|%q78qY z>(V2>8Ok)KdPb$yb?GsVp{DmJhaSI?2Y+-AIwL@?zo4__yiWUlUAj*z?dqzVg|Dqv z`MZqQsoj&}4h~n=rFYm4`ASjKSJ3E6 zSBl@ewxH2dogI95F*~p=?oiskK^IjPglblTz2Xh*nzI$gs9y?XPVN8;WqdiPD@9Cx z@r8^px#M)NF@W5w^$25my8>IqZ~9(_hS0C~l+wQUScZci>7mM4;+Btt{5D!C4L~ys zhjJ_o=;I!$?MBb5Q632*UvB{$5J-0S$rzz$K*sxTf?5C zTwRK<7xBPjp2&F&kUu8&A-=;qb^EB^K_I*Rcf3PaA6oq6P^R&aF6OGo#ZNH6_rM)^5R@p!8>oWT%y|yUEn}*yhM0k#oUr35>b~mg@7TFb2j@|kH zv-du5c9&P3|NVaNy>sVpauX(ykWjvJ8{0|Cp9De@0&Vln0)>{f*kbJ}8ive-%p{qF znF)U?3quK*R@$buZu!|-W927l4T`&{)TMUn(n=K-SK5t=io5ud_0_epvMaxumEZew zp6C1L{+qcWz}D5ko$tTr|8vfH&NuOh(@pBu0T4PF6@r!B1 zep>tqdg!QuX@iL!Q^5-<(I86QkxMRPNX@JX(4{GtESG@wW(_e6CDMAcqyvd%Fw+W% ze3PXv!j|y3mOM?WLs(bfrsT2mAkbKmhjjHZ=RS4$z}XS@Zdt^;v+K5oU19uH57RT) z-IP3APN(;|obthGM_X3Us2nGg=JSQJZvpq;EN63@MBZzu#NY&$R&2l1S%avvbUvXu zf_)*cMwRv(+|LP54xon?%1TcS0c~9Q6MGXn?6T!o{(rLO=IvMhHj-{41}vnJZeaX>0{cKv%|LbiAB3O99^2q(xOG?i)7y z>QY^F$3lnKMSuOnbBO_c`|46M*iz*8_TP>Szyo_aXIzg=!BfR6M&GvjnN_HxVdf1Z z-UTO~M2S{!j$-6K=SGuOlk9x4^u3&&FT!0J^~mphX;-QiicZivt@*YM=Ghi)g&7}^ zkrmu$GP0s<`6V{p{!+eA_-!wFx3t~%atOj0=ZVZgoe2lcA~;!5=HaiY8Id_{jO=}=BjRHpb)!FtkEAe9dfo4);+g=I&3t&?G?^vL*!<35gC$qip_SK~h zG^#3bAYoUUf`Fy=e0**f#G~P+3d0xSj=bJVM@`s9fo-*1Y z;3;j>i+ON{_O8VT%e92Q--jPiA`mp#H6$8g8XzK#-lx#dNp{V29b|81$zbH$k#}|l zJ0RtP7FjT8$YsI6_||KR{_nJ4IB9y>DZiLsWxUF+k(2}E^Q|(kJ7rRy=NRiXMRnA! zW5U{OzOdYBivIeZCYJFPuqkM!tC7Mc6Z$t1LtXM%71FNEPN;FqB5lyNzqNxpY zM>MezNQmZvlOvj(%lR)vv(Bfx1!ZdFe_v_J^x6^4v;GMX&C?yxeEKyan(eE5#ffJ7 zs$OxT*}kgpBBD9hNHq1L715kaiKbH26U`?RqPa3hG*`Z=M3Ym7n~3JW*v{qyW1Kn> zJ!wky+7Z!Jr%XgywHrcXyb89no&@|xGaWre+ga}>^S1|61!DWEUI9MW>nmUCq`Ffi z*>(naG5&Za*|+c6DU$3#XFL0|omBN&k?faYJA0&&gzH5s5`H8l;Yv|Y!XFU{2PazC z&Yp?sW}-egvx%rDCZey6?JTFh8`;l?JQCSA1;f8=JAD>?N}=`EaeHFkW^bocVt(q| zPVI?#o2G$``6x$uLjJ03J1ukU@aLMzxDh)kre3LSr}kADu}jp>sxDQ~cC0l$%MrXs zvu&sL)ujXvMNISV`#;TXCmrFMDJwZ8yNQLY+k_HfNqnqYZAKlD*3xM(i-$YWU`k7I z*l$K@Q%ar>+LUUtc}p~z|95Rloq4iMTS9_f{Y|MAC)>0J66A~*@`R|%ZA%#%^)kJ4U4IVI7H>g;8j^_eg&KyCb?W?DpOqEqqwYTg2GU)3wH1=j0m(Py)LsrJ>K z;uaV|&J;uLTUiXb_Ept!uPKG?SWD{%@t%*Qe0lq-PLX?URtUGRDkbLsXSTo&&!fC0 z2qs%#whd)2M7S6UT@J#b)@_ODMV)q6FB-XAZHXOBxm=~F-xB+@=W@-Hh)Chd))xBS zGdMyd;d0Mt;&N#f#2c&9%t6XpP3ygf7@KB2-fe>2tW)z4TiSxljSuPgfSh^6;hdQy z28?E5WoFu1k#5}(o}hsYq$y6#+Uh7~bi)%IWKfF#7^~|gTsix6Xen2HT0Sv!8n=(~ zYLM$6ab3ps7}wLeDkc!kijQ#BDeZ3mlSuEdB)q~MEPjqF?qKmTuABfLKgpHD(Jd(z zbAWmL2(QlMDzk5`ek$cT&iz@bd){g4X|W3imv|>T;+p)m@NPEJ+IYoY(Zcy@axezR z#3eHZKRmCK@`4daISD(9nD@vhZ2!niJ^`YRgZa4?JZIW@Zei|I6jkRL(teAt4Fk-9 z@LAJdZZN-&n$~`cuT9f9L_Xoo{c@<2S{AXn*HtE{SfG=7GBXCuabE61h)zNa;ol!< z+Su#&X45BfX43|0)lW%2;>ZLuGU{`e#m2%3X=d*<+atZcALJ4HH|r7WMLjEtY?A%A zw&vC3drE02=ZRdtIjFGNL7S}%cF>sQoBcCs@}SI+IAF%~$oVzsc@A4#J0Rns_YNp1 ze&xYkL!mIl@Bv%W&<@y%!Yc;);zNJK`V+6H9;U@a7wTuduB+lzz!v5`1IbqvTTa?a zQ861&IrL>m*b=p6BimpL6O&*|Lf;m;daNo7tNLIveSGec1@~H!N3PR4MJ}&R{FzKH zgzpq`ecZi)JH^)9#q-5`IfytjBE#XOomSJ#VYaX4ERVyFZb+IOeQ8Jk0qET z1F}cjp_VOA*(yOx7eKAW9<^5GQEQb$tyNbH3^t*bq{uw>z6z)%rB@2SuPSP7I9d2b zqRyK3sxCwqoov&Xm;|*_l(93bTGC(vO5u{=nA`$5nCXul-4CDC6`-3Hls&EojAkG6 zA0J6R;#hu^dx7QCy5{(jg&__Hb|dC?Y_&uFgrt`p+?B5w2%6x|Mm|@OhdbDxWYsw3 z5bWAxdu`zEEhjsAYWs&c1GpZ9yZ zzmux42MRbSyO_nXEOlCq@6m})1`q5Gq9u8d=va^Jd-F4$^ae}~II1hx8wt!PxfYK7 z@A-wF@1z>AE{M)@^ArC?7A4<~duGjltP2*I>myxqjX1OV#nk!lQMl=NtvUZm3|?D( zL7xy(c`cUbF`b>OsGV8VnEq-O2D~3J(FIinGUET5*34Uk)c&Qpl+}F7|CXlg=X~^l zk<0`omJDkvD3a9 zLr4>c^Hp`c>NM+Z+gD{sc}5--PIlFKxD!w~tuH<}%aX?#dWW^%xFZfh_M@3+>%*DX ztH{7(e9?8TQvD5~I|I$rqm|72ag{&%0v>2Me8MMxvM%}KEtA*5MQE}3;|?5$&Hu+c z4r{*ykVE85!wVd?gJax#^Xijxj!wPdZ%(^36t>>|J=rjLP^6ao5q^RBwM=VI*Ti!? z;@%XXWTBT7ISjgCT3+M9Xr*dv?|s?Y`>10~XB@;#Jk$xm_T|@-p4*5Jl&C+7l{Cvrh9k&3mrIjiJHyQHesq9>&*N1!O^CD*6ATo|uoT~6oz zOqcYx!{KvXE_~PXT`sKG@h&N1@eJ;A;k{-nLuWV)nd_?Q;A?$+yenGn_2+yuyAckM z&EABG$2Gq8(TeI%3o~`Hj2=0EH9;@(nl_%}GPAs%{-H2l=k9=2bobD|f0 zHO;Z8q8(+IHzR<1D`Z9m@OY5J4PoB16-DxV;jjQqA9Tl}GSj&9{Dou(#PH3>XLaot zJ2KBXMz4^g>I+(i=FvFiZA`uUt?f7Eyg_q|Q!9FW#!13R8lTmgHjm`rqG`5b&1N+$VxY2VIXXbefG$xE5=63|!2GeE;yuDzb~`qYQ!5?;u9cX~sxX>bJzmju-o8jBHbBjm3O zU-=bDo7K-qwF8o~63dQPiV_%xxUi;p_%2u`XYD~sS#`+3SBwQ`6Cd=qB$!n;(%=EPsJ<=60kvJtFK8Z#53@#;sgg5^88 z-8#31gDdVoPc#DU(HYk+r9YAGWTK<#bF4JHr8Y5M=J}(xvG0-td84uz*Y+|4w4E^#zFMSY#0m-+59NF&E(=017Xu< zve^fpskA?Mu&#P6~=o^ftd$sYy;ljcF!xIzF-u^D;AT2cRj*V?c$b>tc% zT@AfXz$F5Rv}J!WLF=ymifC%0fqc=z@0z_sPxTSoH#07fBdB}heHPqLYB+T5l?QJE zkt$nP9ITza^`*kyTkrb7frEz*&&>vR3`HPWKR=Y82C*38POK>uYC}WHpzSE-L=X!0|m>}%^+0XufxvC9Tjh?l{u_@7ZG*dt%HQ4 z@-DiL{UOEO9&rSH+;C0ue@iac~8QRM}d1H=5IYu|tccqOFiGxc6>8 z8@lzgs?_>bD}5{v^)bdu)f+9IIEQ{flCC6OZ`4b3^7UDBYl|n&EkI@ZEPZtLgYip+ zn`)Q`Dn~I|9N#)|laqhltHtUUgB!6@vA7BIPawRpBFQLKkBC2PUEZ`yn+J4#FT zflhCywCHtYWVm&jag&A~dRR30s1Lenz@bf0n_lz&as0j_%&AUJ2~I<7nlO*xA4arq z4FQm(nFUCz4+%p2Y2_+IgLE>gkFR7bikDAPB1-X&h*|@w+!{gaM5tZ+lJFb^9!k{I zz)aD#%4zUgoj)$3)u_=^#LBu@b%#Nat)7!GmmzFG&1DEmF62qR37tgMJtF~jdez@Q z<0G0*YrAH*RuiWxz=ddaUImz6Msg}Z*1Y)w94$TBra5*ZaLk1J>*=*A0?W?qM-*7r z?{#{>jxA)Gbpu}e{nFh{dO+5WQ#qo^OCi7WV{?hhv3*sx(E@na_e#{XBNX@hXW!_g zDlcC-&6ox;)p(RTtx4enOMHxzW4RzN zakfM4S+3BrT-rx5*5+VQyOhRrVJ4DnZ@6!YWhrJyX%h1RzO>l1q)>P>*fz*+H@8SW zB`!P_%vt1Lz@MeG&PVH{VeGX7e|#3&C_UO>=4%Z8rcMmvKm6_if7qh7;13_;NVjBz z{~$f0kqM9mskYuK=Y^6p2Qa&);c(Um1w0|?!$cqAz=Bt1RgfJB>(H%WnjTvt^y%}i zA}^}cS99D~!@4RF1K&=cd5#4ZCt0W1Tt1P8kJWpYYWF^O2B6-X*zXjfNqR~6$B9^L zf)XCBG~Ok9rck%9daVzQh$$U3#SCwZ7jKk~{>9!wliAu34{wh)xVnI_v(Wx$UfA*b zpNAz~=7gOE7WjdaZCahMlNWPLbBf@RC@#e}JIyI7rjA*3Z{_pR%-+FAEBSarNP_YR%%V4oRPC#ppGAKq>>buRbx$5W#aFLQ(DKqctX%J{9W(+7JCHXpbo@i7 z=T|oos}{@yBal(Z&pE;s8u8!&g4U$VQ%Hyl5~7_K3YP_=;+_9FoWLuKPKaVs*h1&3 z8p~2ZA=S*PFF<~>9beeqxc{G#?L~V8Z=-om_H7oTJ$Zfo%d@@ELEP-pwKx=@P1AC; zC#5{5vn|H`xXTF_95u*s)Pk0bC~31aB}%7GDW3g6lk&wVMUxGP6p|fjM0%YO)=y?i zPfwIuR3$v{2Cw2f+uBlncb-6~CX0!v+rrgxApWp6O_&4s}WtxVj45 zb$ysbg5X0kFCpD*&hqP^H#u=z%-TovyT?w8Ba#?D!UnS3OdjK^*csYTR_u&}7>6lv z#tEJkB*SrT7DMA`Im>XPojwGDa7C#2{!S-G4pv_qKZcD!oW=(=$`&Q*T_)$U2h+|V(ZY16#n zX{*i47EQ|-v5uN{(lIyi?8*#JHM5>1+8*H=(>X62JZ7?A|;Dwc1o+787K~>2dCrTYbJ{r=R5z#w3-#2R@3ZG)xH`)$@w>?)hs{BYQA&t zT%z`FUyXUzI(8^$1N@R{f z(&%|Cr6sHf&e$X~7I+SirX-vQyBq+F4=3UXL*jv+1r=%bK-Xa(Eyw}HAR`BJ^V+2@ zcpj^IoZ{R(1_Sv+Pdzz65a1+QjTB~}uA%eo^sH{nfV4S}RYzE*O`C@tv}l@9s?MAC z`jc%M6O)kxPYSwHixwu^={IxWda~@#bI!wD-q`@K@cdY_&$&5*%8?@7o#~kM@%v7H z+etO%2rBy=?O4|vK(HzuD(a+1*^3X!_Yh2Ykzi!H9xuxicve;}{X>`IwiNo+&%Wt>?VF^nBSlZXGW>$E_F2&T;F61y4g0 zoR5{YTl?p+fa-Wf%2R>fpWFmq)A-0GOw&=AFuYFTa06tvC(-8Ex=h3mf&88 zH~(1qFQ;I;q*G$f zaaVGi__=JSuYEPvBRPGi)l^TinuDEGLll%CqET5j9s8F1-u#bjN49-$fPWViDD6$h zzU4TvXwd$slWNRUzAnbmK&OM&yuaMOH|D5c=PBQ@Z+Y{MdHZVc8VNvyoZtV+8pM3L zlR>ip1(*_LAkeX2xjzZ$u}-SN4p&wUxoSH0DfbSQk91NE<~TugX1M(8Q0sy=?#UgweSSA zZ=-H%&F#^RmM(c-?D9|FumN(l{0tka^79rR%Ak+W^1&$TrbMIT-)M4 zkax>A24FD`eEG%Q_=J9}`@AQ%?RE)s{BsKhvP=gXcbGfY+M1KBlTs2zhIP8mJyy!S zdE8?U&nuRoMCjhy^@AujDqFjM5Oe7dE1pg~m_(OwJ9lU)OfNc*du$86r~zxvj(LGS z833;hptjMAzIG~G8I-l-7Z2P&Fi9_`E0sf^iNDLyPS>*eH|O8oOEBl1}9 zm#apsUqCn6-qflM)+eEg7qWV<*#(-`-VCNq(_jk|Wkg;piASCb2b`$RQY~G_ z%xSaE(VKAod^5tElNhQq(+@X<-i3%gpMh!dS=}SL9}}=Hs7K3(yGtkUgEj?gQ?!5eN`s$K(=KREfTveN?}nM?K&+Eb_&vXdM4XX&oGtp>np(wlbJp<-&~RR)%(R75n#Xc*54!P3`0=uXp&FP6n=7t^y8#W3$II zD--PTyzUhcGO31-@a{>#DNF^*4ni1l6K7oo z&c2&1fAW2K-FI@Y2LF|%5D)89I-rF((z63%OHs_mmeiXjhG-?*6SY7dd3~L9xkQ-G zlkf6%Zg#RBt69FgrMm7|cWnfc@722RG<(&{Xm&Rd3QxY-hw#(8Gq}Tp!NcLMTG7Kn z(L&=C;x8Af$F++wq*dg3j6CJB{>?e(;a-fNb#D%3Z;rV)2h%rVc=nN*jI-|LHDb6y zgSW|T*tzfdz^LI+S>{~Ak*=F-<%e9(rwS7h&X3hYAD|&FL%ijt36+2^rVq5GT;0-QUIW=mni=%+w#VKs;sKL%ym^SozH*P z+j!RMHt}Ok!M16NI&p@A-4d0&JCwY`xYoZ*Mk?~%$c-4CE3PT9{N3vM;MorpzxjBFlfC2^8KT`8lz_m4)qT%p;HO}6Fe8iQhTIhiD%!oj{Q3#db zi(FYl*8d?^-C_ir@;)~f`Wu-lsuJ~Z;EVx4WeD|qkuQ8JMZE&Z{&NcjE&dRC{79n` z9udVY6d&+D?w+BVc=Kd!ApUBwn|swJZiAEqSG#`f>iLL z2^7~Gm97{t-+zHIbp7taPnQG+(6Jh9hK<06`lcUqg>t+cO|{j|0A*V5MdAz=(chRfB_rGYL} z5pBNsozx~4?GJx~ZpztMC*L)W>g@b&Y(=~i( zYjkf^dguU02n6vn8i4rCuD$U=ZE?p>=x_B&w@Nppc+%28X2a%Fe6AFh?kpuM!fdds z7Wx$dwq-&TN>fu!@4Az_HQsg^XA!j*JLsQmhoNNJKJ|bMxa~nn+aRC%B5N;UFZ>H zE0;YPTLBfJz9!u2dvr;;8|J5%-*RKEBj=|Fq6JZ5SNv#kawt^uid)o+a0>(TY$#@} z20>&ZM9!vejL)8qdv?cPWBR*po)EcG2jk~`N|F`gZ@Pza+`oIG`k?VsT97g8v~U-N z_(hk%=mJ{=t;?;5bQIzPMQg+SX-gW|Zhk$M=h4t6y_b*{QSa8^z-K<46 z+`=jGkuJpdxmNT=dN|}B`g8po;Pt~ri$Af5W~ezb4=BV(UD~RKuu4adwrGn*!YIU_ z&L_3REk@fM5~>t0TMFpi!tGz;divDDDa~D2rXa9lg<9{{@cRrHmr|QfKq|yfS$N3W zpgJ=c4Yr=Q(_DRU&njh^=3rUtIasP;8svAnm41BT9H+aoVPh968>^5)e9X1?3~U1m z@iXpWd2ZHLQ1_Yq&anEQcL`RicPpcnt$TNdTG0C-Q9(#%6jd%>HeL#Z5{E;pL@ZlD zU2$S)m3q9A-&t0pBUtl+sh!>=TIFh>WvxmEo>!{m*YP{sN{$xHaJC!D;RO@EP9;bD zhOFeZ3uaLG8OECxLd2t{;jFcR{D`EMc#|(xLs%H9wHrb@TI=Ij=yOJhR#SX70gpIB^g6Zib#2<{r(iap)DpMA z&W2gI&*h0!JpWoll%EJznuX@LVJ48X=FJgK3=L^WKH*xiDq6+E{qEs=;wKA?$>(iM z-e6OJh_+C1g!3s3t*m+{39e_gzS$^UarO9rM%mnII@9s@5n|v6+?@P+(19;A%*JET8VQ z1Jm*{#QqaUV-(y`27Ks79OhDza>X>i8^TrGk!Fw!HdPp7Mb4W+5+&y;qHv7@_F#@~(HI#$t-im5X@9F(e@&OyIKL_60j3?$1ua@ke=%MwOoxm(;y?!(+qI~= zp&YI822~=dSdMN|8s*R9JUt`dr8J`CNko?;4>1aM1H_YUDEX|RPJQ0c(#z&;X))hY z^qMVN#V}|#oOV9n5#dbI1yNPk3#EiF_0(U30P?az$H)G54jrOb3&)4_6c5MG+uJ|! zn#H+qDa~&=)p7h({s{=^0d^|!6PDw+%hBd-Z>zM|+V&bVLu0Gh0t8xa)NpV^%T3^x zo3v?<=9{J|jA!kQ?}CxHzPF`2s#c_Q|4MoMc&@W`mBiJUU1+LWspX{ai$#`AWkFf* zxToS4nplRP34v_SIbjnpR6%hS>Kg&`CTiV~hFT@Q^J*$Y(*q4-XkH3#8tTzxb!&Be z+fAs%EAiR9BUdHfrpEQeT{BU63d-FbQ)jnQm-UV;+6tR82CfqC6KyS%ynn_ehJUO} zTvTGdFP(wSJ6<58io`Y!#SUI=yXaA^412+T4a!eIr9#6i6T4*kYh8qR)u05_LYvh! zzV}EeDHc_|>yDxQ1?zGtzJr$xTCH!c)*o+CxY9oLtVH{LihrA>7)Vkqb}7)Y-R{1| zm7CPr0qd#usr1xe_tb4q^g>GpOBVZ1t^*8S)J4!z7zvvLSb@H8Nz>hR2X6qRO=Q>* zZc=;b4KFUO6>SRD%9y<%y=V4|yK3wJuzaxbQ0t0I47H|yD;%<>Be)kr=K}JDptJ`b6_tg4suk}ZLTbF$Bo{hyS+4{FeACw=O z2Bv#!^@HTyy6l4tST7%LuXU4bIUj*c?h5J}dkqtAcb4w6E5LLZywQ^QR)Wf^t5nx5 z{(=_JNiNI9X3z%5W>A+D-D?C3_tbi*2BkdhtVF%m$ch?SQ6tIS9rZM~tM?uXRNJYg zH|o2`tU1{>)O<)ZDo9VS{-M#f_Pajz(g)3AXtRrrxtq2yoi%dsfSQQBHL$kt&&m{{=JkR-pfu-H;A zPE(53rv@7jHnyzf*8r6S=!H~;+ZrgBYaDxC>4SICW^HdNr8A}&T$Y@!RIs(__r0ZKEYeJ$Y28AC>qoe$sw z^wn-Hi7>rJkcz$M2%^AN97k63#`}s~n%%CaDscxJ!pQD=MLg`TkGr*eQ^;njZR-~d zC(E{kvuGl4Gymo|23#18B+|c;l?|@|m61fbG#nfbR}D!6AXQ=_q)CGNZzX4O1K~Or z>P%z`8V;Xfp-grdd3>HPdi~9?`eiM_;TAnT7rG5m#vAFN&W7lCR@4hwQ7+qw?AxsN zUA#vI1>RS5)f_73t08Wnm`hD-V>O>3gKzQuSy8G6%3&&ZSLG8yn(j#^FjwUv?kxS+1zn^@H?cR@8~CDA(cx*&rRv22d^igrAH1 z!|G?VY7XV*0&Qg7WPCa+>u`NpM}1ijW6F`0btG5Ta8gv{bX^Z98FYz|Eq=0&6s!Ml zmiKV627GF=*w9S!_Wf{ByiEF^tO|7Cm{xXV5ZT}Sgq5HrtAD~Q*$UNrRO1j}Nz&(B(jfk%rK2>Z`!S`c zOLsg;ci7TFTU(cRB1!j4mJVv&Ivu-nYGM$7(bB=aDBZnH_0A>fep}wgv2R~(b1=An5RI`&v`m4kv9pVCnqW{dShF`a#_TYhk+HM1{W5 zR7emc!uAZpcf~J#X^wO^yFD)hPI84awL<*Z|DqKV4*;j<|7UU!_%=W+k`+*0{Z-Y8 z30~e5Gjx;9gBQD>bwfLWNicWQL2+|2BP#13ff0LRQco7qR3?a8cc%LuPMWgsKb$ z#Vtuwg_~po_RI>U`kQL&nT((};Jnh={#fmZ5(rJ~HOgu!D$AO{%m!%SVEo^Gt9WQ^ z6%s?P&!xUw(iL+{&Yso{`KpviMG!Q%w7D6ddFzN}BbAWI}`Q?jmI##Fmv`aZO@ zIB;ipM@s7sWhOSTB1Xrg!VOcNpqrW*3K1Kuq*3!rP)pumP4j8R_zp zch;o+j*t9*%+pX$Tp8*WY*YlLz4873$Xh`v>~wE@$_A^d4I!P2Z~`7?$bMII zAvJO+FOSQ(%&Eu?v?`Qi<<%q&G3Sx`S$BinUCDL5W)wEXaX_S|Yk-oZ#twP`lv#>*suzf{>{h7g9;{3Z zy5XG&&cTrswLTJXhZNb*UG)p9*D}+bLG1XN^A1xn091qCz;IRPTuYPgKh@a%*gOC> zz$&W$k?TKq8k5Mnz@Pj`(8;EeFevUvb%5C3JP!H(Bb>vj(tnjQTr-PC?#@a5Yoh_J zu#2LB1PZ$cti$SbYmAH3YX3(y3*~gv;m)!s@mz@rdM=|!~$q)N=X6(W9HMOO}L+-APmL@|#5G|_y zl5a$xJ`bP_dm?4^BcTVAiIO8tW}BE&(B+b4GsqAZqb2G1%EGRp&%d1Yx!nwEZEQP( z5ViaavgkI}@NiZ`JIqwO5@7Y{pT|swDUX?&Kg!ewv=MU%G6T>^h@WXkh*_&>qhE-) z^NUkwOA-y0h@*W55n>}uwjgzDLCO3 zvX_Z4a&*3eM57((Xigtay;0n7vsW80; z#bm`*;TAbX{OqSBSV?P4v$09u!bMB>2gL*QRqs+}_bL+me#|iwg6%D};?^SOfdZdV zCYj6i@M&E3IodHJAyWiJ1u!CCQCaRB$rzYrelqD1lA)gNcLzj9f@(CY8;dZQ zy2FBZEq4K<{Af|2N@x@6l_kI-U18Vm^VfqVmI4#$L-CAIFZraPJ+6h?E{CJJk} zp6aiuek|U2ySlb48st>Cu4quF!kylDD%=?iI7DJNjE2nMQEe)!T`Sn1k$QS%bjCfk zK^+e_*!Fn1!Q^awmdC;<(b{Xj?z;n_kv8AUmN4M$$nDP7A&|E6GJsP~b zHs}wGTbVz=4KvVSs6d;}bgmPFIxw!j8jL6TJ{Yac4vg!HmNP>&^qtGpeT+F_hm~pt zMo`+B!9+$oFe{=JqC2_c?%aWKt0vAZuxr?7>7&!#fpG|P%CRh3MJL>Waqbn}UX}C} zb1K473FU8{i10<#-R%%D$F?)p=fJr;$wKpHd#vop42xa2h4Qp)m0S`nX4H`H`l7|r z5^9(PcepbZ6P;NiP%&^`g5;=SEhMyOi3cXBodQo{&D3}i_QQGoCXKk?D;~N1bf$O| zTp(;2vL4NJn7l<XED{no73EvTt+QH+^~1SMyX|HBYp!=IN}cV_8vD zGmz*>DfOV&6mokXR3I4{9`Bc?kn5*24KPpWBHMNAa8}d<^+i4Gi+UtX^`sPqDl#o9 zuP5cxqghdpWktCWdOZ8~MD|TBecD%ZEYp+n_NiPob$U|1J(HF7Y<*eZ^kp5-^rWOm zE1otv)06gAA25oqHazEN>G@1Y%G+mivy|#cqkaIjKa!LyfhRs#nyCJMLKn{=lrkA3 z)8~kQxz4Yybqy4@VuLG8z|0FYd1!0@9S_FDoMdAy*kvw0xIj(BJrfTdz*e`LEk;Q4 z%8lVs(RWO~j_69Dn8UgvDc^5bQ3CMK7K6b&uGjLE213U{f|dd5XGr=9mJ4g%GFVhv znNN-y3aVX*596K%IfIH20b0vKt&6_bSCfBYX;h<=#<@i*pWvP$EY!n7|z{w&MzUTZ7(2M*3(QwQkk>Qzl+1OYll54H5B?*bu2# z$_nk?EQtnnbPG(o(MIVN)ZA#vhVXHl27J5JVu>!+Zak6`|5(I9$4y+r;IlYxVeo;e z_py!zL(6QJaD}(KVy|ow6(fQa(Kwd@=3JV~(=rwyNCq1iG~Ai901*rg`od*2CY{B&6!&{iQHJAj=0)SY z%+_I`(w!1&s}gvkY#50I!NO7>SjN|6KQJKCOIZDx)A*mpXT43<|tdnXbvylP|p5;wUF~m!%7^8yH$1 z#*t#j8vw(FFySkh4L-OrC~k=Z+HD+?v3{;I)hCTw`fe8h32kHJ;set+Ypk>Ui34lU zkb-VoGg9<#tTtNiET9a2BVcm*hESv~ehh0DH4gTbfcIEokrLEoCWMpt6B}wmtdofj zBCGUZsrmu&pKx?5s(*PGceG)NO>G40k?dws@>8V=Ctt__QUF{1BXvz}kAF`^WZXFo zOO%WEeP>Qz=vSs&l}1sGCKc<6)2;%p@d*in)vu~7k=CS$2VP8zU`P3C%lBkH-%%yV z<-^}pazgy9t6Np6a>)|$r(8={TPbRYEhZr$3Y>0}2GzIYAC{CPXodV7539|2wXbHf5)xB~j{L9eAj##xGBC%>ZBsd{8GZ|_Hh0zg6T#Js#6e?u1W@7XIU^SNz0QfNv*Aj zf9DiJpL&r}TXOdq<12kG`p?VkbMCuL>okIQPCTT=;haLr4M8z$NV%~guH=#{xvNdZ z*r2JnO1p}?;vQ!irBs~Y?fSwFO%FK&^9`r#sIEA6dJ1pEUWF4#+q!iXuDiEK-4AWu zbnop9J7H=bvuKEms)scHy@ zj)X;2=*XZUbYv)J-l$!`A-(Hna3~d%pYE-kYM==u2X;Dsg)R44fTZ?Bx1!~y=-EJ8Ls6vgq4%27q>GaeY@5=Iiv%y;xJdJY zago7`w=NpxtG~U@zy&C&2c7HfwawQ1NDOH4m!`CbqRVBY-e$J0&dt`->1>r7!|W=! zg1RsA>pK^L*&13RI&{Z}{$>suzaqt0raK|9_2ZL_P!5wcNI4L9;0>e*z^}DQLVIWs z0|-$pP@?Ezf93#XKo*yMO;{i#ezmbv4kqo!wKW!KNl9Au-GiIb%15GE8rd`?zQxlx zx$bGuZN(Ipb%eWEM9Sdhr#iviq8!vjD_H1Rk%2vP=HJS}bzrg#^6jz-bt_NjpiAX4 zj1E@#K7_}Tp4sIWn?^xJn%H2aB!ZNxi;V4;y)IhSM0wKXBmz@*v#*@IE@sMXnc>}3 zXU7pFb{sOE@O#u!EV~d}Fb%wgLNWmbBubegJ}J&DK93Y9?9Op`W)s0OTrfl%6;f4QxtA#(25iC zU~}Oqg+746tyha%j{DfLi0IZquA)4-D6Jd>>cU?>@2@I`RA{0%gx5J5>j;gfx0o{A z7g#5lLLLqVwIIje6&!!Z0M_w$1iX~rn2L2gp0eJLfOOM<9oKPKEFO@bGIq4r7&~ja zGy`hAQjqVM-0X-v_*99#zNF-5V0u?4A~_4n_YHLMZIddc>gnjLaClTN;UIJr>mlxW;;7UO;V3uXL}=;ZO0YvSe14v*3}>I^$~qb! z;507T#lOfizFYB8o{8#h2Y%@QFpe-&)Nd6y6eL95kG1L81^EoM38e*%bk%Wm*!hZ+ zE+eNhQhacnv>T70ag-ShwlMrCR}=ObzRE@!C}F%)_L(t0TE;KHx_ku-DKEZRa>2(r zy@W%@I98>kL&peSUecjsIPUmhp=|<4^#)i zc4n7liY&NWGX~LmT%g&3r)^d&ok>DcK{*}LI)!9OjGCY}g;z$xwxk#1jFo6SFh}t- zBfwZB3c7?X?DTVk=AJZWd@`8WHo*KT&$84Cf)w3bi(E1A7yeJQt)uTP5zd6D{l?!}`&AOZ!B z2&p#N?I!LHE2XB#m6!o-s}~QKv=a}{ zlytt-NrzQQhjz~{qol*ClMbtr4jl8&mSAQmtMTm0#KR2ul33n3;7bI=-3ELn6drakX$#>_2b>NZ+p_lXGSXrL z^@u&Tpg8vd3R)B1D%KvyIAPPQ1^kd8Mh|JKX;^x93rb7}c;CH%&Q*i_0 zeuDf775B3b>Xu~WQ`$LNv&FuEkXoc05>m^>E%d>?j>@*r5tW<8JCo+?YEXHUZ}6){ zU$Mpx8f;OX$B6eDvCklnrrHS@rp5>x1h|6q9B?O0bMfEb1;`(pf5ZRp^P9B$g)t<#z?6VzRrL zv5s&9-MDb$@sArtklLls;l{sj#tn!jM!9(uLdoJG z(i^A~D?ixtoKr?Us7~QQh?g)IKEm$8j6f?evk3SAsb;D08B!gK9WO8IPbXEjY>V+124(p(KzJftSqhVIx9MDXO;J-YA464!P80(q`3!##Ft;BJO0$_@I0- zOs+I(s-XOZTJt*`gjeAhWk!x*8{*#2L{W3zxOUURo zDIygz$~cJdS*$Ogi%q;f9I+EJ9QWh)ph(%U2gRGlJt&O~{1%km&$|VM=wX{& z4<^X zv)Z6KlIwf8+U`YmWXUPh<5Yi)ax2}CjvtdMnRY#?tRi>FKae@I9dTu#NB+(wW!Xtf zHM}^fScBY7UBAbks?GM#{q%ADCNTqclz-A)WuxF+^ z8WO1wa|8Czb*%EEB{_6;YHfrt%13Ry6p>Kl-pz$!8%zESr_n4J$r7p9cV@WdlIF&| z?esvT*b>6@lN7qcG;~0=Vm>yr0v3n-Z0ks|nQMzxrm1w>MrZEQloM?V1N!R1sSR|K z_{{86VIDglq??X`WOMT;)5f($U=XNscSuUXtY1r`;<<%~i$k(f6Y31A#jrWWnhZV7 z1g%wo$U)aLqA}M_SI=DHRu*eQU5m%OjM5cDm?l3lf0HeIFv+m#oo@h^sl77zBB}S6 z;nXUVU6*6?-VzBpzMUO+5Pd}iqdgHVQtU<$63i9;5~Fje3*C7dn?r=|L}5ngP6CQ9 zv*4nPjGS)SWjE7rfeLF=8np8vViYf|@orD+THp9@4e>*|g0m zD92sR9}RFDI&`1RtgJ(9$el!o4C0-aQoy3vdR}0mTYm7v3xZg0*=2J5_?@I5h7b0w zmyx)??MQeeh~0htGZ!HJQu|RRl!HU`r)|%q5 z`_>Zo*1B&kQE!Wbb+F7$fP;0>-Ayi+LT@!q%?o~NAU%Z8(SA4)#)lMy6D@k{VS%8t z|80v<7Xw%$V#7jfEFJ<~;@03Bbu(BaXhgbdFJqj$;%K6Fh6=K+OvlVMm{n_$f&u7? zS8KZ*J9Z=ZC5$H}9lp8*-C{Bz#Cf+Rb=i%jp^o(l`mH{?^B9bER3~|>hzKu(qT6T~ z!eVR1!l5ebmXN3qt5FUY(gw6Ac#nkb2p;6#1^rHm-ibDd6W^Ch$T{@!!Mer7485&7 zvz#;BSlkR*YuHY3U{`JaXdX>!h*mt@m^h-`qPP#82Hc%dTP7R1p)=wS1w&y>Yy|SC3<|*zy&Vwfr@~Gff3N(=v}|nw~tK zX$E`CYV$#mq*wfS3I^lw zhwYDM32CAQGg$!6AZ^#Pdso1@FL_lrGwQNE~x#KU(MzTSFWf zh`OO~-H`$U8wtv|&@y9g5!&l%mc|?ibz>gHYg-O6Xx^T!Gk7*4R-p=~C`#(^jXEPb zEol&|-yu(jme%#rQ?UE}$J1JUJnTOXw)%L)e_Yn;r>CGQwe`bSqVFl#%a2<*-q4pX}l-Doq{>P{)HcD|+S z^(-0w&U_aW#OgifwPj;_gb$ZYokB4 z(CQ>xUdxOM$*e;=)B?Ul3ml|nEhXJK3#7vs42~9$Nf_RinjzCBB^oekN@{d^As{j} znEYEDb(){sQ&U~1*2{5|J{s4g_Ow#5!8C>Jd%%ce!J25IUK>`)lOWBX0}B)QG#x~5 z*2HA9#rLHxS6ab9GL2$Z4JFO;v#o~T&1HO!XNT1aIDj@M-x+fDy(Sb{t%i@0i=*(T z0f{2x98t5{sEMH&wqz~%MuR9@o$)2|C|M_WF|?U%CN-R6K^xOB5$l~ahKeIML%=vp zQCV04%TahHmui!$Qop0XwdC;za}6ez621V zldDl5R^%Fa4vaiz7gSi4p_fRD=0Y+ZS_ zrQv6zMqI#VMrdv^VfKk^3M~@y+vb=_Htg!QoCB;ZK^I29WwjJRHH=nXFkrR}6zbvG zSx=&nX4PMfW`;{Nq*b1qRauA!bUDuW0Us8yN*NkB4!RkR~1 zIQ)SFt~BeBDoA~KvfA^d+kpr&_e9^s#WiNRODkUxYsTz zY^cKpMb-`}>IKk@DNQu)LSbgWIA3MPIno895IB=1oGxUR+sy?_ zTm}L!)y;*q*s@5a-g6w7B0G~nXR+c!mJxmH}p8}I#$aSji%W}vU!DFmO+?pi*@d&FFh0~tHNb+D$wh)Q zCUl_A5V9nDH*?U0M8^kbu^5i4-dEU+5IGdZL6WyY)YM^uC`j@ah^w>PRR&7S>wqe< zcbd=TB;?eEg}{qZZe?B#cx9(9lvy@FdBDprfeRBbGgS>UQ`PxtNF$_*AcjOABwTwy6DWaSn{ss2dve|~yd01vG7hNd?d)xtCdDdnT9zZGtj{TUvQBzbF+4#yt&Q z%-ZeHz*nCZ7vqv>W|Lr_ZtZORE1lMh1aNUNK(Vx#Ey8qS$Y<8j7zM?{-hot2nNyh2 zGi6QuNKvajI@+QX_Oiv1i?70b_3Cmp`lw-l&OM#S1TV=PKU?(g!JDwvd#nv+W|zAssjq0iSO_Y`s^_a$Onap7rG z?#o*4VGD-cm&kv?a*(5$l*O@9;SAt}1}5|^icesciMol##UChL5@7RcB_HG}=Kg@L zy%rjy02WstgZU<{wuOr-f+D~v`gV@~z?<^-zF_4LMGS}64fX4C>k!81Fkm{z z#Qmp7M3$Rs=I;uy^7t-AA}%1T;W`|8PgsV^Df`B*a4X zi`G~sc5tXbG2CcdOuVI9ppsR0O=k&9B7mcYY^rY6>0b)(#0guq=t~RLFS$}xTz~aH zCRK1=gWiY@w`E!Yx-p!k@A8c|sw~Nd8tnLbddzT<@?6}?6mztfgaDlW0~;Q7!+dVx zc8g7;mMUS5AuzVSRnkKszihDNmI^Zr)SX-S7+}ebHtzxGvgs0wM8WMsBElE49vovfMfnw-JxiBCCl6Ull^3 z4+xqN@M$gW4gJ}?=F@OEa1*>-lTAYrmZ7An`#8_5(=Wu}NsOlpL@BO5=^##htNyOd zM3ER94(tR@bpt?Cq@UG)ss+e31mf19$#96VVA)!%6i$8scy(?ZkEZN1fGft!^ol{M z{y%qX`oViio=^!bh(lF4H{upk$N(Tqq~igWGTj+tvqV&+xW$r^Nuptaq(zm;(G(z} zEFoC?;B(m1w|rEG^@XYsvP6r>LhwR8FQIUf4MbIX3oE_2dd!arrYksoBUbtDphi87 zUMC&W{^@spZ%~TU!PB$;$*FvXf~`vx zrnG1=S&0p;fM9nY@WEWE?e^Ldrn(d@+ZZ0CWm-xP=t>026Cw|gDJ=$C$BbO`I{F}x zy^n8C3rC?9{AE4iFT|w!2L}6qp%we6vQz9Mx>D>>UCDYxSBiaHSBjm})ff9j7zacB z0Ipx+^!_@)3h0`tEt;~B&_L-TV-Ab*l_0_U7_oHxi23kyBAK;*co0X`dG%Y4ijq}P zA5?xcVD3)zxd`=p5Bm)apZ~qp8r*(t%LV2}}z&{$@c6~e?#5(cK4QTZ~ ztxepgpj-X8Xs4ri1iyfYY3v^f6gyX5@D`p23}i7X#gCZ&Ks^bz(w2-~O_@L@qxsD8!9TOw#7jREC)$Hh;NGSa_yi9+;|dE4k$w@N5FT3wuf~^4|G&lbj&u*W${$x0#wsjFtb@`SlGa& z2^n>zz=1va?A&Z2uDM+CWA=1he-j_BKM58*EAh_{ewi}hGT6q2LM(w&&lc>D(O~2& zw1bUjB|0U1X(IlwmK!yt)Ffa9Ro|n(z=%N-Y^^+||GOpg#|HjbQ!;VCO7<;FCQW61 zY1I!VWrD?CffMxo&)~H_jE+4QTeav~G6Jrxzi(aoP5sqrblSWr(4QwbOH4}_U{9xB zq4VfI7cMxbM|2QK%&ykS%qg67(y91_g;(|S^;FyWdf4g#J~Ur{(3s54=@)!k8t1eD zLcVOt(4#d>y-&8@L&)#tll^*DqlXaaR|X-4zDE`Y|DTlhI)-IGnW0L@>9dx**R}fI ztU12bGHViCAGKr|=9({=YeF>Y;<) zi&3p6tb1$+NT2bw@-KyhuqoL2}!5N3Ft# z=wPio;=YUe0zLKIaXb3v=-%74YfI-~-+J!gW7oANo$~46f!m|rsB-N?a<&idP$TZR z{dP95`;L}_ZW|>VDZ1o0W*AoqX+RTp3f5ykh89sCa7-GLl@-ZPp z-Sp5ItVG>RoO()BaG7FYyp)Y=*REQR#+4#eOEIcU)GCyzDZxbUN`g)DI73A7j;IM zzR_NvT{)Zc5EGytm`dV+Ghl)xD60n!m>6X@1i9V=t!VZITCN!$w2FQRDmKs*0V|Hh zq925cYbKBBAauDw0D4;wg1Gmall~WHeE*d^flN(+ZEjiVjI`^%<#9c4Oif#R434o) zp`r9#n+=So2WE$!nq`lbxqjMkE4L^hA?%sCu3Z8yG7)i1dSL)V6W{?xnC^Ds&Y)CaAyv+(otzKw?u}(DL z(X4bi&@?da1@moIx(qbYzX&u{CD@qG3fn=gW<~VEX2nX!(rDgU@zh1g0%G)-_$4)f z=_v9rP3;+Y#SflONx;hQck~nYK(~j}oySGh`@#m)fBa<`ZGq>5B8}{Fp zzPM~`$H@NOGw&X|d2DKC>&WOk_V3wu+1T{V_@wpjUHfO=wc}rp?b$nZ+ci^T+xPC- zH@@93C)pl*i# zs>vOD8KxU{@7=y@+vNT|H;hfW`xy${Ha#=4XWw?;(rqK7qfFs6eb6NB-g_fY+xGB= zX&RZHX26;F{bLN_E#osgN2f+^**3Cg@BYb|{gXSU#>U=1<{!r=XU3+Ok8KRVAtxp!tK^W;iSzh*VI{ysiBy>onQ_bBD& zY88Ye)9$XL1`yNxn3VC!8}&UcdFilNd%btv0fT<5_BE zz&#{rFN{wFK2SM-jf{69iB520Tp)XF$K3$EI(XqJ2{!(0d?Jqfm`x z=-u=~E$HhW=p|j+xp!)E|L)!6JI2SRrgpu5*S@K}dv{DL-?owcGkk?OZJQpy5wf#? z%F)uB$8tpqj<#hbj_upE9csFL`?kINXABBGWd?%wBpq@0hQ+R?9CUb0-IjZG!}#Q= z@Fs0VzT9kXb!TOIVDWdd^Ud(2{SSV!5rT^3PGKkNvNz} zJ3Pvb+%SH_Z8N~fs9a_6!h!j zx0GKWzti{)_+Qmu^}dIno|S$PKfOD_n}N;MLNTZodibs6_Xd6!^SgrId-!eVw~ybC z@;kuq$feZ+diug=`TZNp=;v4B_k;X?h~IVmpiX9MR z72UFPY%+q_NBbvPnRnl&tkW}7Vv z_nuGoPkp|D-$-=X`1HQrBeyNw)%}wR8QOi@`QJ~Ir_bLrvUmU3&hyWk+CM$Bf8Y5t zd-v|9$>WpL=dU|&(}m}bj7)9cxncdez|QWmbLqn^3vyrPtNwhkL!8qKoHe zgT){+mNs5VpMSLXB*#m1d2Dh`l7Eg#7hLLJH$TD5c0KSfc^>6n@49=dg)y!>_}$1) z_dEHG^IOeNc_$j4H7|O18F_be-NSE^pYHeayMYB8u-ZNrZ6Dbu@)x=JZWzq%Fjjld zpBlSyoH4k~#t4cvcI$cDAvt5y=Z)_@cf*c#8%Hm=;D#GU)?KuA?YbT3k4)aSbMGzZ zt~+n-c^6+~SqwaF_zL&a9>Mp2FS_yT?fq9H(2~*UhTAsx_OjM)-xZ~8+idJv?zy+{ zhQ4ZH3Hjf{Pyd9&>i<4|H}RX|m+(stEjC9`CisC-&;nclCT`eGuc1quqjAUMMekz$ z16AnKb(DW8Wi*V#D+W~4Gov;n)3;5ZKYiQe_Vf2r_4$)~w~5^!8J*TB9i|OGN*gxt z6CI1(zXIr5nBljd-_87P;dd*)ksF|r4Gn%d6DJx!&AeTF-dbxTh+vcUef^HM32sC; zM@DZJ!w|6yMtgTeMiZtt8|4ASqw(n|x`9tFnTXI0w?&UpMvc6G##Mbv%KQ-bjr8v} z-d#O%8^vEPx>k5U&l->0`TbjdcknxKW!32GWn{h}_xx_2uj2VmezW}U;`af5ck_D{ zhRB9&+n)U*rhC1pQJ5L17DWF(4^3UhHF=PbO-4;o{5adZP+&$*j zN4gKoe)IU={nL!#7-gQZm^GWL7<2<>7QFLs*guX$GbJS3$#<>2e*_&89j>c*$N1#< z^iFD4t*Vb(c#WCyk=?Elg~B27pGUr=oL`0rshqm{kRF6U$4DzaMD$x@xfU|H_JXw+ zu3f+OqO}{=Zd|)*?ZxZXu3NY6f^`?JTfgq2bsN@gT(@c6#TTr-VBG~5TyWt9>o2(I zf(;jJykOG>7hkyc!gUv3aN&g)uD|f23pZT2@xo0PUc7$o`gQ9sSbyRA_3JNMzhV8x z^_$jTe9_vA)?IYLMHgPQ{-TR6+Hldvi#A+7Dqqw4G9RoB;_16bZbUz6vfJfF$4_{MX^y^SMU+8mBdjZXvhJN8eS zfE|tQ9h(-f!pA8%*_qurc7S;>(Je9&>_zIjnljUNOe1A6+oFcka4TbwT4@RNLT$Tx zNwx4s(vL9bkck4)^o>ULr(mwMsznK&xi4^FkrgQ_2W7hvKsZ1d!l{49RrJiIM5OQ~ zJi&Y6P4eC4ccq&oIUS9Ff1;0MvWLR+&!5C5YHr}!_N_g}H$UrGORHD)j{Gj;wxVe{0a=KPw|9R2zMCS3ED ze;&>~zoX01>g4;a4bQjv=N~%nyz_q85vEJuqA84q*Eq&oGp)t$`s=?)osuc`utuqk zzr(X&;!n65ugf}{037sMus#xry>?3}yyqp6`2A@TO@k*ugEw?@0{Y5q~t3+|G3)s3OY=TDGEwCivAox?9pvww12JkpwgewMCmCx!vJ6Ih|ly-%`RQ%=evGDi9KM0@h|9a0i!v7Nfaqw*UFT%enJs)Zb7o8NlrD_<=|um7Gm3}3iu^Of(o`kMEA|9ju}gV+7Y_1njG?3%vy-`@G52R{Ex z56?aIi@!9v_fP-qCw`>%qvc}h+~SU6aQ=C-A2_SHZt<$p>Ymq?-(0?|wCGKJDe0dUv(B@tp2AoqpyURt=uf^SxAc*}#fQ zZ`YOGZ|vFMxAm=W>bj)d+x2~2LAhEi_x+ph@T?nNcV&0)?9cy5?ef0fu7T4wclCA+ zt~#f5#_Sg^9eq##l|8*zT)y(k?)MB_Rq37m)!L%ot}A-aD!%=yjm1UOdU2)qt_>?H zmlV(X{$TM119yLF$Ns+A$3JxS_JIRytEcyV^i$;zy#1%Xu=(Dve&FKDn@ZPpy`lGt z-r@3TcRjp$_NzZM_RiA9l_gsQIiGy7`@lEW^nUiQ?z(Vsa8}o%Qukf=eXz8vJW%YZ zR6lzC?035EdgSW2_sm>6`@edpyZ0@-;{AjDgZ)3yvtstg?s|Lio~?_Q9k}M~uCCdy zzq$O@pi|6*87pyI<3oi&BEPXEgeCZduzZ3pL`G1H1SbVAH zp<8eJ@ehA??GL=~$L~9|>Q5Ife&^NyaN@l4-*(*(Z~LzYKKzl7ef)F3{OkYmD_{NE zZ~xhIfB90OWC*Zv^CfS&>K#9P;3Ir|SAYBWe*d|@ETrghiSXk`M#m0(>{CDe zwcq>wfhB7;Uvl|XKk!4>{RnET4}a`)WckY1{`|SWJU+1G@~cM2W)J-P$A05WU;i)1 z|Mu>C{{QaY13<2;JlNiuS+%vXWe039#va?k$g+2I`@JKBvC5GxkY%A=+1Q4xZX0Q> z-JSK$t}IbLYzU!*9teaMNazqs5&{V=g_;5+A%p-Sn2_?N011%f`%?Iy_uMjNi=?&m z|Kwl$Xl^_GocFx_{h7DC?c<;L)Mvi%)vw+BnvebAr$7INJ^OCG{f?iUc)?3v`hj2n z&?kQT)1UdX3og3&uBZI#zoC&aea|=k^1RDu+Lu0R;+g;Jz3;o_BOkr!;>#}Iebc^M zWt04`XMONfU;5LpfA61vIM;dU{KC&&-Pro}_kHLSpZUU{{pD+iZhZA?jF(>i`7iwO zmp=caeYf6u*ShuRZ+y(w?|gTr?LY4EJJicwK6ZHFv!DCoAARM||MtIsG*q9s^4Whm z{On!pA341Cg8Scd-hJ<0bNTxFFReXdePwv-urs`_R#~@p-3252&%bcp!F9FaOGh@; z*4Nh6svJP)4zH=5v$k^H!`AFu_sDg(udA-T_}u-&J8Pprvace6zDe{{ja*KfUGw06b$SDb&}i-w>5+KbM4*z;exX6u^k zS!fU6aNozToIm%zFJE&1#x?gnu;E|cSo1gB|CEQ`_u=*T{l&wsuZ^q?*6&__?%Mft zF00)+e8-0Sp7ZcaM=sj1clf>+u6_4g&b@fpeDm=AU%h(Wxog(k_qL7q|8QNUzGW?M zUp#!@$7_$Qo&S(UfIbKK6R_yQ4A#H-l8nyS2UwT0w73`Emz*m@;91WZt`EI@&7q;E z{=}PxF1)yY`MLE&mw)%V`n6k(H(lF)+o9{K@A&3*m;J{#M~D8q?!ECxhrIu)Jm6JE zuJAWK8KhzJJ*R`)+jJeBiS1fwAx19gg4Heqj6!9}N!eBN0&+)DioscFReDYD{6UE<>tz8g~BWAD^IFa*PXjQs#G_evu;oIk(5`d z_~%uqam_iEO&cn$;mTSXReeNtxVCZlAzZGloL^!5hcB%?s(Kl6)ylf{mFhVgDlFB? zLiNhZvD$ETLuGC4Yczn?u9Fh0>(`D{E5_yKurV@RyL!X9$epWe1747cHCe5`rbgtc zby8Wa`so{oD!+ThQ0>K)L-nDxlhvW&3i@07tH3nc{fO$C%B!oFT=r=)LHUbSWj_Xlf+H`j(M zZ>5gyYlf<~4(~q49DaJmJO3JbI#M$!cU|RiwN0p4+(7haX9Ht4T&+yhs>2LR#+o8R_gfYvmtk@mhW#DR24sZaqe+{5xD( z1Bej>7`pS8gi`G=mr{oKC zscVwTo5=IH;i2LGroQQQLx=AB-jEEg{$pKH(W1ZNQ5ALsf7!o_zFPLdseNBmvP3Z} zyjtSx(|>d`Qii%lNrkr=#z=YUC2!`g%Qp^PN|~DNyERE?J6lC6fmrF@nNg!*x;gI) zPW{##1s=MOJVIlQlLXFv>t!$g*2`dAJ&)_>lU_jLcIanFFCx8|^b(Rhdnsx2HM+KV zYtx8qH}ovK8QVz^C1Di1wh?+E1h?1nTdklO8e!NfSQkj?K)4;PnrrgQE6;an%(Gm|m@kSZrq(77a`rCv^Y1?gu=MVt2W zVpGrk$Eg%^qM?a9_w`J(uyEtiB%OxpM*_fHH!LUPbD}m7pUBR%!&hW{oyU=1XsqIX z+rYihHofnq!?Lc5?}b+?yoTa_mTRGliu*aPW!#E;p`CV+Uom_tXxV`<&gyoBpCk4ay4>h~i5K%j{1Zv7_YnbfG4#%gNO@_mg%eN3>o}-xQjEL`TF(s$+fKcr^{#$bdksUkD(oU6{&aK*JY*D z4~>y)uc&{d$?oa-?Fq6z*0^3b2-6V~!G$gB8lxbYlQNS!egxqhd9yP{V6ebENwRjn z$C>a$QU#cKF6m+t)1=?Ydxow|axd>VE_CXBFV~W!AH{W%SMtbp@AvZEud-g>L3$7A z8>IJ>zDAN~pCSDY>C5^3hxz>j(#J`EO!^i{zLWGp(&tG3$a(r#`LmDk`vuYiq~fn= z*U#}_P|p8qp1p?DGvf(5aw7HTn6Vn3K4pqWz__kBrVz5v>gm1VadrKBZG9TWJ;7Oy zAQK$=(qlGa7dtfc4jQq6-{rEykSwx?$Gh3f{O={dz^m=Cs9b6IScoG_kt?k$)eJRf zGFQTYS5QP;vC9b|^he%mjAJIX}6DN`%=V7JQ0;S-izS(>y+p8)K$Kx zu7_{Q>Us|Er9Hjt@Acfv-+Gdaot)=IdmD|d{9n$3UWJ_#(@}d0sE}i~PoZpm&NB}N zd1Y_O-zM54b6Ov*m(Sk8x3U-Oi~o>mfcIXP@wd-_oOKqJw^6I%gOKZHBYi_~B>I)} z8Ke2@v?Zb~@1c=f_$}@~z`ejQk+AlIOZwEHMXOA!Anlpy6!!;2 zFr=k5F!*;MG@Rcvb6{aAl{7B;aT-P4p2;f7r5CqWW+GF36y3~BMK05S>vWY>@(0Lp zCO}1~yRFOZ?4-40k~K+F={ns-*tvQ1F?HFmBcyH_oLNQrb>@sQ7kGSq{#)Gld@^*1 zcd~BsB`TuKj;uVbmNCkiwr!;T4F0c!QWW$50`kauD(;K9eF@Ly*-QDAweX7kw|IWC z`y$_~@_f_^o-k6@v)X#sk8aeuT&G)q(ZAK!J6PXf|BCX9@k4T1j`6?KW*Ot_>etER zatzL6oys|RHuh1z>I8(A`(d6&3hh$tkKf^1U|X?7`-MnDLvNvdg3A`)e}ZdSr^WqG zb6xMbe=FAltBdyn$K?CP)HyJ0Ylepo^!<$K-{@0WgB0}eau`^r&MDe6%0?5of41r_ zsrg?B<&-`93WZ`f=v&WtC3+; z2SJ19at)86p(pzrwf=#WC+BSe114u?L58DHRIu~`FF0^n${YZ1rVYSAc{rmV5J~bs zc`#t;93`n+_jEI~5r-!{1<9Ni5HpoNX#q`6z8&XD(nb%u?@2t5k}BAUXncqcc{+`r z;te8ezu3%RR<4&J#LeApT{l;88-?&pTR>}Ph}O{!nM8cswp+G8`D{&Kckw_D=`A$$ zRN8rj@f4gz;B;~S0j_0_^yvCRvVlFpaso-=7)!3F#c84P2s>nqGk@q8$Rm0wGPiFc z$=|soxqq|V@F#my?thW=OQhocTe$woo_pDM@+aR)dK>8&>K2$~fJSLsi>b*OQE^6- zcK(Q5i)QZR%mP~fawm%fW%m4>8#-=fF!ove3cm5Y{P(5&O8GyV|Gt`Ep_|{D|7KcT zLql)p*~>`s?K?=l_wUS~{eV30;`-gB!z8(u@qJI8B=6k=_eb+*hMn!>U*>*>G({3V zjC2aZE>n)?{=KBY&oO(h}Hegn2=Iwk^6aLT~+m`nQmWyHU~j zXVZZ$V36`OJ#VOioY3ewYz>sJ1s!Jt_h7%9osC-8>}+j?0>>XrGqpL0yknd1Jr+{?HZ_mAgV#cq*{4xPJoI z^1bZcUm^V}>DNfYXM@bwf9v^I*3GYz4#J1gbB&_jWHPZZ3woD|#-eEY>aVkJ<@*nj zK1}+J{Q2R(*>LxB-+TBYbKjqN?6x1?`qpP1IPXa>IgkZ{N`QxXG{Lj ztyTR=zLTZFf>-)}@Y~|Pw|%|W#rvgxlT@>BSj3E-C|Y5ulww+w^dP>XZF6|8EqYKP zwp2^nucoceLg^Q14zY50Eo%Lc_xh@E7Ol^>jvf&BgsK`TfCCLA@@AD4Igr zL_zeB%Wnl%3m$X^+Pv~UVVj&AY#ait3<)1n_DFHRIln(uK4g*aI`YY0Demv(TF#~7 z{x+_A>v=Nw@_os^(<=3uitDzz$du)96cYa6`0mj_j~BDQL+E{Bf~0f$@@9QGe;lK< zNlf3`?RgLYF%K&2Z*G|-gi5$%I@gz z$I>}QYsW(8#J)DQf)ogyy01O2X4(sfkEm8lo*YZN@AT9hoaw+=faNinCbx>op)PD4 zb1pFRVWf>DS?|KH86gRNBs^xh792)s5aIDkp5>B!D>gb0C0$A~N!v;LNFnJc>3-7d zNN**5fb@qX$+KMg2Jg7_{s6Syxu?8 zo^MABExjYY1ODLA-vW<#m-LXD`C8N#^2U#?~r7nLja`%KP{6UT{2NGt2#FxnINY ze0$r_SGX45!2Dc$W>oCw+B2Hs(yFY$qHptFa9nA>oDY)ZuRBU&XT~V?jYfSlb_5tG zTqEQ3n4aa_Sv-`$qQ_A!C;F}=k0f=>GLLC~{S1CzNqRTw zlccYaen7f#7i*HVi^N{XmKpIAC!E-+7w6->!nxL)4eejf8$d2w{FD_)>FMD8 zcCmvm9^MA8V9|ryvje{Prnv1ZU1!=O#`FW99n==3#l!t#!x2wH>}J*U<;a`epJTVS z!{3ovNEgK%%+2!$9@8>y#6R%3_`0uSSuK5!0Ct?%;Z*;)6;HQolh?9)#bc%y``4mj zW9fX}i#38s4TIt*6&LzoHoJ(^3V9zBvvsQC1 zNxqY%!E-5nTAUNIUd- zT=TU)D_nK9KHfs+;f0?Np(3n8{2?Hs#sk9?dW=IuzfBz?pZQ(VCrO_oXAU3QRe z9n~de2+V2xJA`8M@S3&j*5`RPjGS}sL(V&Yi4AvA>76&w+xc!o5kcy`4TGTg6tCA@rL z*K778Ds4H&SbRS81ilws8?+}xp#%fRG!blV?kbsuo^u!avrGM;EEOLmSN11+>eHlR zjcGh4g*) z&e!<;7U>71wa9%gBn|!GW7T09)S(MD3Qei~#k6M{Xy#2jY-%1xBRS zt+F7;YlVhuSxwiD<5u9P^{Xr>3R|tjX*Ls&a-7gq8yj*{4n4@ooY0CAebB&CtIfZvK<39gmbs!Zvm?HWO?$X9i?t++RY?(9lM2Xy?V$h zJDl2Vj1kL_<;=GmIE8)oi7Ky6_jXHJ3xYv$5uG31?4l!P%x48(uRA zF&Akf2va|?%HD>K;k6<=#OlONtk6~uU1dR05?QX1nD~GL19JX?Vb^Nd{d*D;)DkP*|HmYO3#a$=6liD-hp<>GoN*KNj4isfju zBeT_v)WeULZJM2*3%ms053UO*P_2zqDJ45*+uA)$qmj9Zk>@Kw!!A=qTA*9OnVhsd z137B!8eyD7j(Ws-6BB}VVZE!hSuROviEn6ds~V{*{j$xuw5Wt7TeE-!jcGbxgaZ9{KdX{x;7|)5-BHJe{aZ z@0b0Zp%099(>)Wl<5&c*kkD?R&N0Xkv`J4JT;I0+$ZfTJ#|)x0Qja0b-7?yS*}2fr@-F5 zjJ7cCEE{x~kQ%a-Jrnf92wJg^)mogWdbdtj6UTy;iSz~{yFF*)yN6s6a5nNSJ9L~T z-fS#&MO01+7@Z9zXJeh?W*}G`-7P{kGtY4PG1@Nr7o!sy^Zbmq<7SY`wohX_v|GNq z(vyDaMJ=Crq9hZ}bB^d=wi^Oj+7^077~#yO#a01EI_j#ORQ{qn-}cjZd`vN80g z@G>QT>7Z{JfE~vPlGKmPL~RnpdtgvqO&z-sV23qS5H~+*&~&Xh4E)$skCuwF2K%|E zK(l!uymxRf1}H(?I{^=ZiZL9tTPcQvKxZd1BX#vs6*G69Q&w!IEhqNrwbyJ~LF}r> zERhF_MF@-nt4_i&3R+-$X==wwXsONJd0%O*#RfQdka|%9&SR@M+go$T@WCjtm zNh?%aP9>L%F=cE7VcN184su<)M6X;%0+ha-g2ZUCO;Z!Z*tVlYU3V%q(V4gz#Zi*5 zlUkvtMprR$p&4+F8XP%^-HIGrHCoKRZ)-@bw{W9T?8Zhzi2Dhl+8d4Axg6)}WM^o; zEu1)wL0a(^MF-<%thSyFP~;g@VH$B50x?`WQO2nZr0=y7vV^Yf7>NOxG*2a0WP(YW zf$KXEF`?}%%UrzI95Gxg=Q+hDHAq9tiXAVC{6N{KQc-L|<#=Yx4UNRMm}lqIawV}B zg4{#`wZw5%PPCsiL*R`Cm29+3HuN^1O#1A1 zM03Y9#hfF#S(JF@0(p|d(UutoiSN01H*;b#tLyiYu_<3@+i)9zY?%P#apBAMp+>^T z!8qlZxZ>7zfB*r}6SyEj6bEV34b)>-0U_c@PBJrbj8=?|cuPHQ6@@gDq!~F*$YJfa zqQF)+tfCMjcFbmwBynUhA6BRye^y`!h)EMybxxRCkrB7ljjL#C1g&G4PU5tz#08UA z+s{T*UCT@o&q>9BU*a`QwIe8&nSkArLltBUs&wAfjB8f49UF!f;OQ@-lX8yke44DY z4Dl&fTca@@f>-Z>eJV@siJNwAx=o{(i?DD}h;1}LLMP`z#|!n?EUPHWN-hUoM2)*y zQRwf+}mtbZFgX}cH1wiIg22AZXicxNs_Ho(O1fwoFJiiq+!KLf~ zx`$)vCJi$*4p^d87Jl=SsZ{i%+EPu+4qWK6IA!At4v&SqUkO#F_>e7(S1OA|VXxf<@(TU8clstZHIJkgB?jW35py4eCq-Pn9 z(KAyTRbOUm2D!Y=*a}V)Rpd4qme=CMq^AvY<*q`F%tV} z(rUFl@Bl!ay7j5j!fY)qopI3?V3fd$mRvzC&^x?VdThA>3@B9l@08;ECde`}6nl@* z10`zj=P;d(-WKIf4c}Qe_%N5n!{B=0sBX&vF>qL&cB-B<@gSRS8rkX>SAbMtM}RRG zwi#Q%Fj|&6unKr+dZ`Cm7QjhrxfX?tm3v4pFFkJguFLjN2!pxl*q~O4=eF!vjo(GT zygnAez+5hx5@bj-psL8}X7sjp^#d8S&@gcy3RdI6BuJX-;2sJGuabdZQP_~ve_eVH z9#7%~k>^1nGy^wQx1FqK)av-nlxb_4N#NV+_6M_c%`k4JehBsEyLPkbt0x~V*OmdZyu~!J#}f{YB;){Ts;6{Uv<#W)4U)P@a`4C?VJU=ZrSU@3g2fj> z)!;w3nV6P(>J!W67BGJ4J#9Lga7G@F8raixVGsnC;e>(fA_j|WTm59CXn)4da5Zdn zV{uZ>JeX+{I>l}I><|D;s3yuq*ZaM%#oUvE#(HU#vH_EznfR_5#p;kyD_-U#z2KO% zBOR+HXP?3O1$AthVDEVFjSLlb$P#1=31%d)6wl#}M%N&|Axy}<$Zd;Nv|CotVu-#1 z&kh341X#pP(}pi(8Y&XZxxbx$Pdf=n0`rRwHbuPU8)k~zAN&hPDwZMX&uHWsQKKhE z;31&2@i5H%;lJ2Wi5zA9IjlTK)JAA618)iU-*lQVOsv#ts`NSiTs?pBxugBiLq*Fu z-)QKG+#{?dKutFM(AAk3s3c>ulQ4%xtbILy!xsF@P#qrc4vzrsTsGSUDa%z%quoTLv^1TvT(f05@MC-t z|EVLXG(AH+i{V&ms8($HBB&ey7GVvBU`1}yN?bKrZjfcpo3t4^K+?d4P_zTXRChm~ zh80YAN0z#y`SV8COTHtldq-IJ^vtkfF2cisp<=8>e}g zJBnw!MWuE3^t@&2HvqMJC+8kvS`t4`T+FO#}}(P^#gE;enMh7IllF9{Ylhozc7 zM9pUpS8Z6vf-s!2<;K2m?$(@Z#-tBnvk?-e=!~#-;H0H3bxhX(=^<DWO`lUb z6zM$M&2KsC-tu^q-P~=EJsS#?M!*PvpS=vV){IPB9X}{TbY=;Th8dg?@xg-``IDjA z4arw2D&#CMOyv+P4-g!9X{eA>(Pm7%0n76?u` z4AuV<%BEa~Qc6ChWeGjRskOc(!iIXx+&pMq7 z_O@|nwsHkN;KkM>fff{~ow~2GYC59@UhB7*QY0lliXiI#N(n2vN7}%GihU4ESc)n5 zBKd6f?254WJzo!eaop-%w+CYi1w`}#CN_pC3 z@X(u1r{g1Y!eN!)35*I4V`4756?_V=0D_|wBNT9|pQ@Y@v0UF=3pn`G&G8+PzCs=}8rsQ(9zY=>QJ2+2*s~@} zz$uIHw8qy7&`@$A8xd;=0NqvfVP_JrGPT7=)~-hn`)i6Qtl;{!>{N%Vrs5gO%Z z6hg7Omc?yvSz#0gkx`(C?V)PaY=(9SgIv9^a<^2~zmQi~)uQ7DsZPRHOC8%rOau7( z8NF@$;HNzRyNcdsn7hE3>5kyL%vc;)mMP={${n_PQAG$E!7H03R@f|YLE-O77%bTq zh=KtgHbNNRw<24;Sa0~gR+tvZXju%IQbB~0$Ty;v!GL+{CE14W1^xMvycE#PhF$n5 z1;kw3uMBo3u=FG@OUq3O62siTv?B7QQcPW5EFrIUBmyOkjcqz7Vn-9MXX*s%WtAtK zY8j@rFoSQ9qr`*5pA?0GwugoXN{3cJljBRhydng7*^csJi3Y*KVG*=(GE$V*v_YXg zIKQTaj1}qGD=NDwE#pQk!z0iNweScu60UJTngxRgU7l3fCaus#m*;0IXO3lJTV7%S z%-j&X7u^c=%F0#J%1pqo<8jf1poK;(dI4!bupS?h>s1xuj^q+AP$pc!VYhxvEQ|OY zttI%i&7g&zj^m;a@N*T-h{+1o{|cqjo+geTP+@}bxu_cpi%sgn?{2_~#rGyknO3Y` zUD4_fJ(*3Ppg3@tiN7eBBoHAP!U)axo5UDNGt>VL&-BG@7J3Aad=e4L3u3%wN|)dyfKEDzDM_F+N?hOb_~ zV(TfeXgx#ix+Wo!q87fKJzKp&AG^K%wxCNHUzG(Av~*aIqhfqGL# zOGflaWw}knm>5a37qj^ym(gTZ_$hV{Y)c=m9O zyyZUTutmt$GE&nGVjTFYcb-z_Y=C?i>XzxD%tRYfH16M3(Gs-Y=>wZ7H-pricNiz= zpg}&9$>C{6mU{P6GcTH!aoJI#ommmePH6iW9!gv4JxfhumZ$6>l3Lg@Q2KPU2{cf@ zyke$e<`WCqk%e*q3R9M+-n-PyXEpWCd=z;R>RJsT9>?qFyVS>tVz5r}e2pFf8dLfuTb}^RvaODE6daJ{S(It%i zli$$eR?^m8j*4l)Qh{+bpB|nI<-mj!={SZ^qO6f7!rb4~n9<3zTA5T4Ut_Jw;}irR z2c|ncbK*D%BVT<)4`EgiY&%!m1jBxA!w8ia-9qMc1bVih8VOej>#T)Rl%qac*}-w3 zGxqV`oSg3mPPT~imRcYxC|p`}1x?9ReN0ckE~G0mGMixsnJZz>brj-KS(DilP?Z>P zS(uQP`gmoPtP&HRE(CfjNw6ybtgBC~o<)F`bsPYD6aGirr>TCc@?<%cd(TNt!*8EE zydV*rGh3=9OsW=bEPW#?r}jW1XC(lfuGAAIXUNT{>r*37a+Xof&@nJqU@}qEh)^>^&+~UHlY%Im5uK0$){5AKr6SD-<<#)w zlU;^Fmmkx|A%%A-mJ4Ca1x{LtsXkQ+2Yavej|XVW9u7htnOfsC1&Ov0^zgJ=mP@NZ zm#i>`)nTYlS8goo=-V7twmGtmq2pKQF5gRbvz&$ z0+hp0cgMsdX6=2pyPsq@N?jz=(3scw0#Q>-V>w8Bi4fX!*pq&O?Duoa0Tn17&A=C?x3Bw2ZwP{Y_{2LE}xrQeK9*pPEhz?QA zaFa-VUSk#|3^toN2o>3-ULO;4nse$#u-6^3yC|EdvHC(q>$hbKH(Re-$g2hPjm80y z(+g*DPjdV;xIV(haGQaHOy7i|5vea`vzb>TtgS^l9~!_7BKHBtX;?wP>=pb5iT@u} zN|8n}bX`W5TO6IH|6?&M|r z(hDb|2r>TY$BdwH2U zo+a1$0VuxwMQNJY7PhLJ*nA$lzk{XeZNu%v>Ft(MIrxsmY`vE)RfAx;Q(3d3cI zljC$$0K?ct7dS$PA;zvO4Ahq^KUpkg*!ynl2{uiEAE~cY9=!0N&ya+LLfB*5^Ab)P=tcGCr&Yt!V>D2M zfzbgvL&R#vI4@9N)iADK+t@UBvlJ&Y#}5FYJd{R?MZ@GbOLuY)gBC>Nw zyg>$;ciQ$$us`?tjl7dXM?3ZvNBSC`gpTFInZgnhnLUA|)z>Rp0=!HKcDDopYH)E< z3zjXA0-t~(be#H&)nieyYoV!*$~=l5FcWR{jf|($kD;H;AchcBaFb90w^@BQO6Py6 zH)qa3WKRtWzj!2&5rsdk+C-;9F9BVGHA5tB4%Vjn=4z45G(|TC6W9xZ0)#Hxi3~H(5?jG6>?~ zv8EO~5iv;;xu6i=);r$Ig%P6CddfD1OP(Pijy14T5)Kje;^>(Db#~_UX(Yl~e2_+q zA!b`CT8S166lmH&{mp7e*o{H5T`ZSuD0vSv{lBdo6X4!^NNeC;s&VY(L@Sgl7N2bW z-KZ(yo!{28S^q%R}=WCajIt<-e?= z8=-^gDxd^nM{~W@_qEJ*g=RFd$c}_g6K!nddl*u=(9W=Oprq9gPAfYmw`lGo*^DCx z6Bk$gP($4nYPT|dHD;leijSjAyrs!TX-Oo~;0N|{}N7VZ7nn$rxIbK$dp5TcE zt(JErMGx0P-YSYS*afEQ|D1l8@Uenwv57*VhdluY?*CnG#}sST#GCWP%w#0qw&;t6 z!X<1R#H1Fu8RX}GXv$}azL*9&DEsn^4j#QS_uxfu91O0|h)rB@BV=8P`p?QfV8apx z6%%CTgL03A%t$6OwE_71Irj|>Z5aEAs?hg>2zAweX*ugk1?DrJjdBNK1RrAf&lhf@ zgRPqgG=LHo(9cl+y^1YmAcSH=VGNF;JsJt>N2@3V$PfH);e&`nzG;T)zN&B)SLm0y z7)GIFBbqj-{UALtkO|yhy`4fdJ$(k%G#V8C?CSF}Wt0rcXS7;IgJq5zvBT1m=ob2! zyODbA*1G-6Xk?!b@rEiY*a`N8Fb$AOcZhu!a8?BXFB%k?VPH=Da(d*@wxej9;Qm5RIvi2?kdM!=3afRc_1tr4 zTcF_!enhkR2hpCyt>jv;asFZB!h^!C1>{W=)tty^suxs6^1V{=`9VUYOUx)R6r>c+ za~r!w_>6=k#0v#p@)f&cBDg{j@*cLW*nGJbhE{41LvuF zc~x_=d$PbXYt36Ck|)bVLfis8%HUfX_QG*NsqF-wvTJyuje=ncDgTP92=qmGS=6eF z2s&{565?Z!2hNsQ%+~MLQ$R6u(Ywmy1q) zgin@8*d}l#)hnx_KA}gwNBCs-37=@2&l<5T*?FGldKh}XYPHY-wjZ5MXn?lKbkxsP zr)YtniHdYDOSLj=7R1yi57>yZzrNgu(ZX`8dl3cUqU(l9myP=&JjEdQd39A(JaY{W zT^*i{8jW^GY;GG3EwZO3Q5!ksO5nuVMr=U!!f^?(ig`^RXy38FRLMM5&~9TSkXSK> zNCBF(Zd3hy_2=c#&9(IPR!_|b`-Mlo zKRhwj=HSFkjYTBeAK?KdMChTQo`Y`A8>=EPDK!Dhi=|Wo10rOJhr4=#E`Ae{ z`U06+UWhXq^$S%I3&CPfdN!_^@$54JwvXPx(}*XpWiBA++I$3=O9I~*?5P#TXho?v zmF0+!udZsS<>ijD#QKmJ;Ha#rcKuas~IzT+NsmPeN-puD` z@fOf|#5}({iCUt0I29ZLr4Za6%8BEF8?nxRsVbU*{av(-?)u1#rzFZPxl=ryh3pg; zQ9p)kzIsdbKIuiX2hyFa6JuIMhEA-q2VN+WSl1x<4u`B~s<&33^Z!~Ky4#_J!6VA~ zh@i0FhvHUmt8Qi_%pRYxPCjbL=j{+vD)8FS!9AgRd$v3?k1b1pPt=4t2xm@c7IxR_ z6lbIOPC!~2V}U;LO2=JFR!-UsHOQv3%^NtWHBt93ch!>CE>0p!G_yKg8@ej zzN_B1+LA)J&nQ<}DEJucI!nEOwI!ty?uvv_hgBPANuoZm+LDmm!-h#5@w^-3>RA0s zMkZ$5_>~j^M7u!4LuL|)=Hgt0abnC-d<#$mXyD!GSF0jFJ#)eiaC8b!U>yMn(2Z8V zc7`k9xDvf@7kv#j5Sj-ctcrgJEi)9Iv+hE-4873j1PW^%0=>>HH+P?sd1cob^5|!b z5wiu$8r~BAd|B$L`t|C;Wl9Hk=x(D>XI2W`69c2z?we|LktX1LQ3&7^BWlo zD9~bH5SQtuW%YIwacq1Pznq#7N|+aHjRO?WZFqZvPcNDGkx zn7BUqNcBw`i!d{}S=S#q;-H@3h7Fa?dM`Zd1%iSu$Qseub{Q#gpbQC=u7M(e5mb@y zUFlrMKQ`H!gwtvhHCR@QjZgylF{a`Wl2G3t?dfT$lX)_UFZQV+c$?SsQ}C70S0AhX z!jDZ)E$w0mmv{(qFje4q$FEtcKCX}BQ(kxoeDu=5skw^=8@fYmvXIUDiE8G&_{U*V z-OenA_Dm~kSE65vfi=!6_(%O#^`$lT8RjY4aNz&brN@Mu(dB6~+(*;KQV-WLt}E^jKlNkP=A^yAX{gPYpO~H)C#)H54h$?gk`VqrqJ#*l z_0!e2{Md}MPdplAh|ea~G^PXYSU4pD6$l9PGYc<8 zuxWhR$&$2j=3$H8m-=i~tQ}X#jfNJ{)wPMPVTW|A{3tgNB8&0v@on;w`&S{ehM)l>!A0@IiS(M)hbwhD4+QWcgEAmptU( zg3O@~1ilGQ!O*Y9;0s5&>JO{WEDl*)A`h6$)S)S)CD}`wE?yR2?j^IRA2}vyHyV;y zVc@jHR-eygre|1DvW53sJRzZT9K)>eu|cSoUV(Z&dX!G{P~HN@w_vo1#|vbTU+l8? zdNcHR%|q@OVf7?d&S-r?Li|xCgOt(Fo#r{2;IH7n;gJD;fmXag^O@1WX+>b;3l`I5 zlotX^{c%$eKN!T$6Gfx!#FudWvr?Gv?@C8Ud9E^R-i5;_i9%%PkM>= zOfe;6LN1aE+PGRviLr%}6qb~TFTT85_L^;_NR9C#W5e}hz}25sACx*V=B!4XI8F=U z49*oy^%XttD>;C`iF$%*O>}~xL$ie7G{kPf>nZL9V)f@|n16;w2a4q;xFnW&*e$EC zW)juhAKk36q^|)eGNDK}J4wV^@iCuFhBG!iM{!?4hzK}k7%#&$L%kGr|BR(4 ztABABUGpB(lCC&n2muC8L4^ECn>Ob6M6F?VBlXSGDJbX`gbOsxQi2d-J4TLUst2+S zancqwqsfHW4zXAng;Ntnj0(ad;ChfDM(XTfkf6R*U87AR{;Ikz590IfYS$)|a|VX@ z;90iFn+!b`kFCsq3u$A7(P66ox_S>#Cdl;KdJi25yVhxudiZ@>5f!Cov(bQbSwhcj zN%03*FcJcs^b-dLe*?Dqn;db^y^s%b70*D;4wc=(4g&wErn}8s6?^jzAi`@o3rl`6(EfiGM->Z$ahw++J?F<>`}Dh!HWXVOVxKzfigjXHVXz#s+>4alM#!iTV+Ya7 z>46(7)r(V~0GTz_;sDCS1Jb`#d+aHe?$hZAUsKG}kpqJ3V|#)F0rmZ55K)|!9K*;% zfTYa{hYNO8=x7t}N`IimWvdW?586!;7Yqa}#*`5`4^A8Ld*fO^tcoMIa-cC=AB5x? zTDLedoIVl&(OTm}=oRtX-9wznN?8VPY*hIbY8Db&Af%~~&0*6gcb zj|9^`-QtZ1i*g)1ry)8osA>G4UX|0n;x*~fv%pVh5hBfQ8pNuS&^)Ng#_Inrvk1G| z9QbMjltI)v$QuLCQ2%k#EExRYo(xLR#~%f5dDMUEEd5UG`rUHl(YnRgIDy zSP0aAXWBe@pM1<5#2sXALw#y)EKbt=odq9Unjji z{>1ff6W>g!W1)v}f34J*?WNuECy2qy+@y|Jso|#B(?8aRtm&#Q@#!2b4m`O2M0y8emr436Df1VaTAZ37F*=hv194p3&4DH2}2Y!_;<4yJY+D;mNnre4A!Gvug;qLesdp-4r(`-i4WI8917(Z#^sB!n7iG(7KlR@CnZO)Z1#$pj&4zM62HQn3od_g>69q zGr%=U6u7s=jhv<4UK4#?jQV5;Wx#h4#nOMYz~&a0B4Z2F8ccTgu{ zBg|OTJ5I4%=peNh=Hm1K*f7LI@04k%MP$q@pm`axNh9B8f4A^i#x@6L;$*o+jA!-E zGt;fq#&(Dx<}Sxb6P~$x*O@6dCeANmv~a)+;YS!F_3krME}}h&q=0TM)=F?4)O%_o z106U3vN*Uz95n}q5!WVo&&M}5*ojLdJN3(FchBJ~2jU*M)$}mr1A)cZ9K)nAZl7l27en>2lqS>rfxW^#U#xEy&*I?Pi8m>q=7 z0FA;k`Uh%%+fN1q(+A1mp26wF7-k<{2ftCBK8k_5{Y;cC$ET(g5Xv$3Ex0W!)2(K{Y!2&5& zzgCktlKthJVxuVzT?$NPFiJ+;>-Y%JKiDPZR*qR660;F^d#)*tzuhEOzkU`+58ZlD zZs|CdoeAvf4?U<}J8^_(2|Ry@Zxq5ost=#VwqqE8(_n}2cSIs5x~cjNjX#=ZPY85( zVSaL|V;Rt77>R`8SvjRYGHG=y)( zp(;8&A6rdhX(XXD2y{UxR@kSW`uJICEFrFAOnn%X2vaK7>L*sySbUTtgu-GIQ%tOy z4E0+z?U-hXRf91PenRurB3|_);wa!NN*t)5^n_pplYgv*ai;LwHE{!!N4(wDi{E5! z6dH}&&D9|%oO`<^K3MPh*#en&DYGO>9>&HN1dvJSk2*;;^1S%!K zklDn=uZ3Tx-|do}jv#TlqtZaGC0KYMXPjKv85V~b8am@R9TcBRgr8NPJTqtsY9|QR z!4ILS4Zy$pR82z0^cuv1igb;VP`KpgmT(?#5p$-c-QA^~2~?3~YdRtJ*M#c9aTI%j z2veWdNY3)58R6{g)QQsEiU5eX00*OkPlfPVeMYk=wIXttx8(@i#k7U%A_t#lx@6Bd z5d47XmFTe;;+X@%^=Gqj?&ppzRf3(Vs-dPP%ao9LK9)jo^FF6frVO~iG+M@GrOC3J zoX))eY3EhQ-#J7iC^^nIz--j-)g@ajtC8c#}#EpdD(JOI7BH7ctK%c^@{Map--7t878>6Z`qvVcB>h=@ey5qIwSE zP(7ys$WE^FA`cr4k;P@oF5`Gs?r=b$q*EXR4;phtPHy6Zf=Ho&V~nBI7gx))gYbljObnK$7o@h~sXwZ{TM$krS(AaX z;7@yO7A>ZJeV_-Sm4k~IphpDu6(h*7eD%kx?YPgrGprcb@VKud5`g-X)s_^&9!3of zFV`CR$0c-4dm1R08#N6sx8-E+r!>?%V0az9ISp}6sP`_rlO2{4iOYyn*wrcF$Z!tz zrx_^hJF+qtf&%-Cg&ugWw+e(H@rja|!2mPWL zyey;X#F7!ybb>XguWHCxP7kr$2B)W2X{7)Lz0U>};IbLuIKu}n>VL%3kr9d4usdZ4yA@Wn6U17`+F0jd+w&LUc18u>8Z)wgOV)4E!6=k~6d z>@bnh?Kws|`8k4|6P^`N9gh|Qlhj|;9@d(i;<$ia*SmGTy;>;cNgNtP#(2x~02G1x z>(!PN0q!uyZ*c%&qfTtAzgcZbP(j4H6MaPSyoZe9Z&zCq>mAuUarsqWeKVb?K#wH z9rgFCEeQqwNQ6|dvJkl>xKr-kOHs!SF!Y}h@LX6PoaC6#b!O1UBs_>8f{B5d;=TMI zYh@HwLB^cL$XJdyf&FSHN8(6Rf*|w~&<=bP;#9==34|;+WA#s3*x2ukW9b4;t=W+v zY~dc`@ho|*{wlvr``h}xM|n1imo4>K}n`gZ+o)Tb2dQQsbf4{*S1}q5&2qI zSD$Jh*7BlWsSfoB*ST~Wbic-&+2if$O$ z_Sg%z0kMwZHmy^Zmv@eq%6th!qK+$J!old0>tj#aTgPPjXk%o@zh5-67U$$*_q#$&fnXfJGwP*Z)dbT*e-eKT=oerTl6=aR_&Q9 z-+a+k^*nDq&s-lraO=MMSg8&?GBSQ-QkoneW%cM$r>hKH&o}jHmf2J)!%^2b7w}+U zwu&LlyWF19lcVd31dE~HlQRtLRaez-Wsr_druRzCX;HK;mT@_>!eTkpw_0R669PuG zPo&8}V~VA-ZDeG$zGcfT+1zc}vW?<*9^AG6j+wD$a7$()F*L{hoh{EMHy4CyVSnC+zbRZr(BO_*mf@P<%4%<_@cU!j9MbceAbZ^+1 zwyjY@#mL$$eh<~N?M0*N_4=Vhhgc6so6I-RmyTgsIarXGt09{rIC-=XiU^p5Vvn1yCt9Uk?HVgS{L}3 zFu?Vj#Gg5}%2u9lM+>dG1}fQC`WbF+<-`5?N|m-{^Dlch|1NtcRqIJRurPyU=Wu0BORTJZ8n$IXWH}i&cf_0+9te{e$BLJM%8V% z2(*yBI5o*g$zEzu@IjzR0Xgb22HIe$JHxsF28@G2I3zt|B!KNIHek0wbv2XdlcjH? z)HjdyE|+Wc#>oNTXnJfKJPn3S-;!!fwzm;uK#w{*T&tkgP5KUq8w14EHxmM9{_tGN zgRMJpZF=F%XR~G(^Ds8zY)xMt}g82 z$;?tg1NFOZYD>naZeHTBTyarc!-;U0hTE&kJ}SUkm(kyYr5jQnvZHr*dRO7y8LTYF z&E8fA#YsC`caGgQG6JI=NRSN#{fGX{@r6jZ?*bnMu>(+TD?#kwGRyK53+)sa$Vpen zsV)t@ltxE0kU1(|U+ayn*}m?q>9fO#nM zzn9~Hhw7uiXfRk7?a_3m#9s?!G|M1g!8UPy=((2eQY?#uE~ee=PY$>a47jK!IRtl(SVS z15H}uYhBw;g;S#$g5254xtVTFK!T^*v)llNLEop_GnZT-Hxs>iuKeIRv{sPu-907M zvyB0UIS$O+vSry1z|MNkaTzR)DufL2e7)Vukt`tVk#N2)l>EH{Nd=%1V15$NI+sG% z)6zP4=w!_43gUrSPf!NEp#)}kH&qY*Ubavm{~%*ECnvJ;DC+>v0ST27L5pr37tB%z z74D=3>tTlhgU>5PNo84oY2_V^aU6nm>2r`_o}fV! zd;^V@4+>ezv0t)sfD23YL^wS)l4Sv+3AQj=pP?Ds>eDACvga8RQKyD&w4U{qEw*h% zsePRv8PVOy%PPy*R?oEk#9NX;pl$iDS%B)R=qZq9pe#)^<{gTmE!bd?jM?zA`uZsK zVl20@t;ZQGt#~h_y+-jTWVNym=Q!=V{6BEj!H;tgbh7Uuxw`ObnU9$dc14bJ*C*%8 z%9xv#tLe!($ss*C-<@)%p>Lj9BVi6Lck6Ww1*ng67E)hVmtAa~SxyL|>ayM<_(qNT z%}@`Iq1YMDBH%0}dAG!3haDW-HD2F*X#9Y`@8)~%PM`Rs<2Q}(oDA*>?!3d9-5a#$ z$DVfh?!9+=^M|g4EiGjR2qy)bmV&x0}OIh*8Gs65=^W84GJb zT2{0!BPbgqTW&d{-u6%Q4 zf58>tUh8T?h3jthbfhFU^AQ3Z_wlxpHb6>RiWG*2_nqqFc7KXQobY zOf6fj0DWnw zfIWAcg3=1?O6EqKj*JN#FHSFf=lYSitRDqaanaU(zAK@jTd$$Q4e#|qrGQ{Sus%4AX>S5F?V??15TmhA`bs6SENah-mVqmtQM z$-nR5-o4o?4TL5#B(=U{&rN&w@wV@aE{?k7>k{(h2g6d8^brC}eIO8~07^@}M=526 z;xnwBPTiso?AbZc{4SEe(gzv(zEstVh>QM@My|OYTBjg4vOSlf85&l@_bVoF&%Ryi z$paHOnH(=U3=_pHf$|o!zd3(KCHXQqX(@dZ+FMlbi_<8tJN>^64$K_r+ Date: Thu, 5 Feb 2026 05:38:49 -0300 Subject: [PATCH 11/29] Use single DSN environment variable for Easypanel compatibility Simplify database connection config to avoid variable substitution issues. --- docker-compose.prod.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index a48c4bf..bf13d2d 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -9,12 +9,10 @@ services: container_name: tron-payments-sink restart: unless-stopped environment: - # Database connection - use Easypanel's internal PostgreSQL hostname - DSN: psql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-tron_payments}?sslmode=disable + # Database connection - set the full DSN directly in Easypanel + # Format: psql://user:password@host:port/database?sslmode=disable + DSN: ${DSN} # Streamingfast authentication SUBSTREAMS_API_TOKEN: ${SUBSTREAMS_API_TOKEN} # TRON mainnet endpoint SUBSTREAMS_ENDPOINTS_CONFIG_TRON: mainnet.tron.streamingfast.io:443 - # Optional: expose metrics port if needed - # ports: - # - "9102:9102" From 8e1b8db9a17634160d84576bdb9817a84334825a Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 05:41:54 -0300 Subject: [PATCH 12/29] Fix environment variable passthrough for Easypanel Use list format instead of map format to properly pass through environment variables from Easypanel to the container. --- docker-compose.prod.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index bf13d2d..c2388b8 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -9,10 +9,8 @@ services: container_name: tron-payments-sink restart: unless-stopped environment: - # Database connection - set the full DSN directly in Easypanel - # Format: psql://user:password@host:port/database?sslmode=disable - DSN: ${DSN} - # Streamingfast authentication - SUBSTREAMS_API_TOKEN: ${SUBSTREAMS_API_TOKEN} - # TRON mainnet endpoint - SUBSTREAMS_ENDPOINTS_CONFIG_TRON: mainnet.tron.streamingfast.io:443 + # These variables are passed through from Easypanel's environment settings + - DSN + - SUBSTREAMS_API_TOKEN + # TRON mainnet endpoint (hardcoded) + - SUBSTREAMS_ENDPOINTS_CONFIG_TRON=mainnet.tron.streamingfast.io:443 From aa4fa7da9ebefedf0ea96669c1a0307e69ab0d02 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 05:45:48 -0300 Subject: [PATCH 13/29] Add Easypanel network for cross-service communication Join the easypanel network to allow DNS resolution of other Easypanel services like PostgreSQL. --- docker-compose.prod.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index c2388b8..c5b4625 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -14,3 +14,9 @@ services: - SUBSTREAMS_API_TOKEN # TRON mainnet endpoint (hardcoded) - SUBSTREAMS_ENDPOINTS_CONFIG_TRON=mainnet.tron.streamingfast.io:443 + networks: + - easypanel + +networks: + easypanel: + external: true From f516c227840fe1112958368c876de897f4beefe5 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 05:47:34 -0300 Subject: [PATCH 14/29] Remove hardcoded container_name to avoid Easypanel conflicts --- docker-compose.prod.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index c5b4625..4516e0e 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -6,7 +6,6 @@ services: build: context: . dockerfile: Dockerfile.sink - container_name: tron-payments-sink restart: unless-stopped environment: # These variables are passed through from Easypanel's environment settings From 8424ce31af263b67bae99dcf9e6ea88ebb700fce Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 05:57:07 -0300 Subject: [PATCH 15/29] Add chain field to payments for multi-network support - Added 'chain' field to Payment protobuf message - Updated schema.sql with chain column and indexes - Modified Rust code to parse chain from params (defaults to "tron") - Updated db_out to include chain in database changes - Key now includes chain for uniqueness across networks - Added tests for chain parameter parsing This allows the same payments table to be used by multiple substreams targeting different blockchain networks. --- tron/buf.gen.yaml | 12 + tron/proto/request/tron/v1/payments.proto | 3 + tron/request-network-tron-v0.1.0.spkg | Bin 651006 -> 653113 bytes tron/schema.sql | 5 +- tron/src/lib.rs | 54 +- tron/src/pb/.last_generated_hash | 1 + tron/src/pb/google.api.rs | 52 + tron/src/pb/mod.rs | 49 +- tron/src/pb/protocol.rs | 1425 ++++++++++++++++++--- tron/src/pb/request.tron.v1.rs | 32 +- tron/src/pb/sf.substreams.tron.v1.rs | 11 + tron/src/pb/sf.substreams.v1.rs | 23 + tron/substreams.yaml | 2 + 13 files changed, 1422 insertions(+), 247 deletions(-) create mode 100644 tron/buf.gen.yaml create mode 100644 tron/src/pb/.last_generated_hash create mode 100644 tron/src/pb/google.api.rs create mode 100644 tron/src/pb/sf.substreams.tron.v1.rs create mode 100644 tron/src/pb/sf.substreams.v1.rs diff --git a/tron/buf.gen.yaml b/tron/buf.gen.yaml new file mode 100644 index 0000000..2b4b3f2 --- /dev/null +++ b/tron/buf.gen.yaml @@ -0,0 +1,12 @@ + +version: v1 +plugins: +- plugin: buf.build/community/neoeinstein-prost:v0.4.0 + out: src/pb + opt: + - file_descriptor_set=false + +- plugin: buf.build/community/neoeinstein-prost-crate:v0.4.1 + out: src/pb + opt: + - no_features diff --git a/tron/proto/request/tron/v1/payments.proto b/tron/proto/request/tron/v1/payments.proto index 7b8348e..aa6055b 100644 --- a/tron/proto/request/tron/v1/payments.proto +++ b/tron/proto/request/tron/v1/payments.proto @@ -36,6 +36,9 @@ message Payment { // The proxy contract address that emitted the event string contract_address = 11; + + // The blockchain network identifier (e.g., "tron", "ethereum", "polygon") + string chain = 12; } // Collection of payment events diff --git a/tron/request-network-tron-v0.1.0.spkg b/tron/request-network-tron-v0.1.0.spkg index c5aa24e55e0b6f909ebc1e7a712d4d71df5b0551..3eb3ed505e726d00ac36ebc71fabe6779fc5e932 100644 GIT binary patch delta 55560 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%0D}rKY(K&lRqkBA~AkjQf3va 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 diff --git a/tron/schema.sql b/tron/schema.sql index 915510a..23b174a 100644 --- a/tron/schema.sql +++ b/tron/schema.sql @@ -1,7 +1,8 @@ --- Schema for Request Network TRON ERC20FeeProxy payments +-- Schema for Request Network ERC20FeeProxy payments (multi-chain) CREATE TABLE IF NOT EXISTS payments ( id TEXT PRIMARY KEY, + chain TEXT NOT NULL, tx_hash TEXT NOT NULL, block_number BIGINT NOT NULL, timestamp BIGINT NOT NULL, @@ -16,6 +17,7 @@ CREATE TABLE IF NOT EXISTS payments ( ); -- Indexes for common queries +CREATE INDEX IF NOT EXISTS idx_payments_chain ON payments(chain); CREATE INDEX IF NOT EXISTS idx_payments_tx_hash ON payments(tx_hash); CREATE INDEX IF NOT EXISTS idx_payments_block_number ON payments(block_number); CREATE INDEX IF NOT EXISTS idx_payments_timestamp ON payments(timestamp); @@ -23,3 +25,4 @@ CREATE INDEX IF NOT EXISTS idx_payments_payment_reference ON payments(payment_re CREATE INDEX IF NOT EXISTS idx_payments_from_address ON payments(from_address); CREATE INDEX IF NOT EXISTS idx_payments_to_address ON payments(to_address); CREATE INDEX IF NOT EXISTS idx_payments_token_address ON payments(token_address); +CREATE INDEX IF NOT EXISTS idx_payments_chain_block ON payments(chain, block_number); diff --git a/tron/src/lib.rs b/tron/src/lib.rs index f08c536..663e3c7 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -18,22 +18,38 @@ use substreams_database_change::pb::database::{table_change::Operation, Database const TRANSFER_WITH_REF_AND_FEE_TOPIC: &str = "9f16cbcc523c67a60c450e5ffe4f3b7b6dbe772e7abcadb2686ce029a9a0a2b6"; -/// Parses proxy address from the params string -/// Expected format: "mainnet_proxy_address=ADDR" -fn parse_proxy_address(params: &str) -> String { +/// Parses a parameter value from the params string +/// Expected format: "key=value" (one per line) +fn parse_param(params: &str, key: &str) -> String { for line in params.lines() { let parts: Vec<&str> = line.splitn(2, '=').collect(); - if parts.len() == 2 && parts[0].trim() == "mainnet_proxy_address" { + if parts.len() == 2 && parts[0].trim() == key { return parts[1].trim().to_string(); } } String::new() } +/// Parses proxy address from the params string +fn parse_proxy_address(params: &str) -> String { + parse_param(params, "mainnet_proxy_address") +} + +/// Parses chain identifier from the params string (defaults to "tron") +fn parse_chain(params: &str) -> String { + let chain = parse_param(params, "chain"); + if chain.is_empty() { + "tron".to_string() + } else { + chain + } +} + /// Maps TRON blocks to extract ERC20FeeProxy payment events #[substreams::handlers::map] fn map_erc20_fee_proxy_payments(params: String, block: Block) -> Result { let proxy_address = parse_proxy_address(¶ms); + let chain = parse_chain(¶ms); let mut payments = Vec::new(); let block_number = block.header.as_ref().map(|h| h.number).unwrap_or(0); @@ -72,6 +88,7 @@ fn map_erc20_fee_proxy_payments(params: String, block: Block) -> Result Result Option { // Event: TransferWithReferenceAndFee(address tokenAddress, address to, uint256 amount, // bytes indexed paymentReference, uint256 feeAmount, address feeAddress) @@ -172,6 +191,7 @@ fn parse_transfer_with_reference_and_fee( timestamp: block_timestamp, tx_hash: tx_hash.to_string(), contract_address: contract_address.to_string(), + chain: chain.to_string(), }) } @@ -272,6 +292,28 @@ mod tests { assert_eq!(address, "TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd"); } + #[test] + fn test_parse_chain() { + let params = "mainnet_proxy_address=TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd\nchain=tron"; + let chain = parse_chain(params); + assert_eq!(chain, "tron"); + } + + #[test] + fn test_parse_chain_default() { + // When chain is not specified, should default to "tron" + let params = "mainnet_proxy_address=TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd"; + let chain = parse_chain(params); + assert_eq!(chain, "tron"); + } + + #[test] + fn test_parse_chain_ethereum() { + let params = "mainnet_proxy_address=0x123\nchain=ethereum"; + let chain = parse_chain(params); + assert_eq!(chain, "ethereum"); + } + #[test] fn test_parse_address_from_data() { // ABI-encoded address: 32 bytes with address in last 20 bytes diff --git a/tron/src/pb/.last_generated_hash b/tron/src/pb/.last_generated_hash new file mode 100644 index 0000000..410be7d --- /dev/null +++ b/tron/src/pb/.last_generated_hash @@ -0,0 +1 @@ +6f7b96d3c92e6b94d9ce0767761ff37bff6a2746594cc6d00208713c3260b155 \ No newline at end of file diff --git a/tron/src/pb/google.api.rs b/tron/src/pb/google.api.rs new file mode 100644 index 0000000..e6f06a8 --- /dev/null +++ b/tron/src/pb/google.api.rs @@ -0,0 +1,52 @@ +// @generated +// This file is @generated by prost-build. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Http { + #[prost(message, repeated, tag="1")] + pub rules: ::prost::alloc::vec::Vec, + #[prost(bool, tag="2")] + pub fully_decode_reserved_expansion: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct HttpRule { + #[prost(string, tag="1")] + pub selector: ::prost::alloc::string::String, + #[prost(string, tag="7")] + pub body: ::prost::alloc::string::String, + #[prost(string, tag="12")] + pub response_body: ::prost::alloc::string::String, + #[prost(message, repeated, tag="11")] + pub additional_bindings: ::prost::alloc::vec::Vec, + #[prost(oneof="http_rule::Pattern", tags="2, 3, 4, 5, 6, 8")] + pub pattern: ::core::option::Option, +} +/// Nested message and enum types in `HttpRule`. +pub mod http_rule { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Pattern { + #[prost(string, tag="2")] + Get(::prost::alloc::string::String), + #[prost(string, tag="3")] + Put(::prost::alloc::string::String), + #[prost(string, tag="4")] + Post(::prost::alloc::string::String), + #[prost(string, tag="5")] + Delete(::prost::alloc::string::String), + #[prost(string, tag="6")] + Patch(::prost::alloc::string::String), + #[prost(message, tag="8")] + Custom(super::CustomHttpPattern), + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CustomHttpPattern { + #[prost(string, tag="1")] + pub kind: ::prost::alloc::string::String, + #[prost(string, tag="2")] + pub path: ::prost::alloc::string::String, +} +// @@protoc_insertion_point(module) diff --git a/tron/src/pb/mod.rs b/tron/src/pb/mod.rs index d7bf3b7..2ac8733 100644 --- a/tron/src/pb/mod.rs +++ b/tron/src/pb/mod.rs @@ -1,28 +1,47 @@ // @generated -// Protobuf types for Request Network TRON Substreams - -// TRON protocol types from StreamingFast +pub mod google { + // @@protoc_insertion_point(attribute:google.api) + pub mod api { + include!("google.api.rs"); + // @@protoc_insertion_point(google.api) + } +} +// @@protoc_insertion_point(attribute:protocol) pub mod protocol { include!("protocol.rs"); + // @@protoc_insertion_point(protocol) } - -pub mod sf { +pub mod request { pub mod tron { - pub mod r#type { - // @@ protoc_insertion_point(attribute:sf.tron.type.v1) + // @@protoc_insertion_point(attribute:request.tron.v1) + pub mod v1 { + include!("request.tron.v1.rs"); + // @@protoc_insertion_point(request.tron.v1) + } + } +} +pub mod sf { + pub mod substreams { + pub mod tron { + // @@protoc_insertion_point(attribute:sf.substreams.tron.v1) pub mod v1 { - include!("sf.tron.type.v1.rs"); - // @@ protoc_insertion_point(sf.tron.type.v1) + include!("sf.substreams.tron.v1.rs"); + // @@protoc_insertion_point(sf.substreams.tron.v1) } } + // @@protoc_insertion_point(attribute:sf.substreams.v1) + pub mod v1 { + include!("sf.substreams.v1.rs"); + // @@protoc_insertion_point(sf.substreams.v1) + } } -} - -// Request Network payment types -pub mod request { pub mod tron { - pub mod v1 { - include!("request.tron.v1.rs"); + pub mod r#type { + // @@protoc_insertion_point(attribute:sf.tron.type.v1) + pub mod v1 { + include!("sf.tron.type.v1.rs"); + // @@protoc_insertion_point(sf.tron.type.v1) + } } } } diff --git a/tron/src/pb/protocol.rs b/tron/src/pb/protocol.rs index c94724c..2525ef0 100644 --- a/tron/src/pb/protocol.rs +++ b/tron/src/pb/protocol.rs @@ -1,5 +1,34 @@ // @generated // This file is @generated by prost-build. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum ResourceCode { + Bandwidth = 0, + Energy = 1, + TronPower = 2, +} +impl ResourceCode { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ResourceCode::Bandwidth => "BANDWIDTH", + ResourceCode::Energy => "ENERGY", + ResourceCode::TronPower => "TRON_POWER", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "BANDWIDTH" => Some(Self::Bandwidth), + "ENERGY" => Some(Self::Energy), + "TRON_POWER" => Some(Self::TronPower), + _ => None, + } + } +} #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Endpoint { @@ -60,35 +89,6 @@ pub struct BackupMessage { #[prost(int32, tag="2")] pub priority: i32, } -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] -#[repr(i32)] -pub enum ResourceCode { - Bandwidth = 0, - Energy = 1, - TronPower = 2, -} -impl ResourceCode { - /// String value of the enum field names used in the ProtoBuf definition. - /// - /// The values are not transformed in any way and thus are considered stable - /// (if the ProtoBuf definition does not change) and safe for programmatic use. - pub fn as_str_name(&self) -> &'static str { - match self { - ResourceCode::Bandwidth => "BANDWIDTH", - ResourceCode::Energy => "ENERGY", - ResourceCode::TronPower => "TRON_POWER", - } - } - /// Creates an enum from field names used in the ProtoBuf definition. - pub fn from_str_name(value: &str) -> ::core::option::Option { - match value { - "BANDWIDTH" => Some(Self::Bandwidth), - "ENERGY" => Some(Self::Energy), - "TRON_POWER" => Some(Self::TronPower), - _ => None, - } - } -} #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct AccountId { @@ -2075,147 +2075,40 @@ pub struct ParticipateAssetIssueContract { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct ExchangeCreateContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="2")] - pub first_token_id: ::prost::alloc::vec::Vec, - #[prost(int64, tag="3")] - pub first_token_balance: i64, - #[prost(bytes="vec", tag="4")] - pub second_token_id: ::prost::alloc::vec::Vec, - #[prost(int64, tag="5")] - pub second_token_balance: i64, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ExchangeInjectContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(int64, tag="2")] - pub exchange_id: i64, - #[prost(bytes="vec", tag="3")] - pub token_id: ::prost::alloc::vec::Vec, - #[prost(int64, tag="4")] - pub quant: i64, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ExchangeWithdrawContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(int64, tag="2")] - pub exchange_id: i64, - #[prost(bytes="vec", tag="3")] - pub token_id: ::prost::alloc::vec::Vec, - #[prost(int64, tag="4")] - pub quant: i64, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ExchangeTransactionContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(int64, tag="2")] - pub exchange_id: i64, - #[prost(bytes="vec", tag="3")] - pub token_id: ::prost::alloc::vec::Vec, - #[prost(int64, tag="4")] - pub quant: i64, - #[prost(int64, tag="5")] - pub expected: i64, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct MarketSellAssetContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="2")] - pub sell_token_id: ::prost::alloc::vec::Vec, - #[prost(int64, tag="3")] - pub sell_token_quantity: i64, - #[prost(bytes="vec", tag="4")] - pub buy_token_id: ::prost::alloc::vec::Vec, - #[prost(int64, tag="5")] - pub buy_token_quantity: i64, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct MarketCancelOrderContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="2")] - pub order_id: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct AccountCreateContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="2")] - pub account_address: ::prost::alloc::vec::Vec, - #[prost(enumeration="AccountType", tag="3")] - pub r#type: i32, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct AccountUpdateContract { +pub struct WitnessCreateContract { #[prost(bytes="vec", tag="1")] - pub account_name: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="2")] pub owner_address: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct SetAccountIdContract { - #[prost(bytes="vec", tag="1")] - pub account_id: ::prost::alloc::vec::Vec, #[prost(bytes="vec", tag="2")] - pub owner_address: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct AccountPermissionUpdateContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(message, optional, tag="2")] - pub owner: ::core::option::Option, - #[prost(message, optional, tag="3")] - pub witness: ::core::option::Option, - #[prost(message, repeated, tag="4")] - pub actives: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct BuyStorageBytesContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(int64, tag="2")] - pub bytes: i64, + pub url: ::prost::alloc::vec::Vec, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct BuyStorageContract { +pub struct WitnessUpdateContract { #[prost(bytes="vec", tag="1")] pub owner_address: ::prost::alloc::vec::Vec, - #[prost(int64, tag="2")] - pub quant: i64, + #[prost(bytes="vec", tag="12")] + pub update_url: ::prost::alloc::vec::Vec, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct SellStorageContract { +pub struct VoteWitnessContract { #[prost(bytes="vec", tag="1")] pub owner_address: ::prost::alloc::vec::Vec, - #[prost(int64, tag="2")] - pub storage_bytes: i64, + #[prost(message, repeated, tag="2")] + pub votes: ::prost::alloc::vec::Vec, + #[prost(bool, tag="3")] + pub support: bool, } -#[allow(clippy::derive_partial_eq_without_eq)] +/// Nested message and enum types in `VoteWitnessContract`. +pub mod vote_witness_contract { + #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct UpdateBrokerageContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(int32, tag="2")] - pub brokerage: i32, + pub struct Vote { + #[prost(bytes="vec", tag="1")] + pub vote_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub vote_count: i64, + } } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -2341,29 +2234,224 @@ pub struct ShieldedTransferContract { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct InventoryItems { - #[prost(int32, tag="1")] - pub r#type: i32, - #[prost(bytes="vec", repeated, tag="2")] - pub items: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, +pub struct ZksnarkRequest { + #[prost(message, optional, tag="1")] + pub transaction: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub sighash: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub value_balance: i64, + #[prost(string, tag="4")] + pub tx_id: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct ZksnarkResponse { + #[prost(enumeration="zksnark_response::Code", tag="1")] + pub code: i32, +} +/// Nested message and enum types in `ZksnarkResponse`. +pub mod zksnark_response { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum Code { + Success = 0, + Failed = 1, + } + impl Code { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Code::Success => "SUCCESS", + Code::Failed => "FAILED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "SUCCESS" => Some(Self::Success), + "FAILED" => Some(Self::Failed), + _ => None, + } + } + } } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct FreezeBalanceContract { +pub struct MarketSellAssetContract { #[prost(bytes="vec", tag="1")] pub owner_address: ::prost::alloc::vec::Vec, - #[prost(int64, tag="2")] - pub frozen_balance: i64, + #[prost(bytes="vec", tag="2")] + pub sell_token_id: ::prost::alloc::vec::Vec, #[prost(int64, tag="3")] - pub frozen_duration: i64, - #[prost(enumeration="ResourceCode", tag="10")] - pub resource: i32, - #[prost(bytes="vec", tag="15")] - pub receiver_address: ::prost::alloc::vec::Vec, + pub sell_token_quantity: i64, + #[prost(bytes="vec", tag="4")] + pub buy_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub buy_token_quantity: i64, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct UnfreezeBalanceContract { +pub struct MarketCancelOrderContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub order_id: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct VoteAssetContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", repeated, tag="2")] + pub vote_address: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(bool, tag="3")] + pub support: bool, + #[prost(int32, tag="5")] + pub count: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BuyStorageBytesContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub bytes: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BuyStorageContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub quant: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SellStorageContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub storage_bytes: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateBrokerageContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int32, tag="2")] + pub brokerage: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExchangeCreateContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub first_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="3")] + pub first_token_balance: i64, + #[prost(bytes="vec", tag="4")] + pub second_token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub second_token_balance: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExchangeInjectContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub exchange_id: i64, + #[prost(bytes="vec", tag="3")] + pub token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub quant: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExchangeWithdrawContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub exchange_id: i64, + #[prost(bytes="vec", tag="3")] + pub token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub quant: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExchangeTransactionContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub exchange_id: i64, + #[prost(bytes="vec", tag="3")] + pub token_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub quant: i64, + #[prost(int64, tag="5")] + pub expected: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountCreateContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub account_address: ::prost::alloc::vec::Vec, + #[prost(enumeration="AccountType", tag="3")] + pub r#type: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountUpdateContract { + #[prost(bytes="vec", tag="1")] + pub account_name: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub owner_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SetAccountIdContract { + #[prost(bytes="vec", tag="1")] + pub account_id: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub owner_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountPermissionUpdateContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="2")] + pub owner: ::core::option::Option, + #[prost(message, optional, tag="3")] + pub witness: ::core::option::Option, + #[prost(message, repeated, tag="4")] + pub actives: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FreezeBalanceContract { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub frozen_balance: i64, + #[prost(int64, tag="3")] + pub frozen_duration: i64, + #[prost(enumeration="ResourceCode", tag="10")] + pub resource: i32, + #[prost(bytes="vec", tag="15")] + pub receiver_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UnfreezeBalanceContract { #[prost(bytes="vec", tag="1")] pub owner_address: ::prost::alloc::vec::Vec, #[prost(enumeration="ResourceCode", tag="10")] @@ -2748,40 +2836,11 @@ pub struct SmartContractDataWrapper { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct WitnessCreateContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="2")] - pub url: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct WitnessUpdateContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", tag="12")] - pub update_url: ::prost::alloc::vec::Vec, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct VoteWitnessContract { - #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(message, repeated, tag="2")] - pub votes: ::prost::alloc::vec::Vec, - #[prost(bool, tag="3")] - pub support: bool, -} -/// Nested message and enum types in `VoteWitnessContract`. -pub mod vote_witness_contract { - #[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] - pub struct Vote { - #[prost(bytes="vec", tag="1")] - pub vote_address: ::prost::alloc::vec::Vec, - #[prost(int64, tag="2")] - pub vote_count: i64, - } +pub struct InventoryItems { + #[prost(int32, tag="1")] + pub r#type: i32, + #[prost(bytes="vec", repeated, tag="2")] + pub items: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -2811,14 +2870,960 @@ pub struct ProposalDeleteContract { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct VoteAssetContract { +pub struct Return { + #[prost(bool, tag="1")] + pub result: bool, + #[prost(enumeration="r#return::ResponseCode", tag="2")] + pub code: i32, + #[prost(bytes="vec", tag="3")] + pub message: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `Return`. +pub mod r#return { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum ResponseCode { + Success = 0, + Sigerror = 1, + ContractValidateError = 2, + ContractExeError = 3, + BandwithError = 4, + DupTransactionError = 5, + TaposError = 6, + TooBigTransactionError = 7, + TransactionExpirationError = 8, + ServerBusy = 9, + NoConnection = 10, + NotEnoughEffectiveConnection = 11, + BlockUnsolidified = 12, + OtherError = 20, + } + impl ResponseCode { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ResponseCode::Success => "SUCCESS", + ResponseCode::Sigerror => "SIGERROR", + ResponseCode::ContractValidateError => "CONTRACT_VALIDATE_ERROR", + ResponseCode::ContractExeError => "CONTRACT_EXE_ERROR", + ResponseCode::BandwithError => "BANDWITH_ERROR", + ResponseCode::DupTransactionError => "DUP_TRANSACTION_ERROR", + ResponseCode::TaposError => "TAPOS_ERROR", + ResponseCode::TooBigTransactionError => "TOO_BIG_TRANSACTION_ERROR", + ResponseCode::TransactionExpirationError => "TRANSACTION_EXPIRATION_ERROR", + ResponseCode::ServerBusy => "SERVER_BUSY", + ResponseCode::NoConnection => "NO_CONNECTION", + ResponseCode::NotEnoughEffectiveConnection => "NOT_ENOUGH_EFFECTIVE_CONNECTION", + ResponseCode::BlockUnsolidified => "BLOCK_UNSOLIDIFIED", + ResponseCode::OtherError => "OTHER_ERROR", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "SUCCESS" => Some(Self::Success), + "SIGERROR" => Some(Self::Sigerror), + "CONTRACT_VALIDATE_ERROR" => Some(Self::ContractValidateError), + "CONTRACT_EXE_ERROR" => Some(Self::ContractExeError), + "BANDWITH_ERROR" => Some(Self::BandwithError), + "DUP_TRANSACTION_ERROR" => Some(Self::DupTransactionError), + "TAPOS_ERROR" => Some(Self::TaposError), + "TOO_BIG_TRANSACTION_ERROR" => Some(Self::TooBigTransactionError), + "TRANSACTION_EXPIRATION_ERROR" => Some(Self::TransactionExpirationError), + "SERVER_BUSY" => Some(Self::ServerBusy), + "NO_CONNECTION" => Some(Self::NoConnection), + "NOT_ENOUGH_EFFECTIVE_CONNECTION" => Some(Self::NotEnoughEffectiveConnection), + "BLOCK_UNSOLIDIFIED" => Some(Self::BlockUnsolidified), + "OTHER_ERROR" => Some(Self::OtherError), + _ => None, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockReference { + #[prost(int64, tag="1")] + pub block_num: i64, + #[prost(bytes="vec", tag="2")] + pub block_hash: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WitnessList { + #[prost(message, repeated, tag="1")] + pub witnesses: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ProposalList { + #[prost(message, repeated, tag="1")] + pub proposals: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExchangeList { + #[prost(message, repeated, tag="1")] + pub exchanges: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AssetIssueList { + #[prost(message, repeated, tag="1")] + pub asset_issue: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockList { + #[prost(message, repeated, tag="1")] + pub block: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionList { + #[prost(message, repeated, tag="1")] + pub transaction: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionIdList { + #[prost(string, repeated, tag="1")] + pub tx_id: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DelegatedResourceMessage { #[prost(bytes="vec", tag="1")] - pub owner_address: ::prost::alloc::vec::Vec, - #[prost(bytes="vec", repeated, tag="2")] - pub vote_address: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, - #[prost(bool, tag="3")] - pub support: bool, + pub from_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub to_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DelegatedResourceList { + #[prost(message, repeated, tag="1")] + pub delegated_resource: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetAvailableUnfreezeCountRequestMessage { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct GetAvailableUnfreezeCountResponseMessage { + #[prost(int64, tag="1")] + pub count: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CanDelegatedMaxSizeRequestMessage { + #[prost(int32, tag="1")] + pub r#type: i32, + #[prost(bytes="vec", tag="2")] + pub owner_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct CanDelegatedMaxSizeResponseMessage { + #[prost(int64, tag="1")] + pub max_size: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CanWithdrawUnfreezeAmountRequestMessage { + #[prost(bytes="vec", tag="1")] + pub owner_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub timestamp: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct CanWithdrawUnfreezeAmountResponseMessage { + #[prost(int64, tag="1")] + pub amount: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PricesResponseMessage { + #[prost(string, tag="1")] + pub prices: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct NodeList { + #[prost(message, repeated, tag="1")] + pub nodes: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Node { + #[prost(message, optional, tag="1")] + pub address: ::core::option::Option

, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Address { + #[prost(bytes="vec", tag="1")] + pub host: ::prost::alloc::vec::Vec, + #[prost(int32, tag="2")] + pub port: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct EmptyMessage { +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct NumberMessage { + #[prost(int64, tag="1")] + pub num: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BytesMessage { + #[prost(bytes="vec", tag="1")] + pub value: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct TimeMessage { + #[prost(int64, tag="1")] + pub begin_in_milliseconds: i64, + #[prost(int64, tag="2")] + pub end_in_milliseconds: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockReq { + #[prost(string, tag="1")] + pub id_or_num: ::prost::alloc::string::String, + #[prost(bool, tag="2")] + pub detail: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct BlockLimit { + #[prost(int64, tag="1")] + pub start_num: i64, + #[prost(int64, tag="2")] + pub end_num: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionLimit { + #[prost(bytes="vec", tag="1")] + pub transaction_id: ::prost::alloc::vec::Vec, + #[prost(int64, tag="2")] + pub limit_num: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountPaginated { + #[prost(message, optional, tag="1")] + pub account: ::core::option::Option, + #[prost(int64, tag="2")] + pub offset: i64, + #[prost(int64, tag="3")] + pub limit: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct TimePaginatedMessage { + #[prost(message, optional, tag="1")] + pub time_message: ::core::option::Option, + #[prost(int64, tag="2")] + pub offset: i64, + #[prost(int64, tag="3")] + pub limit: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountNetMessage { + #[prost(int64, tag="1")] + pub free_net_used: i64, + #[prost(int64, tag="2")] + pub free_net_limit: i64, + #[prost(int64, tag="3")] + pub net_used: i64, + #[prost(int64, tag="4")] + pub net_limit: i64, + #[prost(map="string, int64", tag="5")] + pub asset_net_used: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + #[prost(map="string, int64", tag="6")] + pub asset_net_limit: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + #[prost(int64, tag="7")] + pub total_net_limit: i64, + #[prost(int64, tag="8")] + pub total_net_weight: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AccountResourceMessage { + #[prost(int64, tag="1")] + pub free_net_used: i64, + #[prost(int64, tag="2")] + pub free_net_limit: i64, + #[prost(int64, tag="3")] + pub net_used: i64, + #[prost(int64, tag="4")] + pub net_limit: i64, + #[prost(map="string, int64", tag="5")] + pub asset_net_used: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + #[prost(map="string, int64", tag="6")] + pub asset_net_limit: ::std::collections::HashMap<::prost::alloc::string::String, i64>, + #[prost(int64, tag="7")] + pub total_net_limit: i64, + #[prost(int64, tag="8")] + pub total_net_weight: i64, + #[prost(int64, tag="9")] + pub total_tron_power_weight: i64, + #[prost(int64, tag="10")] + pub tron_power_used: i64, + #[prost(int64, tag="11")] + pub tron_power_limit: i64, + #[prost(int64, tag="13")] + pub energy_used: i64, + #[prost(int64, tag="14")] + pub energy_limit: i64, + #[prost(int64, tag="15")] + pub total_energy_limit: i64, + #[prost(int64, tag="16")] + pub total_energy_weight: i64, + #[prost(int64, tag="21")] + pub storage_used: i64, + #[prost(int64, tag="22")] + pub storage_limit: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct PaginatedMessage { + #[prost(int64, tag="1")] + pub offset: i64, + #[prost(int64, tag="2")] + pub limit: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionExtention { + #[prost(message, optional, tag="1")] + pub transaction: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub txid: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", repeated, tag="3")] + pub constant_result: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(message, optional, tag="4")] + pub result: ::core::option::Option, + #[prost(int64, tag="5")] + pub energy_used: i64, + #[prost(message, repeated, tag="6")] + pub logs: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="7")] + pub internal_transactions: ::prost::alloc::vec::Vec, + #[prost(int64, tag="8")] + pub energy_penalty: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EstimateEnergyMessage { + #[prost(message, optional, tag="1")] + pub result: ::core::option::Option, + #[prost(int64, tag="2")] + pub energy_required: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockExtention { + #[prost(message, repeated, tag="1")] + pub transactions: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="2")] + pub block_header: ::core::option::Option, + #[prost(bytes="vec", tag="3")] + pub blockid: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockListExtention { + #[prost(message, repeated, tag="1")] + pub block: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionListExtention { + #[prost(message, repeated, tag="1")] + pub transaction: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockIncrementalMerkleTree { + #[prost(int64, tag="1")] + pub number: i64, + #[prost(message, optional, tag="2")] + pub merkle_tree: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionSignWeight { + #[prost(message, optional, tag="1")] + pub permission: ::core::option::Option, + #[prost(bytes="vec", repeated, tag="2")] + pub approved_list: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(int64, tag="3")] + pub current_weight: i64, + #[prost(message, optional, tag="4")] + pub result: ::core::option::Option, + #[prost(message, optional, tag="5")] + pub transaction: ::core::option::Option, +} +/// Nested message and enum types in `TransactionSignWeight`. +pub mod transaction_sign_weight { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Result { + #[prost(enumeration="result::ResponseCode", tag="1")] + pub code: i32, + #[prost(string, tag="2")] + pub message: ::prost::alloc::string::String, + } + /// Nested message and enum types in `Result`. + pub mod result { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum ResponseCode { + EnoughPermission = 0, + NotEnoughPermission = 1, + SignatureFormatError = 2, + ComputeAddressError = 3, + PermissionError = 4, + OtherError = 20, + } + impl ResponseCode { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ResponseCode::EnoughPermission => "ENOUGH_PERMISSION", + ResponseCode::NotEnoughPermission => "NOT_ENOUGH_PERMISSION", + ResponseCode::SignatureFormatError => "SIGNATURE_FORMAT_ERROR", + ResponseCode::ComputeAddressError => "COMPUTE_ADDRESS_ERROR", + ResponseCode::PermissionError => "PERMISSION_ERROR", + ResponseCode::OtherError => "OTHER_ERROR", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "ENOUGH_PERMISSION" => Some(Self::EnoughPermission), + "NOT_ENOUGH_PERMISSION" => Some(Self::NotEnoughPermission), + "SIGNATURE_FORMAT_ERROR" => Some(Self::SignatureFormatError), + "COMPUTE_ADDRESS_ERROR" => Some(Self::ComputeAddressError), + "PERMISSION_ERROR" => Some(Self::PermissionError), + "OTHER_ERROR" => Some(Self::OtherError), + _ => None, + } + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionApprovedList { + #[prost(bytes="vec", repeated, tag="2")] + pub approved_list: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + #[prost(message, optional, tag="4")] + pub result: ::core::option::Option, + #[prost(message, optional, tag="5")] + pub transaction: ::core::option::Option, +} +/// Nested message and enum types in `TransactionApprovedList`. +pub mod transaction_approved_list { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Result { + #[prost(enumeration="result::ResponseCode", tag="1")] + pub code: i32, + #[prost(string, tag="2")] + pub message: ::prost::alloc::string::String, + } + /// Nested message and enum types in `Result`. + pub mod result { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum ResponseCode { + Success = 0, + SignatureFormatError = 1, + ComputeAddressError = 2, + OtherError = 20, + } + impl ResponseCode { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ResponseCode::Success => "SUCCESS", + ResponseCode::SignatureFormatError => "SIGNATURE_FORMAT_ERROR", + ResponseCode::ComputeAddressError => "COMPUTE_ADDRESS_ERROR", + ResponseCode::OtherError => "OTHER_ERROR", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "SUCCESS" => Some(Self::Success), + "SIGNATURE_FORMAT_ERROR" => Some(Self::SignatureFormatError), + "COMPUTE_ADDRESS_ERROR" => Some(Self::ComputeAddressError), + "OTHER_ERROR" => Some(Self::OtherError), + _ => None, + } + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct IvkDecryptParameters { + #[prost(int64, tag="1")] + pub start_block_index: i64, + #[prost(int64, tag="2")] + pub end_block_index: i64, + #[prost(bytes="vec", tag="3")] + pub ivk: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct IvkDecryptAndMarkParameters { + #[prost(int64, tag="1")] + pub start_block_index: i64, + #[prost(int64, tag="2")] + pub end_block_index: i64, + #[prost(bytes="vec", tag="5")] + pub ivk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub ak: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub nk: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct OvkDecryptParameters { + #[prost(int64, tag="1")] + pub start_block_index: i64, + #[prost(int64, tag="2")] + pub end_block_index: i64, + #[prost(bytes="vec", tag="3")] + pub ovk: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DecryptNotes { + #[prost(message, repeated, tag="1")] + pub note_txs: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `DecryptNotes`. +pub mod decrypt_notes { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct NoteTx { + #[prost(message, optional, tag="1")] + pub note: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub txid: ::prost::alloc::vec::Vec, + #[prost(int32, tag="3")] + pub index: i32, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DecryptNotesMarked { + #[prost(message, repeated, tag="1")] + pub note_txs: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `DecryptNotesMarked`. +pub mod decrypt_notes_marked { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct NoteTx { + #[prost(message, optional, tag="1")] + pub note: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub txid: ::prost::alloc::vec::Vec, + #[prost(int32, tag="3")] + pub index: i32, + #[prost(bool, tag="4")] + pub is_spend: bool, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Note { + #[prost(int64, tag="1")] + pub value: i64, + #[prost(string, tag="2")] + pub payment_address: ::prost::alloc::string::String, + #[prost(bytes="vec", tag="3")] + pub rcm: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub memo: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SpendNote { + #[prost(message, optional, tag="3")] + pub note: ::core::option::Option, + #[prost(bytes="vec", tag="4")] + pub alpha: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="5")] + pub voucher: ::core::option::Option, + #[prost(bytes="vec", tag="6")] + pub path: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ReceiveNote { + #[prost(message, optional, tag="1")] + pub note: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PrivateParameters { + #[prost(bytes="vec", tag="1")] + pub transparent_from_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub ask: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub nsk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub ovk: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub from_amount: i64, + #[prost(message, repeated, tag="6")] + pub shielded_spends: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="7")] + pub shielded_receives: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="8")] + pub transparent_to_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="9")] + pub to_amount: i64, + #[prost(int64, tag="10")] + pub timeout: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PrivateParametersWithoutAsk { + #[prost(bytes="vec", tag="1")] + pub transparent_from_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub ak: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub nsk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub ovk: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub from_amount: i64, + #[prost(message, repeated, tag="6")] + pub shielded_spends: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="7")] + pub shielded_receives: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="8")] + pub transparent_to_address: ::prost::alloc::vec::Vec, + #[prost(int64, tag="9")] + pub to_amount: i64, + #[prost(int64, tag="10")] + pub timeout: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SpendAuthSigParameters { + #[prost(bytes="vec", tag="1")] + pub ask: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub tx_hash: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub alpha: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct NfParameters { + #[prost(message, optional, tag="1")] + pub note: ::core::option::Option, + #[prost(message, optional, tag="2")] + pub voucher: ::core::option::Option, + #[prost(bytes="vec", tag="3")] + pub ak: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub nk: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExpandedSpendingKeyMessage { + #[prost(bytes="vec", tag="1")] + pub ask: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub nsk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub ovk: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ViewingKeyMessage { + #[prost(bytes="vec", tag="1")] + pub ak: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub nk: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct IncomingViewingKeyMessage { + #[prost(bytes="vec", tag="1")] + pub ivk: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DiversifierMessage { + #[prost(bytes="vec", tag="1")] + pub d: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct IncomingViewingKeyDiversifierMessage { + #[prost(message, optional, tag="1")] + pub ivk: ::core::option::Option, + #[prost(message, optional, tag="2")] + pub d: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PaymentAddressMessage { + #[prost(message, optional, tag="1")] + pub d: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub pk_d: ::prost::alloc::vec::Vec, + #[prost(string, tag="3")] + pub payment_address: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ShieldedAddressInfo { + #[prost(bytes="vec", tag="1")] + pub sk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub ask: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub nsk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub ovk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="5")] + pub ak: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="6")] + pub nk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="7")] + pub ivk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="8")] + pub d: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="9")] + pub pk_d: ::prost::alloc::vec::Vec, + #[prost(string, tag="10")] + pub payment_address: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct NoteParameters { + #[prost(bytes="vec", tag="1")] + pub ak: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub nk: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="3")] + pub note: ::core::option::Option, + #[prost(bytes="vec", tag="4")] + pub txid: ::prost::alloc::vec::Vec, #[prost(int32, tag="5")] - pub count: i32, + pub index: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SpendResult { + #[prost(bool, tag="1")] + pub result: bool, + #[prost(string, tag="2")] + pub message: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransactionInfoList { + #[prost(message, repeated, tag="1")] + pub transaction_info: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SpendNoteTrc20 { + #[prost(message, optional, tag="1")] + pub note: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub alpha: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub root: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub path: ::prost::alloc::vec::Vec, + #[prost(int64, tag="5")] + pub pos: i64, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PrivateShieldedTrc20Parameters { + #[prost(bytes="vec", tag="1")] + pub ask: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub nsk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub ovk: ::prost::alloc::vec::Vec, + #[prost(string, tag="4")] + pub from_amount: ::prost::alloc::string::String, + #[prost(message, repeated, tag="5")] + pub shielded_spends: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="6")] + pub shielded_receives: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="7")] + pub transparent_to_address: ::prost::alloc::vec::Vec, + #[prost(string, tag="8")] + pub to_amount: ::prost::alloc::string::String, + #[prost(bytes="vec", tag="9")] + pub shielded_trc20_contract_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct PrivateShieldedTrc20ParametersWithoutAsk { + #[prost(bytes="vec", tag="1")] + pub ak: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="2")] + pub nsk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub ovk: ::prost::alloc::vec::Vec, + #[prost(string, tag="4")] + pub from_amount: ::prost::alloc::string::String, + #[prost(message, repeated, tag="5")] + pub shielded_spends: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="6")] + pub shielded_receives: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="7")] + pub transparent_to_address: ::prost::alloc::vec::Vec, + #[prost(string, tag="8")] + pub to_amount: ::prost::alloc::string::String, + #[prost(bytes="vec", tag="9")] + pub shielded_trc20_contract_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ShieldedTrc20Parameters { + #[prost(message, repeated, tag="1")] + pub spend_description: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag="2")] + pub receive_description: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub binding_signature: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub message_hash: ::prost::alloc::vec::Vec, + #[prost(string, tag="5")] + pub trigger_contract_input: ::prost::alloc::string::String, + #[prost(string, tag="6")] + pub parameter_type: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct IvkDecryptTrc20Parameters { + #[prost(int64, tag="1")] + pub start_block_index: i64, + #[prost(int64, tag="2")] + pub end_block_index: i64, + #[prost(bytes="vec", tag="3")] + pub shielded_trc20_contract_address: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub ivk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="5")] + pub ak: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="6")] + pub nk: ::prost::alloc::vec::Vec, + #[prost(string, repeated, tag="7")] + pub events: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct OvkDecryptTrc20Parameters { + #[prost(int64, tag="1")] + pub start_block_index: i64, + #[prost(int64, tag="2")] + pub end_block_index: i64, + #[prost(bytes="vec", tag="3")] + pub ovk: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="4")] + pub shielded_trc20_contract_address: ::prost::alloc::vec::Vec, + #[prost(string, repeated, tag="5")] + pub events: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DecryptNotesTrc20 { + #[prost(message, repeated, tag="1")] + pub note_txs: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `DecryptNotesTRC20`. +pub mod decrypt_notes_trc20 { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct NoteTx { + #[prost(message, optional, tag="1")] + pub note: ::core::option::Option, + #[prost(int64, tag="2")] + pub position: i64, + #[prost(bool, tag="3")] + pub is_spent: bool, + #[prost(bytes="vec", tag="4")] + pub txid: ::prost::alloc::vec::Vec, + #[prost(int32, tag="5")] + pub index: i32, + #[prost(string, tag="6")] + pub to_amount: ::prost::alloc::string::String, + #[prost(bytes="vec", tag="7")] + pub transparent_to_address: ::prost::alloc::vec::Vec, + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct NfTrc20Parameters { + #[prost(message, optional, tag="1")] + pub note: ::core::option::Option, + #[prost(bytes="vec", tag="2")] + pub ak: ::prost::alloc::vec::Vec, + #[prost(bytes="vec", tag="3")] + pub nk: ::prost::alloc::vec::Vec, + #[prost(int64, tag="4")] + pub position: i64, + #[prost(bytes="vec", tag="5")] + pub shielded_trc20_contract_address: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] +pub struct NullifierResult { + #[prost(bool, tag="1")] + pub is_spent: bool, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ShieldedTrc20TriggerContractParameters { + #[prost(message, optional, tag="1")] + pub shielded_trc20_parameters: ::core::option::Option, + #[prost(message, repeated, tag="2")] + pub spend_authority_signature: ::prost::alloc::vec::Vec, + #[prost(string, tag="3")] + pub amount: ::prost::alloc::string::String, + #[prost(bytes="vec", tag="4")] + pub transparent_to_address: ::prost::alloc::vec::Vec, } // @@protoc_insertion_point(module) diff --git a/tron/src/pb/request.tron.v1.rs b/tron/src/pb/request.tron.v1.rs index 0aa07b5..fc3592d 100644 --- a/tron/src/pb/request.tron.v1.rs +++ b/tron/src/pb/request.tron.v1.rs @@ -1,49 +1,51 @@ // @generated -// This file is @generated by prost-build - +// This file is @generated by prost-build. /// A single payment event from the ERC20FeeProxy contract #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Payment { /// The token contract address (TRC20) - #[prost(string, tag = "1")] + #[prost(string, tag="1")] pub token_address: ::prost::alloc::string::String, /// The recipient address - #[prost(string, tag = "2")] + #[prost(string, tag="2")] pub to: ::prost::alloc::string::String, /// The payment amount (as string to preserve precision) - #[prost(string, tag = "3")] + #[prost(string, tag="3")] pub amount: ::prost::alloc::string::String, /// The indexed payment reference (hex encoded) - #[prost(string, tag = "4")] + #[prost(string, tag="4")] pub payment_reference: ::prost::alloc::string::String, /// The fee amount (as string to preserve precision) - #[prost(string, tag = "5")] + #[prost(string, tag="5")] pub fee_amount: ::prost::alloc::string::String, /// The fee recipient address - #[prost(string, tag = "6")] + #[prost(string, tag="6")] pub fee_address: ::prost::alloc::string::String, /// The sender address (msg.sender) - #[prost(string, tag = "7")] + #[prost(string, tag="7")] pub from: ::prost::alloc::string::String, /// Block number where the event was emitted - #[prost(uint64, tag = "8")] + #[prost(uint64, tag="8")] pub block: u64, /// Block timestamp (Unix timestamp in seconds) - #[prost(uint64, tag = "9")] + #[prost(uint64, tag="9")] pub timestamp: u64, /// Transaction hash - #[prost(string, tag = "10")] + #[prost(string, tag="10")] pub tx_hash: ::prost::alloc::string::String, /// The proxy contract address that emitted the event - #[prost(string, tag = "11")] + #[prost(string, tag="11")] pub contract_address: ::prost::alloc::string::String, + /// The blockchain network identifier (e.g., "tron", "ethereum", "polygon") + #[prost(string, tag="12")] + pub chain: ::prost::alloc::string::String, } - /// Collection of payment events #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Payments { - #[prost(message, repeated, tag = "1")] + #[prost(message, repeated, tag="1")] pub payments: ::prost::alloc::vec::Vec, } +// @@protoc_insertion_point(module) diff --git a/tron/src/pb/sf.substreams.tron.v1.rs b/tron/src/pb/sf.substreams.tron.v1.rs new file mode 100644 index 0000000..7f4533b --- /dev/null +++ b/tron/src/pb/sf.substreams.tron.v1.rs @@ -0,0 +1,11 @@ +// @generated +// This file is @generated by prost-build. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Transactions { + #[prost(message, repeated, tag="1")] + pub transactions: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag="2")] + pub clock: ::core::option::Option, +} +// @@protoc_insertion_point(module) diff --git a/tron/src/pb/sf.substreams.v1.rs b/tron/src/pb/sf.substreams.v1.rs new file mode 100644 index 0000000..63fcbbd --- /dev/null +++ b/tron/src/pb/sf.substreams.v1.rs @@ -0,0 +1,23 @@ +// @generated +// This file is @generated by prost-build. +/// Clock is a pointer to a block with added timestamp +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Clock { + #[prost(string, tag="1")] + pub id: ::prost::alloc::string::String, + #[prost(uint64, tag="2")] + pub number: u64, + #[prost(message, optional, tag="3")] + pub timestamp: ::core::option::Option<::prost_types::Timestamp>, +} +/// BlockRef is a pointer to a block to which we don't know the timestamp +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct BlockRef { + #[prost(string, tag="1")] + pub id: ::prost::alloc::string::String, + #[prost(uint64, tag="2")] + pub number: u64, +} +// @@protoc_insertion_point(module) diff --git a/tron/substreams.yaml b/tron/substreams.yaml index a7eb5e6..5cd9c56 100644 --- a/tron/substreams.yaml +++ b/tron/substreams.yaml @@ -40,6 +40,7 @@ modules: Params format: mainnet_proxy_address=
+ chain= - name: db_out kind: map @@ -63,3 +64,4 @@ sink: params: map_erc20_fee_proxy_payments: | mainnet_proxy_address=TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd + chain=tron From e47d133b873eefa74092b4e01dea1b578a8af400 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 06:05:31 -0300 Subject: [PATCH 16/29] Add comprehensive README with development and deployment guide - Prerequisites and installation instructions - Project structure overview - Development workflow (changes, build, test) - Local stream and sink testing - Production deployment to Easypanel - Multi-chain support documentation - Troubleshooting section --- .env.example | 10 ++ README.md | 321 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 329 insertions(+), 2 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..558befa --- /dev/null +++ b/.env.example @@ -0,0 +1,10 @@ +# Streamingfast API Token +# Get from: https://app.streamingfast.io/ +SUBSTREAMS_API_TOKEN=your-streamingfast-api-token + +# PostgreSQL Password (for local development) +POSTGRES_PASSWORD=changeme + +# PostgreSQL Port (optional, defaults to 5432) +# Use a different port if 5432 is already in use +POSTGRES_PORT=5433 diff --git a/README.md b/README.md index 50a4456..27a86b5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,320 @@ -# payments-substream +# Request Network Payments Substream -Substream for indexing Request Network payments. +Substreams module for indexing Request Network ERC20FeeProxy payment events across multiple blockchain networks. Currently supports TRON with a multi-chain architecture ready for additional networks. + +## Prerequisites + +- [Rust](https://rustup.rs/) with `wasm32-unknown-unknown` target +- [Substreams CLI](https://substreams.streamingfast.io/getting-started/installing-the-cli) +- [Docker](https://docs.docker.com/get-docker/) and Docker Compose +- [Buf CLI](https://buf.build/product/cli) (for protobuf generation) +- [Streamingfast API Token](https://app.streamingfast.io/) + +### Install Rust WASM target + +```bash +rustup target add wasm32-unknown-unknown +``` + +### Install Substreams CLI + +```bash +# macOS +brew install streamingfast/tap/substreams + +# Linux +curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz +sudo mv substreams /usr/local/bin/ +``` + +### Install Buf CLI + +```bash +brew install bufbuild/buf/buf +``` + +## Project Structure + +``` +payments-substream/ +├── tron/ # TRON substream module +│ ├── src/ +│ │ ├── lib.rs # Main substream logic +│ │ └── pb/ # Generated protobuf code +│ ├── proto/ +│ │ └── request/tron/v1/ +│ │ └── payments.proto # Payment message definitions +│ ├── schema.sql # PostgreSQL schema for SQL sink +│ ├── substreams.yaml # Substream manifest +│ ├── Cargo.toml # Rust dependencies +│ └── Makefile # Build commands +├── docker-compose.yml # Local development setup +├── docker-compose.prod.yml # Production deployment +├── Dockerfile.sink # SQL sink Docker image +└── .env.example # Environment variables template +``` + +## Development + +### 1. Make Changes to the Substream + +#### Modify the Rust Code + +Edit `tron/src/lib.rs` to change payment parsing logic: + +```rust +// Example: Add new field extraction +fn parse_transfer_with_reference_and_fee(...) -> Option { + // Your parsing logic here +} +``` + +#### Update Protobuf Messages + +Edit `tron/proto/request/tron/v1/payments.proto`: + +```protobuf +message Payment { + string token_address = 1; + // Add new fields here + string new_field = 13; +} +``` + +After changing `.proto` files, regenerate the Rust code: + +```bash +cd tron +make protogen +``` + +#### Update SQL Schema + +Edit `tron/schema.sql` to add new columns: + +```sql +ALTER TABLE payments ADD COLUMN new_field TEXT; +``` + +### 2. Build the Substream + +```bash +cd tron + +# Build WASM module +make build + +# Run unit tests +make test + +# Package into .spkg file +make package +``` + +### 3. Run the Stream Locally + +Test the substream against live blockchain data without a database: + +```bash +cd tron + +# Set your API token +export SUBSTREAMS_API_TOKEN="your-token-here" + +# Run against TRON mainnet (100 blocks from deployment) +substreams run ./request-network-tron-v0.1.0.spkg \ + map_erc20_fee_proxy_payments \ + -e mainnet.tron.streamingfast.io:443 \ + --start-block 79216121 \ + --stop-block +100 +``` + +#### Output Options + +```bash +# JSON output (for debugging) +substreams run ... -o json + +# Protobuf output (default) +substreams run ... -o proto +``` + +### 4. Run the Sink Locally (with PostgreSQL) + +Test the full pipeline with a local PostgreSQL database: + +#### Start Local Services + +```bash +# Create .env file +cp .env.example .env + +# Edit .env with your values +# SUBSTREAMS_API_TOKEN=your-token +# POSTGRES_PASSWORD=your-password + +# Start PostgreSQL and sink +docker compose up -d + +# View logs +docker compose logs -f sink +``` + +#### Query Local Database + +```bash +# Connect to PostgreSQL +docker exec -it tron-payments-db psql -U postgres -d tron_payments + +# Query payments +SELECT * FROM payments LIMIT 10; +SELECT chain, COUNT(*) FROM payments GROUP BY chain; +``` + +#### Stop Local Services + +```bash +docker compose down + +# Remove data volumes (fresh start) +docker compose down -v +``` + +## Configuration + +### Substream Parameters + +Parameters are configured in `tron/substreams.yaml`: + +```yaml +params: + map_erc20_fee_proxy_payments: | + mainnet_proxy_address=TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd + chain=tron +``` + +| Parameter | Description | Example | +|-----------|-------------|---------| +| `mainnet_proxy_address` | ERC20FeeProxy contract address | `TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd` | +| `chain` | Chain identifier for multi-chain support | `tron`, `ethereum`, `polygon` | + +### Environment Variables + +| Variable | Description | +|----------|-------------| +| `SUBSTREAMS_API_TOKEN` | Streamingfast API authentication token | +| `DSN` | PostgreSQL connection string | +| `POSTGRES_PASSWORD` | PostgreSQL password (local dev) | + +## Deployment + +### Deploy to Easypanel (Production) + +#### 1. Create PostgreSQL Database + +In Easypanel: +1. Create a new PostgreSQL service +2. Note the internal hostname (e.g., `shared_payments-substream-postgres`) + +#### 2. Deploy the Sink + +1. Create a new Docker Compose app pointing to this repository +2. Set compose file path: `docker-compose.prod.yml` +3. Configure environment variables: + +``` +DSN=postgres://postgres:PASSWORD@shared_payments-substream-postgres:5432/shared?sslmode=disable +SUBSTREAMS_API_TOKEN=your-streamingfast-token +``` + +4. Enable "Create .env file" checkbox +5. Deploy + +#### 3. Monitor the Sink + +Check logs in Easypanel to verify: +- Connection to Streamingfast endpoint +- Database writes (`db_flush_rate`) +- Block processing (`progress_total_processed_blocks`) + +### Manual Deployment + +```bash +# Build the Docker image +docker build -f Dockerfile.sink -t payments-sink . + +# Run with environment variables +docker run -d \ + -e DSN="postgres://user:pass@host:5432/db?sslmode=disable" \ + -e SUBSTREAMS_API_TOKEN="your-token" \ + payments-sink +``` + +## Multi-Chain Support + +The payments table includes a `chain` field to support multiple networks: + +```sql +SELECT chain, COUNT(*) as payments FROM payments GROUP BY chain; +``` + +### Adding a New Network + +1. Create a new substream module (e.g., `ethereum/`) +2. Configure the appropriate Streamingfast endpoint +3. Set the `chain` parameter in `substreams.yaml` +4. Deploy an additional sink pointing to the same database + +Example for Ethereum: + +```yaml +params: + map_erc20_fee_proxy_payments: | + mainnet_proxy_address=0x... + chain=ethereum +``` + +## Troubleshooting + +### Module Hash Mismatch + +If you see `cursor module hash mismatch`: + +```sql +-- Connect to PostgreSQL and reset +DROP TABLE IF EXISTS payments; +DROP TABLE IF EXISTS cursors; +``` + +Then redeploy the sink. + +### Column Does Not Exist + +Schema changes require dropping and recreating tables: + +```sql +DROP TABLE IF EXISTS payments; +DROP TABLE IF EXISTS cursors; +``` + +### DNS Resolution Issues + +Ensure services are on the same Docker network. In `docker-compose.prod.yml`: + +```yaml +networks: + easypanel: + external: true +``` + +## Streamingfast Endpoints + +| Network | Endpoint | +|---------|----------| +| TRON Mainnet | `mainnet.tron.streamingfast.io:443` | +| TRON Shasta (Testnet) | `shasta.tron.streamingfast.io:443` | +| Ethereum Mainnet | `mainnet.eth.streamingfast.io:443` | + +## License + +MIT From a26168a848a42b02837a1b53869dc6691c89ce07 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 06:16:40 -0300 Subject: [PATCH 17/29] Add The Graph Network integration for decentralized indexing - Add substreams-entity-change dependency for graph_out module - Implement graph_out function to convert payments to EntityChanges - Add subgraph.yaml manifest for Substreams-powered subgraph deployment - Update schema.graphql with chain field for multi-chain support - Update README with The Graph deployment instructions - Rebuild .spkg with new graph_out module --- README.md | 99 +++++++++++++++++++++++++- tron/Cargo.lock | 19 +++++ tron/Cargo.toml | 1 + tron/request-network-tron-v0.1.0.spkg | Bin 653113 -> 689006 bytes tron/schema.graphql | 11 +-- tron/src/lib.rs | 30 ++++++++ tron/subgraph.yaml | 21 ++++++ tron/substreams.yaml | 12 ++++ 8 files changed, 188 insertions(+), 5 deletions(-) create mode 100644 tron/subgraph.yaml diff --git a/README.md b/README.md index 27a86b5..4b5ccc7 100644 --- a/README.md +++ b/README.md @@ -45,11 +45,13 @@ payments-substream/ │ │ └── request/tron/v1/ │ │ └── payments.proto # Payment message definitions │ ├── schema.sql # PostgreSQL schema for SQL sink +│ ├── schema.graphql # GraphQL schema for The Graph │ ├── substreams.yaml # Substream manifest +│ ├── subgraph.yaml # The Graph subgraph manifest │ ├── Cargo.toml # Rust dependencies │ └── Makefile # Build commands ├── docker-compose.yml # Local development setup -├── docker-compose.prod.yml # Production deployment +├── docker-compose.prod.yml # Production deployment (Easypanel) ├── Dockerfile.sink # SQL sink Docker image └── .env.example # Environment variables template ``` @@ -250,6 +252,101 @@ docker run -d \ payments-sink ``` +### Deploy to The Graph Network (Decentralized) + +Deploy as a Substreams-powered subgraph to The Graph's decentralized network. Indexers worldwide will host and serve your data - no infrastructure to maintain. + +#### Prerequisites + +```bash +# Install The Graph CLI +npm install -g @graphprotocol/graph-cli + +# ETH on Arbitrum (for publishing to The Graph Network) +``` + +#### 1. Build the Substream Package + +```bash +cd tron + +# Build and package +make build +make package +``` + +#### 2. Build the Subgraph + +```bash +cd tron + +# Generate code from schema +graph codegen + +# Build the subgraph +graph build +``` + +#### 3. Deploy to Subgraph Studio (Testing) + +```bash +# Authenticate with Subgraph Studio +graph auth --studio + +# Deploy to Studio for testing +graph deploy --studio request-network-tron-payments +``` + +#### 4. Publish to The Graph Network (Production) + +```bash +# Publish to decentralized network +graph publish +``` + +This opens a browser window where you: +1. Fill in subgraph metadata (name, description) +2. Select "The Graph Network" as destination +3. Sign the transaction with your wallet (requires ETH on Arbitrum) + +After publishing, indexers will start indexing your subgraph. + +#### 5. Query the Subgraph + +Once indexed, query via The Graph Gateway: + +```graphql +{ + payments( + where: { reference: "0xabc123..." } + orderBy: block + orderDirection: desc + ) { + id + chain + txHash + amount + from + to + tokenAddress + feeAmount + timestamp + } +} +``` + +Gateway URL: +``` +https://gateway.thegraph.com/api/[api-key]/subgraphs/id/[subgraph-id] +``` + +#### Benefits of The Graph Network + +- **Decentralized**: No single point of failure +- **No infrastructure**: Indexers run the nodes +- **100x faster**: Substreams-powered indexing +- **SDK compatible**: Request Network SDK already supports TheGraph + ## Multi-Chain Support The payments table includes a `chain` field to support multiple networks: diff --git a/tron/Cargo.lock b/tron/Cargo.lock index 6f80cd4..d761415 100644 --- a/tron/Cargo.lock +++ b/tron/Cargo.lock @@ -23,6 +23,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + [[package]] name = "bigdecimal" version = "0.3.1" @@ -487,6 +493,7 @@ dependencies = [ "sha2", "substreams", "substreams-database-change", + "substreams-entity-change", ] [[package]] @@ -560,6 +567,18 @@ dependencies = [ "substreams", ] +[[package]] +name = "substreams-entity-change" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c7fca123abff659d15ed30da5b605fa954a29e912c94260c488d0d18f9107d" +dependencies = [ + "base64", + "prost", + "prost-types", + "substreams", +] + [[package]] name = "substreams-macro" version = "0.5.22" diff --git a/tron/Cargo.toml b/tron/Cargo.toml index 4b89e20..0e678ea 100644 --- a/tron/Cargo.toml +++ b/tron/Cargo.toml @@ -13,6 +13,7 @@ crate-type = ["cdylib"] [dependencies] substreams = "0.5" substreams-database-change = "1.3" +substreams-entity-change = "1.3" prost = "0.11" prost-types = "0.11" hex = "0.4" diff --git a/tron/request-network-tron-v0.1.0.spkg b/tron/request-network-tron-v0.1.0.spkg index 3eb3ed505e726d00ac36ebc71fabe6779fc5e932..7a5f7ae0e6b267ba673db4bf86db7a16ab91afb9 100644 GIT binary patch delta 83215 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 TwNRwydLa$MwG2K0|{-rrKz4+79?dA4xo(GkH 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 N&FdQSrL`jKe*ta0Qkeh% delta 54278 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 diff --git a/tron/schema.graphql b/tron/schema.graphql index 7d31e64..c693192 100644 --- a/tron/schema.graphql +++ b/tron/schema.graphql @@ -1,11 +1,14 @@ -# GraphQL schema for Request Network TRON payments -# This schema is used when deploying a Substreams-powered subgraph +# GraphQL schema for Request Network payments (multi-chain) +# This schema is used when deploying a Substreams-powered subgraph to The Graph Network type Payment @entity { - "Unique identifier: txHash-logIndex" + "Unique identifier: chain-txHash-paymentReference" id: ID! - "The TRC20 token contract address" + "The blockchain network identifier (e.g., tron, ethereum, polygon)" + chain: String! + + "The token contract address (TRC20/ERC20)" tokenAddress: String! "The payment recipient address" diff --git a/tron/src/lib.rs b/tron/src/lib.rs index 663e3c7..1d5eeac 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -11,6 +11,8 @@ use pb::request::tron::v1::{Payment, Payments}; use pb::sf::tron::r#type::v1::{Block, Transaction}; use substreams::log; use substreams_database_change::pb::database::{table_change::Operation, DatabaseChanges}; +use substreams_entity_change::pb::entity::EntityChanges; +use substreams_entity_change::tables::Tables; /// TransferWithReferenceAndFee event signature (keccak256 hash of event signature) /// Event: TransferWithReferenceAndFee(address,address,uint256,bytes indexed,uint256,address) @@ -127,6 +129,34 @@ fn db_out(payments: Payments) -> Result Result { + let mut tables = Tables::new(); + + for payment in payments.payments { + // Create unique ID: chain-txHash-paymentReference + let id = format!("{}-{}-{}", payment.chain, payment.tx_hash, payment.payment_reference); + + tables + .create_row("Payment", &id) + .set("chain", &payment.chain) + .set("tokenAddress", &payment.token_address) + .set("to", &payment.to) + .set("amount", payment.amount.parse::().unwrap_or(0)) + .set("reference", hex::decode(&payment.payment_reference).unwrap_or_default()) + .set("feeAmount", payment.fee_amount.parse::().unwrap_or(0)) + .set("feeAddress", &payment.fee_address) + .set("from", &payment.from) + .set("block", payment.block as i32) + .set("timestamp", payment.timestamp as i32) + .set("txHash", &payment.tx_hash) + .set("contractAddress", &payment.contract_address); + } + + Ok(tables.to_entity_changes()) +} + /// Parses a TransferWithReferenceAndFee event from a log entry fn parse_transfer_with_reference_and_fee( log_entry: &Log, diff --git a/tron/subgraph.yaml b/tron/subgraph.yaml new file mode 100644 index 0000000..19b2953 --- /dev/null +++ b/tron/subgraph.yaml @@ -0,0 +1,21 @@ +specVersion: 1.0.0 +description: Request Network ERC20FeeProxy Payments on TRON +repository: https://github.com/RequestNetwork/payments-substream + +indexerHints: + prune: auto + +schema: + file: ./schema.graphql + +dataSources: + - kind: substreams + name: RequestPayments + network: tron + source: + package: + moduleName: graph_out + file: ./request-network-tron-v0.1.0.spkg + mapping: + apiVersion: 0.0.7 + kind: substreams/graph-entities diff --git a/tron/substreams.yaml b/tron/substreams.yaml index 5cd9c56..32527b1 100644 --- a/tron/substreams.yaml +++ b/tron/substreams.yaml @@ -12,6 +12,7 @@ imports: tron: https://spkg.io/streamingfast/tron-foundational-v0.1.2.spkg sql: https://github.com/streamingfast/substreams-sink-sql/releases/download/protodefs-v1.0.3/substreams-sink-sql-protodefs-v1.0.3.spkg database_change: https://github.com/streamingfast/substreams-sink-database-changes/releases/download/v1.2.1/substreams-database-change-v1.2.1.spkg + entity_change: https://github.com/streamingfast/substreams-sink-entity-changes/releases/download/v1.3.2/substreams-sink-entity-changes-v1.3.2.spkg protobuf: files: @@ -52,6 +53,17 @@ modules: doc: | Converts payment events to database changes for SQL sink. + - name: graph_out + kind: map + initialBlock: 79216121 + inputs: + - map: map_erc20_fee_proxy_payments + output: + type: proto:sf.substreams.sink.entity.v1.EntityChanges + doc: | + Converts payment events to entity changes for The Graph subgraph sink. + Deploy as a Substreams-powered subgraph on The Graph Network. + network: tron sink: From 38b21806bdedcb9c7a0896a0b2fa09951e906424 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 06:19:37 -0300 Subject: [PATCH 18/29] Add automated subgraph deployment to GitHub Actions - Add deploy-subgraph job that runs on merge to main - Install Graph CLI and deploy to Subgraph Studio - Add manual workflow_dispatch option for subgraph deployment - Deploy uses version from Cargo.toml as version label --- .github/workflows/tron-build.yml | 107 ++++++++++++++++++++++++++----- 1 file changed, 92 insertions(+), 15 deletions(-) diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml index 970d976..6b5607f 100644 --- a/.github/workflows/tron-build.yml +++ b/.github/workflows/tron-build.yml @@ -25,6 +25,11 @@ on: required: false default: false type: boolean + deploy_subgraph: + description: 'Deploy subgraph to The Graph Studio' + required: false + default: false + type: boolean jobs: build-and-test: @@ -259,22 +264,94 @@ jobs: echo "" echo "Package: ${{ steps.package_info.outputs.spkg_file }}" echo "Version: ${{ steps.package_info.outputs.version }}" + echo "==============================================" + + # Deploy subgraph to The Graph Network + deploy-subgraph: + name: Deploy Subgraph to The Graph + runs-on: ubuntu-latest + needs: [build-and-test, integration-test-mainnet] + # Deploy on: push to main (merge) or manual trigger + if: | + (github.event_name == 'push' && github.ref == 'refs/heads/main') || + github.event.inputs.deploy_subgraph == 'true' + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: wasm32-unknown-unknown + + - name: Cache Cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + tron/target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('tron/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-cargo- + + - name: Install Substreams CLI + run: | + curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz + sudo mv substreams /usr/local/bin/ + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install Graph CLI + run: npm install -g @graphprotocol/graph-cli + + - name: Build WASM module + working-directory: tron + run: make build + + - name: Package Substreams + working-directory: tron + run: make package + + - name: Build Subgraph + working-directory: tron + run: | + echo "Building subgraph..." + graph build + + - name: Deploy to Subgraph Studio + working-directory: tron + env: + SUBGRAPH_DEPLOY_KEY: ${{ secrets.SUBGRAPH_DEPLOY_KEY }} + run: | + echo "Deploying subgraph to The Graph Studio..." + + # Authenticate with deploy key + graph auth --studio "$SUBGRAPH_DEPLOY_KEY" + + # Get version from Cargo.toml + VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') + + # Deploy to studio (use the subgraph slug from Subgraph Studio) + graph deploy --studio request-network-tron-payments \ + --version-label "v${VERSION}" \ + --skip-validation + echo "" - echo "🔗 Endpoint:" - echo " - Mainnet (Streamingfast): mainnet-evm.tron.streamingfast.io:443" - echo "" - echo "📖 Deployment Options:" - echo " 1. SQL Sink (PostgreSQL/ClickHouse):" - echo " substreams-sink-sql run map_erc20_fee_proxy_payments" - echo "" - echo " 2. Direct Streaming (Go/Rust/JS SDK):" - echo " See https://docs.substreams.dev/how-to-guides/sinks/stream" + echo "==============================================" + echo "✅ Subgraph Deployed to The Graph Studio" + echo "==============================================" echo "" - echo " 3. Run locally:" - echo " substreams run map_erc20_fee_proxy_payments \\" - echo " -e mainnet-evm.tron.streamingfast.io:443 \\" - echo " --start-block 79216121" + echo "Version: v${VERSION}" echo "" - echo "Note: Substreams-Powered Subgraphs are not supported for non-EVM chains." - echo "Use SQL sink or direct streaming for production deployments." + echo "Next steps:" + echo " 1. Visit https://thegraph.com/studio/" + echo " 2. Verify the subgraph is syncing" + echo " 3. When ready, publish to The Graph Network" echo "==============================================" From 9e6e17511e35c031d7083958dd44ad30a171a688 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 06:21:33 -0300 Subject: [PATCH 19/29] Update subgraph naming to match Request Network convention Use request-payments-tron to follow existing naming pattern: - request-payments-mainnet (Ethereum) - request-payments-matic (Polygon) - request-payments-arbitrum-one - etc. --- .github/workflows/tron-build.yml | 5 +++-- README.md | 2 +- tron/subgraph.yaml | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml index 6b5607f..4d6c358 100644 --- a/.github/workflows/tron-build.yml +++ b/.github/workflows/tron-build.yml @@ -338,8 +338,8 @@ jobs: # Get version from Cargo.toml VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') - # Deploy to studio (use the subgraph slug from Subgraph Studio) - graph deploy --studio request-network-tron-payments \ + # Deploy to studio (follows Request Network naming: request-payments-{network}) + graph deploy --studio request-payments-tron \ --version-label "v${VERSION}" \ --skip-validation @@ -348,6 +348,7 @@ jobs: echo "✅ Subgraph Deployed to The Graph Studio" echo "==============================================" echo "" + echo "Subgraph: request-payments-tron" echo "Version: v${VERSION}" echo "" echo "Next steps:" diff --git a/README.md b/README.md index 4b5ccc7..3b9937f 100644 --- a/README.md +++ b/README.md @@ -294,7 +294,7 @@ graph build graph auth --studio # Deploy to Studio for testing -graph deploy --studio request-network-tron-payments +graph deploy --studio request-payments-tron ``` #### 4. Publish to The Graph Network (Production) diff --git a/tron/subgraph.yaml b/tron/subgraph.yaml index 19b2953..e0d092b 100644 --- a/tron/subgraph.yaml +++ b/tron/subgraph.yaml @@ -1,5 +1,5 @@ specVersion: 1.0.0 -description: Request Network ERC20FeeProxy Payments on TRON +description: Request Network Payments on TRON repository: https://github.com/RequestNetwork/payments-substream indexerHints: From ba3e510cb6415243b8b8f345459b04300f64e8fc Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 06:36:12 -0300 Subject: [PATCH 20/29] Remove The Graph subgraph integration (not supported for native TRON) The Graph only supports Substreams on native TRON - not subgraphs. Subgraphs are only available for TRON EVM, which is a different network. Removed: - subgraph.yaml - graph_out module and function - substreams-entity-change dependency - deploy-subgraph GitHub Actions job - The Graph deployment docs from README SQL sink remains as the primary deployment option for native TRON. --- .github/workflows/tron-build.yml | 96 ------------------------- README.md | 98 +------------------------- tron/Cargo.lock | 19 ----- tron/Cargo.toml | 1 - tron/request-network-tron-v0.1.0.spkg | Bin 689006 -> 653113 bytes tron/src/lib.rs | 29 -------- tron/subgraph.yaml | 21 ------ tron/substreams.yaml | 12 ---- 8 files changed, 1 insertion(+), 275 deletions(-) delete mode 100644 tron/subgraph.yaml diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml index 4d6c358..d27de2a 100644 --- a/.github/workflows/tron-build.yml +++ b/.github/workflows/tron-build.yml @@ -25,11 +25,6 @@ on: required: false default: false type: boolean - deploy_subgraph: - description: 'Deploy subgraph to The Graph Studio' - required: false - default: false - type: boolean jobs: build-and-test: @@ -265,94 +260,3 @@ jobs: echo "Package: ${{ steps.package_info.outputs.spkg_file }}" echo "Version: ${{ steps.package_info.outputs.version }}" echo "==============================================" - - # Deploy subgraph to The Graph Network - deploy-subgraph: - name: Deploy Subgraph to The Graph - runs-on: ubuntu-latest - needs: [build-and-test, integration-test-mainnet] - # Deploy on: push to main (merge) or manual trigger - if: | - (github.event_name == 'push' && github.ref == 'refs/heads/main') || - github.event.inputs.deploy_subgraph == 'true' - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - targets: wasm32-unknown-unknown - - - name: Cache Cargo dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/bin/ - ~/.cargo/registry/index/ - ~/.cargo/registry/cache/ - ~/.cargo/git/db/ - tron/target/ - key: ${{ runner.os }}-cargo-${{ hashFiles('tron/Cargo.toml') }} - restore-keys: | - ${{ runner.os }}-cargo- - - - name: Install Substreams CLI - run: | - curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz - sudo mv substreams /usr/local/bin/ - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install Graph CLI - run: npm install -g @graphprotocol/graph-cli - - - name: Build WASM module - working-directory: tron - run: make build - - - name: Package Substreams - working-directory: tron - run: make package - - - name: Build Subgraph - working-directory: tron - run: | - echo "Building subgraph..." - graph build - - - name: Deploy to Subgraph Studio - working-directory: tron - env: - SUBGRAPH_DEPLOY_KEY: ${{ secrets.SUBGRAPH_DEPLOY_KEY }} - run: | - echo "Deploying subgraph to The Graph Studio..." - - # Authenticate with deploy key - graph auth --studio "$SUBGRAPH_DEPLOY_KEY" - - # Get version from Cargo.toml - VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') - - # Deploy to studio (follows Request Network naming: request-payments-{network}) - graph deploy --studio request-payments-tron \ - --version-label "v${VERSION}" \ - --skip-validation - - echo "" - echo "==============================================" - echo "✅ Subgraph Deployed to The Graph Studio" - echo "==============================================" - echo "" - echo "Subgraph: request-payments-tron" - echo "Version: v${VERSION}" - echo "" - echo "Next steps:" - echo " 1. Visit https://thegraph.com/studio/" - echo " 2. Verify the subgraph is syncing" - echo " 3. When ready, publish to The Graph Network" - echo "==============================================" diff --git a/README.md b/README.md index 3b9937f..ebe8b4e 100644 --- a/README.md +++ b/README.md @@ -45,9 +45,8 @@ payments-substream/ │ │ └── request/tron/v1/ │ │ └── payments.proto # Payment message definitions │ ├── schema.sql # PostgreSQL schema for SQL sink -│ ├── schema.graphql # GraphQL schema for The Graph +│ ├── schema.graphql # GraphQL schema (for future use) │ ├── substreams.yaml # Substream manifest -│ ├── subgraph.yaml # The Graph subgraph manifest │ ├── Cargo.toml # Rust dependencies │ └── Makefile # Build commands ├── docker-compose.yml # Local development setup @@ -252,101 +251,6 @@ docker run -d \ payments-sink ``` -### Deploy to The Graph Network (Decentralized) - -Deploy as a Substreams-powered subgraph to The Graph's decentralized network. Indexers worldwide will host and serve your data - no infrastructure to maintain. - -#### Prerequisites - -```bash -# Install The Graph CLI -npm install -g @graphprotocol/graph-cli - -# ETH on Arbitrum (for publishing to The Graph Network) -``` - -#### 1. Build the Substream Package - -```bash -cd tron - -# Build and package -make build -make package -``` - -#### 2. Build the Subgraph - -```bash -cd tron - -# Generate code from schema -graph codegen - -# Build the subgraph -graph build -``` - -#### 3. Deploy to Subgraph Studio (Testing) - -```bash -# Authenticate with Subgraph Studio -graph auth --studio - -# Deploy to Studio for testing -graph deploy --studio request-payments-tron -``` - -#### 4. Publish to The Graph Network (Production) - -```bash -# Publish to decentralized network -graph publish -``` - -This opens a browser window where you: -1. Fill in subgraph metadata (name, description) -2. Select "The Graph Network" as destination -3. Sign the transaction with your wallet (requires ETH on Arbitrum) - -After publishing, indexers will start indexing your subgraph. - -#### 5. Query the Subgraph - -Once indexed, query via The Graph Gateway: - -```graphql -{ - payments( - where: { reference: "0xabc123..." } - orderBy: block - orderDirection: desc - ) { - id - chain - txHash - amount - from - to - tokenAddress - feeAmount - timestamp - } -} -``` - -Gateway URL: -``` -https://gateway.thegraph.com/api/[api-key]/subgraphs/id/[subgraph-id] -``` - -#### Benefits of The Graph Network - -- **Decentralized**: No single point of failure -- **No infrastructure**: Indexers run the nodes -- **100x faster**: Substreams-powered indexing -- **SDK compatible**: Request Network SDK already supports TheGraph - ## Multi-Chain Support The payments table includes a `chain` field to support multiple networks: diff --git a/tron/Cargo.lock b/tron/Cargo.lock index d761415..6f80cd4 100644 --- a/tron/Cargo.lock +++ b/tron/Cargo.lock @@ -23,12 +23,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "bigdecimal" version = "0.3.1" @@ -493,7 +487,6 @@ dependencies = [ "sha2", "substreams", "substreams-database-change", - "substreams-entity-change", ] [[package]] @@ -567,18 +560,6 @@ dependencies = [ "substreams", ] -[[package]] -name = "substreams-entity-change" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c7fca123abff659d15ed30da5b605fa954a29e912c94260c488d0d18f9107d" -dependencies = [ - "base64", - "prost", - "prost-types", - "substreams", -] - [[package]] name = "substreams-macro" version = "0.5.22" diff --git a/tron/Cargo.toml b/tron/Cargo.toml index 0e678ea..4b89e20 100644 --- a/tron/Cargo.toml +++ b/tron/Cargo.toml @@ -13,7 +13,6 @@ crate-type = ["cdylib"] [dependencies] substreams = "0.5" substreams-database-change = "1.3" -substreams-entity-change = "1.3" prost = "0.11" prost-types = "0.11" hex = "0.4" diff --git a/tron/request-network-tron-v0.1.0.spkg b/tron/request-network-tron-v0.1.0.spkg index 7a5f7ae0e6b267ba673db4bf86db7a16ab91afb9..3eb3ed505e726d00ac36ebc71fabe6779fc5e932 100644 GIT binary patch delta 54278 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 delta 83215 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 TwNRwydLa$MwG2K0|{-rrKz4+79?dA4xo(GkH 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 N&FdQSrL`jKe*ta0Qkeh% diff --git a/tron/src/lib.rs b/tron/src/lib.rs index 1d5eeac..93ad0fc 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -11,8 +11,6 @@ use pb::request::tron::v1::{Payment, Payments}; use pb::sf::tron::r#type::v1::{Block, Transaction}; use substreams::log; use substreams_database_change::pb::database::{table_change::Operation, DatabaseChanges}; -use substreams_entity_change::pb::entity::EntityChanges; -use substreams_entity_change::tables::Tables; /// TransferWithReferenceAndFee event signature (keccak256 hash of event signature) /// Event: TransferWithReferenceAndFee(address,address,uint256,bytes indexed,uint256,address) @@ -129,33 +127,6 @@ fn db_out(payments: Payments) -> Result Result { - let mut tables = Tables::new(); - - for payment in payments.payments { - // Create unique ID: chain-txHash-paymentReference - let id = format!("{}-{}-{}", payment.chain, payment.tx_hash, payment.payment_reference); - - tables - .create_row("Payment", &id) - .set("chain", &payment.chain) - .set("tokenAddress", &payment.token_address) - .set("to", &payment.to) - .set("amount", payment.amount.parse::().unwrap_or(0)) - .set("reference", hex::decode(&payment.payment_reference).unwrap_or_default()) - .set("feeAmount", payment.fee_amount.parse::().unwrap_or(0)) - .set("feeAddress", &payment.fee_address) - .set("from", &payment.from) - .set("block", payment.block as i32) - .set("timestamp", payment.timestamp as i32) - .set("txHash", &payment.tx_hash) - .set("contractAddress", &payment.contract_address); - } - - Ok(tables.to_entity_changes()) -} /// Parses a TransferWithReferenceAndFee event from a log entry fn parse_transfer_with_reference_and_fee( diff --git a/tron/subgraph.yaml b/tron/subgraph.yaml deleted file mode 100644 index e0d092b..0000000 --- a/tron/subgraph.yaml +++ /dev/null @@ -1,21 +0,0 @@ -specVersion: 1.0.0 -description: Request Network Payments on TRON -repository: https://github.com/RequestNetwork/payments-substream - -indexerHints: - prune: auto - -schema: - file: ./schema.graphql - -dataSources: - - kind: substreams - name: RequestPayments - network: tron - source: - package: - moduleName: graph_out - file: ./request-network-tron-v0.1.0.spkg - mapping: - apiVersion: 0.0.7 - kind: substreams/graph-entities diff --git a/tron/substreams.yaml b/tron/substreams.yaml index 32527b1..5cd9c56 100644 --- a/tron/substreams.yaml +++ b/tron/substreams.yaml @@ -12,7 +12,6 @@ imports: tron: https://spkg.io/streamingfast/tron-foundational-v0.1.2.spkg sql: https://github.com/streamingfast/substreams-sink-sql/releases/download/protodefs-v1.0.3/substreams-sink-sql-protodefs-v1.0.3.spkg database_change: https://github.com/streamingfast/substreams-sink-database-changes/releases/download/v1.2.1/substreams-database-change-v1.2.1.spkg - entity_change: https://github.com/streamingfast/substreams-sink-entity-changes/releases/download/v1.3.2/substreams-sink-entity-changes-v1.3.2.spkg protobuf: files: @@ -53,17 +52,6 @@ modules: doc: | Converts payment events to database changes for SQL sink. - - name: graph_out - kind: map - initialBlock: 79216121 - inputs: - - map: map_erc20_fee_proxy_payments - output: - type: proto:sf.substreams.sink.entity.v1.EntityChanges - doc: | - Converts payment events to entity changes for The Graph subgraph sink. - Deploy as a Substreams-powered subgraph on The Graph Network. - network: tron sink: From 4dba19777592a64c64fcef9f760a9a507c413f4e Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Thu, 5 Feb 2026 07:01:59 -0300 Subject: [PATCH 21/29] Add 0x prefix to payment_reference and document Hasura integration - Add 0x prefix to payment_reference to match SDK expectations - Add Hasura GraphQL API documentation to README - Update substream package with payment_reference fix --- README.md | 67 ++++++++++++++++++++++++++ tron/request-network-tron-v0.1.0.spkg | Bin 653113 -> 653191 bytes tron/src/lib.rs | 5 +- 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ebe8b4e..78d80c2 100644 --- a/README.md +++ b/README.md @@ -251,6 +251,73 @@ docker run -d \ payments-sink ``` +## GraphQL API (Hasura) + +The PostgreSQL database is exposed via Hasura, providing a GraphQL API for the Request Network SDK to query payments. + +### Architecture + +``` +┌─────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ +│ TRON │────▶│ Substream │────▶│ PostgreSQL │────▶│ Hasura │ +│ Blockchain │ │ Sink │ │ (payments) │ │ GraphQL │ +└─────────────┘ └──────────────┘ └──────────────┘ └──────┬───────┘ + │ + ▼ + ┌──────────────┐ + │ Request SDK │ + │ (payment │ + │ detection) │ + └──────────────┘ +``` + +### GraphQL Endpoint + +- **Staging**: `https://graphql.stage.request.network/v1/graphql` +- **Production**: `https://graphql.request.network/v1/graphql` + +### Example Query + +```graphql +query GetPayments($reference: String!, $chain: String) { + payments( + where: { + payment_reference: { _eq: $reference } + chain: { _eq: $chain } + } + order_by: { block_number: asc } + ) { + id + chain + tx_hash + block_number + timestamp + token_address + from_address + to_address + amount + fee_amount + fee_address + payment_reference + contract_address + } +} +``` + +### Query by Payment Reference + +```bash +curl -X POST https://graphql.stage.request.network/v1/graphql \ + -H "Content-Type: application/json" \ + -d '{ + "query": "query { payments(where: { payment_reference: { _eq: \"0xabc123...\" } }) { tx_hash amount chain } }" + }' +``` + +### SDK Integration + +The Request Network SDK uses a custom info retriever to query the Hasura endpoint for TRON payments. See the `@requestnetwork/payment-detection` package for implementation details. + ## Multi-Chain Support The payments table includes a `chain` field to support multiple networks: diff --git a/tron/request-network-tron-v0.1.0.spkg b/tron/request-network-tron-v0.1.0.spkg index 3eb3ed505e726d00ac36ebc71fabe6779fc5e932..04bf9d5c6ae6e036739bfc62b8d24de1cf2a0683 100644 GIT binary patch delta 14429 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 U7Y)UZ5`yAD2{meVamKFwUt^=F?f?J) delta 14367 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 F{|Dj;fu8^X diff --git a/tron/src/lib.rs b/tron/src/lib.rs index 93ad0fc..bb6ea69 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -56,6 +56,7 @@ fn map_erc20_fee_proxy_payments(params: String, block: Block) -> Result Date: Thu, 5 Feb 2026 07:09:35 -0300 Subject: [PATCH 22/29] Add TRON-native resource fields (energy_used, energy_fee, net_fee) - Add energy_used, energy_fee, and net_fee fields to Payment proto - Extract TRON resource info from transaction receipt - Update SQL schema with new columns - Regenerate protobuf bindings and spkg --- tron/proto/request/tron/v1/payments.proto | 9 ++++++ tron/request-network-tron-v0.1.0.spkg | Bin 653191 -> 655610 bytes tron/schema.sql | 5 +++- tron/src/lib.rs | 32 +++++++++++++++++++++- tron/src/pb/.last_generated_hash | 2 +- tron/src/pb/request.tron.v1.rs | 9 ++++++ 6 files changed, 54 insertions(+), 3 deletions(-) diff --git a/tron/proto/request/tron/v1/payments.proto b/tron/proto/request/tron/v1/payments.proto index aa6055b..fbf2485 100644 --- a/tron/proto/request/tron/v1/payments.proto +++ b/tron/proto/request/tron/v1/payments.proto @@ -39,6 +39,15 @@ message Payment { // The blockchain network identifier (e.g., "tron", "ethereum", "polygon") string chain = 12; + + // Energy used (TRON's equivalent of gas) + string energy_used = 13; + + // Energy fee paid in SUN (TRON's smallest unit) + string energy_fee = 14; + + // Network/Bandwidth fee paid in SUN + string net_fee = 15; } // Collection of payment events diff --git a/tron/request-network-tron-v0.1.0.spkg b/tron/request-network-tron-v0.1.0.spkg index 04bf9d5c6ae6e036739bfc62b8d24de1cf2a0683..58da1b35bbe9519f7cd36bb8e9ade07df25f9fbd 100644 GIT binary patch delta 24651 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 delta 22390 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 Result (String, String, String) { + // Get energy usage from transaction directly (available in sf.tron.type.v1.Transaction) + let tx_energy_used = transaction.energy_used; + + // Try to get receipt info from transaction.info for more detailed data + let (energy_usage_total, energy_fee, net_fee) = transaction + .info + .as_ref() + .and_then(|info| info.receipt.as_ref()) + .map(|receipt| (receipt.energy_usage_total, receipt.energy_fee, receipt.net_fee)) + .unwrap_or((tx_energy_used, 0, 0)); + + ( + energy_usage_total.to_string(), + energy_fee.to_string(), + net_fee.to_string(), + ) +} + /// Parses a TransferWithReferenceAndFee event from a log entry fn parse_transfer_with_reference_and_fee( log_entry: &Log, @@ -181,6 +205,9 @@ fn parse_transfer_with_reference_and_fee( .map(|p| extract_owner_address(p)) .unwrap_or_default(); + // Extract TRON resource information (energy and bandwidth) + let (energy_used, energy_fee, net_fee) = extract_resource_info(transaction); + Some(Payment { token_address, to, @@ -194,6 +221,9 @@ fn parse_transfer_with_reference_and_fee( tx_hash: tx_hash.to_string(), contract_address: contract_address.to_string(), chain: chain.to_string(), + energy_used, + energy_fee, + net_fee, }) } diff --git a/tron/src/pb/.last_generated_hash b/tron/src/pb/.last_generated_hash index 410be7d..92e2931 100644 --- a/tron/src/pb/.last_generated_hash +++ b/tron/src/pb/.last_generated_hash @@ -1 +1 @@ -6f7b96d3c92e6b94d9ce0767761ff37bff6a2746594cc6d00208713c3260b155 \ No newline at end of file +6d367968da883de6895eca0adeab176fb1af788bb0609bf980c80524730864c2 \ No newline at end of file diff --git a/tron/src/pb/request.tron.v1.rs b/tron/src/pb/request.tron.v1.rs index fc3592d..00156c3 100644 --- a/tron/src/pb/request.tron.v1.rs +++ b/tron/src/pb/request.tron.v1.rs @@ -40,6 +40,15 @@ pub struct Payment { /// The blockchain network identifier (e.g., "tron", "ethereum", "polygon") #[prost(string, tag="12")] pub chain: ::prost::alloc::string::String, + /// Energy used (TRON's equivalent of gas) + #[prost(string, tag="13")] + pub energy_used: ::prost::alloc::string::String, + /// Energy fee paid in SUN (TRON's smallest unit) + #[prost(string, tag="14")] + pub energy_fee: ::prost::alloc::string::String, + /// Network/Bandwidth fee paid in SUN + #[prost(string, tag="15")] + pub net_fee: ::prost::alloc::string::String, } /// Collection of payment events #[allow(clippy::derive_partial_eq_without_eq)] From 0904a84c4b4133e521f5dd5345cf0503d8843cee Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Mon, 9 Feb 2026 09:16:35 -0300 Subject: [PATCH 23/29] Fix extract_owner_address to properly decode protobuf TriggerSmartContract The previous implementation sliced raw protobuf bytes (parameter.value[0..21]) which incorrectly included wire-format tag/length bytes. Now uses prost::Message::decode to properly deserialize the Any.value as a TriggerSmartContract message and reads the owner_address field directly. --- tron/src/lib.rs | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/tron/src/lib.rs b/tron/src/lib.rs index 27b1ccd..a07eccc 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -7,8 +7,10 @@ mod pb; use hex; use pb::protocol::transaction_info::Log; +use pb::protocol::TriggerSmartContract; use pb::request::tron::v1::{Payment, Payments}; use pb::sf::tron::r#type::v1::{Block, Transaction}; +use prost::Message; use substreams::log; use substreams_database_change::pb::database::{table_change::Operation, DatabaseChanges}; @@ -270,13 +272,22 @@ fn parse_uint256_from_data(data: &[u8], offset: usize) -> String { } } -/// Extracts the owner address from a contract parameter +/// Extracts the owner address from a contract parameter by decoding the +/// protobuf Any.value as a TriggerSmartContract message. fn extract_owner_address(parameter: &prost_types::Any) -> String { - // The owner_address is typically at the beginning of the parameter value - if parameter.value.len() >= 21 { - base58_encode(¶meter.value[0..21]) - } else { - String::new() + match TriggerSmartContract::decode(parameter.value.as_slice()) { + Ok(contract) => { + if contract.owner_address.is_empty() { + log::info!("TriggerSmartContract owner_address is empty"); + String::new() + } else { + base58_encode(&contract.owner_address) + } + } + Err(e) => { + log::info!("Failed to decode TriggerSmartContract: {}", e); + String::new() + } } } From b96459bc0dce9d4184e3f05f76ae72873585caaf Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Mon, 9 Feb 2026 09:22:35 -0300 Subject: [PATCH 24/29] Use multi-stage Docker build to compile .spkg from source Remove the committed .spkg binary artifact and build it during docker build instead. This ensures the deployed package always matches the source code and avoids tracking a 636KB binary in git. --- .gitignore | 3 +-- Dockerfile.sink | 27 +++++++++++++++++++++++--- tron/request-network-tron-v0.1.0.spkg | Bin 655610 -> 0 bytes 3 files changed, 25 insertions(+), 5 deletions(-) delete mode 100644 tron/request-network-tron-v0.1.0.spkg diff --git a/.gitignore b/.gitignore index 50f31e9..968dc4a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,8 @@ # Rust build artifacts target/ -# Substreams packages (built during CI) - except production package +# Substreams packages (built during Docker/CI) *.spkg -!tron/*.spkg # IDE .idea/ diff --git a/Dockerfile.sink b/Dockerfile.sink index 8b232be..4261808 100644 --- a/Dockerfile.sink +++ b/Dockerfile.sink @@ -1,4 +1,25 @@ -# Substreams SQL Sink for TRON Payments +# Stage 1: Build the Substreams package from source +FROM rust:slim AS builder + +RUN apt-get update && apt-get install -y \ + curl \ + && rm -rf /var/lib/apt/lists/* + +# Install Substreams CLI +RUN curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz -C /usr/local/bin + +# Add WASM target +RUN rustup target add wasm32-unknown-unknown + +# Copy source code +WORKDIR /build/tron +COPY tron/ . + +# Build WASM module and package +RUN cargo build --target wasm32-unknown-unknown --release && \ + substreams pack ./substreams.yaml + +# Stage 2: Runtime image FROM ubuntu:22.04 # Install dependencies @@ -15,8 +36,8 @@ RUN ARCH=$(echo ${TARGETARCH:-amd64} | sed 's/amd64/x86_64/' | sed 's/arm64/arm6 rm /tmp/sink.tar.gz && \ chmod +x /usr/local/bin/substreams-sink-sql -# Copy the substreams package and schema -COPY tron/request-network-tron-v0.1.0.spkg /app/ +# Copy the built .spkg from builder stage and schema +COPY --from=builder /build/tron/request-network-tron-v0.1.0.spkg /app/ COPY tron/schema.sql /app/ WORKDIR /app diff --git a/tron/request-network-tron-v0.1.0.spkg b/tron/request-network-tron-v0.1.0.spkg deleted file mode 100644 index 58da1b35bbe9519f7cd36bb8e9ade07df25f9fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655610 zcmeFadvK&#mKWBNO0O%GD(kD4I{Q`qb~p?z!eK4w&=RX1jK++T7o7 zHfCDwX15uP$v@TR-pg;B$*9(89<-~qh30lGIBUk|=T;W)EG=%_EIbhyGg4Y9MK?Yw z3|Cof4(;gA zX_kH=EBvwePnxmrVXIa?XzxuATpf66JR0TqW_vHVXol}s_6};(gGir@^ke?M zxqt!AWSW~FLt|@%)7rqtuh`7p=3b?-JA(-)BVyy7Yxf$>2Mvy{we{`6p&M)SKR@{F z4H^54G=c%n+^OyDeZX=XtP)T2TO%9*7H6^EsW$J|+S%m^*UVU{vE6Fc8{J^qj8?X{ z+qF(dW;YqR&mb^oTFrJ>CN~_(@8Gf-X<$K@wx@?=%JwV#i2*aQhQ(M$JC)s9@L6+a zr`_C_CMRYC9RV<7#`POXeh`|$Zc}>5FNIu=5R>TCn+@r7IC7uC(`LL|->-GLmHpQA z84PGBN)p0d45@kgAz|9J>RlZarp@2!jyUsFM{P58z24YfsnvJyZUN~#C!T&0xK(NI z*17vd?-)bl2~^F|A4)Q|e*^V)qeU!eleA*?wl$;zA{m>O*uFCj_4}=V}jI^>(F;9bD#q zwOe&6N!~yz2VMnD2PCA>uxvA4RE$| zW@2$^eQs?nTD@Ib1bdq_WAWD@zZT|J7D~5}Hx&NyLD1oc)w^H;GW(kS?Jb*2!mAdShCF zd8KCgyhWPv_nL?j?b`k6NrB^;7Jdt{ ztUc^bpVhPmeuvlGrh8B*(+NgJR?b>#EyS7)`g=n%})*i|h zEae?A`>jf2`$2uXdw2Tt(!|TI+M=ta-CAyWz1g03HG;@|_JnP}ENzEz>Hcj(dT8!} z$wQznx0(-X?dch*JBd_E*=tM--ZaK5aSbJog4j6AYDI`SvOwi#3u0jXo3-ufub}o= zG$qNaE;TDID#!E190(eF04n61X3Lj8mAwU;w`#Lu0dsG!`9K66ayLlX6_)@6aP2*S z8e+R$d7y$Snc7ff+q+}4q&*OVDo)Fe#ql>q`Ff{}78*QqPs!BA>mAf%0{0%WsaC0X zyS3W%IVmtv?<}~a;0MfEizc0eR%`EYx^N6WPHORWDIL6Q&MScHoz4MJPPX`YbTb(# z9?iiSxMHCON&9nJY_+x#ha~~5Ai?-c&&G*-IDd0kpJywn^q_1m=QWM_zAKHt+&kav*+$$%FZ48z8G@5r zxI&Qc9PHbp*d>|fdCgkT96|6mja?&Ptd^JYb$Q6UER`;$DsePY5xbybSqzRJR|KcV zZ3@JA;2i|s&@sCN>NU8jZ&o^Yr=OKc#NWYtrl3a=Aof1?8ueGtNlzD( zp4Q^L=$w>J5`qO2STa%enz(vI6X$JtuaP!8B+oR zJPV~}F`0k`(F|Aio3-1sQCv3oiZKU`xaJE|GlxfSHsZQo`QWyBDP~5NE#98(!x&!# zOopNt(|($jBU|eCi0}HJW^pf-z%$sMG^2U^zMA>gyk9?Njc|;uoq;2Cjm>A=Gwu(b# zzeN?|Ki6lM^bGNqc_H4hd4jKnfNE5pi;L=}>S+z<;7+&MhNxZMgWSkNf$(OVc#CON z54l1rm8*7T(kAM9yl0-apmW-{va2MFO(pp!wT#o>t!v-H+;G0tv8NcA3aACm@p#yp z`Aj^wd_rddp>pfChe`p}?r@Q`c>k-}bBclQ4rM z4CGWz;-EqHM7CA7ZR?hpa>;YjBZUl?QuYb7qI=--N>p--bQ8X5hCYDuxW8!)(|JHM zOgtU^3jf%kIUfVxfr0u2>~b}xLC3(~Fq=BV*cJ(`v2NeX2^&itP+vDTM~+fHG12XNAyrS2FRa22aL~Og<|HU_My*sP zTyiwM`|-Jo<#cFldY?1ihI;))$gKk}@;NPfz`U zg@T03K87Rw${PUJW<1IaK+JA;+qKSJoU3Ewrc0o10XCLeqe~??VLTj-X#&LOXN`$Z zV6>F*Z0DtbDV>3Fqhl2rXOqbQYa_`DzhtJ;(+S4S@G4d7(8$8%Vb80ua8Ok%B4c4N z{Heh>=LqbF9VfP3+5Ma((8Sz2*uqGhiCMoWX3zvrRD>oAKXD#AD@sY2p|%gIP!uSx zr4yleS8e7pWN?&Gyz-N9+L%&eKEKzj-dj1?7ZcJ@lu2cOT5f%>*<~^11nESMzutMj zxz!OR{8(ha!rx?usl4hO0hlj9=?vA1Xtw~EJk{423TQJZ+^9XUg@^JBqkt5Ko_uWM z!_|Xs>!6$1v{V*RuLa_a0$L6;x+lDp@Mj0i=*EXj4Yu$_Ge+&lcBNafo6b|6+CnoZ z5sl){B1#dNJN4a01qK8)|G{(@ClpI&2n9uN`VcAx)nK3L;y2UoHxC@0l;8a@gtk~W z$xiT!8AUye*4Y6(Cj?gtb|Wnk{?ed1=jd%ztJdnR?ny*99AhmT+<~q}CH8Smxn2{+ zIEd74y-~KMROnDzd|tDZrm5tS2o6#Z#v*9p?cTS7gB09gdRo1xsGq18ub5Guj5#dD z_z`?^ObccNMCD+wYwe_8NOu25yVB_J_y^Y;00U)W*BkweY*n&EJEK;uQQ7O#uEnA1 zhOpAlnr6vh!@mHJAy0e0Sfhp@9nL_ zKIaT%LOozl$fgG`nR85=KRAqwDtpT&hyT;Gnebo|e5nWRJ(G}E@Cejb^GkyI(6|h> zp}|%?w|6@Bo3p@Y!Q#I)FdIl5eh+>xE2IP#1P(KaDbY!dVjTHJKzXZHM0)Pg>%5Ve`FY zx%qpv`7ZG81zUt#vl@EE{z-(?FRbP;?CGjB`MP%g+5Hvmym{=JMvmVI!IUdA}k> zT@N+^SmVX@S~nKk;>leAADCJ=z%gt;PP@plY1ixf0BD@?ESuQ?-QBIV(>c%4KjTI% zDSB0=E-Qq7yKrEOTX~)Xb*H<`3_tJZEj7Mgt0qmp3|=?w>N$|dt$qPoo~K-{x5wiG zufRa?q(WRdgB)Dr>{qdUp0n^tHcSRfX1FC5_G*>(-275p^^1ZaGS~Swd^~tmjx%55 zsMqh-YkS)@SaHAy{N40At19&-iA|%zmpEe0T%h4(Pl$Qk@*Aw1LfPB1apsq0wrQmG zvfl(jdDg*D&sPpl<0jtX$laL;A98$Hhh~zphC8-xnQ1kIpw-+o^qwp?B1oVVc&lW>^AL_2n4z~~uENFrLPjpMS* z_g0;v7S8|TbpgSK1_{qi={++kIVuKqV1b~lpYKVdWujCCh$5HcS=+O>h22v!>5DE` zcZ~&F+e}wwiqu!(H%hWgv{^M*UDlSfnZ+fyzp^=}*3*X1syUS> z&h^cO()v1>KYm}ITcSVRK=^kD;ZPB8EXuDusVT)VbY-r||Kymd%#3_X~g zMY5cf=a~rd!vtHdfm5*_ZzfzR9F%D}P0HM*wTvP+Btut-hfW?r1((HB)Se~06gZs> zQ}4rrHMfhW=!w-qk(S`GQBJ4SnL=g8-@!XH)+t|@o{$zi-w$u=#)5Jbm*-aQRNFWe zcB~JZ`{c=%T4A`J!UvtC*LMvE?;8i3uo`J4i(^O-rXKzigB3|A%2H#eNxdGZkOG?O zBFl30XelfQ`V3hUz;(-t;4mn7Nz`Y^Cza7~!;5|6GpQ`+0HSP0jvf%cFE&=OjW=wnn&Q zCcQG90Qcp*MxDmeSE?pmMyaCVzaKOc^W@Pt;f4ywyCaoUUct1I>I=sCj=1kEd zR)8o;*R*w)Ui@8FLP)VbJrpIpkleic5XbOZ)NHE$7Q{A55rwl@Fht?3sKR?AuxW@i z0OW!+K^CV*TKh!@Iy)lD>#A`aw0@P2jgdo?amWGW?U%|{*ZOXiH|8pq6;^^aB-^u#c? zcza`My#zxS3}Dww8w)pK=Q=dw3B=z>X<vM z8_|at2fCiWwYu;D4mp2d&DMB z<5t&sxqH}XK&R(!G`>P{v(kb89;;44MGl2`x5?|Qk)(^Gf-MvN#2GVr6I!yStA5hE zupU7ou6qP2MQHVSthpP!+D)z?{@2*TOxC~7Sv|KARDIMQR zs!s4#GeIKen&2tn_$K@+zO+HQ@7+gE*$_$heH$V)vSYlNOpF)9E9~L!TMWGLO7C>t zI@>EwQ}FfnQYj_yyl~szHddPNCp{`<`R9Y?LXPmBOHSb}ScTJh&mFe2n(Elst0oYU z0eaevX3Xl8jh;_(T=B0NsehZ-)hUwzM<}#-TF0F6%`9Lbag`|D0tXM3TurR*kn;GO ztI)1dA8sw}V^RD~yEE>1wJXBU$0PkH-Y{oVz3@QInM$`-P)ibs9$melD13^S@%1zO zBLn6cr{~>vXH92HXl&OW3Ti1|j|Exl6#^A1y=rV}N0d`(BF{AA5<>tV<(W7otq4$y zVzNoYzX`~!0JjKxo-?;>V=B$=0Evt0$wp`rOLT_nN zk7BWUbBgd+?N@zmHSF^ zhN6DibO&hEYTKO4b!=F61g3I-_ZE!8jq0JO83!USg^mk^%|`Qjty{gz z`ww!lXgJCyLqB#oQxYH$$0k)!_Q`eiWc{MrHx9rX0Y!F1W6^LV^?GxOI|mIN)nS7K zO-)AWM2>%p6m1DNz1mf2me-Cj{!B9QC|-GQ)u}%nkMgpJNA-@np-t0z1Uz!zq@;+0 z0>2~LgNAYapC82J2I#R;Mp}J_qa=Z6ntDS>m6~|$7w53es4DS7cI5I3=8#FoIs6hP zTiHv*NtG4lBFlJ`pUD-#{sJfMsYVOZc+@Ai`0WuK1XE-!E6nJ2_JtWafzP&_v_qM5 z9FZI16z1=N7}vO7YNi~HycBL7nKh2lrAB3IPyIb`Q!ky$a>`st?_}MTv1C#ST+2D) zg33^`$z-6N8X~T^_PAw-qf{DO+pjzXP$8Qe~34R2_J$EVY(1<#k`@XOhTl zN#GMQEDIx5B=n>wWtVHzXb22Q0fuq0-v&={>4cW1;r6jcOrb~haFj_U0&j1*#p5M< zAaI-jHNZs#M@k$`;L{a>vWSIZILgf<#CW3+iw&s3paE}d?)xzim~=AXkJd@G&}h9W z`+XovrAe8}!=w!NI?H%zIBQNr)N4Kv{|XFobq75|M6ANjqSlhW`6LojcW%3aJE8Y+ zXOPz{WcLq6d0EB3Hp+YJF=yuv>B6D5vaQ&`9WosGN$g`A`L{r|HoTI0Jj=@>A*!|x zv_T5vIEJ`y>5n21kN}z*;dfvGA_Qp?ciav<(rp3t>GM)3!J;);NbZb*$bGWyuUGC@ z96oSEj7NSFNm{cbURm4*U`+Z&eEa(Seeu$>{Sxir8IVpTkw*$WIczZ^`%silWNSDa z<4%2N!48yoJ^=6LR4PQIU|+znSnE_{v2RiiC9fvuYwmF7&UouKqy4*zQBFfa-CRyD zT-?Q3>B74in%l)eFEH_e0H<9+8}k=>DcOSK|PYLpADM+4{sE+y!^vT-Jk* zQbs-9yHDm|!$>7PQn*iBM^J%y0#rZ~{4D-M1d8Y#f4@PIBMVk2{U3ARq%Zs}KHv73 zkt7IHm1sL07Nkm$3mpGYM|io2IEubW0{6y)O1&$YL|=fweG~K11hyGAzXq8BFG^Cv zzYSl^}mdFAXCU?v;}u?~Fa6MoD$@JVM-pQjnbpp$C?{EDEjJ z8dlb&2GMzARM$KRxjRk^38%wIo>e|5l&Ih0F^kUb!#n3U&k->+3v zNMoY|QT)wK&}`I}>x}~hKcN)I#s{KwB3bVawRj)v+C-dz7{-$vNUhJ(X0MBcYAUfFgKy)&i zl&V7zp$!j2Jvuahm~LZ4=}Ne%GRo^#RECiFOw4}%Xgso-6PcQ;S^URCh-;(>M#}yT zPVUPU`Dp(jtm$$>Ei20 z&)rUudr2`vpkSLQ{(}K?HkFer3|jDgEO78 z*5RC^UkTae1fd2JvRnMlkeTohho#`e^7h+;B`75yF7*w;0-O4VO?~qXA;+5f<{Ok` z5_1gUP4QH1<(o@DOI1}}~$w*Z4t&qjPIbeoR9E4+R zzq4EJ(i%y6lX6_}+g|SMijjU4#rXrF8OQ0Zs#V#3%DvIAx`<*@cZ?OJ@+C8Jzm7|x zdV*oRQhcoty0uobs$RE9l@HPYR&@3|{zhczQ9B~q*>5kE?vxj9&aJ>{S#JGCrLS$m zKU%|f!wZ`K&qXD;P%{du{TQNCHvFTPmo^G#;IuvF2Aa4rh-H60x&?oRMN{CUG`tne zcJ$hIBO~OT_b!eJzGspIe~lC1Ix&Ric$Vn2t;rK`*FrAgNjwoj5oAaN*}J37B=9HzO-0c*;v~62%h8U5k4buF^|)X zR7bTk9mnBA4&QMs^X57lj7oFsaCt9qk)qOiX`^tS6Qv`Jc#9VT0!bWT^!oyrnG@gm zuy9c$yf2p3N#l~Z<*!B`06v#lZFA+;(#i*Om}B7z=*Y#?tl{gvPH+2ZPCAtX)LU99 zJjn>49B`Q3#+C)qy6uJF>PT`^%0#v-jHfC0M6gCmFTHgkJi7yP z#-Z_#WE>h3_cD@$Gcc%$S0FT=lii1Kn6B5#?R*cz99KY!DZQ?MaJ*8-L;Anbpdi?I za*KmwNv5t!za)XqnmFxssqlxJy1kXo@n)|eh)^f_1Pp>IXlcYEK0}Wk(VURSW>FLj zr3G6C%zU^8AVn$0Ky@WCIe9FBgOUB@3fo)lP^E5LjfcJ9zljtE^0Ec&wRf@7LID5ZQ>n-2sZKW#vXRm|0n_6EQL~ z-tW+?VN%bHxwX}Gn=rx~o+QrmOW-=Zev~Rdif#OKD*3~;CA|-28yI7YU{K%^<@wEZ zGB(g`&|}L3$T>q}rzlk8x1 z<0jhIIb58d|M;tYUm8K+^BRo*wO556r`!OKKV z_cTY(+atdS3H*9}uSO$>mc;#JNR?+0x_}ZTk>tgmoBHV*!haAh2sK{*O=Ca$zy0E` z4itVX{}%Uyd-@%GX@(Dpc;mVM8dJ)wgxFE8^D?fNBK8pu<5W2pU(KnN?i-^mx#Hm` z!{$OdTZTs31-H$#nFPC&S0@-Tm%=afcJ`C!s_h!~-L_~1$X8$?NKyijQ3NpAt5-4Z zxEOVzFtTdKVw^5s;zbLPS!OHpo$zH()SUQzjs6?)(@vA+cPZmnSK4EK#q&a60 z6y#uEThLGsy^B{uiEJxltY(`S?ZDcBXw^6ya`ivgGlX@`&$i*}L7y@nFCmVRY~(XN zja=sy@N5%FJ?MHz8R`o(Rb21M+A|N`%y6k0@e5@TU`2nxKdYcuvk{MOyM}weppU9r zdakE|b$f?fO@GmpyVGsG=fDf#-O{Z*6zYouzJ5U=I9h|NFZvZLH=lsW4y~m5kt-Pf zHH7TT%r+M--!;QKgp9D$6T?mGqyew1cY46jnF;v#GDbATJS$fnkB4~3g_U~IP!ajG zX!s!?^RQ%~3=t07RPp&*53Dm_or&o|BzMB``iE^tzG;Aij=Q;oEm>tCnSAtIWsywF zh`z6>)jiz8a2O|wl8M<~>{{0C+=HQ;yrarJ1`zAa^qT3+u``2^A=PwZ5Tm?LhC6Wy z8g7gv3D@&oB5kk5Z72IcghMR6V zJMZF~=4@&LC+#}?`)ACh+_r-c88J`Hv3Ti$D63Rp`j?gJ^djA+Us^{PT}U;diNQx^ zg7|@8G_ub%M%L`fraZHl)SMss*1%xow*`|0ZstmWs?PK*fX@5)S^9BZ3xK;J&aEvR z?Bo5OTDuN=f)0x7Fg5#DPvu-#&D{2?(mY#x2d8BSJ0hIuFjLJJ{}Vj5<;?_Ajk|uM zsN&8?yn1|qM@)ppDlZ*l0ufG*4N6AHW91$REl>_AMJFV_+ltDX*TRf_zi$10|IFB# z!Y~5Ho$r|nC9B2K0&czQ4R_JAB(p0FygWYkozcRN;=jT0?~Is>dE6(L9w(C~w1?wE zAztO#t8CRYXcmKN^sHbGe}g6zRU)kk&Anc$;aO&C_T`hcK>BLI2)L6%E8KbF8IR-v zIe|N1TqE7vw&B8%=e|iPwre{TD8S0%qbn2)l)@(7rr$2lC`u*~1iSW7SSXzGBx#8$ zym9_@D8C)8k?xrw-M^Vo3!bCsqmT=rERmqRB+~2ab}Pf{g8p3a_0wdnP}vLr%AmbO z#dE+%Yo+qy>L%4b`p_Q}5Sn0)K^OS&AHSDYHop8Ngj#SFHZ|dlU*PpwXv?7YkqXzB zJ}fPw%1Al|Wk#unk}~tFP{hg6K|a?vA}Y(q<2G+ZtD9>$H@G&PUS}dMG5^s%ofINN z@L)9uC25id6>ABHHoP9?r$HGQA#D(mF)!wE$lNXD;R2~c9xg~*SzHMJS6pVv5ms|M zc`tb(kqrIwJ?O@U1hcbD-G(LfI0lyP$wjj%bAeGcauG@5PUut1hNQOFor)j zU@ouco-1<4@PlS#zlO-HPEPI>Mqv0vb_U*&t>uevI@VtC&5ovLq_~uPDYx<5f#Sw% zouMofGs}21E-4}@lgdhDNGEKQjMDyyDpKIB1gOqbRPNpwh5R z!i{!Ux$Qf{J9yWw7M;`Vb(hN;!iC#j4f2(-xQ1rOHNrnTZYI1_7$aHIIkfCf))W-1 zcj%fPw$aH&DS|oT<{2ccPDca>vWf91VBRXT7F-T)SYD7C`(Rl07SshhIQP-}$Q#*t zmRPn0IHC^Z{AZ*ZuPj1}tCexj0P{u&sO_>SR_UcbHa|E$5IxC)H*C3*6q{>oi>~z@ zb6Hve3<1D0JgyL==AgUtmPA{KAtNIMTu=r#W~%o#Q358@$tF&vd|QSAhpq0gmo#}0 zoZ&LE!ZHr8?+mZQ1hW`TxK`kt#w*mj%^1M+R{%ooHXV2YtZKC^bB2O~>m~0_@t#CH z*z?t@OtxONIL`aDml9z46@~e_^_N*@tD?u&VQ-K0s!n=r9cHV2Mzkyl86u({ALfWl zQ`urO;J#A8d=TIhUjJok$txXs++ysVGu`$<4f@-vUJ00!JUGCgZ*G0Ps)$uaGduN% z(=Q5?&M`yKYE6>)K4rCYx6*Ej4ATM9)}}wBMKztGj3g7WI}hN?Xs0E?480RCph9yd05W2+-20Q!BkKPkd^9Y-p2SdK?Y0^uvV_{2eKb z;_p~t9Dm0PCj9BMW>Ti(79FRzD$h>VW#WY%LB%gUvp`P#&WOtP@aJJoo`yj%?%|j! z3yjD6iPPcM!7hwv+pwX@J)C$@ z&~6|rk{tMxjZ+naM@pd{CHI(`ef4PYDku;mbO0t>QP7&^g()CuwLgCXKjsfty%LD1qGN z2bDIoiMv9lA-Q^4cQhxMgA!XI#^-XIQ22_$|EO-KY=ub6^PyTHKXi1l%7rHa#En^4 zjri&__@Snj*Op2P;E>@PW<+TUS!YaD3QyQi+lDY!=58*}Beuz42yD#kL&lDbN*na@ zfz{PTcYGq9?D+5i*0qq7USHjeWHi5b&=j(pl8!_hj8C~yR)vQR9H{}ey^QOKdx<&H z>BdVfeTXs9kEaYHFFa%hv+X$*%Mgd^*Mt@J)*?KlGRdnerPb?D`!Kw>-w)L;BTz_Q z&ZffpyMYLuquGvWJYK@I$7lfdD=n8cZmupC#`8EJOL&=T?kc$azU~TFL{XP$`6g+nPkdI`OnEk7de&6(e1RN3!P$qT|rZYmhhiq zqr_SmhX!eRkcbfTTwfmaC3*t?#PiE?brSKohZI-OVOFY+IEH(sY5Mn$S$R7x{3p0K zX%D&%us+1X(?Be}BG3Eq@>k@0vJHP~$ec~-elq*4@94f^&f`&q{T6QjjVI~x-8 zocVxxTF*>mTA!bFFeVrl;?giQ_&E26hu|#RYioo=pq?mdPwW+pbL!0SbiW1*EiRDK zq6V!6zzg|$rw#?0%2M38RZhrIwy^pf7F-S_rMPs1uS2Ix ztEU~pnP^U28k&afCfs0ZwpEhk0T?Q~?rxinyM|N| zI29*L!Q%V4ziQ#Y^DiL*C5M=;2Ql?ACJ;!})ZkrXv31F<)xoQSFO5Zb*EqI{hX3p= z{EMyB3}>gG0DS-~@g5RnJ4Abc7Ko&FD#wVB)PnN~YOL7`^Y49YVBnL1GoK6$e0$(* zFa|GaIAAYrO#j%Zd@n8A?_bvMIR87Nzc4Ta(`0m3M&Q~D_IyVk()8SeWIPA4Bk;g8 z|9Kh6hzw*R7+JWrx?Wn8VT=c75CVJ!wsG5K;`8&#fVt9!&k|K}(5?~`07G-zNw-t8 zul3Lc4-}EDDj+G@iu14bfCO&lb}Sg#8seAZD;~`yH-J)H@1caimnd8umXusK!Rb20sNz67*p&msfzv!PCXQZL=CoII0__I$rJ-R&Kz{5f>T6n1{jGH92QHa}|T%1|z&`Z&W9xN`+o?hqoM}yphuLZ%emB zpA0BMTnPfkf(NCZ$K?uAveig&)C9wbBENbk0fb?%R?GFL2h7D99I4t>u{HxOpz=C| ze;{{s?x8$cijvmD=0&x2)|y{}O9T+~6aK~6ur9+g!qHC##y%Ms|MtN70H>Oda8E%; zD{D0sj7!?=7iYgT{VM{mUm1-8J1npH@Q2M=!J&9FL4+64pYUD>qbfN@1;P%Gf43Py z(edTBD$W%k`W9Tgg&~&DAw0P_Mmdd}jRy%DXS2r`9M8DZ&>jwLx&v{-x@|7yZWOwd zI%{iL$B8knF7oz7a_T}$x?^;d7_;mqw2OdbX>_Oe?dHbyx18r~`uK*16z4HP43v8T zp)Jph4d9B*x;d9YT)0(F+w&AoJw2lm2&GUN!^63AQSOq^d^{N5G$z4Fa@hBA{i6)b zTb|qSCJ3FcU?3X6>8Te@(b63g^kNhJdP^&44$HbShYKt>@H_!=CxIOX6r&EBmosyM zU0~dQet_N~zh|ZRa|6LM_!*4Ow6B>ezcLz(F_rd`Vu8Qj z$FI1+Q)B;XG#Fv>ZnHSWe{Ud;mb&`{FO2=`(ZDdVbqMohqlmZSwr1Akw^!(QuGm7n zIq{k;B)?sumq*5a&r0FPSMcwTuM~b_<^7SdUmh)dXEgk`Lng3=ps9|vR3DnLZKw89 zr{1p|LB3qInWUvsO7j!Ntx?B;on7CD*Qr%q9IxZB6>OW*MCD=p{VJyrtb`S8 z6UBcABX+;RK9ZVh#ax8Grrib$p^UR*S5W45%=zkqSJ95CgWJxKF&>h=x|TS_V_Jex zfGVyHoD>HNgZMjGKtL1MPWVS*(?~nA!t}}LD#|T&wO{I4?Q|79d7$N^xMuOcMJxfA zj6HbCM+KJ=7kDuMBW!Pi4lMd+eIv!oI1$f_-`L6EE2Pxn5-JoWD z)5Q~gCb8Y%YLob;t2=PwN1RBN#g}s&)6)=5#LfQ>Z|#cplj0Tchb)05;%z2VX&{uT zze>I5fu4GJB+pes%)a<{@n7S8;v}o@azRyNXGJ5rsA?GgM*N^@hNgN}B8JLh!5vgS zKr+Q0l#4PPi92Y7c#5@sMDDV|4W?#$9bS$a{LH$ojW~?J1S3;(h=@%6$lkHWEP z(p87N@j3`=Ch1EBumSKgSL(GgoVf6O&&sWjFj6mL*2@@#@&1ad@izW@)64wn-^Uv) zsqDAB>_6I@{kE6=GswOGt(=|n^4y1oU&Vi;^FIQAfaZR7_s!VyF=-eFm_*HxK z-)-)}aeAiN-c2r&bRq6^t|eQfwe|0C)EOMQu{QtngT))o=I&l?Mq1)EkEph@hgf(J z*3Ex8VV;w#fbw!!8IfoXYS>ZG&clpk?-lY{M~QMB{=`V$Glw{6^Q{`SlJl(^7|@%1 zAvlgk%<~!^`H@5yh}d2F;OU7`gL!sFT4ig?Jtrx@d0>=l^kRkCOGisvhf!tkFjzrs zAbsCe$_B0h!i0!39{l+6+XkW@ z#kXW(pUcBw_VSs2u)X`x3Y9gCC7nhv0H&-+Ad5Ru1xUa!fmM^6z%WYr?qPhR^# zF5*r1tG&r=ukSq&YeaRIA#l(FLx#qT`)1sNPM0IV&{s}eJ`Z{JcAB#_!@oR```G7+Dl-6~hj9Y1d?ci}VUds; zBSb4u%+s0R1>*;baB$pVrbRj}qgt;iq_4?UFDc1aFphpw^<*>1t`RJz)kadh_6UJU=;XUtPV#O*EN{serb&kMFE1B|5}3K0^L@Q32| z(oc_`tUW;TK;9uOlPJ+^1sgu!QUeSQY#u&+OH9w8F&fTHD)ld{h2YqW8?zs^;CvI})g)1?f-HaK*xn@tCvW^;pEd{gG2;MKCmmYWG3A(YxxkI%gFZSYCtUP5x z)8H}!99HBaBN61no$5)fGhM+2Cqy7iJ-+0lg!Kv+JPf<$>7GejFbS&tpc%WbP;-dp zQKNn}qqq(?hi)%!j>$+r!hbek3hTVzyl9;oA@cE94^6y?@cWSBh+Y==&Ph7Y+M0|b z=m?&Gy=y%n@n)NTQO0fHc9@v21ni*6ae_eYo`923yGLUA&3jn;=8ib8BZz|iL`df+ zI~-n_`(5H!doPMnte%XnNCDCa$xnh?{4GSTjr6s`N1PoDSA2&A)Xz=WN+MHC_Q1fS zbL*a+D1YLdHcXG^s-5K-I51Z=5%^(ed8P_%@F%Yma+42#-%$Tow1H{UI9@fNhv9aF z4BOn#u#(GO{&l`bvb_yU7POlpjH0wYkDLgj`&L@LVa_YieGyDUuN0FlnnjzaAeDSj zFPjTE=!XV8osgU8>3`#f%%JTg<`R)HPWX@Mw^=sd}hl>*JdkWT9N{4_Gq?nC=b6fb|`cerED#e>t3DbUYqY!wbG6@)BP5MfDNaFy^mxWM5n9fSn7 z4fjU#EH3bFKoqu3AaLz@xtL+Up{i)^1m06-aaZyfMbUd>G0xG^hEL4j0VQ{mHdbcd zLHkC#Rh?T~`uNShF+C`pzv?*IHN^BlbsNV6zqUps>vi*|hRr2a#<0M(yWMWfE<5gi zh^ht2cpL7_P2_;354R6^BSxj8i%!{tGBYd?Av4kosxh;ezzO_vFKMtBP*EFx}c52l3fYfsdVU2g+z<{A$#Hl9kjNg1B z;s?{f1qERw4If}Zc;Ez&o{*0+QNDnE2rRh=$6%p~Ot;@)F62@OG{+sw4EKvn+cIRNmHfH!5y)F{KeQ7?(}EL6hl z0NZLD!Lz!S*3h}0@<;w!1WAQ?C0d>NaY|1zs1UdLdPd6e;h9%`uo>gyZ>EuND|A&K zKfh}b(J0pUVb=5GGGS`i)&@SF>(%k?)*6C#*E9=NI)ZhHa=G)a_xsy}XKnz=V_f}{ zgXU=uSG|(GC|k_O>f*6+Yu@<)qBwE=S%=&*Wa=7I9#GSN{ulp72#n|ld1++6(F3DG zqB`%aJvLDN-64B&+6NtnPRSk5vm`zIU*M0iEM?a5zMrVa7OcwjWQS8cm5wclSDyJ~ z8DB3|;yuB{4SmK8vhoG53@*LloYpJc5G)sI-o z--GZ0A-CdIPu-v(t85Z9C?8?jTv*3$vEw{li(niM z4E|8z4JWXXNyAO$it4oH+t`tW+37mLIcm$*l%YdaA16G{rT+UP=4sgg@x$-ce)gPy zgInFDhj{7&@q6Uyom0*cp#c#F4SM(tA)Ay`M|VKU{8C#fi4>9M(SQ`SqACLub|Bc$ zGUDi?5;G7@CcAcVRXJ78HLMgZ@Cw_O8RRma?^1)$Q=V>3asG;dYN@tFIaCPZ(P@yp zc+9F9cF$6B%PShIF2bTQoExXz3g7{RyW8!`gJ0`0{rLg&lpB+G^7u6#7Uft-!B{h> zk93LS@5i~F{_3!$oVYQ{2OauS&fb&Wk3-Fe%cHFID7%Z!x3*76q>yUW{Dh#GHrc5K zK5rw{5aXt1JuRl~T&~(lFdL9fH=>Nf9_-9@MpLZS8co==6C13;kIh9mHrbAswqvBB z)x=H)J4aQv<2D5wr^jTh5>d(+7UDsp=WNSswKktkfleYbkDi9Kt5icgl8G%^=rV;- z5m#v(NZO6G2;?vq-dtp_ex+R@mghf7CrM41>xt zXPpY+v2uyl({I)+^^BMDL?A|pRBJbNWLf0_YjU-1GMi1Nk zh0_7FpsH@xy?UveXt;0%#AYIL5Rj(c?o%}Is;*4K4&GDe=lP0N z3Tn6Q(^lDTQ&8xsrm?w`;kY+e6R<)~rSk-48^7U|Bp`g!liq5Sw^VjRv~33C7?MSJ zKB1m{79qOgwc$?+4>g^WAtwXm+VoiUur_d~VL)yrBK9kM-%MJ5fS!R_fVCZ=aG0UU zebOtTwTB{in|q98UX`WThCU?>imdvw`Ge7}cZ`a&#PX)se zN5SbuD06w!D`BVV2iPl}=_;R9Pi{SHKm0)eKd(>QhMo7HbfWzvBKeE+u*=1DSKsul&lrc}-f~yz2 zXQfLnFGJ79EWh6f1Q5v~om8<^Ih2Rgx$y8nv!6j3sxig}UOwmoIrnG~;JQ!EdN2R= z>t#J%QTofaR$MZ}0uPP>Hmn-%x7bB-pE20E91iR`0(JNeGagS2+ONW9<6Z-&?l=v% z`w;4Nfvej-pmh?S`MBVB{h%SP>A3%fJ7=Z)wMG{~PMLv?#n)>QAp}obSjPjz1z{;Z zMp+mMD^Lpe&XUh7+0GNVarzhmuGp;|v}@=Zzi#7^EOd)|<15XE1v&cWlUBMMc*g3R z<}8Lx`L`=w(bdTALv>*$3gb0zO;fjJ9GGp99aOU(H!#L);&n-5JL>vat{zr#_e1&N zgr+Spi8AK}RV1a>_+;!ELEPv@i`^rGx2lgTeXuh^koiOr2^U-;bgJ7F9|AkRDW;1; zR%xEE098e&Q-FrQgj=c`pyj)@_9F}*@_-xqaTGpHmKBa3Sq82$VxOhv@*DB9dMBv# z{HO^k{f;NNWeN+p+tdbWbSQGNr8)WB!k@>nLp5H|vUTB4^SF8fAv}hADPWJ_ULibP zp47pX5`Og92Hb})>M(oxV)!>8@um=w&(qy$S6X1t2>w0QNeM6Z0M~cFoR#A7 zL+y)$wMY&si}*?Gq3T2yq3Kp6@p^Er389J3y5jQrIOVth27dG+ztKZy39;%LAXFQ=53;TwL{q%LlJ+{$fewY2+wCHDG0wa_|`!98sc-LlZ`^XpdvD=C9P~WNSR?JW2-)-dZ>P!QZg?j2q;IE% zxA0sX^)0w;T7#c6w6m$p6DlUhmnV3Z-V%+C97UC1>Rk&SM#CR86VP(u4WrJjdZ&v} zkK=Y1#D10M6Y6G5MoF0v&rv#>Ck=d&H#wCZxYH|QJ=lA$yeTW3g10+uA-3R*;;sd^ zCvsYFMI$_!rQQLZaK%iCpV1O8*-9HTuFGqTNbUC>LSf*`)|D5n-&NQe`{Epy2!@#3~+ zAWP=_w$*3G85TI6)~Ba#)LRP+_qiLeY2QZ>1Rlzr#%+OyeXI3%(>aN46sYvl5$!4E zat(r`iY-AP1CA;ma87z23cz^q%aw=g2uhzBOP(OsGd|sEDf4*vo(XeXPmc^oJw*Ay zrH*f^w*agy_~tmmJ@YvA)91i}d(2@*U0GI{!EBqn?o`F*cs=a828~E+W0HVscy~iSvW`?*i z#ZSc3a7H9)a$?q_Ty`5ou0;5n8MSGYtMT5XyU!!PnbvCJjvQAJvNnH*Qy^6Pt?r?n zLHImg$rR(6n-at}-cwfq@MriUUaqF6pDPiIak>~P#)bQE*~fv#75bvNAkin58q2uT zRabW_RpG%Dnv;bKYv*wxC{vz8hu*R$10;V;NmuO~Py>$F@p@QW?%i=vcn`9^z1qga zC?hb`NPSPBfG1(~3%kr%@`x)>R3ze*)$XE(oq7Dt7SKI&bTIZS+^|M-HB_rM^+j_Q z`V&V$h0qaS(~0a&w6aN?@i)L&u%@@Q3KZMW=4}g3sLe13Co}^%p+7j>=FSe-fE%uU zQTSF>upW8!Bm6DUx?t7fzTEPW>?f;fyYs+Y5+|1{D zx^_W8_2VSoU$LJ8cRSTo8g-OtQ(Dj|yHCO&Ia*WIQ1N&0HF!FaiMpz)=6yBUw03op z;m!ynw&nF?lxiZ_!1=&7seS6>jx#4|Qz~eq=|%#e+6Ds9?8P(DTTSUioG7PUsXH~f z4yu-bOlt8xtb;dg>Cr#IjURJ@D}L3+{&2%NbqnFYABnBbxne-P`rliGxSfj-vptKK z8S}AN@lifjynf<_zelKn)6_*lA?jY%nh$Dii%2vU4Mn+mL{8q8lH#%hX+6RV*r`M! zXPlrrgQldRD3i)JeN{y$O`Vl8UJ9i|PlYJYxgUw90)eO^7v1rG{9bdnW8YMMCTYl^_6D84(snm~lhc@#w8cxfThu6^SGZXDW)?u{FAt@Dsoh^+Vcp>lwg4q zd-LC_k84G#I=pVbrRRNwp|g%%sbi<~c~df@2`Q={;xodUz#6N^k=*)rxQI(8%%M;o z_X~S@>SXL)DwV=U{W^wagYd+g-#F*!K)Jf8NAW!&5D<;mG0rTwSmFII#XLQFyCd_D@UcRDzN#$ z4Zw{tQL#Vi5(ze9Ga@d?CHDs^ny8p|)~4DK;ITlv&2<}pHh1?WLq_~EZvS|5XBLHa zyVEU7@%Il><0v!*FgEl^ z94J9lt)(bh#bY6?wy?Uqwuy(h z<`x$bRCm3sSwpnLCq3BIGql66Zrm(IHsNB3*!8~qu9_uks^K}&(tkCxrZ43J(r@>> zzpDRuAYRq?Q>*&rlMd#T>$;s?R(KAqZ!Rog0kD|;S8SmFiVgOz&2Kgrm+s%g)$jIU ztDBf)AOW416K+|^7y`=kU0@|6bn|F;E#2Ycz%WBGG>2bO89f-ywpR|Sg8Kb9ItG3+ zbj?#q_jrbJ8LI#9%_z9B5iks+U>FiSgr(#kzxdsV!;&=ag@DoO_Yg+S1V;GD{XJ>d zX9br_`CiN@!;Wk`biC3N4*Y^MEWYtDa;1y6&4?yJ#yrC&EP+m`nBcG}d185m044mv z2~$uCC?*hCaX_U13ISI9j=6|XL;OH?oG&ChrMGy`Xut7zMvL7s2BWFOC=ss>I7HPu z62v6DN2MA+iR0+r`|$dKOlee~Eg0AZzb&*C0`N<2)Y=q?>< zXbQIq**rEfer6-usLu_459+8_sGN}dr{_4PjW8<=(WOY7*(8c}FkX4XJy?tY`pBoOCP3&h7 zS?gGK_O_W*?Tw`QiCK>w_ExqXsetk_ zd($=X47$DTM;ObG!1k14M{dZ{h_3%}jc_?y_ZA)b#m_wE$A#!&e&PQBx6*Y>^(;e_ zxOG^Tc!BZDt+-v^lTvtHT$SCD#Z~47p^dF_{ixfv!kw&?($;}(H!*cw=N$7UMk?An zu^%y0WQX3SItJ5XDT{#W$J3q4O1YS-tYRsP^Ngje_soQB9DB6H;ohEexu!5w=@+?y zJsHaKc?ZRh@e*UAXyKyBxq88z^YkxF2KrMI;f2M@)Qhq;!XJZPM@B~wZA1&RUyNt3 zD3>cXP|#9|M$y1ZG=K>rc4^Qk$RzwNwn@q<7EY8?WHFoctfvlj2tF3!Cqw30%kUfy z%3!=j1BRTQ(qttIjsl_dJ;?$uV>n*#BnveKc^aZLfKDb}sO{&wAYSN}IDvS1kI?N;xMJO9R569WpN+y)>R+lHFNYG>R9NSa`x;!VJE@ zL@L&PiY59bT(j=CZE|BlDxLVQ#Ddf-*dAlD60;Zg@#L`}6)SpULE=_~rHy(=Nr}mX zO_O^{5-w7%6(ndbcYuV!xCY*pdq=}h`FVz4JX8Oiv-G+@BfMZd!T8D9LW-%}8PcJP?! zQHm1)MQ3_6P?9N<(kD~=OSp0G>o;VbDP1?n8)L1F7q+*jbdNFwU^|WO1|ADwhj(GsELRwz_hk|vRdGGx82v-89>IiohxYu+PIgnA zE1kW;&ZdLQy`60x!mijS zJwV_Byd34GX9Fn&UMzGw@i@eS2Cu!EXs)sa)b}u)lTp3PQ9TtrnKLR4!x8q+3jP#s z+hJ^?%eVdGNB}SFFC@M9WM-p<6g^Mbp2Fb`8RZ;D`E2mCH_9#AQSC(p98{{c@W|W% zhw<}z$;CUh1fGy0$zJH1q9cn0qPKvt?*JAVu>}K$61A5PY}0{f>G5)po7#d*?FTru zr-P!K8Y7xM&|468is2D?KxMns04lGF`m@yO*^GEJ$ItR(b6%^e---A;1)f^0C-W3- z-%dUE60glM5Ila&*nS1w)8YUrmnQ=6+>)fmgU#QV;d`rgGP6`NXO7GlGn<^u z%#I;7Gn7b7IMK-@{6HCz(9vOv1>T=0yeE3Kq2kGLG29aM48HmT>6nG+B4 zcu0`qT=!!o`fHrZIBw?o`*KIxwi0Br#;IhkajL7-8mDsNK^#A`+vZ%V>h0OUJFI20 zPSGv`uAOuDpsYCVH=N0e8}5TIKOp$>Ch_IT;EKbS0~<}u!L46LaEHNIcKr2A%`%f0 z59WC2Q94LB4EXudK{oRgZ3~yP^?T@w>s2!1M*Bc7ALkBi+p^UXoJ%DW=Tcpza4wY- z58`;J5jQ|><*r-~Ze+6JhWpGeA2%M@_Iq$6lR@0bbeO`8OkO;g<7c^TF1yO6uo?C@N{lEid~RW+okhP(ee+Qpf_Gz@M3aQ>&-ny>%S3^efUn#-kcxNE%;2* zd`|W$+W)4RP!UkKjwe%l$#HvqQ0omLJJ(2dE(I52vZF^n-Yp9A67gE#q}R!;e34OlU#d@`Gg+r-*BdQS6V7Tmqt%>Kw0aA-8{-ER z{3Aq?dWzOC_oSZa4E?!hvQE+N3M}BsD-Hh2d&#G053qDM>s2uIVVTZ(v{v<1fV@`I z?*$Z($5N0YHzG&Yd{UInJH>cGEL?4oW%YilPb_k>PtiWGK^#K6TqGqJo)DDDIz_t> z545t(Q7Y}+ePtkVC1Wt>w4c-6fV^lQb7wZVc?^)=xxUm$n65S(}1We;sN*jCt^6yWXc z%K(R|WrHST;`+@W9yzZ5>;41) zCKeoTiqJAUGR2mX$W>kV; z=gnUR=4-9Hf~=AZC?cAI7k&<(2)Sj6nnI(NxMWgpKiFRxlBG;?!nlN6!^wUb9hV-8dPD+cTACBha2;n1|*pxhM`PjIVZt)aI!LY+;d} z@)^M%ntb4zOc+5b8PAJwS2~SN9H+}aC-r1HhUCGjr;Lp2353h0c-WH*rKE>)J=v$| zpk}V-bznuRC0@bw*>Xx;^7QdNL+~2_>hGHHxNb0~e%tF59UTb3a6F4gWJ8Mup4&)H zb~>n6@s)&g*#+cr9tIZ=uWpyx=WIRLKqljQD93$B^BDJyz+; zJ3anL`WEUxk|U~QM}jj1QP?S+`X8jcHFt#t_xtb3RvghVK0|O%#>oM0ukwr;hYIoA z^(jqU!0nfQV_6l+e~FTR7+m!v|CWn?$kf`z$vtc1w|mmH@#}=guZ`=x|JwK^?Ao|K zPP#U(eE+p^o%F1YpAr0C70MRwR_YCyL2c|}pE9OSVxATzQ>DLPhG?F3JPzR6PCRgc zCz(7tex;9>T>rkK@s2v_^KBo$HguTiCuDh2{(!OSf?2`O;k}z1-mXsfa3t>ZAJ@9< z>}Brk7lSZwXJ-a@f-+ZEU*eH$KWUwpfBKwd|=X zMch2rM;$B6qVl{be4^TeN_#t7Jtdy@-C0jSeNzCy;L)n@Vn1p#Ff%A_#4Y(or%cv~ zk>iQrWAmgv^g0*%bwqMbD_5wAd5L z#aHM04U5))J3CTb5b{Tw+!s30NasZ#=v^}JOJcp*`q+x$d?-hkoD1uITYjCQXS>g- zmYlc|`5Wjyckeo*Qs5qRpE39=;rD~FX$vdT!pbAH@I&Sj#?X7|+{fphyYWTO^`^IK zGQpbye(!R+KgASH@swg-@ua0S8Rkmufx9c?0<3s2OEu`3lQLE8eyEFv;Nu#^ISJ(A z8k|YkN$=Ep$5!+xcDkix@b8!rz&Jwimwu!5(laZJyJAZkk|yxPCGI(I19mvsb|ueqxesj+&N zCO_Q+OMj>?A&{9|-p~=o_qF^5@`Gj^F}QD-tA10pZO2fOf%uL{N8fucdVJcUZRP?O zR`qubn3s?1Gg+;`(^(wdds63QpVBt%af@Jjn;mk&jW07%YXt0ckXxD4~VRQVjX8+I& zW=b!Lt~dAU+jz|qobdD)Mssaw9owRRan#w+a`J-Tj&LYgFnctW({zptNpDjA0XnCL z)B(CrK5s&PI$KQcO@g>LYJwibHW_!5AU~UWhVP2<>T7aZ|A43U7lP;QX+7?9w?~O} ze39TkdmPHFs*LkDaGb9MFXxOiR##_~TBj%r_m%IWOU)C%uDxM?%OiTjy)=6A(A2C7KysdKus zj6_Vp;K1Lv;5NGgC~T*EGjD&p=@C`3cGF)!7Tot#08>ln)^bLuI`;_{IBf9txL#6TS$kOv4o|oO@Q=)wTqROc*zdXK+ zDxX@L_5WWL&+MN)gDc4rcuVwB9lr7O7hv3nDCTL*I#jl8+^u(f_Yr5@cfMV|-qous zD#fz!?T^T}Uk+Zfd>bwiwFY~n>c(T-ogMVnMQ`DWO9pt$r_Yd6F`atG?74?##_a3q z{xkwYWSZY-ej0e>$}xT60hbj*!^ttnl!IBE&amEeIy%_z0wiXCYS4_)TYIb0sRal; zij}jPPWSk;r`=7dP_uf___=5tnwHf&_z<^(>Q%b$)ewB+2u-M`*Imq3LUV6DqC$cm z7mut4cw!cs#nI(vquy<{gNI^DUhh`A9ctzK>U2HZ+cF}T)vHoGdoyfbTjf51>w33C z(H5T8dC9Zm@>b@9X8Yd!nwf02cW3x8-wd9#pC7%^ZdK>jmOg%S7q-TOtr>(`zt-u( z@WzPiJBV3!jb&ejm!_QIuC=zVq29Z#EhgjF79Pb#*6ZeP51Vke+1%Z$U6YipgPm*D zR;#>&0Bi^CT1RcR!C-5vcr{xNSNy8&dJ9m}QsFP0F%t`|)^%Gq_R(t6R0ZmHYK(`)a*$b>RzNxLWUA-LAFpbOdgU zY+r>&o++K`-P-oS9um4u)VSJ)D*QgaP^ShhHb~di*)Pt%F?03mdaZW#ZnxWd=UNPq zneEzre(b`7knnwV_n?lsUt{;zUI4VN?x6eqX1j*=@Dq=`p~0x2gI$oBmryp?;k$%w zw4mW@8BB9(7B>O5W<03PtVExBmF`Uc3Scw@5Jg5? zX0>436gjps@8=E?^vt9SS!)|ioz76$lhVKrLBb63XLxfF)p zdCv?1gfIjudMPRa4QDJGA>!HecNo)jVip&;QlN@h)BMX3^L!RHcbkuf!GC%f)(jX) z6#0X{1+BG3;Dg3~rQNxUmjl1vX*PUB{!v9_1*L;t4_zE)aTy1rCe6x=%(7-p`n&3$dNlwjZ(dXkplQH*!3 zKp6x|W$eYB`a?mxsaY69Q@s;|S{&+{l$!sd3<9tmm2o^3Tqahn;X$>{ooy1w*b z`GZnv4Fe(K13mFlR;r0`-Hf?8@s+OJc>pgbr5I*WS^;iO8JW|~kLIH#VyOMrITnUO z+^jv98Ef#od8T)897U7+|||ZMW$dL2JwW>VSDJ zyV2f`@W;3S)|Mp= z^HXt?Yh+_<10T;GJC%DdLNu<$<85vIJ20NXp&M)SKR@{F4Pk*Z(i&;c9fVQ%fE7qj zJ2AKXgX88iSqNZ!t@>WAeXX^3fXBft9HujHAcvM>Ct#yhGkTkEp+JHMSoSMlZ?=VJ z0xa?&sr3d@EwI3pAgQ1%f}Bn&cO~hAOip+P_TZ5|6tHuT!5454L%-P z0S~v@Ts+ZQ*ui|t2tB>4d3?f*vA3s~zR|QbYQfWHyyd*=WhmoOk^q~$5s9MAT6ox( zuU)*DUCEj2$Xtx&2!THu;i57Jr-3VaBVJl5ClW_z`ur(cyrhk!JL|y6UU17&me*$x z$(!MnCuX1T8K^5bW0xj6=TdA!_&e}mX9l9G?B>eU+HJdv9?taE=1cvj zoI5L7x=30m;-Gm()(fwSQ0NeJ9mgAY_|5Uu8yy}5z&BfTu(ilC6(@_^EvZAbNw@v3 zyaSC_RqQ9?qF!*gxQ!*U(FR`YTwG%Q zdSP(BZJq{d^bE?O%lzb;5DLNd&c~m(gYQp+m9Dh5etvNJMuto+SfXP7p8@l%Hk45C z?E~yvH5@D18g!FT`XOn+q|_Q66xO)F#XDC@xKr-v6)vpty&fD znpLl|zpF`qSFLFEX#vII`OU@$;tsr!_qMO%0C=^Fv-9p=6R`xZR@==^=T!=P2YA_7 z2IT?44QeKu;&78`L!)B$D(&5x9(~9r$L61Q(mIat{~vYl0ww2h-FNo)^<#Rzo<~pP zJphSsnhyXZFnEvzNk|mg009yt@z4MeU$O@S%m5fX2Efb!1SExkELo40>?pPp%T^N0 zvTQk#7~5+ltHh2%Cpw9fID2%~jxA?xNAW9;t(>Fm$)2MmI;;Kt@2&6a?!kZnX=V2q zvN>H})xCA=)~#E&Zr!TtSVRWPyw}RxI%FnU3mN0*&rXgL89gg^FI3Zffp;ys3pegehWGD2ba;I4{_#C~pW8jY>$w(BLbn&ym4wQeih7db zi@TY0Ffjrx_2O`~8F=(ewHnp0^Dl1h;Tp{D{$z?fa(K@p zno3x$ziao{-aRkY;~hJblE&E^FFNQTP0U=1-#wDX40h-G#g*<*=b$s)oBVg){9C9O zgFR@b!Ik-&Y50vC%CW1I6mpE8RgbC2*fF0-Fi)!bAjif|-FvdgoV~Nrg(I5}w%_KQ z=9C6PFC2Tbi;X`YNQM_SUaPX3G<=L!wLB_iIYm_|}N@?A3erD?Yi8-uPd$`9_jjc(~`3o{j<{0rpwBiOt2P}Uq zE2m(p?oJPH@ZNa?WLI~M^*dB10h?I~U7eYqxMJ_{$`KO!F>k>k%VvpWe`OS9mbL^M zdo(1QU#cYKJ!)=ab5c6PYt1H61KSpHVyV>VvlJP#f{iDW+Hnr@P0ui)%wG+2&W$Fl zVISSqE;-f-Chp=h;qYu&1B8@b@H6|{*LrS$^G1%uX8h9ZS!+4%Q2NO1Sv}`w-4dQ2 zS1Ze7iG2z;VI-9c6UTXIdZk{h;{ilZb@pQKZT2Dq&^%{GpTGWC)dvkgd?Ec|9?)Eb zBe-S^?+YK9hPb5v*N{(fQug`+C*xpJvoB8`II{D(-RLa*H}+xAa|c?7-JfIWz55Su zf3RNE8|{w5Ka_F+(hqE_m-9MsIPHECkV^L#%Jek)@omW2x%0q*=jzoQr`$99pQ`uf zIG-9jaO7Y;$uaEXdHL2;yX&>Q#LgEFqsIGk6i1wl{=5qLzv=^xp`_nxJY-}+#NdKY zP+HHi9C9o}T^}gXXwKuPZ_AdPx4T+nPwr)Xv-j|e9rM6SoCF;i9gCm^Ib*xud1UX{ zZn@5G$T`T`ikxDTJ*SeH1DTlW*~)C0_(;+_g-m<*yN(&YVT20Wgkh{*xKkLVYu=hl z(TJ(xp1eUPbj~6-S1EeG>dmPXf6yyeDO|#sH!dH>o&0GJdH4EcL%u_y-e&8YPbU@E zv5Qu8UsBFGK`dE%14~*nSI4}_eYdl261=Eh zs$;?Y-o+>1Ud=_>oO^3mW$^C-^OlxipXy0&oIo#3-)yqItr>Or4d(CWuf|ESbzyqZ zE}&1(O>u}YpKWiPtJq{De=IBaRt5p{Tjurh`65exuV!3qhI7+b@bWP4EN(OGQ}$RW z#blbz(3**EJ)D~VYn)V^5sR`BSLW=Lz2IdVZZ-pI@Zib}-z8$22=7mZvXX2k_%^Cd zt<|v%1>S%E-rx;Mc1AB?!r&zZf#G!y4rUn{Vw`;0CvCz7%+eOsu^dYqb;n?KmfhI# z3$3F!&9u!)+1S1)%h1gBEU>f5e($`z`1q_Mz1i^G7}VyiTqJA}y?I0U56a1!g|;oc zymb7g)<0pi6_`p1maUoH>JO>jb%Q$dg19qf-R_>5pS_wHvBU37Y8{`Mzl&$4u7=fv zel|9C>&hFAVxO#BTkeP-i6pXR`=|x=49^(`gGZ`fo52g`A02$O@=q7WdR5+m?@IdI z01V*juZSWw|C$$qPug$3Y(|wm6{te~)eEgnl4Ix3XJkl>tEx)hyujO&KFY((fJMT) z*c|J84CpED&~h7ahAF^m(yJ}fO2rmgc~!0Qme^Tw>sp&gd5H#E<+7SHM@KBKRSbA6 zl)4YYGiRaE5q z#wLqb20?c2e~~hMq0G*kI(BPA=2iAbkq1b-c-MdJ<^0< zrm6N(ChP>B@&N)X^pN}9%{NnXz^t9OyP0ZaiK@5M(0^D>R?nT-Ja_3B!-k1*ZgX%9 zgf{liofvIr-p0P^yV=GOqkM*(Yuud-Ao%R95rycxkW#YMu|9oOAf#o;Q%==V#qE(qZzHvePGUgUXeCX)2wVOD8}y ze@YQs`1NtsZA>}juV)d#HV1m!DpbK^SGgKNv0O%+N#$soq~|VyjbJa7=-Fux{hCOR zTH&K95nD%*JFp!EIZ~4(eMwnOEvv1SECnBWdzNLXBB_HudLhio}YZ<$+BRZ0cV%jHpFDjS?%tNK)5> z5DmraBwjrQ#IoLVm;Wy5J3sZk!tdG&{|(Nem6#{`4#uJ8y?G$Uk8Mlt>>3Q4FK;D^ zQXziXY+3IfeV4a3=M>dxMH<^!VENBrM66seSTAoK^|Gw60?dO+^%!ouS>joP4|EZr zohos4EHByIo>css%x$d}g868_JGZ>0bo%lw@8;L~S=w05i`warB~|$ynG-IUx~gqU zZ`K0yKJJ^ifN9ku7=9`^!@%bV{Ft(Zj`q^~2SPMl66_~y1AqBEZd&laY zVOG3-Z@_;pf4nrGtwHa+DQR|x$XF=dco_e+T?w|*H#64W6pkGz@Q;P!a%B>xF+WYD zpfScgr=_vJ@X?w|z;&NxYFc9dYGtpn?e3e_VNgt0l!X^MhU|%90@`aGnQ{!fyaq7~ zDX8jWAv}9EM1q>k^uqp{eRVsE>p6zJkWGdb+aveAdUX9wNqeWzYM!*~Q|7=qXh_7m_+(Rs^wS+6TYpDpU|hR@@B_l)m9aCm(83wsY8)^6Snu&pQYpWgU+ z-`@T8(juQ*FW|w(58GW+>mad?PvXfYDzZBV(#8+rVD1^-nhc0dCQ?4yZrLl>OG(+r z4!6xze9OgzueR-;n|6hjANB1TBqo3{Sc`3ic5{8?(5})1(0F@N?$l&AA4j3ypvxRc zWCvN7vbi1{+HXch# z6qvG6Jg{xUt=O#QN|#TK8Cdh)q@+}%Hz{Y*%0}{2CZBBfKDqn3!!5*c_|Bx_ZS7uK zW{WG0>uKp$F~GIpVv}69ir=~Cr6=Etoy*kTZR-9=(@ot=H=4R}f!!`MbxVbpGgDVT zbNjZp)4pXFC^K(+;yW`V4|}8sdnA~HSR_5Qp)7?>(!=-(c~~VqYwie0$g0L`LskTm zYK|lVNi|0zW2s7Lup^PNRK4TQWDgd2)F|~82BYB}=}xmFIHy4L^c>S1M;OkZo5Fyb z)PF3L)Xp-<681Syp)cn~X(-maYUryD7-5l&_kLpTRUHYl+lUbI6b1Wx`?Hknw)#*2 zBWoaD8nR^W4a7ZJN_o}6ECtvAu6^-1Zj^=!bd0EweLNJXh($#sP(cE8jo7ImMZrd( zf)wZ)P|-)%#8nn0OX3wptBMpQmsI?#8`+?$~+12&BO zI2dHDiPr=|D%8Cu2w@yolviW#)QGHrWX;fuECrG^!>a?5o<{MG(DQNJ1K1ro$vuGG z(d#`=9$-my&jx;&(G3 z^L$X>y>uCA1DDj@Q`%6@@=fmUNd|NDfZtoWGs})OI_|CXwbRP)U)4^7{$3OX_f;A> zNZ`84#^(KLZVj2@Pt8hlSA@-Hs zGsi7nBqi=>`s@VmPPqimUE=(l2euijl63vq=`&#C>9h44j&8IcfNol3 z$h(nIO9j)%lO#PfaTRxkk(3_4bnenwJzSJpKgz03&3I3@sIIO1HW~_wPvOm&bg1MF zz_#ua+_rtA>GP+iX3|%t(pM&CaHgCOL4MP7NvPV~C!B-hroO3}<5w*%aw47NM1woq zIIgCZ@J7R-BSz<@i0u=@lXU)-^Nxk)aznR*RZgl7^R8SlqnUZe<&Vxp9^Y1~x6}0Y z+lI2SK|b>MwvlEKtfJ)X?WN(oxQ5Q#bHO58`L#^ENdx|Nw4#qp98-*RTTOkZKUGwG;G?P*n3bbg`o7P@vaubdCND)$W^x}C~z z6luv;o0JpNvv|E0qePtFRk^2wl2{e5-;kWoDS_F$VZ-;|l9GwZ$?^L%puBcxQitHU zI32s1&Rw!IljgFsWz-z9)9xGThTUE4K`#||!=B4IQOsgbLDbYOi9%`I9#LnfI5H}s zrtiY(33oeo(WdG7sV>?uZ;DTK(T4Qyy*=6{uDk`>{2a$3w8;k8+eKR$+V(=*t2y5o zn9o+$4xhUv-?Ym#GkH6`iJH>6+8MNAU|;TgH5J;$KbaWMR)#xzy8?~RGJ`*t(}=0D zuaXYGZ4nwd*_I+!dKG&C}241XWb2&-CU#!&f;!+$h_GQKr`PBX*#!?1O@}&;qWg5TK zLA-|eOC7|^Jbnq{18-!=eP3xj=Z%?i-`CejwwaKW-I)9S%JSw&I(217+Qdsq>xVjvuv`X8aK=)JF0QhY?5l)XuvyFS=xa{0y9-8o!PE4x!wi9)Wl3j7w`q3nf^x37q@|CmTCDTEyOmBwGe5F&%t6J%cSX+xyF)wXXGERTx4fN8*&`>2pg+6?2O!cZ}p9W%Wts} z)BI*R={e{G5Li~bpm=fHj?Dr%Ztqm6pC-la&2=Ijk!$k%m&WqQwFlZ8J05GY>SoTd zx%SRZEBCh%bvJ>-UtuLT-A^IlY=RR*6Jx=7r!-;ReSyj2hNEgYMsBP;a3V)i3t)zY zcJWlSuKcha0V1_SvhfgCM@-M0;qc?kiRqIoeVb+R(9A>ycUd{P)D6t7{SZ}c1#kdj z|I4vAeGbuB*#{qqh_D3PL)B36+{%7y$s#*Cp(UgHo#GHWl>;^oCjG7;eUD>q<$z(j z|E4@~E$$l|0h{lVgipioPWrnlTO=Usp)3YQ+i5ipbKS6~6)?DCGlYOBGHdwpWXPtG zP68IGArD4T4Vf!c2%afb<9fOIg*c}&I8T{+J2!tavEOzJ+D7;KHj)t)_|c7se#$)8 z9x%NKZ@Zd1>J)__H?42a%?&@1G;XZvRt?W0evEUECbbU4w*u|tS@U=@xL`zd4sPE9 z$_F>`cRIx2jMvY6YqV&6;pZJFHF^GcIPR{W&8Lz97x!$`X_GFDyRglun%JZZAARQ| zAPUui=zHeD{shWi!5Z7%ga?})bOmcv2-eU~rh%TqUG|eXtXf!a?pJK7q>#2<+zC$F z_vaxT{qf_&^XdMnsYzTbb`K6mJ#Z}h%AR40Z<#eNArqXfn@qTwqCA>Twj_%O)=tlsPX zQ&Lb^U$WHk%ZyNHgEv$5^H6a47R;qQw7Qw)0XB5cy#b6wBfc+Wu{t4@@k&;7qn7P7 zsJk1(_hcmn$GY9x76Y~<-Wak67=*3N z879y4%AD&mh*mBq4!~rl0@%vCGlsET%$(_kxQE&@XF4gsR`t5apA=xLR;)@6TI=vk zua1`t?@DcY(}7#9{C(+4lP1z<4(@(xWBUBmv4ipu9^C(w1ssj0yrrAY@t%Z0wx#=~ zcV;b>dwX@*4=KcQZ?DFnb&}=YUR}q`w7QYrJMg-CmfYKS6n*cZ5X-%N$DQ|Pd4S!q z!5y~+PHY#~7VisLXbVzVcufM>+7)+ad4R25x50)#3z%l%9v}V^*JgE@QDF<0yW;f* zLIQMm1%CU&)v$%3>c3GeA5NJ@Y55nSWmi0kcYy@qHeG85RoZpaxiHZ%qK9G&m4~~T_LT&((>`@Y8tiChOv!lExEjr-Cw(~TQs--p zErA+eXKV?ZD!#_p5;j%L%epl*f&`7&nuCdDTSFtp06K%wUVs4A+n15){dXK z>FVKDmjX4XlQOrU@vO=~5>NYC$=)%3bsS^VBwHHG&NOirEWfBH1fbj)8K2()G}bQM z#A#sm5|R>Rc8G%1 zohiOOF%k9;coO84<~c<*X16OLdzvlj-72ccl@F+U<7~>(QnELQ0h2KWdwYGqloYbu z%Np9j$V$QnATu3c#Eb@YBk4)P2B6P^N!S2ns%sQ$`E;gPuokuheHN^($tExjxEd4K zA>Z>JBtmfbsWj`jo3 zHc{Tsm5F5KAFs{=R`+GU>kA&@FZt&bmbCj|0z2$UmY80e`Y~s$F4)f9ffcQg!AEj{?XS= zjSiQJheFgJ9jV?21gD^4D8S`O>N_I$Jr&G9M{|(W~_zLZvmV2(;+MUB!v|( zX&Bm{+DI?4$QqxUK1sh@U*D8OLwbbLdI)*qY>u@3sqv1ac7poOj{8+)@|)GTuwYS+ z?bdB&AW00uQjM3BCElZXA6i@86SXh|EwnZ3&Crpdy+ej4>s@{1v6U4IkSoaPERg`_ zv#M>|v^b#)D%cf(AbnX^C0WK!F4g5S!a0_(O^*ExF5nw(ygFCO*lD%t$q>KmvNgPb zfNawNLt|_}Fz?b0L58ovSna^lHS!1ZqCWbY|AmW)46395AIoEpz3!Vx5>bUdE`rlT&BsC$d8i3;p7qjOR@y{Nka!uG~@R zq6IO9##HsetQ+F2xeXn4WHyd7r`NtHyZIRg=K=xAoqgUgclJGyByE8U0>8Lhyq9t= z0F3g)wT;~(=o;)MW6U9*)Ks>YD+kAV4NyOu|CrbIZVbN<*^EfnYXTw_ntf6grjjYtl5 z6ip%AWb*gA8K3iWV|@Y6QrI;W;7?+J_(eoFnF}d=a*7CbE6N4;GOc*rQ@5F$11Vfa zv@qs8P*0n^@J^jkGXtz6&6Yt_kDI5Hf$nm;gw;ofRWZ(yIoC|3u>t$;*!aq6=p~&c zUzwerCq5(Sr=fP?=RKo2%hiXP-PK{v4l|xm6rR#|s^elF!@+k?<+34evmCjJY}onn z1+vlne3TUFI&C%?8?8o;`dY&FsBX}#TxXt{(K?dBzzGJjiC1Z?S6^IxZb<4KT_R&F zQ=RRuvXXPED!XWM{M?-NTxl%HKJA-p&L{+*{?;Z$5Eh74gR^AgS-&(^w#no;?`TPY zeD~!hn$hYWQ$fEo)*vlC*ZgWZsqHgirrLR1^V$7Koht6JWVQG3f>yE@cq!baS{hqv zMcPs%HtbS92bnyNd$>&$HR`ll76V-EF6)FPTaJ}|bKJeVOb=AdYSD3==|>xzde$sOJ*I#QE+7Gjyx<{P`Ktk5Bwy|W^Lz6X-! zoftGm0!y^>TN+!^1|1{Mx$#i4q7z8NWhy{v9w?11Z9{3uOgY%DEU z2WVYbRT}f2GIG(?c^OB-p!UYfqa2inwp|(2_FWGb+rUOahA#K=3a0DqwtfThhFD$u zyg*>gb}mgerZV-n;%Qo};^vO%-FUV-XXT0;QpzeZjr1g$$0!WP6lhC&3uigliplV zOoKCojrXB%#?kb>(QtMUPZ z|I(C!L=wRfJj;gHR)G2M#gw=4Q#EY5xT;hWujFE*dy<^qjk z(-gN>lF&g6Uze>}<%6NvcF3+n;f#G_FUL_$MRJIJ(WPH-a11XzCmHyfExxxzJNLcx z>|63hfeBYmmnVu(&;0iOq^D6X6#jFxm^bQ<+#7YQ?TxaZ?mqRMP`q*#c0#p3iZ8OK zaIf4|72H+5g_^mmD(3a{Gbt5wS0(Wlc{Y^*Iw6oJq(G4LoA*z7I5U&A=Dt)4cU5vP zyI$_G?JsO?`@;I!am{_N10nPt5WHX6`5CWjfL#&a6cV}tA~$p2>tMclDBtT~m+y5j zoELH5>tHx9V!qdUUYj;MG9Rb=UhBPCZSuX=sZDowv++l2X?(}&h{Hg~LyyM(iFbLgIHM>AFr7zGz%WRJ6Zh!EH=jL5m+Z zsHWh~R%GYQ`E*@}zazj1vo@r)ZpilDv?sGPKYFg+mZd#@WQXRcJp{Y`F^`SVIy{gY z*nIizYTB`hd5Yk8g(@?_6F{#(`l%~Z$1hn(D{%0-T;^>Z82DR=?_JODFw_WXr& z5aCd45;C0z4;#nk!8Dpa*-=U@YL~DAbL>8{tK)Ycgc^Bw=KP5c+BT{TH^M8be?k`r z&lAy4iFWbnnd4_KO^VU?+35)>O1kFaCHCs=L>TiR9&+t2c__Fn$kD7cC{;>bXP5J) zZos6xM-=Lqn#>D38&X+%zN7D}dh3hy7!h55D1e{=u2-0uXFQ}kufi+4&v&DdFg3%( z1$~z|I>9zq;3FIr$2fc-k;6m~kHxXcDNZcRrsu697&?6-JVpfMPGGr)j_(u zM)kBggzNAX?m6TliExyogOPI__Rwh(dj+Tit4MQdrswkfg%Xf4^tRaF(e$*wfE*rNPWP+7sI2UNS zck#M8>tyTrz4N5<6E2L@a4%Y#Ut?{?Lz;O3tzX+XamJ?H@G+IHzdX%l8@}wFzNHWN z=mx8N9~VJS!M1=#&zJC_t-_vc_tKbyM3B{t<#gu*2@X{s@=Y5kh9xjbE_bVL9Jo+|D@GLW^rZo7q6S5Htw8Z+_xBebp+8OuoFmVsQ(TL6PNa?;%P#d6+EqcpB<&%ECtvOjzfk# zz;<9MoHt(4sgISm4j;RvQ23!D7Z~y8HurOmYP1rFmGiF*X^)k%j+2-_w(|Z!n#BCE z(Jg^A3O-(X^#4QB6nXSGXFi-y8cL6^c_2$c+T+_FN&absh!dOtRN?+(0 zm;f`Ij-Q&~bs>xlEh{x=%%_r8o2hU^%Uxo@SX~(1`Kvp3!g=hcI%9F3j<;G{iMN3d zPY1n33O+o&#$%Q|7U${BTTH|)7H4mMT36=j-e8`R1=!yFT(V+u_Hx!o3WDgE=L+v~ z1tE!kE>L07G5cbVhav$L`|_w2QL&GOn)=4WTlR&s*hH-~iu+>^St0@0{x~ZrD)z7P z!~Eny#ePm7YJ75lqES2$cJxU={DD9`DZmbd9eq-O9U!jZT?R&CEKY~_ru*rKt^=P8 zk+Wydzk;#}a4pM-e&QlGn=3GbXHyxs)@5N}6ghAp#2#5e3JS)0T^32HQVuRT z;SBY|@wUJU#rPc#N}3}UwEl32@goJ2!>hgPNP*<==B)tX9LbSrh#slA zQY+d_bmR_O7r`_Q(IXE$WF5%?suv31=N+l4Uf_&{D73>UG&54=P?tM*Q%Am>gQ+85 z&cR5$I|mc@-<^Yr`|r-d#Qk>zCgJ5|*LY#V+brcZUiDtFQ(H%aIFSI|(SXiRY#j~a zL<)3A5htM|;^KJWl%tcvIbQXZpPl@ej6LGh&wWe=bbjh%G6XmJnUBeEok2zIoeD8} zBQb$Y-y*odP1NoC$i16jjdfIGUJFiYjN;jwGLqX?e9# zx>UFt4SzUJ&8xM~7MfnOA1${D{T~^<|ReXUaI=V7gfo?^u*Z-onwa0^SoK;R>-t> zU0C?>2rer>8M?NTN3h5zc@?unN89s_J&cay6M8L3hutZA5;>edud5btD6GfTP5SKg zIqaI;u^dc2_2<@YkEG8|?_?ntS|M$IEi8&?gjx|UQY1wSuVImDmCy^@OV_!mk|S_x zJ=#afN|q$3`FhmTpCz#+u19qHZdji*Dj$prpNJv?*L^JIQ990@5bNO#GP9I5hTCTk zZP{|p&Ic4r1XPzk7}0Bgjg6{O!W*t1j^h5|4@6o$@V4-!xwBVyFsLqYb0s|Rn(~!K zHb5Usx4umh&mn~zEn2s#q{E#nA1KF~8yG0KQ8#7Cg z#6s%B5oZ>}B2p0CnS_Csdn&$sdUb6BpK+I_*az?w}G@ zQj7tT)htQbAB}ofWl6C9XvF;$4oc=HBP;+1W!Nd1fr^WtjC$8(xqyB$V%ir$eGMM6 zD*R+1sE?AoYo${RrBa^=`tbHfW~c!q|8|7l z{CiQlhl^vl*5xmW`t;^tO^JS2gS3Xm{_O|_8gi|5ra|LUf1~o*sPJ>4ANwi!*@!dJ z>WqH%<4;E=ha&}6lFm_*l>O;U@JWL8rz6f?I4GH)i&!12%6?hrN@k$y$IoS>m0UnS zC+<5a{rEEx&It#VN++3tYJB}n#Ecwr0sWaM%m)4Hx1WtlK7vRAN-_f#8-6ybWi(+{ zk_`7d^h;bm-zHd=JIM@`^$N+LUMLIb=bhlVG|;I0-Kg+d;NSoy|86!C2E@THWCW3- z5|XZpNm9udBCa=3TSx->g=neMN0LgukkL1wc7HJ{Z3<KYn2#)gAU(;A$>?-u8{4ZlRoJPBbp=s}Cf>Mk zR@kcZPc}Uy_~qPeSZ6!7>kQXAIlKuSSm$?=P!abX1&@0=d5Mdbbw5a3;ZyfXo*v`` z0~3$-a?Di8rUB`}LE8C?5$nh%;yNg1|58+1I=nPhAVgR_XZED=f->-&Lf)|?!SG8F zXX4cbB;nLANuwM#gk=7MsB}M9`}ht%CU6$M;~QC+1u~AfSVXmj-7TAhv1&TVwafRi zIyD$Tn zX2fWCQ9(wG#O%va?XEzK2Go}$j&!|b#E|;ssI+7Fxy_r|2k40JzzV?vIW9L-`^`#D zp3HKi5n&%2vHiGTtGQbO#@!p~*uh<#yu{{gVx>6ib-@bAU7`o=rh{LO`qyT;(Dlnv z`cRfMN*;MM`AO;PK@HxoFgS)k!FAde8E6{~H%5lMHC}O37RG`5`B}91CPp4ikgnI& zA_^f1>za*P@8D<~<%Y1Vb6dwr5nl1>_=w$f9+C% zv*2GurOm^?(k&IKD;rUxxp=dBSgvpl$5yO4#$(i3QgIihUZ$Yo>u{;IV< znAn3c8!Bo|)^wa7Bx@T&)7erXxp6f4xHlbd!M}=1Bg3z{v~mz23meMXN<=0R?|6T8 zT-(m6qQRs`PVi7n`s}-cn9Ka`5SxveAnD>V76|JU9W=GBgZ#z1jT5gTC!?K3JIOE+ z6QTg^|0=pOO+MtbvxfRNQEB7wl`a7bVMtkwSJn*MM0HgcN@x>KS7>_!}Cza+ncMf-s7M;6uW8I`?V_Nxe3_fYPZ`0pyiVXNXhte} zd&2I{vk5MXG)mWZ(GL&0N#9_LF#3s&uUvU1kV^G#ClAJ2lzuJhbvuY8q<$^B>z?GV z7^$^J={KU%hT-$+%|f;^=7#*R3<_Ib*+=Vn6iXLhO@?qN_$<9BTWiot{TW-emidkL zj8lWw--x&YRf~*zqw-r(;ok+*ih!rmZ$(u%6YHAof1BCf1^_9rl60&jDf`>myiO9V zzn!fV>YC)fp4qje0414$%6R&EX4jGn=+`s5wl06e??h}!N#l?Llw<}f#J|JazF97y zzZ2QrJ#lHMQTg4d@TZ|ILzMhop4H$ko>FOun+Yqw7sY=N5jF%~(q#W$)Ke$BqNE!8 z`%!6t%Y=G7O#wdiwm(4F??-*QsLLTJ@b4owKr;w6iw{Zr0}%f{>L17GDpd<#GZ%OYQf#(Ac?jARBX#D5%dq&egQ`o|Fm zvz=g4e-g1Z;h9=bknG8lfc{BT%@Aun@h1_x6Ap?=@*mrvn*T{=pjuD-$2O?u|NrQq zm@i|1?!(j`1&1`%x^~c z={-|IPcj1)2frENsSmk;eiO;fPgVX|E4jb>RHe46vNM%Bo!Wi8@{aBRK@}d&N?hJL zeB-@O;mo?9&K!QD$9xiRP#2*^I33b|`YCjqD(b4p7MhV~UP* zj#`UARyZD|oaT?=D(`6cq9+PE?gDfTmtPmg0agzm3@6R~;SCqY)!ro)m?9^D)072E$KP3|JnTq zp5M;{StQ1e?BBn4|5G>xNbG6teNG8G26eD?PcR@>PxDJ4!6b* zt5{iCDyBrmvnZ!jk5Xg1_Z@hbQdLj!zLiqF+g__ARpuGp@;}>{N-9oeW8-aU=OD4e z3-6;?ILA8D%uH4_ZiC&jn#@$=DUiAOTUL{m4&pJMl*}ercqncmb!J7l@ilxaYr)I5 zE6_aGxK#xmbK@;5=$bf>C1ulTja!k`sV|3b)py-$5-v%P+_DiJ8tRsf=u%AdwvXFe z_I5VBZ?Ctr(xEe~8qI6BQBBA6cT1t_p7wSgd};q%I_D>$%RCC<4KKdTT|WNI@1%az z?}u@uEqtst=FndDg4a}b)UQ;qpML+TpYJ1_sHbp`;tBnHU&G?B!udYC_$xc#_Yl65 zo1O2o==tnK-#rf~42%@GYjFmKSEX3Xj|J*I-CBPJhF`H*%fZO%i#Lbbgrtuv)xB=~ zSH(WIoz=U_yW4R}Z}6e|{YfGhhQzn-ZW z=(B)m~tuOUG??KW!ckj?6($I^2)iIf=6z3;ZARgs#=YwQIWHD`ejWBE+hd> zYw+XIeafQXns7m*A9Pt0?zH6e33r6X9#l&Lu=viZ6U?VY?HrCT`*_Ha{3T zj8_*pdX|%=etswiQ&&6`I*fuU89EIA`XhxM-e&2_N5XLj3;lmIaNa}z9}Va{^#9So zc@O=66wa&v*(-T_VV9$m4t+Zhtcw>G`u|v9AqjZ#SfJHI{~rr1^w9su0t<=ZZxr7V zSm?q2?+7gPVE=an7J9J%I|2(W*#GgsLJ#(TJP=O`l#d4%da(cFfrZ5IH;PY$qdz1d z@`>?yf2_oD@S*y56^^rHoPYOcQhXu+PK zzS)7_TiEaD6s5j5^uI-^Kf}JI5O|dOGXb4PsXs$BQplrG&jc0{Zr&(98&1NJpi$4} zV3PS~*>-d=4cKSHF$;@Jf3D=GWJmz^Tn;9b&(-{tjK`%vm-;E0syb|64knr3mxHOp z_T^yeuzi4WaRTA&#e;?A$ZN5rVD^JFS+dLC_*mhvvqBe8j|I*u+_-qiFHunJF}-~# zOp~PO?L&dHqyRgV`pG|1)Ol!hvms|U`(4?wBKDGt@2dKvn+l69J|9$-Ma7bGJxhv$ z&%-V;j1=ge57T5#OnD)UClXNcLJ%cV$_wL(6ksoe@l=y;c`*zO5-=<~#6$|P7sJ3H z1=x$BS8GbV6b1$fYI`XR3{rr-6b1$c21_mj>UJe7J zCbHh0w?+daJH$j5VDAnCgA`!z_JL8xrW!AtvFfmJq}>ZsSN1X)L8J4LD# z{5Z;XGy{?pSrd6dad9FqD64oPFG%88UQl4i@`B>j0HtzbK1zy30hz_DIXISmtC9*a}OyPJQL=g{zmCyVa~@d5yHibVft2paB()A zEhhnEW`lHDcyMuci7Ot94ld4ewp`Q==p@rCj*f6y&hPkCM#!s9>^OB69h;xuvEW$F z@AxSfi;XQ_4%7`cN>>Z-b94lR7O#fJDju}>oe7Ny&p`rj3F7g8reDc@=M&t(~TBglg8qHQ4;%kcvdjdM^kKN!(E&s5wn$qba{k)(Yg7tjwzG*AQ)mhj=I@XMIo}2<9Y-1|KF}(4m(ASc_!|iHxuUTJ5wb|Cs z8aWrOw(P~a4xq6vh{mQjb$#nI|2$mcoh;@{xzp}KLU>E~O2V@-Wxp0l%j}*4P!e|O z{hly{ZAz%dk02J=qb=>1%rye5#LtC1z^d!mz3`F@rRw&FrD0hVlhqq+QxbsnhJ&J{ zloyU@lLD-Fq?z~J9}Fhz7YkFlc(x-%CA&m@Rd;A)C)%kQ@ZK=HD;j zSN5QT2G88jaRtq}3EPS6-C6mk9D}MxL{ivS1&K@^vpdoB^p-Y1YTFiG_t;VK=#x7S z`}12|L);6bCq6=}x#{&4?&;AE==}NP=g*E$9M^Vd2pwoB56`q^wJfJGmJG5Fd1-b+ zuR`+*z|3UWFJ5@#awh@oPy(?h0E`VdhAiEfOqOw(%KXXMi3_KA^QVnjSMJqr5^-WY z9X;3qm*E>*+KDau+BlF5TsZm4)Uh^te~@kQ@S1@BDV|`-FpTvZe3opql8Rp^!~<>G z(|jWigsvUkZTAn21wii2t@syR#>SmQQ}gUYuvg#>n3_Z9Gx>6P&hay+IQ2JGk9T7I zjJJEgxgqJzyO-0TP%*=D>+Te5UFv6NK>XI4MO1YJy)?`rF> zTJHVRf#RB*X;N)yvs&)`lQyg6-al!x8p}slg4lC?aT+R=<=&Tj9;G1rdfcSIg$P(* zxbDF&W$O)F9SX z&s18HY_8#Jr{PQkBU`UtDxd5nC4XYpl9ukvi!<*Rm$16aij!Pg^7n96T;NMPYSS`f zDb7!43oTj^R&|9~H@>V0wi_t`SAg&pS0TW(B7H7+os0c+3BHO%jrGg zzzd56ttCP{q$s$y>&c|G9NiP~u)0~e+liOJG{bt@9F2DcbR#+*WbE;js)n|1$6HETNlu|>u=qXrTHZPTlHkqB9pvsv^mCW zZkp+{-@$Yv+;p@(osZglmlxsL6kZa1GC=R*LN$&A>jg^FBI9_V?Ves;&VrO#+L7v!jZ4VPM-si|uiD zR@l+D#qUk!X##&)k65$C?)G2UEu(v;r_N4}1)%1s&I?gjCCd&R+&$Jhy!XKV@gw^W z9o)TZ@1DJE^cUc3y`7a`mD=?+zcjV$>yx{mv+GkeZ(nex>4y2{PjUVIBHV1ev*VGS z+P24T#h*n`jOxDn-5is<>TmQ6Kb-XDpWaj`>ye~v+*&lut?Qmy4|L1#nbjqBMbM|Cuc4wkeGmY=O;hJWMeaGN5PvTd)`ITFhSH5$%K+c-9(!rEM?# z6;oHtBn#dX@(1H=7U_vMn7$*y{MPZF5Q@CVcPlmBpq6^_H}Rx-d$=kfDDouRO_U-} z!kQi(tT{c~OOx`dg?Yghd96#4*G!RzJMH@7L7(^hPP@JwCHVVGnZ}oYw?BAXeS5CI zrqlJ=_FO-{In7X92gg)h@@A5tVFUSfX_^fNR=VSwJQ_AY!yJr6_E;sC$WdE%=PN0| zvd1b(sbo0T9r?t)JTxFo-1X$ctRqWg`pkW2^NK(1sW(5vm7XbEdza4Yrq+3`3b8jr zb;~D5p!h#~G1Q(C)m0=MZ92|ki-@OGhvcUC$zdrwgQmR8x;mM|PZ)K_=eZGsI}Mu}_-bVYD4*;l9og#KCE?|4%cl4ePEKUSNiOXu?lyxzw5{T1 zGjtS(Wy?B>i=oRpu**TYEZo7w?RzpREGmHBl;yR8BQf67nlM*zA||9jyMm+c-hp)4 z%HRQxV%^A^hcvjI-Ev5S zXxkR$NVr(aw2SxLArj8Z{DjJZy`ynS;r2ZsuTWWitoUh-h{ka{1;^a_6jv zHn~d&OX9+W9fHVw27@8r9Ws~>U*Tb|gI-3l==0~#OwEk*y56kT<{>uJKDPXu!fofz zhXWP-(rJf@b9Sw{E8mc6+@B1Ex_QFk1jnXlj!$JF#UX?DgZ#UmIXE#jH69RYE#5oU z%a@j6)(zm69mw)1Z9!y25x;$c1H!gCCVpGLWuJJAb=7PGPq1!nznEwbjq{#@&S0{f zI(NY?W52@VHAFw_N_@_4%wJ(4drIeO7}R*Tj?d@Z(Y5!zde^|eXS7f+GsyIeJuA+G z&z4XVre-*6dUagdf|tbwoA{?Ad=U#m0orAk)x!e+vS(^al<_X@xbk!#J(Q6oqxl38 zeW8yV53-yOzv(;KC@V)7bT~(NOdtq;4<(;@4K1Ok@E%@l>RQPoxfYgE=84bYN75E& zZD&rhIt}1{VQ4Cjo9f#=wrkrK=)#wC<*F2+@r*GQJZ)tb!CSLMFz@9J-|bg9OYZXG zdfrh2n65u8bR3`7&_g{l7<$5B2=iWWK9gcF@Qz+`w;^YoByoLsg(2rMsOby3ra8l# z;nOVDUNGAXnZF9DF`4il;x5C7#_Nxl4sSPnS<_uy)Ai_b?orhup2My>lB~;x^yB!n zUTDk7*I4e)$=6u!&(~iX%l)jsc35>J>hap)O;(*P{5j;DRhti|bp0uwP-S3ooNF?# zrE@a$t)+Unn39wbqwXHJT2Q)6;+4bOtQI6IeX|Wx@W+z8LDKe1!mW3{&R)W;ck8Vx z3NDXV4X@6tx@n(iS8w4v%2}|H7U9d8ct#B;YJFAQ7#=a4Tv|a)Yu3T(`g3z9Ik2a1 zIb%3{-|=R$mcOfl;`Zh5Dirs_hMA48HN2U8pWk!;M#ZvJ-kz=J=!msrt6Q)OmlKPQ%SgexU7nC zG&z?yL=P~p&DpN~wzXkSDCjVHaV=BHT5AaVZOwT3a3k$-xu;TZ8Nr+p&!-oEl(`w! zt)xKJT(XSES>@B_QRaIP$p?(vIB`2hcg}S)aso?C8yKUqx;W$w3SYs453=v!S|=ab z9PuvRv*yl3myQ_Jvq8DZEAy|$=@k#EM3u| z-xtoGy?T<*Ipa9God+vX3lyx+yN83@#q~o=65S(Ki2I08;{K%d>26cnZsMVh4(#WO zaNRhM87CRwy!gq9cF*)tLHkx~ZC&1l`=FV*@`=bNBAifmYzQp~6q^NxRooh2c%KB*A z|Min=lRt}+HF^eZYWDcHEt(&-!*Jy)r)b^qx$g~gw>{n5lRSBj=~}a^Lx#!cvBSHL zJbCcNnM03GKK;P+m-pC)GX3CGkv^JDgILYi>$VK%GF9Q>zpF%CBgyu#~Ppz#l1vSp&84i zGGR7xU%6VY@wrfncyX9DA3Jls{c&$J(8nhLN@eayD@5hET&`65;%cQ@tug_WS!DC8 zSmrrt^-D)X;Y>y7jetoZ&TRa2}N3-u+8RqEnezNpCJIfjx_wHJV; ztWxkd^AGLCKLsF`%FC8hnb7FJ)KDq{#lIr|R_J?~3PDp;A%4W$$>Zr(Y zfwC0!tt><=M+=dcqF`BtSJBQ3(bQDA7!`&ptBTj6*7fVJ7i!lEt^f25|NAZd?K$34 zImcnQ*{i4#A0>sKjoxr<6uuOd(XZ!^7k(!0nVj;UKN~0G_L%KB_CqnMjr0B|3P!%! zV%+;#C~8Hu$-fqTEL#1@+n@Q#_%rdxqxbzt^quH!pNxJZ`swJi(Qie+8GSDLchTqK z{}%oC=>74J#Q#hDqwy!>ABcZ0{)PDO#IMCaAAdgnLj1)z`Rno4Z4YeO{?Mb(?b-kA z*ol*;rca-_aFL5KKNbCW^b^t9b2G=zzx;jU$A2mM#rWSu|2DdG`O4Mzd_DS|=nta* z5&dBN!T3Y*hvN^#KNf#F{;Bx0@lVG;9RH0t`41nh{$l*s%W)5~d)IaT6JN zC(DPpG@{j7To@_EPqhD+Mw<$K&2lT=(~n1}BRy%{Dr}Eertwaps6QOn z`BFcf7Sr_>d#6FR?>1Sx|sIVf6z-& z2kHJu`E_WDTWe0IR=Tgrk!vtSdsjE3`iE3pgsR{gQTN(NZ(1FR`l4DIZ-`S;Ma1Iz z^(#;Hm&hpAT6B~CSO2hJ`^s9b(ITq4u_=60V_K0~krtiusQwW_2GYE0a9-R^_1>-y z^f6?Jc57})e`xMa$S&QCYgt$42?D7LPhZWh%yQHx5yQ-cjAf2W%&O7FJ{I|`yCvZT>ht^Jo;RJ|64$Y+XY zn$<8ys%g)T!XTnp*-;p16-IjFCtAN+5c+ECk<-Z5uNJI|YHK~I4aHA<8V){ORCa0~ zKGOcM(mq_zKkTI7777CP?Vm8PIxVR<@&QEfv}C&#?I>J<0O)w6M(y7Uwf{oQ2ti!= z@SQ}RU2T1x7A6`UK0;crL&m1Ur;5$WnPv_4q%k8n8tF?b{ZU^GvNTp@Nm@CbG9DaF zOlpK_MA@~D>{_TLt!^lOE#4Wu?_vH>spv?M$=~onlGe_slC*Yuq_39tv>v}WQUOyB z#E62bgOjdYZq{DwMADbm97)Z2kfePA`|fwY+jH@BTFI)XBR*AhJ~S)V53fh!1ax$; z;<|k!r~aFwi=OKPChNIBWq@~d9mQJSIUU`nk8qdH>F7dztS;!r*0-##>z1_v|B3bf zxATwn)A`5i)@LfYGXE$k_(ntn(jA4L6GPkL@H(I2SK)f}aPdzi<=$TJd6ANJJ)L)Y zq#xMNWUL6yjz*HS*E&6h1#~Gd(eVGB|D*Hbr{H7H$N)-IIqJ@f`Iig=|hnCf*kj?xSZF3D;m2D$!DePHx&w$s6ilS zaMD_T+*h5M=0@^SK{Tt}qN8a! z^@x7W6{njCc$z(}9S3N>3HWI~NFTvZs%@%ahD(@R5h+@uAYi2~kHo?QggBN~0%%3L zp#a%dZBf)~21O6X{RKcZ40p7CO)94TZ+&I}`#@S#_ZhuTfdDCs(n)M)s!^uY`g$iE zDwV!#ec8T!#c_pif7mV%bu?=b zu1f`i0cP*%NBP5130S+=GVtIC`=5nQMFcOB&8e>nA~= zkqw`FT5C_6Nc3qk=xM!ru{HA)eVnwOc)Fj+AQk7A4a^1A0bOZ*f(pw~p-_nF>z>x2 zBa5Gfp#bjBP<*T48C&QFjq#-QSD``L4TdlZjaLQZlkCBchKhkQA&XY%05)Wn3t46F zrEkDknv-`KWCtimO{F>1Ke_f?e^&H$;2f$xf~L@9SbXh+X)o3o22u+{S3AKd32WF(m-{wx}FXJH7G4K2qR+@ zM?olCT?&m>OGkh((ImpOmiA-i3uC-%2Fs0*>w5_(BPbRg}euWG_>M6b^E zxrTu7mQ;_=Qr`Pkk6Ww(cS)3%n1s~j8aZ7G8b#T|!1$^e@_hei}@N(t0*OsZsg-6p7ERNZOe{m&I*5Cd_;>OzKl#&<{2Tn6gg? zUFS1L#la?k|1_m;9C4F^io55j&=pU7s3WszduC;me62RB68V|7 z$fswTWf%FBZAHxpWs_$9urTT4j}4h}>-~~oTPBs!(5!WeE1AiEp#4>!>aE}Z(CgRH z`C2ZP>VHqUg<7*9AuY6i^E!Dgy)zwaqzsXJyTeL#yINQL9fE@rb({%;6ZRR6fj zp#jLaJW`}zN;W(rTiPJ+EMw|Fq%uuJ(Ulp(MZY+LqFcxeS|9v0NSr8{T4|v<>OU;t zLha{^QKdr_6z?|L+9T3xrMG2KMUn@NM#zD2m_^tgbg0r??11{7iVW%cU*>xG`baI=$Bft{je!LEzgdW zr3+C4n?=cKW_wVdMvJpZK~Wg%ss7WzR3V$E~tOO znIW;hJi_vtAtfPF152g@1Ftbgq=BVG(bs83TxH&dt9<5G>7j(Rv-mD3fatSjiB;)b~JFv!qRay?XKEI9I9hkoncxQYj-yN5gl*#8}& zIpKbx_3Ph#FDvGjWT?=p;gD%vxi}KHSSf$<8xSBxU23hBSdsrbUInl{F&A}PQw(2UwmdHqCCAa-}?6Nf<^Q-%ce%eD``yrpxIebt+H-B!++QA zSv^03Wi(PKJ^^^SS!OUmj$A;R`uW2mJB^su(lXH1ktnSi(ulNu>!VYElGjM()r)sr zZj~-VK)qRhYPG(url>j^SPpQ6r{Z(3B zP=hk&BOJYH;nV^?I#-O#;)4`1fY^%lCeZq^R5LBeK_mu>Z&a+x_ckl5VH?a!`B6^k z1u;NOTbViZlwht-%S=3|tEI5Pcv@I({fHwV^r1d$f=2fGKxs`v?g2UNYOb)_27V7l zWd+{wxghNaSxZGn4@qIKWQdvPn9HSxHJg{!Ef7jAYuYSm$|y!#kcFm%G-(c$*7kTQ z%!{?ovJ`#Cgr|Y+N*j(~w^0;dq|l08<~K3IAwtDg2Js;S-l#=OLk3PjBZrYY-@;Z? zU(^3*W-p#XThaAV*7b0?qw8sFwb>&YQ9|Mq8b@7^;t+FRO{=e5-0lKrQ&Fop>pGZ; z73FDN*NVb7R_fp|0WpzjMy6%g$Dfe^X@-cOXv;4`4k^XU^UW%1nd*AdDu_(D$+&Vc zqd2lfv3<&$LFaTdL(5r~Oj2i%q-L-P^FPS51Ua;(r=vA7-RrI4*XbtQk~n%>VwBdP z0d05Ufv0KKD!@E59|*8XLLl6xmBN69!nza#6LF}BUoyg(4UJ>`!b{b~F_wIYZ^kjC zsFPzj&QJ~FSjjn7O-nh)dOA3UL`&c669eDJJVM^n?s!cpC?RnSG4}z2fuV5{`X934 zC49+gU%(`n5x8Q#3xjBhF-Svyg#Iw|RfEf! z>$1wcpw5aw7@xtH!N}}XIwYiYDpEQXR|}@dTsM^4N{50~hDP9N*$0zA7#yZu+DfOq zQ0bK0N~fG5ZYv!)iQ0i^{f{P5Q>WrV1UnTE`n*f=$Q}??u6S7c7>)2soTkx1@qm=6 z$R>{z;!$7%Lh+EXR2gCr8B0TkNkQjG5LMkHAsYvpP<_B@(F8NIalkJh2Q-TvFzW}t z)&J@bTxWYDw&B#)8*H;sN~561M*-7lJ_@4NxAD$ovmAyNZL@D}&4FBZj05tmh0+}D zKGQfb%^@)$r(+zTh`W^qB~095qlnC<2^n(v`kOXgBUacZv@mY{{PhxQpjE&8L;f8z6DatvUw$CXyy(9w@i{L+2e-ccdmxuJqw#{@#|B%ohsjZ^Aih;KVQW#A0e{I`5~O3FwOGPn z-)TVWyKA?{UsfRqLY;g^HSm)nRv9I%YtWN2K1iAovOWHrAsKS*E4iQ2=k4+5x(nM^ zazEp_UktgSuze->=REgIAvYAZujKxM=l)8_4TbG1xnK6&uZG-E*uIkcy666S$PI<< zE4k47!I1N7Uhp?VGQina3WnUTg1+ z@Amk=b|=3TlJ=Lb>P~(;B<(LP`uE;lA$dI{?eF&Z#Y||8JVh+LJbxUzfQN-V=)Tk`gK(5F9-sif>JGOrG$3Xk_~Osr-_Ji{0w?Vh|=<2 z6q$V>iPx@@=`Gi5nfAhb)dD8hS~$JhNQ0&eOA*RQ+gZIb4MN*A5akObL+R@paauL^*leP0Zg{b{7S&8; z<;AX`Z-85K+O>HL6HXHXt%AW=HL{M)wS^;12Gy%rs&WJK^$gRBTcc(N7Gh?DFa^WS zFa;O$8NipGxJoFcDY)!YFosn=1tVkaDOd|QnHTy-O&?Js<<{s}e#+dVH)M+1q#Kr> z`a|1n6>2jGEwZjc2t<9`sy3&&a~h$tx%vzqIkTfpUiYwCYFpK~I%%Z&UMuqFXh({= zDl(QU^}i#h2lU{KahG>fB}XdeQxA+|Di1v47cNt{4aPXPT;jmC>H@Z5?@&r?t2o=J zHD_Dg$+kGeQ5f6ejBSGcgmDlF)~2I#h{XCm}`p+YDUZm;utXCVj%tju0tfIJKbw& zx+qasWfVvR+Dr|0Vz$y!oBkp=Y(*gpD_dAa@e}bAjhX68fxfY{Dc8RiXk!IJAK5|;ni$4>AZ$wREc>N# zZJ|5#hX%*{fxE(PkOquC@W-;XTnmkOv8xTyP586^EwJZyFqc}7yamj+*QZ}Dz6I2` zLv*#Z@_!O$Huc^D=G$RMsrBoHw}5&d(h)yFdwnY-LYPaW!Wh%kqscAWiJV=3-RAg+ zn_J~0XOeTbW9}o5YBn1c>VH?#T&O+MjXPd|8(G#`+-3j*7p)3abN$-GROxB2GOm4$ zvw!&9OW8&V8%SZJgkeOygm&=b9qfHSk^K+tr(g#Qnk=?HAc_=qm;YP}ATUfZEA3a2 zUv<7Pf{P5E`o{!e>H3f9Czch)fU*?&hvT{aH}zSH0JnpWS)Grta{9V~J9pW+Wk5H} zuf5BZgysqHlkC#xaS5^dmyL*}V@ji{06R@PQdv>`Zy5#n1`UN59r2<##H7WT+Ce3E ze8qzE%p&Z76(qi-;u8YS>cX{^M%D&wq`z%-gc=A5!vvvZf$cdd6M{x)DszBrGHfhj z$;`a`J70PII_~EBk2_;DC8$|BgP;u)4FWyXQj=?&ORYb+F6hk}bO07_)1b3b?U@k7 zD)FFuy<_N;pHzK?+Jnx7w6LjAz-Iwgpg%kJ`aVuTw(Z)OW>zdt z>reif2pI^3L@8`H<5O~38ichl7ffh#Hu;;jQKdPG?QN7W+MoSW?fz^3icW~?pA~u9 z?MX|o?fh=^frpEjh2jjEz+IC$!!M=;F_eO~SC)c30=uNOXa02SI(xEZ)!qF+3Tt1F z-l2RP$`7c#0eH4-NU{krG<3@>TlpoXbii?8YAwT;*Kj{ll9)|>XA%;CzLXb|;+SQ$ zl3Te+#cU-gyC-C~D=s^@#b0^FJJ)3fOa_*T7pGD2EqzG`>twfswkFLE=s zzx42hNx0)nl`m+7fGeZ2SDTj%mhQe!OJ_pgvn5L3*WT4NDVOh7r_i@BdF~+jVqOE<5qCR5VniJ)_==tAy1Lm@LVwzzAhNeuE6v&@D{UG!Kz2mme5YLGoCGm$ zcUgb8I%hFOm8jb_nQ7$107j%bD4(+aBD0qQueueAr+jwFeDkL7n+2)6va6ett2vyR=gOe>TwZ|8>#Jj6@%$haHt=yzy z#W;}NbF+&7U-sSyO75$=^Zfm(>h9|5Zk5z6Sy%@Ds@x8(#EzAONE+kW==A{u<1pjQ zvMf7?v*Dc0+2OQwve@`&oy6cak{uBoq9h`StU?3`Bodn#;(!B&X=4EjF^K>Zl;A*z zIE<5!i3py=Bo5xs_ulub`c-wcRSrq!>^W;4_wQHl_x{{>-+lMqci(;Y$@wQXEZ#D9 zi#N|Ei@-)Yi0Q$uA5tFr|=zyP!E=bX>*Im?RF7oT&) zmo3BR>f&?b#?`EPri%DnC1sox_*^Arf)w~%tP4J8B^%nKVmynwaW=-2GbiF~aDXv< zu95jvQxWM|^J|n{<%8w>LI3MuOHu>uC@b>w$5mcPP`(vsh$;&-(+OxO4wjP4qaN2vBHGwR8Q*Q6QRKCLC; z7V|jBWlpJ~^2;}sJ~dA0kY9d8s_QTZT4D7 z5Sb{jV;!mu7%?MM3?;7VbxZZbXBus`2E3G73__8Zwhy(!kG4ywk{+r)-$V4G*5H)gEj~PTsdm<^0`m|+&s}4{QKw1+4z+my zG!m75(UjC$Gu!y98FthKnl&?dr}on69y)EW9QZPQH{%c-a66ri265n46Q*kyi5b;J z|BNTZ2+QIPm!xRg2I@6-B!}7nD!NeX&5`TMyc%~Sa2}LN)=Z6iVC0LeYt0-m0-I%L zzzD3F+_PrF^Z-`cPojsczvjhA8zic2wd@0hTM6x%rzwPQhFT32>uwvUOarAq-GM65 zpv{de+!}Wvn$69LTEeo#=s?xc;qmR0X~Sl>W_bTUz`X@GRpGZTD#lR7jIV3PkH;BL zea~HLYiVjHOYl0-tmkJI8ZZQ4h9QT~JoQr~*fB$FS8_IJ*zX(%H!3EFe7PD+XlK!) zKyBJ6xY-sp}_>? zDR4jru&L-NCTCr(VBsS-1`VUsi%B&zX{nY%JB1qQW}d!<<>y+4;;F3=Q(u1nJ zMrDVSu&$v0ef`yJQwOsi(&O+_Fm@LG3T~c*1Wy6-C;IUWBUN22^hJ9ynzfVsX_({_VSlpNKtjq^A5av>m z3l!gkvm-@fNm9~W5n)W9nJ)4{j_0F`Fh_i*+RC?+(@)yTqx!)RoAn+M3IwEUld+ts zQa_B-u=N(z56I0a-)v>2`eEET&Ovf$h^T5n{qP}B!>U$|bX5=g6`2E~3Fu%6vAk-s zdG6%G&**^!6Y2pf)u@Dx)>VaTMm^BF1w~P7eV1e*aLMH|GYiamlbIZ=qAAr$7wsb- zDjTO#nOQLm_%6YmDl(JrP(rjA_zob-^OSmHGL!oGx<)$@8z{AtN>BPbK1??;eTN#? zXbxVZk71?85~&-S&0omV8gyg(F(rqmFVWXaj&`{xt4AUccfF;+Tqko^xYT^?d?8`t zUMqzu@~gALRnLPr!#^;`+JWdvJDDu($Xl~H&vjDy4w8ldO3R8-KJcp2x`Q}kk3L`lB z284CeyeJ8G9#yu>!kusBS!zVTn)Vs6a$kpmpeQJ1Y*Yujdw*vB2PDkatabZQ1e0GOB8tQ%XB!JPf@?+ZDVDP*Z7asq?aI;lq8@EA{@U~jZ+H7^MzfnT#sB6GEXP4F-doY5~Zgo+KZwMsf9 zqJc=7FY2MFYL4a2{h}O zFML%fGSdx`NoQSBq}Yla zM#6D$HD;QkR0*R!0%Eio!G$E{Fe)`Sm^-lFoC6OTKPO6`U+KmehNOj6_7EUCJ|I1$ z@}vMcF3w3ObUqPH@v4LwJ6J+a9h5*%Pzf2Lg<2^gnzTi2(ZJM>mo&uuCTfEI_{^iW z5!@~({J+cs4-`-Xy3B-*+i*6WBRHJ0G6dH-iJ{5G;bd`EW#FL(bX8ij>cK@3KQ{V4nu6GPe#*JzV&eJf6c2P|9J{MM)aYNJ zVrS7d-aX`X^!HYn{;*7t)=x{#>mhJ}un7&- zi;-1r;&%zTmOPS8JS5F`6K>z+0ni!pkp;3N(+jN?X^VuG5;98&a1|vj*JSHrSnS9T zQ%mDqiK@}6fTEcy{=)&Pnv=Y0(9t5EKXe0|M4ZIpb!hSEv86=Vv_HHC+q(I;Szcu#ufC3lRoUI;&&)3(U`U7LjT-fN zj0vaD;x6zASOW&N<{VfZJdxG>DGuC4<9DC42D`38N6B^}b(roDW~=dyUQc4SVi8^D z%@6i9fFUwl*5JZ>cXQB56P%nLb45D56Rlqile~rXaF3^urtLc z0d>SD;Zg4*SvJ44L^5F+Sm%folwTRiuN-wpG%H)agKWyM-2q{FL>=W;wwfbcVH_9- zIt)K%|M7z&<#x)?vd=}@{8lZUDSKUE@K~Ow=#_{JLK5zs)#`PEV>b|9gZZYo44QX_ zAJme`_H;4T;rJ})_ae%O6yd}_1yPVCRj`pseFW0xURL!w*hU>2NSU&?N&1#6!(_2x z37HTk-7GsPoJ?{07o}_iNorXUA2x{Ga@G`>jQQRAkj+_1T28f^jD?%00+Iu`CTXTA z2Q%dV4XU$AI~`Tq*7Rh6fEYk4jnhS#qXFO@V&B3mi5tN(FHneC&WKQn9dIi5sLLHO z$;cd`D5ru6P45PO!ZGP2q;Fj+&n0F+yTMqwzJL9<_zsUy=6>ddc1F+5AfxK&zUOIG z1OwKCSg=h%B61mfVPy!Jlr^`iQq1bCg_D9Rj1w3cY(^m?i@3910EDSi8))Ka^@d`4 zZ`n*GKSC8eK@P8N+bXoXfe)^4X#RSJ@z<#Ygh@&gzM+E#8}-P&ZuMtgAZsB%4og8l z%mUGbd}1Xfk==+y5d%M12Q77Em~w)^<|5O*41~6MLo|npeeHU_CoJ=(iGmG9eWCrJQPkx^|mt_76&%avpxNQ zV`qtgqlow^K$W2{Cf+D&E{^78!Dg}au>a80!{Cf1bHXOTzXarQpj)%l-db;#&V>mb zf=KqZzHRefpStrtvfq1*^56(gc+LL<4oG)WpXKh{ACldQp&0oDdSAerECDU2O22^$@3x#*1!%U(#)Uy#4K2jgG zQS*EU#(jmq7adg9g)RxDS0K!Y~Ld#(S z57~)e=1Rsi6eY24>uZ|dZYQC=OT_P~C9J%S3IYaQY8#lDs)==aTg zv??R7juQ{dJ0*gW%ot@L(gKTPUz zQpa{>*IVbVp>Hn+Yoetm`-x{(H%XQtYg zZ)S+qz3utYhso8!WnLp+3m5J0Amx9IcOEx828fms9#&;Lv)5Q(&%}Ww-NtmEzyh4c zVsYqXo99ViYiKM56l?+&0YH7|If@`SLreKF@bH=&{gg^@rip+!djCMv#6a z?Q9hCkEWeX;qYhZd>Cu}7vVAj%D2P5Hpc5K1x6Cipn~gp8a}J%N@~l!>|Tzl*=BM$ z2-DK>QM{kPNzz(Tji!#!^jUE<;}#DnSv8zZJIp>Hi^NnwTgjGG<5*tgKP}BOj;H7a=wQf@0HZ^Os3XVvpUM0nuklGEW@62&2C6Zsh#dT$(r3DDf z!=)Z3E)PE{)BRW&BS6HB(yg^_H06InX-un(A~&|RZIp-CNUOpZF>rmPWzGjO=gQ3Y zO^QHq9!CeDSzbPkLCPnh(3gkbzI7?wtakHo?NZoJrF6ep%$hlwhGrczJS1EV6|)gD z>e+02lP7Kp{0OJ2_;J!%?=RTYqz;cf1WJpIA#Z&E;bgpNBP-?bN5^DWP_ApI!SMn~ zU-{Ud|4r>h)9hij;Usi=Q{ZS&&g&+rcbftc#Ab@J^oyoBmQKd3%?Gf~mO|dn!|OCu zsupS>VUwIRHsZx+v7T~`X;8(>)t)FrMus28nnG2o)`$e(7Auxou^Poz)tf4T1a;y3 zKq?jt4*5ep9L;QRhVLiEoZB@;L&l!jx)a4fL{L~R`msGNOjb5N6DWg5W^*Dl+#)p? zbILXg-H6PLaONVJiI^ZWx%ebbW&|O;36ru~7Maaz6mz9f#K|nT%tmHvT4biokXc`5 zC$sS$nOQCb(5y{j+WUm;v`p7{z{hD2J*z#I3!LkhLIWj}-+8{r+Pq#-C?+8e{U*g2 z|u?QXlQJYGDl*Dc-AjeV_T9yYq(M`Ud5wRNdkY%XT^ zwlC6VF7pkqUCdtXO~po57vXbIfGqFy$Y$qPPM8T-vkKg4Ue(|Lkl_SVE7x4^76TTt zNiNv*BO5e65pE?LOHJbr_3*d9+s8u`al__xEM@FPrC#Ty$~pd|iuFy_lp60Gn5^`M z)MI_Ag2uzFJqyxBx*-T;JWWgrjJeex4+YKIlKDfnid|MS0%#KYGD`|<#Y_H%DKjdS z9EU!fYV_%Zs|`u(K}j5DID+hODun^%!lX4xS0!&rE$9>{!f&)-Usona(i=PDip56r zw&pLvy;zA9J(j{KGBtfXMYztg&7&v6REn$?Nv7bMN-+Qh-v^*zN|AI#%dM;#jtHya z-%{!;s5}Sl*IkCaH@e)sa1MG77X+DT4(6c31G%aZSBHd2QG@2B{NyjP)b=a`FemL< zoa-WEIa}eY&w{^RT#U816&u@^6r0-5Mrb`pRWTQEq0$O;wzvpB9KIJ;JKLt&9Ng<) zF&=H+$X*lInksOWOL@R!;Zk40u`Mkw6>DL-iRqZk2C_KpmeI|uHUYa*ToZ6SoHw7? zEz}_Xs`8~6FLV10ytKk?$lwWyZx<#Y1`f(WS7#-w^TR{`PL@ zS0_ICd^@lCb@Kd4#A8!w8b}?Z({<2ST-4qw35Z~z(0I7NIy)pHrLk=#u7HT?Im8~& z^Vw`M>UjwpgL>i}Wkh#zB)Vrsq9dx=z52cZ7aTo}2*o>4WeE)w%%Z^}Y?a=4nx(lk6?Nr>-!q+Ib=D4r_uWT)~oc=33nI zB!XqJlK_HZq*>F_Apw;I)5H&|)pC|#3Na(g$nqf+v z(rQCG1Yg-g05`1@_O+-pp1J=JAD#vsg!?Nd9Ub*zn$r1nUBuD)go;QB57#V(W9Fy0 zx%EjUGFK^V>F>AnO`gt{XEU6!-NRjc7K6CYel2V5Uq%U2m%xFR@(~f5r0OS)tMl5K za1UZR257N|@&JKoeaX9FLy_A6wWw7)PaaW2_nVPL*>!pvYO(90ss$E_%;NHMM*MCW z7OYp@V_3E@xrSiY*&Zr4Bf>*w$G|E;O9OU{M7hXE-McO3Pxw7$*6-(W#HZAN%?B?D zU$%-i4yg!g(ex8Ytxx&D>D}tF%3EiY+WH;+CEFc(#_6SuX15TqR(IDf(KX$O8X-E9 zGCLeP)=x2vyyIpt8Rlz4zM3x0(;CgzHxPjQlEj9mNc8|6Rby)N^J!Y$p~$?T;|MH? z4|U8q!9WJWpJpj{5ilkkJ~PO*I7X4gqDO9bt0$utkb$!IudXoB`7SH6{b1hm%H?5l zbIx$vZT+&=97(fv%%5RZ_JP)c+blJF$d4D-`HTECg%37zAdf8A8knv>7_!l zqH#km`5yL^8ba#^QG~V>o9s3a05Bq2<{FGPOB_p7238gNR}zZpJvtL)`v#r5dP)dU zsSS*x2dGtRV?~19~<$UQRxjjb4jfebRASc75qVP@5C$%H{6-+=7GZTJRX>zckm$C_X3Z` z&TQVl6|hQ}<0br>)Fv67l_Loue&rNI)L=h1M{#`S7=UT!>BBZpOEW4kkaoH+O;hDW z-)zyo8eqv z$^^}0Ujh`_rI=E)1`&O*8QLf|0hFzN46-?P8#QyWB}%QZH5OEBgHSZUR309y)-TEx z+(35;lUz4l#N6WM`T}*%c`oZi(){Q|K7;h??N7#O$zUS4WF4{#2N+>&AS6Cd-fv@i z+kp;3P!;$MKdxcH1;zmlJzc#cZMWQthzyR^oyCZ_B#B#fo(WbWmb@2gvC^&1jP(=o zzdfH|$jLb0*@&%LW(ts$n?Z^&w?t)+04l0oW>j_3ccfv<>UI;5Hkr+e{cAUD&9I8J z|H0U%ZQy^r;D2aqGiy-zkP+2p;)i0SWLnCws&6yy)?#F}SzF~PiV2-$4Q@+y`ax&t zEn*u`G;;D*=NZY0DSZjVNnmNg^ujV+y}-<{g2)sfX=+|HMY?E;A(FFNHZ_A5S&R?R zlmZL)(-i6w8+i^Lv;udJz)bqnfMKg&pCV!;`D@^S4lrCOLEEUckCGr2IM{rVVJn2` z`?!jT;9Jbb1`n)hn?(RHW2ccTlbLDQLXlpXOm%Yh!gWHGk$fHv^Vs3DRIje(g9Bu< zq!bU?5a8-49%e%ztbMtg=3f&HyM6AA$;!w`$gau}5e%wk{T_>k0J<+jz-F>%ZcyDU z8$jbm&(_cn^159S#z8K#wKa;(w$iuC%3Qw0-`rc`bDEC{uOlFGr8AiIDvFmbI|Jje zD$Pd;yeMFzypqsHgSLyrfNnL$@x?jAdz>PSmyaRZN7Bk&@*#rou!xrT1~xQr;Pi5fTUT z&lqU2Hq{c&(r7M((ZLP6K%}iN33V@=ZrY>|at;XJOj?g9l}1@u7w+xFTie&uLY}t$ zti3dR)p}^H8f~Jxg=Ynr^u@aB%%( zMI`h~c%5~U0vl#|7+CI4L)EIL^%kp>`vNHE^{Vh^pT02i9vmXVqzZ|M%-PSx9PGcN z9V@p%WAI~caMuX_i-33=4HNVajUXF+gH}RDZ40<5%a<_ zI&aBaM+`GPM3gnWxmtr1b2M#dM_mTlWsk6pe=>Wd+DM@?wnuEM3w={b=R!=tS8?jB z_gN9A67A9iT!yv2qJA|?ssT05u=DV9)s9W8RBP36AZzJF_>7duvRGsghpk9Cc;-oO zoFNJo)e!;DBL0t58^LIc>DQTnS>~dbe=IW`FpR>+8C!qiz;&A_v-dT@v9yxOxQ$rZ zv3tmdFFlc}d}R%iGmM?{aP4L2vib9ktk#PautMOa@%W7jaKBeQEN)PTSvA)*EsMsL zNenk7w@>%9wGUj_K)!>j*=|f};PRvEQ6_W_mi0CjhLiFpBiBUf?FC83`dB_$eZ}~q zpgYbjciid{?4C}mk3)KE>ifVzebO;t?`kl-!#vlpoY3%q6r!zxUc^?<##XU?dN0DV zY8mXtp@C+5N;6tEDkn4)4wY4~08?wyh}3b(^prnQ=2{XifvGM5bTMp6`1Z+nyqW~R zR9L|>iA9_8v$hr9FR{ok(M&}bO&d2?5U3cGv^Q#&XlzrJ7(ZoE+owOVI*F(mAuF_VWjeBp- zbwmNz#97h<`6CAgW}TRbpKx~6u+hH5S{GPGMmyF_wZTd#DaIo6h&`Bg2EYDvy++mJ z0g_@IG2pPi@bxx7bsK2OlG5gX>~lm;N_G_3I~CVGtcwNF$$0G!RN)geQo2@V;gsD! z7`G?lYAIz6*7}U5KuDU8jHTnHi|~$K+)iVArLBV>_#y_2cFZHLl{1_#Y_nZ;k@>!xXPZ_zxLNlid6ftP{ktLT#lq#bjtZfqrH`kgdeVpHjO?dtuU#{ zd6hO&jz3axA_XUPnHP8dLFo^&LAXdQKM`xEP^2<*Z=6p4|UW-8;a=gyi05GeE8`Mo)Hb^+@dk9pe}=H&|C__T1XwH|WjI);Rn-|yot#6^zHTbzY% zsZ;fKA~cAv9fG$);g4Q1p2uSdeqnIw{?2MUR(46$kO+-+EnXWu;Ww;>0EIAX% z6E$RB;T-B!PSjEj7j8smpfpvN>vNL_U$3*Et`;6kqF6;adIWQ>5M4aLUwTxEa5>Dxc1>cH5!@`Gz z|6SmMhd9;$o#YA*Um7AEPJ?qWtlsif>5SwHrHtFqfOft4RcJ*y)}D~mVkaBFeAqKB zS_nHhu?+h*_Ub?BweTw2a+CvKH_2@FL~imV@}m_nrx@$KYDia>!`wlo8MVPGyBHj_ zQ;y`SbgE-FS3s6~+uG$--%vvgj9eG`);1Jw`^sQ6r7|wC747f~R=@(3 zKMTm{nXvVyVkRtqo1vMw=|)~B_S-Msw(h@?z$^&>XorP5jDzIiEC&YJ(ZYE{UvpKi z-=NukoB3EfGIvR#Lc6JT@OL~Fe@t|6f;OdAM*-pro_0mqx zWD!(hXZA84YzMwl)m_4-CXcP!*HnMmhto@|vw3H>kM}v9O~coGXZB+}Htoz_rO#Ki zx9G7Tms;tK7OflYxr1-!E#zZaax;&Mc4jy6*rF3s=kP#&JO0X7uUh# z^GpSM{2~oVA+GCg69?f zY^8|Jp5AQ7J#<%2-(x*sIM%i?y!%66{LJf@@Zb3TzdP{0pDOENJfl6KTO16o0b?$F z<6WnJ9~rSZeCgnqKAo4v@i7=IKCJak;R_%A#<`zd;xNF8+rRzuKT#GRvGuLtwh#X7 z5is+taP$jrUwK_we8kqbga`lO{igu_qVTadeexYF0v(4Vwth+Y_MiU!9XBr(&km1& z_*-uoFN=@Z`o-b#um1I&w=5Og!pWaK|K$ty9fw2kf1JPU`vtBp=kGG-N8f0}4lx~0 zosMxXm!rcV!I0x<8t(YHZ~Y^K&5vVgXD&SO`M)~x`ez9Drtr{%A2`mGpADb<$Q|G2 zeCE?)O%Uf{6?mWJ5c5~glU=xvN4QU{3-_rs{Ms8o_j#S@~~%x8Z8&gBcu&MsBRm%wPnFyDjuH4gJl>%n|;_|!Y! ze)sDP=3AhTZ@zW;L${QO8X4yQ`nePDVAN;BXFvJgon`5DCKV(c(JQjyiiO9Pj)1*Uv+dVERsx$L()<;U>HUA+WvJ`G-J6bxfq(LJ z{K#8Q{U#LY({W39_-pSyHC7^QWOU#Dhi88ACj|HVe&J1TzPT*E4&1%zC=%&nzlZOU zrsMBE^ye#1*-Xc|@Q%+u^_HJ38y*?%cfITVAA$YNhV#GlzF+84**b7{DZ|)b7yCW9 zFFYMj-1+FePTKpRk++@w-8-MDz~Fe|%C8+T(!TvK?>l~L+2wU$?oCJ0NEh=xm@hmX z51sqtZ)k=rWVgUVe(4Rr_!(GGDd|TPvA^}LkH0$?o*(*e@Az4(4ix6ZEbOv7)!?fjW%t{8mtE5H2!u_b21?;rW*BNt-UU3&PAgyUa-@-3ez zXJhzpw}0%!GZpEZ!l8r5zJ^9H8;+cR$9qPfi=vM%=6kpvX)gZdA3pHTaxR9yf9fA@ zf968wZ@%$~-?W+dcc1#&-wg$nHU_NR&&8G;C_!vbspotkAh zr?d%7Aos%Y;yEYfQrRdjJ<0mCjqBk8%DDXB_4WeApdG^JRxY@#1LT5> z@-7!#RsnLsMQfkpA>SY#>`btNkzx;UVWm7t(Y&WttKFJ&l|k1CvD_EuW9!nQyR@)4 zFW)B0w=x0WmtH=8^s@4!%$nL)5DzS;tmFn}_WWU8bnYIk?W7N36ydvSTu8DDJN z(ZPPPnBQ@bWEMvU78mX~NW${+lj8>#w-UUb*X1WR99W#Vj=DC)jXA`@csO*c!!WUVTr6ZK=Y*D z6U9*hSiMnx%-<+9VQU&KT6_knMwM z(WhU&q1_6{53VeW9tC(A?6Ln!mAEpu8VXzan;q_psywr)g*`XO8evD;*y6z`(A~;V z%@OPeQw*+a>};Y2Rl{l=3*bM`9dPF&Y!=VhP9w{%hDC>m;;>+nu{Z2UZvTQxw1;P% zz%nM&m=buHd8}d=`~S^_urK3jaJ1go5;ydeZl?*&a8LD?n*WPH!M!2RN+S;go|s)v zgbiP|uo;=Q9j9!*_=Xr{EDB>AYRaN{*oKrxRAJn3cR8VPmLEu$#$N3^z2ENe2^(+FWrWHe-!JJV*|#k8FY!ddkRXf`xkf2bOg<|jnV zqFk<_^9$cBj2U-}s36|GV)OEW&G#ZoL`!msHMo#W*sKX?8@ordBvrt1VAzsSEs`KI zR6A&pWEU7&mqR?$Xug?9nDujG-_wQs-2YZW4{Vvex}K@t;KvIK-}E8!sTsrm@jg#wr-_y1=FDd$KGC$_h7@tOso<`fM) zcvWpO%J6>hw1^<~zdw#9*VsF6}>>vQtTSv`fhY+vgOFxo5M_LY;_6h1{V7 zg;x@p#A~6hm`Imu6Va*{hpelxPG<06*8n1)i$u;2tjf?A&S*ilW12p^5yk|9&@9t= z4MPL9X8YN}gea*P;+rdpub>K2H4th5h*ZFS;7ve15If`}7&;&oR6%6sNnUFufsZ;i@qGp3KqWN9{HW7_tpjLw^(m$^nS7-eoz zfZl9|(|IR=f~jd^oHNG!|1@K4o=?{M-WUsT;aS%_#W@&h5hO)k0A~;d8yHC_m}Kh^ z6}+xTBA3Cmz(Gn2!h9#uPOc*!w6&#IHJ=-a$G-{=MhL=uR0OBl6Q{-h-Y3nYmO#ZR zQ5z)8;izmhhkJF_AbbyK;3AzBlM#=agoptnR6B~Dv2rqXsrje-XI<*Ej@$q)g+m^J z&QLOUY%kA;+qn*a5M}Wx)?7LNO((m}z!ggX(;k3_jsbIdV7&u?)D?~@F;Ez?WNK{$ z9m|RRX}$zhSSC@bz+;9ucpzU`DA}z#>r8sMe2J$a40H(8nX3EzlxaTieb9so#;qBD z#evytlF8u#5DPd=yHKlw>WilS`NZJ=l4!(%t&|_&_VqUyfqe&JX_twjd= zKZ@;sw@}cXO*UVI=3!F?QcC37BPrca0FOrnqq#2%P!p9y*q29@hc%V#i%@!DjgT}3 zEB+vc1b8+UrU6w&dh>NOriPTGB8FiDePS3_5pAMcC4JHrE-t+!@*-n?;zitaCjqyX z`Du?4z~8KylQe7KqR9!Mf!TwzyUiY4=SQ49_pdNB>1gv0L^swQCrP%%N@-A22i8gh z_YCVpCp=?~&Jq3Mpz~5FAeXeao+r`dSA5sxWo`vh@axb-TSL#g0s5R zGgXL*WLE%L-ST;|nT+Bt%<6x@p_=TK#fLR-O1qtXX z&6s@{2`j`j(Iu)>JwbU?F5IwWc(TS7N`OTIE!4ennk2qLS*Nv8&e|G^nq$c)n@mg- zilP556HXh$T_(A@u`Jq1$N=Y8uhY<2(go@?T5v3yXR3SD6TH(j;wa%RPOT>;cd46C zAi?VqrN+1{KB@w&(lR5CNyLEGpIUiMr;iMMPkX8@ghKBfC2~BBaHp!8{+B$V+mZXL z9ib|zJzBRj@6fi)wHOTHF|PRLLZP~Z>kv2V@X*yeQcvsgqE?L@W<3q6#|y?q-1ST} zS5rTw`<9&&ia4+?L_0l5$rHr1C{GHn-}+AJ*n~R8kgAtrA6Wk=MH$}E3#H)-hh6pN zOgb!tIs*aCmZJN)HnSA)hG}2%_n>nQSGX-}{iAapN@Z6j(+ucs7Tcb&q0dFN7(=Q0 z9gB9-g=ICCdg*Hlo>b9j;9`~)q|^dnR2tXPyw{H+Z{9oBTORd{QN1}g?5#+#!=~}S zybdnPAJylCevE^+G(3`AJ8cnYq|Si!@KpV!dbV!EW`o0s)NHP?ivlw| z%Pu@`qhw8Q{Lid)Iw-xh z@DB!n0(6A`9$~@do$CrQZ!OUeSzHZPmJtwhwOz4`e0w@2dtV;@k*u3xzINxlH?$uo$1U|kpYTY9*^v=8^qFlh$_7$W3U!Ypg2VL6SSu3bc)7P54j z9s7r_Z6&uZ8eqcOWy{!$=b5j|N%L6UjyP*_$Xn2i-@f3Uz{TxK_tN_waD5u8klYyO zoq*lCxd?F-Ht*LCh0a1!fqm1pC2CZQZI~U&#>oMt$Q5-4#wAB({QYsc;~gc7Pu;LH zc&XX`hS$i_UoLLCkHF`zx8XORDDHv+&Zv);-9YHMyd`ve$^+F*bzR;tsuC`*>hc!N z3j&S#EQhydba=}G5izKl(0Vyf1vMJfum2{SPupcZ@5-D9Q*TgL8$U zqF783ipM?hG)!r3Bk%ntGAL>0fp?*9W1Nodsuck1Yb7lR^un2pZe@l7QV~vIqKbl~ z(2B6G!#LF{6#k>pd`ZHP!V922bFKw-D0u@o2&vzo=djbVb{5E1t*&`Mml@F%RE(#k zZY{`I8HiElc)JS`{69u(Oc9#W55@x0=#nb$B2}?OdGX2}lk6xalt4N?X-tXl6a}ej zs#}zIFKQ8J>MBZ!Y(Hlgu*S0Cm+hehAq+HC#Ku4$6{bu4*H(vG!bLs2 z1|y?&2qWBHI;6NXa*P!}ed@L+$60~;b1B@mT-yix^es*W22|jI>?W2nIMIeDIZB@4 zURfg0NM;yp#xJzcu=Y8kp!P4=Ak)72rHtzo;-};(CI%n5{q3k8-NDv+$8BT-J z;=h*=Z{FV~hDhCyy8!B?IDuOrLU?qfES;;cTcVln^7*wz5;ZF>m*|PPXhVq7fF(R} z>f-Z5Qi7MROmru2L9`0Z*i5s)JlQ3!xf^6v$G;+zX7vp#fno_0E%RaDg2ZtfBQvC;qSlpGW&7;^`NjuOQOo5K@iy2nfxg{Q4Tj@(oR%r4$9}CAU4j<>z-!EL5doKoXO$3mc zT6rx^#Rp&)G)tQ-n^`nzF`@F|oNkTj-Yx)B3i3y{3a=$hD6E1SxMR0W)CRD)u*vuw z7*#n7Hi3IZa^g3s4gRKul}b6h^>D(@DR5#26i>+J{%&Q|=wf>3r(Dh@yU!RjF-jq% z!67oHCb5O-61T(9C8|;nB!Z6o8g+oxU$W;QR)K8d+%$;g| z1~>&G!|B86IykioujQuXDpqwVkG%e&1B>;~5TOj%me6nvpT0{NHl*}n_z6GV*2C~8 zl+iJqtczi2A|BIAdl-H~5#;F&D8B)tY*l>~pgolfQryKO2dQ>)lPF#g2z;cz?PF1 zyGB7xtxK5GTw?j92dJoKzTiP+LV*q`Nuk@LcwPmLLMfnvba8(kIy7pz8s&K+WlM^b zni}DucS4!nKvyiAb>fL8_nMPRXQEF-H+UE)s~TA$`$-=a*aoSD$TVlzi@w5kFpy=K z-(ILuiy`qzYe^6*fT1ty&}qPsWU+F)GceY7eCOfDKS z;tIp~Ba+uKT*a?AaHkKUIsw<)oK#3*iu=GlQXRO5$Erv4&cd$izKUk~VtWs4O0Xt3 zJf_&hAdRq0;53_pjA0j8Bsp4vj+ANkV(zHBs}##MxJ5wnBLmZyAfJe5dZ)2`y0Xni zfV^g)_97|{z8MKCJI4ciAy#>?2KUjVV~v4iEpnLw48Q{Y0Ui`xvM>+A@D+|@H=p&Z zjCWBF2g_Wf7M5orJotu{WuzT0d_)0?23|Gi|7f&~W>#cUDFH&;`@B?UPY;%@o*`2| zR3Oa-d6`@B_j&idaz=MK-M*M;!bA>9%3OTM6C z>!3|Z&T9wN)I!cWqyO05A6PBL+rY1QQp#-@c6^ys^gE8>GdPyQos;NVC7ToPNSw{7 zq+NR=_EF|?#+FwYo0R3#I+_ltmZ78R2hv3W3i#?Xp2lp(kPv6B5`t!}YEZ;J7`xF5 zWB{V&I5EEtI$!LFiUa|2gYA`D=$Miqgyf&8kjW(_ihHOh$JR(ZUmt>PZWRTWVsf$$ z#PicHWv2<$W$K$grLCX64T=T-+Byn9;SrX8RDg}!Kw#Ik^hK5M?O-&Z4>2jJx- zQY>}EbEPf$AmpHFxrkv9140&dp_}^bG5nf7MlLjTv5aTMyud-Bq~D^NYZ)M7*>D|N zHmleDZB%MWSya35H=p+YSW}coM9aKi-UFy1T&IE4Cn)K*-0z?PE#b;7fg)-Cip3h3 zM1SFYZbVZO9@DK3m>&UO2RC7vti7`^sSu*92xUvb6%Ti8Ih>&Zm435I|j-{FQ(P&myOH zWyAJN98XqHdL@i~t2sPm!4yDEP+#iCOJ+q1b_=a$szU2w#o4cQC%nb(0m{7BWOO#M>JxsV@DB@C{o&WJtQOQVqpF zc)P$^z}N`UuWB#*$)|OR2Lr`e;I?CGF|+*HXqTE zOidWaQ=NIU+{yKL{p(J4;`QB7v}@pW50Nyf$p-=@T#@Q}Z)gj$d8N-Uv4lxQ_W-3L zJRbc7kNUVK1yvr~w~@M5tJDFwlbTx$u3Exqi90wg*^EtZ!f=BvveDNjvu0AcMK2tl zY4p{{Y*MGue|RwU7d69Qu5%6OfRh9lgy3|!?;vQ@H~_w|zy_zyw|uejazV%a05)~S zSULp0&rcGdrNV#4`Zz+T-h-QdYOAcosMr~xRxweG-EHo{VU~YuSciu7dO*k*lOGZL z@a+ttA!VW%CG{cg*{O$I5|07RxNILxtRT8?a)wJrP2s0b|lNTH3_?7ByTRK zeJ+w^!dtGQlo7aY=~Xb*zxB8kkZP3aDoOmGz8tot#@5hld)iDH89E4 z(|Fib<$1j4L@__)Y;^mFOas-G(>*v#4s3fcy$A#SGEw{$JAluT3-S;ej#^~-jl9ZI;P*jpDfG^Md98Z^=< zWnzOYFekh-2=ftSZJ7`Z)TRL`#;#0Uf9T%PJ*b+(7g+c^xKoti2g?kERXHAtbDv@w zXlwm9B^Ewo-Z=?f8K_K3idNcMgEwD==Yta$0#(G7t9I$NNdzkI0);z9bz=;TNBd{M zf;;%NYLfM$d^W0Dfrm3XCw)mDJ?LTc{hHndEljkXRBganp%wD(K*=&E5+ITBl2ks| z+7y?&SgLXeEOex_Kwa`npvlNAF%AEuX~cY6qv4x+2AEeT7DS8I=y5o;Zhl?9i{C*m z3+iv?JJrC>$<9Ox8)!mc*`4igv9=!5UzAt&!pHHQ4+P2B zrtbp-MgQWZ>k!U*U&CKnmFwgn?glqZnXZG{vdmK1u`8g}K0q5>=QTjUF{~Ml#+Y5=tdV<`=bC4cnpx3`I1=v7kTH^^^TZ_>Tw`<1nhO4`sCa?znJQvd@OCz*|_P#R?! zsM>{Ug@+9~HZO=2(ocgHL|%~93kY99qP4o5x4t66-jo`7Gdi8rSA>j^*PhX|Qx`8z ze%@}+lsJ9|zq)vVe6!G|xER}qixwAt!*D$j= z8;9B6Y?!rJ@?qvp!z@#TZ2uKfgL-9!?hYP51_#fqkyy0)%9-m~IixiWXJmXYtVu|`f-^J+1GYFO=4WRl}nJ(VNI zV9n#<4C5C(n?n0ahie z+q9=NvH{U7=M7lw;&5QTai56%({!_w`2#`Yn(ewM6l_7E#aQc@W;^y>wEbezeB1gT#Dux24nwZg8{F;hLUyBlfnv-L&|vPt*e$JVT`H37S3dBjn4?~Hi;?){ag}2IN=V5#oCAF5h zLtbWxjP)jRbRREI*fqWQZLsg9mG?oOtlPsAXrQpp@O7SqC=RPUW&R)nh6=N-mxVK= zX#spcPl=&>cxpX=f+u#FaFi#CXtIY??jC9VF%KZh zZ9e}F28E^XIwIrqB9hbA49S8F6z~_=TJO}5sgC2>GzOaO`6(`AmfI&uyE_|#Fu_#g zlfrjF1q<08M%7SNR8XaT=!9PFQ`hrSnS@Tr`Y?D>-w)>A_hUTOcc8HT3x^AGq!fW@ zie-Dk@$`kF8onrwNWyRTTZjC^U8#Jf%;>}~FetGICGD|%=0~-$1Uw+wEoOv<`w zmrEUV=t3JNwn^ue5=L!B>)<6K`ks;$F%NNNF0alzFZpg^+4cj0JT2&;baK z_uWe^n-s#^^%`gbMTj1_x3s-6Oq9n4bx-ry;`xvN*NZ7}(`2HX05|q5Xn=R32Mx zMTS+abt+B?Lc$d@bYh>5-7!60%;}WcE~b0BNVtLBG{6Se^O)Co;1f_Cch!7>L~ur! zXWO~rK~y?+%r&1NzeS?2fedP8l}f%s5V1d_KTNRg`SE<0fFd6VOvA??(5w|zfWG$% ztaj=d5A|pKb<3zJ*UdPC9Yr;2;_mL*S8!`HY+^~8^MxU&dD*>^O9~QVG=(9{Hhj-S&I5hyqObG^HIv8_+p``#| zfW96**tIwYhBymg%&Y~2ap;0E8%}>*V2IcBz;Lu>NBYtB0YjV2v0b#qjQ8T=P#K8- zx}qw@o(3~M*`M+L50xkw$e6G6XFOvW#S8{AW)Jme{99|<``$+b*`xg#f7UuPq{jSw zf5x|3M)BT(rt@?C8K1PKef0aAzN;UPzw)4ZJ*>w2`ZIoNJs7jo{TV-N8LI?+F_DPa z9p>z*UHQOmgBvTqxHqWsi|Kq11h|NPXB+&kdxmTI!<% zsb9C$^8=|*Sn87lsRvDV9LoD4J8Y>(22zh%>hXcpQzmm+HYKo?%z;92Fo3? zBoKp&GWd-slwJ-sX7Jnb@*9GB@SC)tlz~7+#45pJlF$`1_`9LnV?aYJ zH_Pc{lD)8Q?u5?bWc$?kYdagSo7S>+leeXvAJ$P;J<@#Af(K_|GAfv07~rJcq<)Mo zXz`Fp0?Dqk+qJcXe(S)=rLPT*ec^Y|OUCw70))t=S_VYVPA)`6wufI@14uF@tzS2( zX!461=h_?52GpTp_2Dp^plrBBaRQB}vsv35n-|lAKXEerP^EdbZeBUm`C@lZ$7pfm zT|=_bARF|u{udkBP9mZeeztn<=>Q0bo8Pz8x=T=^M%=A21b&@zk&Sj!dkZ3uS(Y(i zq_H7s0(%YOKsav1FK?&3j34T3A%G*woEdPpT(eG@63G&tAr(j{D~tz~w~j+8GW9C8 z#A_F;S@`~S;fNUjSMCb<0Z=0F-Umz7D^X^48jlB+6Rb+4U(h+eu=>*3!@Dej)#~D{ zw=XVpe&EpI<15Rz9@vFOWXAPOny#;b?zUM0<>NZRnoJCnK-7Hi$VAn)Ne0!_Ko^q| zheA?)20aa_k=aS~X{g&~iZo>(Z`8CnPv{CR2&0h8(9%y!EW=6wtT+NxqBSht(;=9o zk5;TVc&W(oNZ*8-Y6iQyLzAk#8ImR=W6`ovtL75PY0`z95PeRH@2ZgEi|y`2J{0Q` zV0zcT<{XMsggGsCLznh+#0;6!x^f*rzk5AEAsEztJ8}%Snz#VHSk!&;aoLI*k~MQE z3zI*TC`-#0U4G)`b2t#kuZOWb-0?8aNp~NKn*LdtPoyYdt=STykMF3P5D6bS@Ht2! z3Wx)R@bMD5R^?bsrg`Zu=F=`U~U+6m}lLcgXHSHk4< z8qIQnY{GJ(1&~f-Yd!NCF%qJO!#`BH<=U-Ghz>I5+K_}>@5)Xnhc)H7`9*E5_lcQU zHNiqy5tUr5$U32n@fIQ%i+5=iP&ytK8}D9xDm?&e2QO#>ZjeELgMbETmEm?qNqS-}mOrofqO-e;2oXwZ!EfYQgzw=R`41bk`Wdk>QSR$YCC)B~olu_X|jC1N`8KdE> zsC)1q+09vTRwc4nVn!vbh=1nhaDC3>=gs!H@}0o#)|XqCkip7XBPZ2Dnk6vxShfp{ z*If6S$JS|h%s-E>*YJ3+;l)etC^p^V&BGAf29>gP*qIIHTrmqG1W$6qjdw5Z_RL`t z;=~L!3)~?yLJePgP-vZLy-j0r@f16r_BH1#6W-oyytAF{Bvm#X>ZD>soV~l7GDZp( zluF7tDOh?dDHEiii^aN1xEj*6pwwa`C-P-F#PlIb_342rL{jLfr#8G?=1peI;`o8i z7Db=mvN-lKN!jpbfv>>$ajyBSk-GTtJLn)e#4@7U$R^iYy~A{Dp!5PQGjmPXysJ|9 z9-~o9Z^goPDhFtAvI(CvM9!6n1T|YuM*9f*SiT<GLys$9lA) zC*SVVleSU!^LzBpw^MrZ?YN%t+flvq?XaGFJEUj)wj9%hH-_OTeNfhOl`N|<%VT=- z?R@3i6Y<+}EO$uHSoLAygMs9)Y^%pej{HNRV^T0^2G$O&PDb1GZh1VR+n(I(R?lpY z|BIiCL{1@Tp|cR-uvkfWmX8@&vztfPZ3`1Z+19RnYlS8&B)MQC3Q>yWB2m7~h*E>7 zVXxBU*O!5??2gY^U z|79UmI>|=bw7no?6AGDxTiSYuh@R{wcthPFP(5o#OjU zUlTPGQ(M)PZ0~(dwMK1<{Sh_wxL5r2OWbW^4YQv~a>4X7InT_m1z1pItWWwuf zN@sLNLLfp>O_@#XLQQQ}Q?i5hH8nkIQMO zzEmUijL6h#%IwY;>KXUVv!_3Z#EDUxviLci^&X{H#xblkAG8B!}R2(bY?zm7>Ty<^!8U4M&L1nb2BEg%*`a(^a16zHtSG7@_iqqI^ z-WO^LOOBsI?;ERp)TSa?nAQA3O(8E~_1>%Sr%CJmk`~A)*}E_}zEB28zPdz3Jt3{K zTehde#Kd&x%P2Mweoiw}Ou&kR3zUJ(?T_XNmz$>Pdn{8M-AjBG8N}#**bC%u*#*8 zQt!0X!vm>OqjXnJf8G<8%C$6oHAo#}=V2iAeoI{$NIhez4-KR~Y^mo4QdceY(Sg*j zTk83NROx05*^>jQ2T_F3R1G{plGVQaGrxajw1#lWk?t6TQ`3(#d#*%Q~lR< zd6=mswLHb=0%OC~?gb&oHb{s@%~=IPszLau^=DRBmUT>C@tB~l)~~z)DC`(J9mHu-y1ih4N`tX%=O8!O?4(X+v{9Bg%g~8;bf2d5h zs^^ln|1^SAkS)Cr3tvn@W40rC1^s2(i!Zi=llt@2U{z#s=T$z5)M&>ZF_4rOa@H`v z$X5ju720L%vo?T)z_vvE9pr>mCKh-S1ls_TdWjuJoC$v{>7DjVi3I4K$J30aK=KRl z#^P~}m`lP%)veE|e(|Mwz|killJSj-=gaVY5H1Ar0+Mztc{d7+`h%0F>GDbQFHod$ zlM#^=kQ=otlnP@*EnljS22Lkb%=L{$1CwhMCFtG9-Bb%omEHK_JIQ zj7yw5P{$n#1##qy?V~S^1643ZYoAxVoFQE6DG3np4(9Q;oWDr*DYeY@Qf+SwcwpAtzT;BXV zzER+MjQknu_k+b?j}`ELRHvDE7+ASt@b%gmW4Xu}(GsXl zs4lPC^gGpGtjo2G?wR~=7o;4Wq%lJfZD5!!@}JaNYj4CKFV@5+;$%DOx z#^h6yFW!2K#Q>P#$j^mK0Lf&L9}obFSpdBY(`zaR2|7ZJ`vW^VaF{CFX1**nA4~Bt z6=n5^HwlHIRWv;Royc(p-iM(cFg=&3*AifvF~HtHd} z*3B&(nvgn=G&CQyUN5k9*go^Ron|Vl54p(4+yiUPFQ>W4rx$Q`s|X7iJwgqA6CrhK znip`pmIX(RZ^r)YEKuF32G2cF4Q5SI%^0IltB}QkPW6{j4VH5E9A;Swr>bPWT`s^- zA&}aI?0mfSmZHXPl3b=3*9tM^U=nk2&KM}HBN=R=ZN}B+jl)=Q@hoKs&G_nxm$H zoxye^-$T}h@gMp)W<-Ryw1|kvv?8J!MH>~mIMAv7G9s!b+)g=)5E3sC-l0MxHJ_l! ztbIaD1sye?hkUtt;7da!*Em3xy(@HCbB)8n!lg^$X2Pg(&>AGFo5ByFQq^6L)h@M) z*$5+sz?w}vN*C-*i$2^y5$Fw(Y1USVjYI-%IdcFjSx^87b%qoBel>@-N}GJL+Y5Bg zrdCR1MRldRN(5{4BfgjN_yhHtE@rA+&Qw)Fs1jxnK5KgYMNzMpU-cq)C`iB#{$ozC zhcGjijnxv^2P1FHR4S%z^)r?Vh(Vk}w?jf;7QuSb)Q@~?r@kwn=v7+OOS?7wWAt_rs?d%>H%kT2?61_e=Ubgk zJ18;$uW7-I@+`F(vJSM%z2#;S)^0S5K7@DwGS9HJ_J36>urr`Jp|Gk@Hs6pl?8ZSMC&df28rS$l zCDA8J;+Y(kiJdUkUS`lIDsk>ht%E*MrB=o#SJnFJd&qs1ObZ)qEBZtc(bh8cmBXIq zfUNO}O0*r}-`4mEf4xHv5axwrev*8R1%_36qh}$EqA;ux5g*RozfUa2?q0Z zX)Yim37bypB z4WP~?t$EA}wh%hPGj744b?_g%IxNdAjqM~)lOO&uB`U+s+y~7&zre2D6xYN4}F~r8qgkTwKgg|Y_OTjRkmPVOXI48}*=?@}X!sga* z#l^WgqV(uZ?&*#s6@IMV*&vmH*GKEZvijNf>xGEAR*L&Vo>4`3{LznobIdO8Q#LQu z<1V4rM${*5F;5sPl^HpUbhj3lM%+N83XZUt6qj?2Uh!QAi-~RR%lSF4mw6r03isuB z*oe5EfEYxnbb|i1pF`#CFwuT)(P%HgiOn9d5FX*y`79|G!m7QrKB%r|dx{0AdA3!% zAnZox8Y~Fy?FA|4xm1`6Ss2K5FtPe}EER+*S1cI!bJCKNx?3M|Z0fdlIEG5>E^NQe zkU#*|)(74|qaZRvDs)A5?01feewoz`tQ}5dGj?H8)^}v}$axhdGj8+H;jb+J;gajtfck2nUiJ^!(Gt5Lp zfQaSvakbu2oNhaEQc1c57*X{7kn#@x|GuW^eg`av zN2~n<5y=bT3?$=IB0bP~-u2sLVru=iA@DiH4=@3r_qxvW4#bq{;(5h)l|M?M()mHJ z%&FJRdQpaSb{5a6q{^{w{q$ zvT_21thMq^ByBdaE-PlbHIq*@+bo_znkO!}H^g$6!4LUttn;#>C^kg7E>#Fb zbpDM~X$2=bHm5IF^F?#4yO2k|`IqPO1wyWVL6K9LYlz-jDNsv%j8g?8;wluZ+d6{1yIsD%+L6xVWk$sEm%ZH5hgXs-{CwwymS2OWMzE z7SAo(wyD#p7gtz_wc<)~_j>U?iegkRzFSria~#tle0C0X%zmC_6_3l^NCIE|HxXVq z=5}D!aVdMfc^96^bur4T%N#Ol7SAvHw>^I~WLz&c?92`#v5U*le)Qz`Ej+->%{*r0 zN>nd)%M+-sQ)&Bn;4}Pc9=mj`v0i-N&g@k@zJDh-7uSm&IyO`UkBr6&i=O*4u3pf+jSC%ssZ4 z;Ug$AUV9K02l$UtlaKvQ#xFuk`F z7xmJLt;Mq{zqSMCkF8QUiNF7iUe!7BQ!nff*o4G}& zn_b32+je>_5!#Kb%zJC{ND?OOG-;>UY{pG40=qiFv&==O>+rqf6<8xJtOP6Gty=3R z1^(*RoEsQVVrlkU=zOYnmUn(%i!AEE9%nSj=P~I-( z(9BX%uyb~Id){<}dhkOs^X<#2Ki>m;nU9BLhLb--XNP1EJvt|0V|3 zfrY@(953@axDt(X)I)Q;%5!je(}GF4K}btN4-+i7{Nua29WCiPG=_X!$o6^NY-%l- zSRJfe1Z{?OVL@U~LTlBZIHB2oa}@ z->ZTMbUcvDhtS$JxAFiy6%@C@ruer1j^~HDrY=IV8{)RXq{Mk z7N{4hNehFXZ0mJN>Ut0ECTm?95;F(zgvmfb6mou!swI03xkwwvG0||y8Eqyiw zc4KK?rL^_Fj@LgIdf@es?FAL4&+C7?i{Adf$W8P52eUOsb2#{{3^$ z>pyh1_WL8opNP(@# zy72n9k_`nRu0aHp|Lwl~|rhTq%Fo9iWL?Ro*?woCn47ru6{R5chw2cKOLN zMsSZBC3W!1mTEhb#~mhCif$YH=xxxv>`G!2Fd0Tz4>RH9r6)ECqBwbC*A)wP3O)HL zjixrr>cKXM>)~-vNw7ttGt#9AM%}06au!5QwmEET@z%%GE-=7XSgy&npF=tRU}&5|IXb2uw!}Hec2|tFI^crab5MRP|V$AJaSER&6+Ob+T0ou2c7V zhp)pP%J)Z|LD^VHU*?OA>#FiF7W~yh#?L+Y=-7y`v#$k$89f}O-Ca8P9GgX2oSMzG zGcWGM0x0*rA;yI(J!SDN(~G*!31G^-c6xl^oItKQ@-(dgZ`q1yxE%c+ErZYsDH}5E z#K3nz%yixKxnb03--ePSO*=ut$(Cj&k~AI@K;+Uv=z+hoTEBx4HOh>t<%KEJyy@%V zn-6p;lSMRhJv`~#=+6cM{UXulhng|M(Gv)+6V-il3}syubqE~f)M_qU47?y z|5J9(mba(`GEfiktG4D~tPzaTuR1dCE^$Rc0UG{=L4}s(uIDoUA?1$hols7PWgW@JM7?~7qE&X+uvJmI zX1X%Yj>4Hd&<1fI=QOj-DEgP3L#l`0dvH+ne8y*ERmyP^E-$nvt)^B=j-og$BQdYY zQI3q#6er>Gf?ePKUg><_NKHj4_x@3u;v`&NXy?5TfzeuaVKo6eyF|~*C{1w^E-$p% zuco>zS?Bvk>eZw-b#RoX=G2ttKwncj-#1cI>vI1gWWhcAeiborFO7t-@@5$y(@85FYU`Iw`!XN)8t)E zp5)L;u>m=1Sw2D*EhINsE#)s0rl(kx;cg{^a_KvCHtvtw_j3rF#by161U{=DJkRJ! zjVt9xNz41<$9v+(Q{_j*^l`l-rjN#Nhb!L>#c#{;+Y>B)tVPP5=Uv;5hxEiGu`IoY zVewTcYE_K~{(`zV8hcr$$)QwVpA5Flp6wexW;`s3Q!gzc(S2?Q*Et7~V8 z+;Z(~t6Cu%3*tQpc@UhP(G!=OQ}Oq4J(Y*;tE0RRY9~D{K?>~pYwhi8H4_unaaCSy zckN{RFztjH|1|AFL}j~*UjP*UjM~W>BM{oj#;4Iv;DeV(?WAh@spIK8R>xLBC=vS7 z$0SE)Cy^gNsJJL@{IL^r>^FN#LhYsT$6y4v_cVeHu-Tn8t}Ag|@2iaKJs1oB)rijg zfd^FF9ua8`yFL+ReFhu5XP7QuJKbDkuwmizG$ezkW7&$6jBAah>G3;PYKM`HvE6l) zT2|R5*@%97Hp2|{Ra7INNim;aW;AVOI`VSS&RN#O=U2K^W4`tEaMn|*RAWMj-uH`E z8PP^kgRn(Px%<*6P0{1tlJHN;lf=4hh2~=%jktC&*4AA+lqOm+vSDb}DJbod+hVk_ z=8&(&VEWEl*kJM#|F1gRKg_W+bWf0Gw>>LRBo zc+o>hGfJXYbnryxRCp{C6}DTy7^zU(*ZO{(Jq1b_6>9Ar3ya|!8J@_d`sQNAO61Nr zY-1V*sq3Bwdk`j1y8CyRTBGOi#Fv4%8{55m>F1*5JDe&&e@;l;Vn?GK1Q6W#acTf{w1# zdO$yE`Ic+_Kuaa2L!4fymX`8NS8AbY9$Oj%q@1l({rA{7?OQ3&VR!22ELu#trk zljUr^_35&Z3~gf2w7EMT{1}x<#O;UMPIoD9{XIDO`9DJ*6t%o>Jvc)3d4&hbgr{Q! zI%Q|x{Wi`g*#FgUod}Wde|3Dd-xK!&(W0W4n?zR6%Z)n2K{1rBo1xC3t=7Z)ej4zc zDfRmhe5P`n`{A^EvlM<=I;0HCv^(CUZ{d_P(MI_N?^&T6RY@QaOuX7nY2}q}l#(swi{lImzSb7{8BXC zmqq{`-DEbUtJx;$9R3_IIBFzC9F)7wx?SMl0*95RbW(y6I!~g`O%rFEFPvl7p^9Qs z)#0yD@=feskU6R?7}SFQ5&0AQ>_liJp78R_Ov04#8*hdan}&F zFw9KdiRc>1w^wp_M1U-H8U;!TM`k%?uL~zA5s5;8>1LmH)6dGcCqs>Q$VPQDKvs=N z2vMqFwfK}Z7pQ>^N#y;zmEORU#-5|g6ad!|oJhKQ;!=OWFQ|`0QJ2OE2 zahfGdLjZ8|QZW@VJ8gIBA(N*`icu)&Yf-+dw9q-t!JH{qDHDyuL_wM#7e|lr*xEvo zg}hfIP`}~KW8lwF2RtJY<@~?wy$PJ&RdxUW-JWHhW#*YAglxcf9wP)H$t0O%lCYR> z6eL20D!5c@m?RU(!b~zV31BGgjn4AUH#7wg$8 z|F6*R%67nU{!i#$!z0Lr6IPZh0w{RPgbRETvQZ@wchF>F&a1Wop1sqF&hGBZYy39< zvC&ws84&I>5e=OC2vm+aAoiDf+Huvhcd7UIR}W2kedZ6bKYLgJja@ z%y=3IP3lxG_bxpLTrUzp1mHXW!BiOWKFRER9G5 zx+`Ya9%ZGc70Y>twGL=(5eV7CQ+G|CIS^CrGtjU;42y+_e6mrpFGD1Avwgk#cA(1doIQH?w#G}sYqGbK1O_)g_6Hz zDNHzoB`l(B7#0WI=!s+4*iS^i&2gdKh0J+$E0;wU)B);R(xk4K=OGcuN-FRMs-BdU4@Y8;dkIisA7Zixj3^ zjv5bcI3gH`tU=L>stVW)rq*&XxW$pfK~2MR6dh#1blQ`z*3on!BFPIS=Up8E;OILS?SwdI}; zt9o`uSb+}0Nr|ugZ;@ZfcuC8Nff~=oPYC9`QJ94bae@S%VektO438{?uu((*KPi%eajGB%f$&UApAt`^GQ zL{`9#6;1*O*g-%<_#~FNqGqX9m1m_(P!gds78pGlX57$8sMEUKZ4Dqj<3>&BW5s|E z2v3CV79#q09->WGytv-Aux_rwoa~dbHb$UkIZ;kaG1%uQZXSFzeJxK=WPz`Y<h7yTS0Whbz3%GfS>GuOvQXC`^_bF=dI^B?L~5$ss6;ukj$};%|KZAJn6RarFE4 zhN}MfN@&P^PiF6|eN`kyLt$ac*T4*DyyRiG-}MUuipK|CE`3By$P`+(^=G9$HodebvTu{2dbO>l z>)7;@*2I=^zNR`T8~*Ll0yebObiI4eX8$Rr(Kwy#=R61rT9s}5zk7O6fNw*4X|3#O zZ>{w{mup)49>_|2aC&KvG)sHTm3C)}t%uu6%XDEcc|0raiRqT9QC^7>}K z++bf*{n*n%dCHZ--O!LdZD@DJ-8j9tk2Z_D)fMOTWzGj~DXyt8TO_bdV}|87`|g9T z@0{lBB{#P9U8+0NB(`|_?_)wS zh!|3HB&wHY-dJM?m}zy@V0rqqW{@mVzQLrO8WlO|Rc79jRCbUTEmYjoB`ldDO|kNZ zfN3~TZ0l+d%eyn~H0pMRvu9Nu^z><2yz%;a_{oRFORlzI)5)$YMn)%TEvA6>Udi)@ zLF4kw7TRYMUVldTZ5J9trIWO*_~no2-Vo-A&0yUof0;VdsJaK(n$6<;oWHI<5p%B5|fNh{%kfb~7bvD}$AXB-K)$$tjDq zmlBx_PX}ZHB}kPW?g(86gr3wa3Po;OtViktU@#@+gap=dgw$SBVk8=y&@?5Sk-%+6 zuPkqK!T^D7HX!&ZlRM-W5mA9}z$8LaDh&`PK<`d$e>b3aYg^vIvzG)fY`!R$KkZXX zN*_&8UhqqgH8KgC^kE`xMiR)f*{x3FhL)fS9ef%lA$KSN(z!!))&_N;?KzhP(_8ha zojQofWn#Jo;*e^~AR}-TJtnNW?sU>$?3LdhG(n$A+Oq}Dde5D+)e&jWYLNEql(dom z+DLoO6yWLMcEbt6x-~gSotext21_ws}DXYz#bu6+_lc7IAKq6OGj?yGH zB@}d6vp|NL7Sg%x{|miJh&{yb4Ejv?r(-{ni^BHEaQ}^zsqIdgYSDg`;1-!&V*^5B zT-{R)A@&5lm>y(HHv6_?ZdzgpLBNj6->2RUHi#3nQh89(QoVws<#Cpcb8Zv8HkL`h zmHK4-h&#{1wP~YSOs#Bbv^{6pF*ODBKcJAh$k!nK+Sss`e#T&+&tdwxxnV8+9-)zm z(P*b!UMVBjxE!TZF^rXWR*`*0Vb>-%-W7BwAI8b2o_zB1owlPaf0@eY_lou6#w*Sv zz(z^=+4837HSA3Om(L%XZ0uyiF2gc!QRm$#U(!XeIJCq9a3rjRXy1H`hW z{Hf?i%t~$SC@AAJ-EsssCRX2ZDn~?`Jea98JJF%eS3SUxWp5Rr1y;+pTQhQMQd{pK zk)_J2%{wp!Ufd)qioIJ%?k7F;l0@A&WUJN#LMF7=aPQL!g82fHvS~K7Qc{c44KFP# z%<9r~tVveTxC^uS;1O1R!j#?GOz@DX8MgX>ZzEtPzWO~SNyUfzxaSGAYzWpYA!&sQP1cwkc$3Z!GVHpKE*7BIDnZ-}9*|NrlyGZg90;q7OLuyVR7%LsS1=VU ze7<7Y$y8&fm3MJPdDIGypz5PHK@E!?K1xepl}oHJXnwLp5zu@lW1^m6D4_^WRv|DS zduA20iI`LbW}*PjC{8|s8R-bF=!?Yl^6eP(Be_oUJdf+OT<3E|`y*Z#SDqJgB@Q0( zz5L`xu19f2MkU~x!saX5nQu|fV!bC{AJy0?des5%bDReJD?}hK(+2hcrtNNjL>zZ#Ei5nwdK%_ zmrnl@z%t!t$}mtg%L8>{w>(5C#4@rC3}KSGZX9YMK?3m`H0eH5BgfPU$q}U!Q=-a3 zNvIYibILhUjMRnYc-76aJGTCFp*HI);ojXxdA@DSn?LW!VzD^)h&i)o_11d2i^XcC zTU+NfDKpyf^E<7EB`;ND2Z#SxtvOoN zbhTD9uhVMmC=)-qxs%o$rD{r4BS&CKN=F%z5lO|y>$Ps2VI%)~y#N>Uaw zAQsZPvp2%d(K5bded>r?q~q%@SqR$3*G=wCE4N@yjN(dbHN{S=DY;>M*WY$fjWMNa zYc+*VtHG2nZt?e>w8ofHcWX8IPOF*as`+Ur)fiLiX{{#LX*K4k2)F2@8e>X|G3mBY z!IYv-tFgT@e$qG^sKG5}AOT}ay;S3N|4oP1EM38LDCSj1+jJ*_xo! zYFMZd3H;Aakj5yB2x1r{4cFvIiojH<0C8|l(2xo~dJQy88i}ONHMw0Xm?u-GoGRg> zmATXW5TnYRU$=(&0(&K3H=K#nLK(q#z^AiSM1kzIi8i)pY@{J!dG2w#xa^qgK(L{e zy$(3`Iw0?-sZyN$nP+CN7&)3!+!t~9$mB9!H{>!&chlsuhiL+(S`XM1#PraR%TO3* z?1B8#FjjzUmCITsvcQ)P=P=t&5WsIbN#H#5og$`2r3BjOZjPH$L%qJ$5@B!i`_{yq zM)At}DqYU659;k9zs|Beo{xTgUG3g0CnvE<(sHI?i!BzfiU(`==rz>I%d?0EnY(#! z-%1cQ|JwRV8=vwHY|Kt8_b(^vA&JiDV@Gn|$^1@9`-^7mJl^xDa@E0lj)M$@^k4qs zKYx1v?N42P*@3nb3UX9zovetIm^&@t+# zIDjmasrr|JyHf@hVwzfR2>~Dx zq$&s;r&5DG#B1UfYb%UlihpuD=Sk@vg_ZqYi~)_S^hf~IwZqW86k~j3@rJS+4S$ha z)3_+Kb)rJdcRcigPNZSl7{$-YMuJRW+L7E*HFI4xhn!v_Mf~t$Dm#*+xZYZgR+2iZ z2De4c2tV(n8rzLLMck#H-;ls-mJD?Llu1kazLieX;|Fz>xlOwq(|2#-+R9)Z=gw4R z73C?vMs>T zVU%ouY-Q%OEN7dlOgfG{DcB;L6_AbFLJW0wEacf{TR-{mZA|x0GA1U6^yr7Q(bWce zLyv~#MR9*?H606iX*KWaq#A8@ppU1SRWp7X6Kk9f!RJ3Cbe6GI_OrkIZZr$wYSQ?3F}XmNI&I+f_o)PV8G7mw8Xi| z%KJ-f^VUH8_t%rm>Ai65N<3EvOz*qW^h*X!wb1(8}!NU!$9+c z4B3>ir}^eW-n7`9e$_cOn_De^2lJ~?*jjIMeyz06uaHS&hW*W$v2Ca8VP;qes&$5K zonH$c^J`bJfJUWB31^0uS+?V`YEcvXC)pR^oQ~T3>om2yA|Jy99+Q}fgzgCiDDpgME9!c|(!x5q+r5TpdoItrw z3S;&!6DZd?>%h9{;TYG|!9e?5?GN{?6_ zSFf{E3fYUxITF22tX*%SmtIH@)`6(-)Z@cTZfRKF)9IIMEu~E9`0CSu=oppa!)5b#uSF;2xrz(O~)F0TFsw#(i+p) zkNlMeU@A*|rjyp#0G!)8GCCfBsTT9iPFiCF@Cd4T7MEpaa2L=3oVpmybn%z~8o&tWBCWDV#C!wEjT<7g@$yMHvE=2kaA;%+AE!BC~fq1EmXw zZ*0mK7Hmj<$cLs{#%ur_M>P#+iH-+Ax?p&qlWJ@L9NXHOXF3DDzLRR6&RoUefo86H z*xZ!o)c#H^98R1pPR&)1NG4cpf&%_ni`%VLkNNU({Pl#EXF5|AHEn2*eaoyg&&@!K z(rsKMkRMxfrx-67gm~yTvvoY%q%K2m>4c-XU4XWh0f*_xP?D16ot@ZYo*Al=NBo_O zr8Xg?mj^rm%68%5H-ma=CpI<_!W;bKFi~oYhubH0Mf>Kx!)48WJ$`2ZxQf!#i`z;(d|gW#K-;;+sqEspjazO_IZWS`09uc3Pc0_!-981Q=E+e_K&f6^xwKM7C zM4PNFakNW|nY1W91-^WJ8>y)A>8`y1{+{kL33$0^8j@|N9$%KUf5C^%_4rJ~#C@^D zvfDZwf7-U5xi9j&Gv8zUrvo<}Q3K)g**~obuv@4*hC^$op=py8qS1+XjS_l#&5BCZi_;Q>2sv#yh?VQHEPHF4` z=gjCt1p$r%7qju4yY4K6O?TX*Md(=ZY7)+ulm~jGO?5l#J-m`GOLWV=9yvA#nv=^4 znVN>MVa!+XH|A30_(|8&xI1+Y_i?K1Ay&f9x@l{in!5=vf3{Aa$)&0tNx&JGcGcOK zMg)jP5EELy2qGlAJDic@mP5j-M7scjDGoPw^a8+y;E0}*+@x3owa<$Gfmhn=g5WT3 ztoNR4H~?Er2(lGWbS$50t3fT&i@JMJk8u9g0>9PAMt;@jq8mY-Ch4iGfV*rtf0gp7 z(G{$Ui5W%9pg#qwiMTKWdEhv6c`x6d^NUx|Ufifdx*k_D0dH&v0Jn6x(N3@- z#v*W{$A;A8inB;2n+9I{c_Wa#z>b!BJ^?=LDA>bIR41s`YlB1Fgr@&&c z6_U$&$*`#x57oPp4f63QCg8J3{xrq!H&c|d6g@5l5MSoLCIuoHOhCuNFT`EcQ&-zl z-k!{BXe!36KZG-b%AUX(fCy*o1okNpoDpRMoI%~fS<&IFD4dBh3}<$lQX6&@sAL9| zLHuxsV3%TK8KQB47ncwfGjHIRB0^?lv&895Kk)u9By~E5E5ku{{#N-rIX|EA&*p|W zM+h`agN4a~%{O9QIYV$@o;5rY>cIkfF`cNz3O*L3+fQ1~vJbMT1)8X2S71Yt*3Gfu zx($CZTWL!BFW3e83LvSlX<-sfut!$RYYs4IOAWtG3pF> zksjB0p}7JGxm^rF+sLW?hbB4Kz=L35@Tp`1R~XtX1Pxsv=33zbFD-Hb7j#^5+abma zg{$X_Np3%(O!C@m~QTlj0ngf)kA; z)Vh$qx>Z|!lXvN_IMm*S$zw{Wj}k(l+Jz=jxM)308A5}>*a9)#re@G7;K1aMY!{(h zy3jGdwyia$$JyrlXXylCA!qc70@^>B9&tk>naw_7@@Bno8;a9gWeyQAvJJ)axQmm! z4yp;ND*41++-3*bU0W>_5ZV-nK--jpjLe%G1A`435fx@>rb>}QM)!Qk=~IL_U;#}E z3Fml0o4a`|5-W(HmHQzt>sam~44YDOXA);6=@DmT^Be#9ATYUthj1b(jKI(?*sqB} z(?M7!id7FEjH4myi? z1$vmx1Fab3yW-jLmObj}b38k}v$?YXnBX6}vN5N==Qwg^ig~mZ1_aF;Hx=X5w(I;( z^wYY6-f4uxhjhvF1)-*lo-knAuZK5CU3j<|Q6-68;X3$1L#WBRJb#E2A~3JjpCnj%2c!Shmjanc!Wpj1!~ zP0UGXhNH3?h*4Mxa-t_di?cvnTmwF?8O`?(VrEX(tauO0~%u&{&D1L5}(#0ukT&DD0jORA{dA0+(>VVFQ zi}kE{j&wDlDfw5}1f|mDq8o`##2;ob$au}%v6$J0xe+mG@)DwkJo1;!B+0tuItz~R zF@5tO9++-APaP)3jQPG5vduTjg6ZAsAyc^Om~#(#j2x}EGo$LVmWdUA&wgDtKKkXa zf92-uzVjE4c?XF*VXuDt{kJ~)CwG7ElMm_@$GgPjS)$9vA3XTBN5A>-cW!%FUx**h ztDk-Os|UXI(SP{lqk4t@BP=2});@L>?cq^faJG9LCHHu!jM*pcD<*|DnIluKM(9F2 zIX+wqH|HW%j!TXBha5AJ#dy;IkMnHDzPg@2STAg>y`JZ;%j$)L?B+h=^?deY@3OkL zF@F7J_2R*Lmr@XjkcL)YAA1MuzWccGDgU75>Qb&Q^5qZGUH-=2*EiB!rYedm09IlJ z@F^~2r8lc=YfAZ2o~a+nxO;elgQo&+#8%na!C1Dv@0s%Gel z=1y@GWct)Ic8Z}yftlYTVx>?-Wp;%+iq>!i69_w5tz>MdyPHxYpfUuq=G2IWO9^%# zD>5#5YoAiNh|^(nZqe0rPF8mr^G^ z`-8C|&@OhORO(zf;^!&=qJ)1L9!=hcg(N?+0;;4XK8rQB_AXTpp(>@sLoHrDX2}%R zZN_9v(quokWCTx`IoUv(>-)x{x_ucuJ)Fb!$y@?ytR#bB(N;YQ$qOpQ9*QHTHP?9ZKm517xWspv{;t!RSjINWem{gOu z+cn3R>&1zZ_oUB;0*kLxyKyFh*?zbh02{U&rPbWCKYqiL@yXBF= zpN>RuPyWgB{hj_Qj4IgNTaOkd^BLmNLRVVVjHZOAWR;ytO`PD5dzQ$pGOZtZg@Q*x zX9rz?c(s1=rTBs=1(w=FVs3;TMV!!;? z3Z~M)6thq0dfj1)mNS-%0HBFSmQ)RG48aJ#l!F}~gC-4-3?^G5NMZUxyb(K*waTwO zm|`#_i(!z3o}xC;AC8a7fN8l)^M=h&j@KQQUThxq7X@|Nt%eT^rzoSq_ZG{nYXJhGdN9p1Xd$26*qSS)5UaO<=nnp0TR+e!`^v#sPPF;v%<*sbJLn=3g$>m{ZSmb+XZCHsA|!NQzS4I#U@YbjaWCnke+ zvyU?#`zk4FO7Ld&4~vnkYs6*Y76>exQ4LSzA&rf-Qu1d^)m`Ec$pR64DLH4SJ;5zF zb355d4-k&tSV-xXxOz+dh|BA9jbQ}wTrmu6Qk|%?PEyUrkULB#B+1P+o zuaB)_^44&i4!G@#oyp`|Zo5J+3v3w{!>jdqMl%I6bNa+?pi})Ey~py9z?;MY%7)N4 z+~5Vv>O#?GI*92K29M0L3@b7N6rujAQNg0KKJB;R_%JClZc$#X{P6>2M4Enq_dsW?gk2c+bQr^3D59ZUakHzK>P z8M$iMS0K5bB)~XTwP^tWEiQXO1JSR&Su=9g6f-PM}W=4`%-C%csM=D-evI*$0Qk~=qmwM`7$MQm5kQ_APxU1FO3SDB-T~c$> zoCW~SWiWimpw6lc8V=GJv}aRRJzx7_D)E>!;+T92lCqf&UrFUm90T-@%J3Y6kfll# zlE*?u`BV_wpP8j@Cuq%)LB2QF8}+9D`M&1`VQ+82&a$*7q@pU&C4cHVGZjivP7GtG zRpAQKjdHp~TFGJ_JewGUS{-BP;D!Gpo@7OKQl0t)(fC0%Q?4Dzt~6??*DI5b3aMG_ zMyQU(#x?;Nlp#<#>9~+d$3$iTnFv+*_GkH9pni87)I{sZV>>f|(jJm-{vJz|Pn$Nk z;(|acK}$)g#+N1{vWNimY7eL#)gvkQZ#htyz_el+#Ml5T$KZ z!qS05MP}&INrhhRM^^Z3cL1uP#;jIB@*yiQN`aZ30rQZhpX2%l*ulG#ztuPD6okFD zPRT^=89IgFd%tq0uysG}6wKdV?OzS7-ii(kXhE9Aht4nsh21)(QRMu8Eaxn3Qz2@{ zyn0b_IS^`V|7IVE<&)*NlEdVNHcV4{KKVQKi%SUh)ZcG!tEij)ZhVGuO!z8;lhRpji^}g*JXswf!~52cdCs zK_(}0kPIEU44{-UZn46{6d={!z*a#KIjO-!#f+U+^Mw4HQijt?=ci=|Jh}f^Y`_c^ z<_?iTZCV$Qf3U4#=C6|_afBXb7K*fJ3jj~!pnol>rmRfyRGrI{h{d%yFwDA17U9`% zDxpF74Pn!tqG_egIG&X*UQ9`ffA88VrIc!ko2vO6PGiI33#R;_Z8=`m!tkAPW36$j zO!Bt2o@c&K`5{AF{LmGzg+LaSse@{>TK*E&8w8#-->jyXTuqkfRpF-U;f&7nQW!GS z+d{UDqegB`j*j58@F+#eCL^2C9092S#xwCqT>INtTdNg*|Y!St%&jfm__{hOZrhx#co(qeW&Ye`>1DAV{Zt&3FKg2_RGZffcI=v?CRm zJHHP+rAmzsLXiWL(#R%&@51b#h)^P&YkW|b)J0?URd3@jR$ zirK46S~BHQP9ZbW6r7O;+OgQa;Mdt@Qo~O(lTwJ%Fq_idO}xJZv!9RysY$aTpeCBl ze0)L3AOjEY@m_kOuvZ@2cl-mC2c2;Hz3=MQh!=5?5vjEeulzyZ53M{`rj1+29UOmg zOroU=r?ZHLk&1=`m&641xygJ2y`4FLdp{Kv#Q%~1ofX;695Az*D)wbvGeT`Z`i?Nj zHC6WMyp5{GcBtGqlgCOI?Ntm{A2Pnnt9?(i5UCjY=_oQL5W0*{FKJC>0&en{!UU$w z9pYK_{5kOQAo-!m<(Z5Uh|WdhvT?jLgBZl=$SGmvUoCk$lk%Erk;Da~#KU4%M{|iI zsr~pCFma$+L2lB&Hu_FVpl_J?KyB@p!Up(}MKx(R*-E%qQKF_s!nE8te=}>=g!E|R zbpLtIMX~1vh2TEtacl<>o zsl|5BaBSM{;e&pw*z|`{$_5P|T3#|pW?a(fVJv3qkrNk^0|^ePnX4$*ieN zM4TxTd{s1JW)5WjyCu#!DO9}1_(($lMVDrxs8FhOY0-hxLqg5cg3%L~-wmCM;RuE4l*t#Q((uNB3pG*VY)z@HLEos}3g1HZV57@S<0PC89lXf}YWE}}j z$^)v+N{qOu^LolZVIyMGJkk_v)LpJuFa(oP5*K_@!q$TZwx5dfo~86**UGS3K5Mam zE;!-x`*?3GIJXKmEaMYjWLic=vc)n@6>`2o64A&AYu6hiFz@Xt^h5z>U$)k&(NcwI zRhYDuXfVe9&B+f44-q;$nd}lxfr6c55BE$l2L;nOgqgmLAZJ|Ulb?y&oc$A)np#D} z2y~c%;Z!l{8Fh0?PNhAwB2$nFuksLWlwNd_Z1z0!73*0f#t2bx}Lod9CmYn5b$$ zRu}R}+$bEV&#vO`$`X_Y`%fhPnr#D#=qHw}*F9<*hAE~ZcIseXjn$Ew9kZd@twIA< zq#2YyReq=qNpGHY78(M3X+(e7h_OQaHY?JM3J!s^oPtw9-FJkjVi(mOadimYdVvaW zstA0w-nG%!IY?bMcL#ouvT+%Vs?(6yt5OXnKKJnX`=&dl{HI#OFw*$k&F6o%&za=Z zBkRYr-(>KZHW?%03{AG?+UhSYm94gR?p|wsqD2v!U6*6{R3rVuI`8;y&QJ6L1MuI4 z!m70*!$D~pin^U?r7;OFV|l!AherD>9K+to^p+j#X>&CvQ&l%bX1{5Kr!64RM>8hG%MAk z*5*v(vIr2WK-*Hw`GcU7>bXnW~+@s!p&X{BeP{{-%VD83}Aw% z%>c%}q)riUD;k>ae76)(ExC>$EKiH@Li?u(_o1r*Fj$xrG)=h$grbSJGdl?c(ic#e z&1CI(t@L%{VYk3xVWIgJeko7?c79oM>Py!0jFzV%&#SpkOAVBOlOd_im`1ReMjM>z zh8iETfsu(koYW)idbOWTp#s))l7F+L4dp7FZpdtx6=XMT+Wbg$f zVfJJx-j_Wu%^0Q`)AgW?4kghgP5FfyZAQ2K;3m{)erMutPASM9mL3|@>9L+_$iyns z-?Z^fNyO0_ZYp8jLB4kYqeV+Y3?z=UO)|x7lBx9hj_?`^w9wL~ z3e03hGX**mz_QkwU?Rasv}t+fahp7*3Tp?H)|;sd{;&0^ zGP`Ua%2A76_Ow1#kNUO|)+t#io)Hr*Y8|%1$ZV^qh=KfNOc`M#XuY6qp;{czgvs>e zZmflv%Wyg=X6yeL4z)@y^BFsvU|`OkXnry_4rC@*S33tEF4}5}OUiG-q@h%5HlG!F z_2@MVjWU?notfEi>cCVY`<0S1ey4h&IA0zrC?s!b^>KN37|M~X;m9n9{m_ZzV9tly z@4E{EgTvgeWn9&4d}aa zer{$48pAi?xH7}i4Dr$AIQS3SPC&ajQZFoF(&L8^=!MofLVxog8gL!NlUq@1?r_ps zvz%$AP?rRg)_>$Y_QmQuHd%M){4k#nXqKNGcRH>2lkZU`^oX0GFW>aRW}8}!f6PR+vkjAk&#I_>uHXKqRcmJv2hP!drf4h@|-GCZw$ z-Hj$&Q3xeXQ?Th^u>x*^h2%-?NZl(hRC-I!E?BF?w#}Tt4sNh1Fl+xQIsqkkQL*Mo zCo$SHsZ61KyrgbS#I_|)8LjkrYo*vJh(9E&QC8()Msrqe-D4w6stQ`KFi#1|8kU~W z*8IoIJ`G^6Z2$wD1~A7Z+W_`8fa|o&25>B;y7@{2IF>(5^OXj0EJ?okN&`5yZNQb1rF&;1Dn`AAN1bzEyJsh|2PubS>njq(3XU;`0Lz4d)Yq$e@Oq)p&zO-cu< zni9s^4QJ;@GJN0yXPb?b-bX@@#RceEt(IssG%zVHfLEf&$3UxY|3nVLVDa!;e>x*IR^{4NG`KB`K~(P6 zd0{xto|w30AbnID4mGyg1?9J4Lvt&U^sE_y$*qVaB5Mh3v;~39nSz}Ua%Kt+oh}K+ zNNc_tA`aP+>5umHLSChIbMW2JsWfvT%>l4gEnhp-0 zGni`sD4tGRg=SF?%TB-AlrsY~bf?KCT-_2C8%BIMLLj+-I-96fLN-)>U%)W*njeDX z$8E}Iwnp2a6IkTTJ}S1fV1urqy9ec`MBJ&{rq(4Aw#?&F&7g&z5?GE7VfK?b`dA}a`(qa*!TvgvECgc!NXuYv zh=YYRp@quX$%K`?0*&>Eye+Umph;;xtjtKE#3eZ1&nvh{+yfsw=q`G;3COc_y3rFwKor%WTpG5NzFOx$BT%prWUafwf(Fg@S``82*h z;xoFFFxvq0IFH4IKo*Wkts(4>$V;#zp*a~{@1ZZb_G=vJ`Xr*1ni=t4i z43j{GJ9uoWPdloqs@8G+wwzr;g}KM3>Qr8+$Qvq3LIuZ~Qu5QJB5(uKC7KrTx+dcM zm?%M93ZYwzTmkbFf+{LQIeFZ4+9k=2S`n*#Kspj)^h2$h*E4t`G7t?%P8Yq+h_4hq zLL|l`J+WGIjjGK$3!XAhJVi0XY~(9sSSs?tuqrV$OG|`QIIYo;r;Qs7Xeq`_S5lrs zH=#@A#+a0b;0mP}W4GX|h2Y9d2_^)WreLYurl7ZN+z@q#SqQFtsuMzW60%(2YH@m|CQlj^)gBiUGx0XLTG+T{V|)$hnX~hjtF_bLPwbfC z^lio7#=Nz#1n#X8&P%@cwnLL5zIi*7TdhmeAO^hZ-|6PLI4GZu!#gdbYO%ALEfvB^ zCk2ESV~v^f6)71po{=rkZ@=Qj=G7+zi&5YQg}#As8qep(>2_&Ro!RU0;Pro>$9YT zz0s&d)?zxB#|OO;*vo_7?p-1b#_MwL;rD^6lhDE)4QblebS$Be_$--y(y9as z%L+nXqV>(37RfA^{H2LI1!rB?jz%Notay`1IkVCd71Kl}__6`2VkGWi}k&yKNo6{sZZ6hH>Y60;eXio_&%E=vim)RdPWU5v4)we8tw(=!5uBoiKrNWxaLKS(zfynMfKjLEuIbMMqEjCw?f&H>?Xv|zBY#^&Q7dMs;kyQ3)>N^I)IAH) z*H4J%kaE|k{13k|Wyp0s4Qi-D?OOxX?%GqD4#bn;glNq{xIyFC{c~tB8gE03v+XbS zJQ@Q3XrhIV0ps8)ty3E7n++40ua7w-E0wL@DH&J?sU{^}-+@;Uk(2n?z6*AXTy%z=17qdO>5z2CMZntDf0VcF_`tVQPBmldiPF|0S+ z@Mjiik%A3Tc}WU_sa}$r#!}KGy&OTZ>y_C);MrMMQ~qSdZEH0D>3Q*%!>4w7!DX z2RAxgVBBBeW?V6IfX6Op^gr2X z**J}NpJ+)driyK;38UceM@`j`c}}_?%L>d3K#~Rym%YQ37919<%=NUVrj>(|v@nzmQUb9Q-3pr6 zS@J#MnKoC|{3-;Z;>b&wIa?t|T_X{%63Hvq-AiXT0!eg}%jb8s%>3Eg!pRDj!oCle1jgaIVk=)8|ba)NZPZjuM|QkaYpj<09|In{eL*uWVBuA0276_XHU znntz<66`|AjI2A90Vt#7qf;_;#W@KrjJKlH*T@1Z7?~vxNt`iKr+?%M(0!ukD}sru zUx*Ri_Icq3A;BTlDL!Tc!4s)r0};7vHc?!Fh7F|V#(?6|SDX#RNVPV`m@ylO@%LJr z4MaxQinD1iSKN=oQ>mdQx~Azh@qGkL8!2~=d&s>rG(oi~sm zVJH(_-hFoqUB=ZcwgIs-KySB;K4Q@V#MY80Fxsq?qAHY0L+2eWBWC(LEEf2E>_2R$+8!*Ita6Z zQ^z&BkuTY}rIREosCVRE28foZ1*Aj;v4v1V`q$J=e}0}qOHv5Y4&!=(n9G<8u>#zn2C zu{H|*8gpYvoX|6!s7D?C_ct07d)L>Y5gKd$uJ++`?t?k* zwte`!>nw-4)3$xM`-Aquq^h>%A?DjkVnoQnh%WRr^;-Wp zwqx;es$&j#3!p<__EP4ue#82>H5&_Dq7z^bj$cNXTOUN}RF(EU{z%bDF(Uucqu@l8R&h z)#UV@$v&HMleaSwT*|GHm;L~h`xnpZW-}I0D;6`QNb(4L?QhTvjrrL?5A&1^0)DDl zMp`vX7VT0depqWtCQA{*nZ`xsa0AdNMmte_!nmp$dTdg1o@+gtlzMEbrN?=$!TqSh z#$-g(B~4%$F3CE;jHOa3^6AUb^d>GkQ#le!C}fVwZ%#5aw8b89PTSf5{t4gDOkxt` zSXEpi*4}HJA;4#!-NtET9(inQ9#Ocf9_lD5Xc54cOmOI7oHQw?RdCRtns3oq%J`HZ!L~C*;+DlDGO<_Vg?igmc_Z`du{bdDiKq^t@W*# zo6PYID+|H=c*mBLAg-|}+3?*7Fc~Bd8rOcz7|-jqO5v5C^!9&EHAaVQd1#TAQX$ElN8Z9dq%nWM+;m?@cDJ7(=7LV|G6yhcB#``CKde(OfkdS%S#rnzZ$A^c*dsvu?58>*kV6 zQ#ri($*ld!9#&;5EH67xf2CJK(hIY>fQZf3v|)IKiKX$124SEH&~Gmt>}n?CDMK!m8uzM5pg z#bEA;i^us};4jhEpa`{3pK;RQp|17*S<}p{ z*-Wd{xiVlrG4KLq3oKjUvQ4W9nk;ugPPRr?erwQ-!iJ$K?+i@|UzY@5d;rp*8Cv_W z`+&F%Y2fvQ`Q{FNm--_^nmxFDhxFcZxjTxwJ1q)H2^))CHz?Cy1{+k>z50%hNBgv( z6Z^eai5mG$@=k$4j^e^NU8HW8nTx|>h&drk7k(EzYuAz9fVM&_WM(j)8TsVr!zj2M`c?VQSYD1l@&bkqIsqUo?DTRJ6TQT8@o_r9N8d*25ieeajO zgL0`XZhZ2OzWm9zzU@O_={6R>a3;uW~_%d3q#$Dt}&hN{+DwTU@&Bq#SxKIhJ2> z{{{767w7Nn6%Z4ij0takyVWXDXCN2P#7Pad|?s9xlBj9;Tz>^Xv zSGml!_EtxX?{60oQo;*1q=W|qbs!R2m=5{x5|s*BsyIJ+2XDOOo%*W`u7m3gQ$Snl zb=CebrFcMxILJp?`%U&R_e@H7mzD7D|Eh$)@>@d&v|6XdBPAsRnq&-dOrehz2`CBs zq@f|$s04(knB%_O`VG3=^_OH3W0GzzT0jCQ(D7SbjnrIinox`Z1rD&qUwf-y7_c?^ z;PG!!TFMhGeM4e%)7?YgZ2MlWfUMNbk^B~K$f4UDbPbP)FWI@AEra5rwn6bgHYntF zlei{9#p#?1E~upTcGm;lp5vH*^8lcD<+W7WbaV7GZj(IzCk829Yn0+zYrg$&xpGn& z`@LX;!MfCg3-i5gcR8fzw{Ivf&tv8GJ_=3#5i5tVo}J!R0U}l=1kY*ZJ0rhfZc1Xu zB71eAXvX=}`C>Tct(0TfXs4`vy99~bCR;BYV*i=P=^Sz1&fe0;ng7LwrQUTP5I~os zY<8i1(u25=xTeFJ{Y?we3fRb2NNyxax6is}<3AmseYn(bA$2YyX^uo)$@zPe8?QLM zT99Ja#oo9Vb89|g93tpqXAzK=czMa?dy|nD5th;pJIu@UWp|26#8;N8r2htIVn?(0 zfhjgx*S8P-NT||hx{^0jg@Koo@nBku%;E&w0DaoHF}117l+Lo>~kVnzlE znX!%yFQG}Qz@l#jVsSicc(oZ>Ae=bAtIxMepzkR82ynM zvLZ-ErcmeF!RH`>y}GCJKl@?ZQE)9nKg8zsd4R-XE33~p!x~@-W|HTnJsk4PKyUX& zEefGhAiAC8SKRk6dc5S7dlLUICS4*?;~5B{^8WJLy>I2TD=i$?JFR}n1q|RJa~17p zTW1>upxW!yqRh>Vx{md%r~SN<+U*1CPMl^eQIK~v${_*i%eDx@0-V!hTputz6r z_K?h}fhN5U#%Mfp@{9Kt2HEHQ9+2Z)6U7g0J74G!R`tmNFJ#pZjl#+D$v<7gkmAL> zosRw3K3!wYXeprHPLpFt4?|mGjNcNY4`mv%onGW!e?PTIn*u9t=+kGm^qtp&Nr;z# zynB-GNwG)<4Upt+d$`_~x>AMMAWA-E9~#iK!U80kPrynFs_9`V25HA)^L0{-;y%wh zUfZ*9G&09lr4!#mf74uq3VZ~s7+mH!epWN5*{`Z$N$OAp)Nc8hY%HMS+SKq_LUwU| z2En0k5LX|gq-dYvMU`>L@>^5w0wuddW*G$`QoE%Wr*jj7k6E70qiQUloTTTR>715X7c$*GZpoWhQ<$d` z74+RO-1w%a>?mpo6n#0H|Nb~=Gh&2`t$+;GP`Id?aTp|@RnyZ3Q@>3l`cq8Zj_teH zj2+_{)dTh>GTg+SkX0osV$fjDe2?Z#H3J|!K!b6_8SoG(dn+Eyy$RRCnedQ(J1icc zg$54@%2)YK6$&Od6)C?Vj7)=}Rf-5&I>xXDZO}V55Ws_!FNutw{tlg#$Z`bpxK6ZC z`?D*B@1~LGFViIH5NxH_DMp_1^AThc^18mt4(O7C=sSCgmmZ=?j3T`f_x74cWR+{4 zUciX`+8-EQ{?wn*WMmD3P_$Ym0)lYlaV+vq(%>jY&+QYPe1D_^Vr!5(iS10R7P>HS z&6df5UWYlI$BtEPp3bvagWgYGgE4|ZZ?(f%SfezvQBG_SQh(-W^ZY|QC8fP+bgv54 z!0%drn8S~_cWZx0(oP$Qr7CM6?KB0!tb_NrcKBPY!&{H@%8u*#XG^At$upidrK4a) zJ`W!z+02J69mq9#M}M13iyPQIZ339uOpz2n}Y;Y}zsP z+F|Si&b@F3l7NXqHnk5Mi_xk@Gt)Qa#Xa-lw#Zr2D>jc~xO`hF<(CUM<|-!F8_6|; z!4mFJF~Jt|Gj}>yEvCuG1s}xhRo+_y(d`+gHVbgVXuFuV~4T-v?q^!PEli%*)!p=gQ4{e%PnL} z5Ni&tnFqsFew)@eonLFLH~4jSs$3htey`Q>Yw+v;{?pIy^$x>d-)C)UoPNeBm&Rak zRnXsOmBW5GXq&5N;;=tEJnK0;89-y=iN<6njS@87%*Z{n!w?Tzvh>Kjw>Al;&(}zo zgTCXk*IBxh8UK%I=}u0Qz0Hy#;i}e~rY3Vmz0=ZYNRa0J%``Kg()ZJdV5<4cV^92f zt%Y@2n@*R!I9WlFnC>OhVzJEW3um@U5C(pJ91p{J#`qI#Bmgi8EiAmh+T%$QCzgY; zI4^etj5j-1d1zuB+;5=IVNZ z9qeQS1gZ3v0s|Ol2*f(4^fJ~Oc&OD&I&8G0drnC$9juoxt5@Q(jvaN!qE$F{R5m6p zH0bEl#<8lU^h8w)%EW47feg0d4RJ`-*4!^Ap@8F;Exe3a0_QesC!(q=vR_dU&`2)x zFm4D2bJoMf6=Xy@gScMi$W{(+C8#lQa@>sp$#JM0^dTV0P3q}zl@3y%V5b&N3OdNj ztq!79pMVZw4E*TWx2_a^*TxcUP%k<;8^c4h+sw2qs2V-TbTnq6?G0F3tUps{dNjrO@>2%Hqe#<*R4hie~beWIq0{qpQi0!6qN(XY;6iF!QLr z?=T*6((*=Pyg9^=U|SgaEP$(CMvD>-IgJsgLo?M>}Xnr`rYNT8dB zS%8H?6dsw7Emt^`;USdaA*8&XGtK^Bh6m}3(%)L_4%$d8mu)FR%?cP_hpFHWi4AU3 z+pkf9_(4OR@yfU7Eh1ARZrUNQA*>nRlOG*cprVZshpoYC!>&X$BvII+Nor2avu@PN zhA<%^UOxHUR5bNl!dMr0f~hIy)(izZ87k7T<;@f84~Uin>~iMCti?NRg>|A)m~y>8E3NlG^?iT z8~>i(NPKHmyAW4ZFrgGNI@#`IHQ9v40mZXG4V73GBm?czj+i;Ger)&-oU~&xjRiTt zg>ErGFw5Z)FHmoJl)P)zf?@qm+SU5n6#MBX#+eTr;y4C!Upjz-Hi{Us1;V zOUq4Nn!i6VZT^OCn*-S|znB3bNQExQJ=g$`k{y7_06mE@Aopts*2!92lwaG6Q!gtf z@!T$XBZTD<-{gRBqkOn}4%E>R zJGPE*8=4pz+O}nhf~EuQC{ z;(Jux{EtWPIDQ-VZQnjTcJAot%Pu1GjuCS2*cOjZjO`e?Ahx2`$Eq&gF&>YMPQ>S( zd-~F~@$ksj(QU)q$iIYNgw3LlYA!cVcX4$3(p2 zqCLBZFB%@17@F8IIuef!PwX2T8QvBTjl{!aW20m7#TO2b#1j_|$NNUM4Ug@d8$be1(0|DxuY1ez1v^IKlTQJxZSj&rk!}ywj(7RTckkG$jOQQn&j*WJE}a;T zcTnCX@u9hD)abs6cyxQbWt2*I+CEdlW3$!|#ak~N8gq$<#x6Z6Rx`#aZ+yqL;rLK7 zUZV2H<3su5n?)V+*Xw_;KD2HB(8$)|_A1v~3wP5}3OY0^-U2)>p`hM!X?)0=t2Sg% zk53GZO^nAw6Y-&{C8p8t(M#La)}on;7fKxpRHZj-Y-r?yVK7U<8EWboknS6O7ds$8 z5U^e_aUmIN?xV1tVzi@deOre{L`oSt_6&_r#OIF|V>>RmaN_)U`_PWv!`n#ORf>UV`-Ho-uiSdGGg96)d}&6EdQNLe8+VUx-8Dlo%g6SOPb}Xyyl33*wl3WUqDC&* zJ-oDk*@|T=*DN0&+q!)B@C8F#FI_e^?kztLjFEJ78>krFGqivBbvu?X+d4FM!RYca z#tFb(YFVtumTesyqAkmIj4oZVZeZQk?Q6HL*|K`e>eYkWms=~Bu2{B$|1F2T*nH8x z3DvWE$Cfchz;c+z=vMo@{UZDD>;W(|a_NPm7Xtwe?eG81)G@wqi{mKcOU32342=&j zWr#B#sCQM`@C%1`?*XZ;&E7gXHk?7Ue9OKayJ1k4;Mr^b%=m8wVtito!7zU5`10{f zN474fZ-y^fJ~Fy_;zGFOwr3fj8T!Ncw2_^tbnEh!s|U8MUbm)yaNEGZioxM^+qQ4t zvUOGe;EGjihlW>gUAt!G+Wzgs0}yOVJ`Ft53(NN~Jq(YHJS*jmGG4at8`&!6(TcN1 zg^=s=k$o4nerw_rT<#uv-KCo~CVw4pnxljE!P{o4ZO_oij;*_26;Cbz0np!%=3tnVP(1XzMOy0Qa$l!Cg2se&Lp}(ThjK z+t#EojSXGA{G!oqt>rYZqfVUiEdyZLvgQ2Ws3{#N7i}5cz2kMmQ!_RDiP|>rA7&`I z8e4$dwp$X?=vH7`2~)HJvv&=Q{g;e-#}-TbtaV@u15-DyTxoDIyq?`^rZJ-5ltxgS;90L%W^qw;oxJXQaV>Bd{`9vL#K zGV&-AUsFzKNCW^?j+ZnFI^;{N^{$I*-aM{v2t2Qw>r1;>q~p4XUyk4Bd03M3kRiO- z{l`oGtMQX;jGEysRZF_7=GFF$=omG*T@@#4U`A^)TF}I`I3t_V%~Xc`K{xJ{mQ#3=i0oUg4EZ9zw^}IQ}~_A z@A>?)G-r@z6VGQ2U5dZ73Z&p)Hw ze?-k6E(G}?@T2GWM=yMJd3{%xKQHpT{Ls&x5T4Zaym@{+NQS7$sab_maFoAZ*(05+ zQwkRNL9oupP96kd=pP+~ep$~s68Lk1xp`lyDZA(w!cuTFfq#6K*1P;A6i=zRr})!8En>4#koS9hFZ7~C;ZecS*us3y1PaPs{!+@@7u5azVH9-v`S2eA0B8#; zF(~Fsf#1I@sLYA_OHp`iR|N}hkjGb1VC2>ogW!gcb^L;=3xhj1c>d@6yzq_w`LUPZ z5qOc0XZ<;WM>`{bevtG3G*~dJ>K|L2U-tbI!+zQZkp5!-1>iow#$5E5`>Q}e5aek2 z^Maz!$yDU^e6Lokd6e`|{@Ze1NIRn?VdTG`Iuba~Z{<%fuZVunU(<6uZ7qc>D7WCB z5-!g9#Zy_1ALs&WQQ&V5g9ya<@Akvu5r$pY6WxU{_W~azi6C@NlHVPiS5za96t3NS zsO8^)IL~#VzLI#SVQE-@iR9yT`N7ZpQWW`bq5g>71xxbQd-)(-Mkm}!*}nfJ;&=J} zOXmV0CA}`sD|!PuRCT@w9Sr1h;gPgC-$R7Z(94}v@cidTzYSG^fn~vwUM|cRi$US& z=z0QnM=OgQ_B1!=_jm=r*GkQ8^KT^2DUlaF89b`u!M#_wsNkJH`H1KF@Ne;g%i(3m za?PIqfae7~_xJa&=wI2ts(+w=bw2`a|Jwd_EBaTgSg~@&sucq(RX62eyYX;V=UbAM+;F`5- z)(s*+53U?sH8?Q1dT`C);NaT9b!+?Au2{Qr?W(l{YgeybvvzRp+O_M}0pdEUN0XzV zbtGE1?qqnj+W88`y?9gqij}JdR<9XcyDr)If)}24`iZ3_C0;k?m<`+~{5JB7f3GBo z{GvVSgt{I5eEhVGut*ZfbT{qX-a zoO{!oNdL9e`08cLmi;czUtzA(+_*jO_4 z9%)YN*Y6v-cx-6TlH<>(8|d!yUqWx3?~EoMywp1o#ok+U=X<|9`$lipk?}E=`21sj zdgA#fJg@(O6GlI9pDeYfwG-UIJ_)yMv+ z@6``K_=DHn`_Rzu#@Z06H#be;HJEL8}NbvFS&x6~7dxEbA_f@{p_08a0!FT-!az6K)yD`%ixQJ6k^ena7@Z>SgD? zAvLOMd@~H{A5$kKcOe-j98J zWc03o{Qe)mw*Gs$Fj^XJ5B=rKCa*dwT+y>ATHJMX?u6V6qweQTemK84S{yAY4wPRK z4pgoj?3!CD&O7O}b>Y@xSO45xU$`*0@YuD{nYrarsnAu}5FZy+y4Hm2a|;SlrEt!s z!By2&g=NK3{@C!SVla8{OKbUJSKqSY^X4u%cF~+8yIw+NFRacll=5d3kL%i3-gxTs z@+aj=`QOg_xmuVjzp5A8C9`qxiDwrb6lE#aGt5OZn4FM};riG#GYM@jA*rF)B^|e174i@Tl|ro|V-D@7%tx zJbA|(&e~eNy1zEJ^yYWwu6ofsKE3{$JFi+-cwY3H{IR9eOG|RIue^2rs}x2%2mUzLha4xPyRBz@)P+ZdwP3b z)HQMPL3e)g9S6P>_J-AP^1Ga0@Ap)qwKRT7@x&J&Ub(5Yxh)pk6(Y%X`5d0>ep`GHvGo7eux}j z_|p9k{_v4%?`fO14NqSE7q@-(_HTUak$*pM@DFeLz-Mp&!d>@#_aDx<;cvcr=hyDp z^pdk*@v7Hue*K%?{O5o5$=m<-&bz+VJNL*}zvk!v`Q%fR7w!H2{oTimj4nEA^Y35& zv5$ZM{@?oR+vXm5^f9Nu=p|=s&|H4SUw+}fZ+!2OfB)Io_?sv89lLD#%^&~d?RVYt zt^42MZTQn0`rmxa*PeRG*}wDZLb0cI-149NbYyh!l;>|e?PVA2`{I}G{rb1R^P?x9 z^5V_)tL~4kdSP*4l<&RrqurAqAK${-M_hY-ZaK16&^@nf^0W1c%H%f}Tv^La{-EnW z-V+XXUHO_hlb+nm5w+`<>a2pvOyWrBz zdxo*BOkBEoVsv5%P2Aq?({jZqs{}hnHn+YKcI;d0OPBLp7JSBs%%-a4#@(YA3}51` z<(qem?8NZ0d5DFb3x~%x4_$N@g%bWZN@m5RWwe= z%R0Jw`|$7<*<&|jwcRp2wr^zn*zoY{vQnCWY;&n5c3d>P85_ezd&nqD#l+?vg(ZcFBnDWha6ZOxd_}MFM?bYf}x9svE4Dk_JgIdt!b*wBfKAbjuzei4}0$dXIE7n z{-4L4S7wq-AV46fXU4P!Nv8MxKx(;x6G1>JM5NSqa-SrVKpvBXph$u|L`6kKMMb3+ z1uH08YOO^L)>?jwmA2GJwJoi*#fp_GR{GPH|97pu&$;)`+?lxMs8Mt#Ed!PMW z@3r>cEgzdPI0w%=d$#9GOn4o>H|I;}Y)yvg_xOo!QEzPDdhu3KPOM9kiET6(a=dkP z$+(ThHrBFYsf+lc-8=T~gs@!1RP5a??GCgcT+mn=8}%V{7|~^p;eGfRi@*TFWB z=<6RCwBHOZ86H`>Z29PuD~>pFmH$ zKDloF#ILlJG)(sW3FWIqk z*Y4>(d-q+s|FTyaT1FR~bNKx_zjOJW$8QtA@+FtaY)tOmyIw$>F{4gH-yUz5+@o%1_Ilef&*BgQKm*IX;tE_`nS>(3g{H<3-z>fQRPi6nBUo{6se)X@N z#J^Y7w(pn*q2a6-pY+^UpNwJ_yl`Fc%K?7x;Q3%3aU?GY)~-9De%U2KaAF`4HK*=H zkZ3k=42gRw7?0ZYAhwJ3v|&70-@IgPu>OVk4z?pC?B3gWRq(1Hc=bsEUZv#zDF62X ze90gEqsz|A`EAApdD2M=1)B-|*s^2qcKjQ}*Ic}F2P{#%Rw5sWeGBV}X5MH5p&Gk4 z^LUw@O|s|1caS^TSQc9r#C!9)8z2ExXI&FAseSw_Ivc=4Wc9Ul{Orf$ai)@ed& zBmyq#>v=RrV1DP`OD+>W@v0EB>1Ah_c)HUNviF>`WBR4mSND>}MbYhrjomxW0VRpw zGaejd-FjSexPJ>CGbEgNE_P6d#O+0MvzvPvqv&~>`{UZ4Mb137?fDAs#s3rKznlAC zZhQU%?%T@~To)ZG%KrxL1=ri31qM%Pd-q=M#lIEhc@6jL+MciGUhrSwFUs>;`;Lpw ziOlV9@r%->pQ6u2&pWx7enhad1^iso_WTtJ5Z_vNeX32D0(c^2YUC}e%i&i}eeo5q z`{B_azV#g|F8-}Ae{J14->dB}f9U1AR=+{qf%@;S0>|0HL(u+@fIK46oi8;I=F~l zKgM_Or$2({LT5zAU~1yn(BJ0Xwv!Nxt$SALWHAoKBf#eQMXRN@98$Wg$F^GCMNucwUyKb!fD@{@8Z{HpxqpU6Y< zuEuY+pL?fLlo$SLpw|uCa+#PuQ`lY6W9bhf_I0OQ333J5^L z)c{ZdKt{9;$eitr=~=Yn{ruAW&e?V7t;jRao0dxMOoY^sajmvUd@ zcP77A+xIWyx|QFn_(@v@_k>T&PuhCt^G2Od@cS&k|HJP=ev&4-K=k{}x>4soet*vI zL4M9(ecVmR%s9s#ySuS#FUr#-YTKndc5g!iBessHn~U8yecZj$zOIlx-%np_`fGn}PY%o$2Q_!#eKp;F5hipg4rAjDeepU%hGDsgXlV|+-bLyczNV4^tJoV97q z8Eam&X-z7H+`R)6k_7HiQlnC><8ZANtF>aLnl6QjlPD>tF<}`(#!~t78#VcQ)0$J) zus`UgHF-o;WC*^^H8OQ9h1d?8`9dyR3;XgjT0yj=wgO0PVB?ai`L5n9=CL#8Yqe%0 zl`qx8ei^T<#J^=|SP_{Qs=UdUiYa%Pg1TCR{x<{6>}KK^h-rq+T* zTh6rkf|+H+`L2<#R7?40s?ta`vdKyzTzV?s6{Cp4_$F02%?2LE)08)Xh!j$-3Us8a zNgV!#WIhuv6ZkNdM^l|jL;LE`KxGMhl&q#2wL-E|Zx(WSq8q~HQuBgXU-~Q4j{{FF_@Kz9C&4;PGOl;F#F6A=mR5e|#g-0)@kVdo6tf#Y0+#Zc| zwiq6hm8r(QJH01ofGTyGu9ZNR-myCa4`)uZ1f^t}Q2J`MgjF^ft}4U;Vqh&*w1BCk zBnHoPshENUssHE|tpW&?;dog*?^=!J)EajTjMk*tg^6=Rk%xI!umr>^EQ#YU*;d8q+(^S}MCIqxvuhp`Ze5FnVSSehyZt~oh>^pUO%LSKi+`j#STz==K z$-?C1q%M$1W$hi#B!&84Dl>2~t&eZI5dEyUyJR$3s8g%MAalt=rBF+Uzbs>~OtKU! zO}R+?$)-zp%V!(m zul#cKg-ABJOLwEUQF1!pY*b3b3O2Hc-nl}UJXhM7QOT-JbW)<a}_$2dY;xdBmSwBh193tz)OnvQ09hU99ADrDislZl-I6YAzLK7r}w^ z^<1TtX*5NmZ#FB9Fc%BPt!ig9RhVwGRLbJwE{Jz9%r_Z}e8CL0F0He&?-{Iy#Y0>- zvfc~{zHOqrk9o6H$mANiDl$8(zW}E~iFyikjYV@geD}%=_gB_jDO4DSyutGyylk7SMeT{srSNs=kf;>uB28IeZ z%>dA)Vpv*e#_H8lvVuI&ME*kx$%ZFw6ChGjB1|&R(g~L1=5n2_(sZj25%aM15|j$L zbV$$&u@_@0nv_rifmotN8mUsQ0)fs{QpNBEI!k7$oe{3`$VRB|p=C?F-}l9}-2Gi0cec z%7wrBYZQe#TF_(f81ky&j znZo)|M_@_Tn$2u@%CAP%c6^$}LHhE_WzpAJR=}uSmM=kGK;wFmu%BWjEQ>N+G?QZn zj0Q|hM2i@Oenn->9@`mNZA)d8qxu@9e7&9}bR~)LAeE_v8(KKe*U{*x{2h&sgo9_% zezMpBP=hMrsV}6BsjSK#h#Y3&aC%>|aE?fu=%Gn9vtTVT3V5TC&L>M%K(bKCqE4Rn z8+PRGPUuCW&S` zjnJLRCqrnno%H+;jWteX%u=J4Zl7c6Xfa)@H7e3mL<=v*~lNQS2?N(m?kJf%~eXv-^^-c+9AE+*ir zK8gJR@SGNmD8jdL$$B$e$e;^n!ZTF#?9z-P4$4bv#ykTjN~dbsR5h95yFxyEvCNhw z7nU4RtLiSM6SLtEG7FuWh2sST?_{!GO2VW;_DXo>LR7OOL`nd;vC}!CyncX_(BP&S9#pFj|YI zpJvrYDuod$m8n+3mk1wwDsVc3m(LPACQ^l$w&aL8RJW{E-2fSJA<|InD@g>uJQ^9o zSEU)Avske+Szt|fGFiwrF#lwl$?(@F;^_vaN*f~|H`<`ooGdg_l_X0~3fOV$7$VM9 zGu_iGOitwU=P8^{Z>gm7@+Zfn$g&c&;c0n5=BUF3u}UN>$y%wJONX08sF%BrPiHT+GHDr}3iU1=EQ zj*E$&6=%|pdVP{m6t#mA`U`W)qsdh>1PtfHSE%{dbjBD&3P2(azSMjpEvCwRE&~J> zQjK&26|j^Ie@i(}+jqiCJF3JPVZLQ|g=7XTu7*D&T}2!IZ8fd6eVZy$C#$C=s*`Uf zMRumrO0HJGtl7vEu~%dJ3MYH16yGu5rfU`433+&NHeW}*3O6eO(n?GESGEQzZjilE z&XzB%0f=x~b!jL8f~hp|fuvxX&3rvs2rKioobsZUBe7MH$17OrnyiW|h1Gdyh^5qQ zoPf8AhGW~S7jY9b(ikN2nPym13qbp5m1c~z1&cgPuvEoygeRbe<0q`E1+V?fyjW#e zvAv(Mj;v$3X1!3W){AL$h$1%0u%VW#_RsKBZ6_$10A-yfTG^;(vb8D(uWY)RO;yri zQx$=d@;d{-mYcC|8-LowMBA$0*}!i2`V6N=AtR24dI6A4*ORpxv?`sxC^ZArQ)vr3 z5s2qt8ns#}*T6NC%Ojm^5z(z3J5reraHBh{L9AhBDAcPU2Y4KAo$nh1VfiN3qDn1E z1bvYasE1RthuhZEKEFxaa;bbWRbqBAP&dMD!UH;*m$IMPc}*jS){x>cjAd9?SqZn# ziw2E-Y^4ta>S)x(`#CSA7Ss>S_G;*cp~_<=4~ z(wRak+|^|Q%_nj9s#TuV%cPrn+9w?^ zEOuVBl0vdtYi2Uxo-UJaKC@$h#U`7tWEzc96$ekg818M6o)-N|Wi6=ei$@~gDAid0 zfk`=8tmFI*_qFIp+lRUM!+1P$8Td(|lCETnCCu)n@Y3#8&LReRw6_{=tXjT?B`cE+ z_b*(f8BSbIS#+j4_yBLgYJOP@!rB@ev4?%EiD*&ER1JX$6I!*}EP=JT@RcoI*7k9P z?E5Ao@XDo&_#u(g^QB@A2hppu6XVn7wxVHyRAaeVOiLc#Qxn( zhX=G<(wup}OdFdcQfqVTe#)uU>NRW*nG}{yEU1O>psV2nS`Zput|p6ZQd!(SdWUdH zM4?dO9R41Bsw^bOa-PnFSGwm!Z7ZqUY-+h=sR*@wjeGLUB4MYDf{03~H1O4Wg3V!)M7e8JvB=?p&V^UGLL+oE zV>`f1AAd4k%Mf`%_(wVoN)*GZT@hq^uox8?5*51(sLc}F#GsULd^f7OT0M(GQb}dP zYo1DJRU9A5M!k;DIG;yE39o%Br4{iuj-zFG|5=*}`?&u74%Wx>^;duf1>2*9jsOSb65>#jwMxF2 z3*X{Oq*B&U=XtHtvjC284VVYfLyb(SkqY1HUO-8?cJWz7;_~i`_UeX>b4~B8E;fse z0?U3fxk82jtXd{~TaRO(&nipl9Q$U0MWS__)X={?R_O4?+2FDmpNFZ;f=nK?PnK#a zV&3pyR8!&GUGak%^kW#rv10vr-JB|C?O=bb(;NGBh$6=VOG4U!GM8zxO=OjzwrVq% zsh7fcxRqHo%y5txB}QkVdkqpR*H#CSdzBQ^31x-w6N>ZB!>Z$DI|){u)r%Q*h*cz4 zFCmws+$N#kH@O$lkGye6wzW9k;&I}fO5H96m;;2myUAcS1SjDu%crnv6Q}krck9zu z(+qQAGKtW^8f2W-kiT3ue7CD+u}JX9&302(aYI#c>ELI_EsY=QJuS8_P*scuAeGcm zxlMc7swHn+(GaP6F;i$(a0XQ|4T*c{=D9v6QV7usb2M9|<}`Mf&tb#Z(2~V!ve+a_ zDHFceZTV(8YH$C%RlNlNt(GTC}if$AGeBAny)_xYdpyqV%8S2jCVIXo0 zH%kujDwhl2Z+KobSS|T3oik$L9_jm}X*(C$6Nhq$QOV{TNuoQm6oX)Ni#vz3mj*vY zyo3=l2&SNPt00tL>B%9&yxGhs}6akc4C_WDtTP9b<)mAOB4^gTReqgb* zwMLvtu31YVo)>Yf*TUajY)N&Y^NdchSioIOJn60OZwn3>LeXxlKYvCf?Hs74v)M*6 z@_7l)MT8(Es03DrA9T+aI56nEW^b-4e$HIISLR;KCDYgma0f#qs+DZ`A-BI?oy7cd zn|qi}&wQ4chf=0cs-zp}@RjiP#ms66>VdhVkxphaSksH)hut@bV+3n=ypgTS@v@Pv zr~$|{2;I7Ut(AOYia+-kI5Df3N^Knd#Kfjn2)+z<-joZ>*D$Nq*k!7gVW-yupz(XI zI2;x4vf@C&*~L!Z(?z+j?AfuqDE<_=$xQFPm;#V!@G+GN71Vjm;MwpaN;gbwVH_Jq zoZ$2p++{mcDHAYUmxT>{j$^-4$Rtte@e{EbS9r%^)?dh0vBp%0ZLT0)RSV&r?knj) z$w(klt!_s;F+t@mXV97Wn$DMzm<^WF(TNGuYvV(b-kMM4PQHpfyr~@GL=%5B9yUU) zYvD)T)1uLf;+;$9YTUDNL7loLl6B0d9$fZB7ir$QwWwpSztvf9(C0HNJDbaaN zm~k_Yfjj)fGt(7T6J!f{_V6fVWiPhy_uZY*z>Bl8P!z*PhqJPGWSO!2L??`3GW@6| zyo8v!hy^8j;BNPLV2Yqu!t!Jdyxou_S_1zEu9zg#$!<$7QYlungWmkD2oe$eokmCn z3bO23M~vSm-Elt7Y-#Lo#VJ;+xKc92qLylvCf3~W4;9nqr~xPDbOQ&bK{x8i*RpKf z4EZLU28UlU{FHLH?w_Y|`bh&NRuZq9i5*qz0?>*HqgG30E8uGmH&FOT#w1~QKt~jc z1zp&ry0ACxKx*JlMzn;D&AgYk5lWxLqF2S3Tg9yre)<`K8YU`T#n<1Iz&Xsf;U6C+ zv1#yak!=DAAi>6lc6-mF@V(eXj?CmR#usoLrEB45x?z^JNJo**L{#Ix%i#w}<9WmA z@mcqc!Z?hG1k9(B`B^}3ce|owS!}?pWYL5o2)F8k0XjJFegkBl`LV^1ZCI5&(GD) zOgjDu6H}#GLaMDbL7Y@A{1f*#1tV>YR4Q%OG|Kkk7z*3sq|!-Qb9o+&g1vd-xPugX zLf92~YQQQG$5pA7@UCFoXq3V)xLqQZv32T!1aYIl5zLM_I4fe+CraT@pAj^vC#wK@ zo$W0vSy@CAe(@QpCYfm@>nYsYV$3Tt2!HmBRFf^#fEU&m2lQVC9~dNUzRON-@jWcsSA(E;3xUMV!n{ zTp7(wcz>H-N2N1uWxP_-l-BsHR%{j;G5;iD1lCe&6vMB$+uI3eL4yc7goU~3qfLp3 zq>#sG^BYSSb4}L2R7y$q8*AhV6bS!ZRbfNZGHh&wF56VEcxJ=iCd)W>?38W2Ce^zv zG){bQ#3|-+2N1uN55MY4AXX`cp$s6DPIU#L6mDtbnAzQs{K8wS`DCM3RE#bno`ny% z;=?i$zUE2ky2;bY-q>vfbrTqo$HvYn5KUHIHcH~q{tH(lI9kR%8S%C$o=?Ow8pp&$ zdHTGT3{aVF$pCD`hH_fRgU+IxN--7w(gz_ zWpCdH7pqVcjFZ9TRV~&sEOx=)_1EsDGTBD-UmO^=%}AU5Yo?~Hdmt06fZ?P-bU;1) z+G6{Vh9M={ND-zXq@_GY0c<=eLf^jO#=b!fP%O<7e`d&^9XtM5 zY%L;j6T*$jiO|0$?$&R1v1kD2D!_IY(Azj;$jxG7XCYiIkK?Tn{>@^?88(JTDb+yV ztl=e1hu?C`zzR5z)2G%oI5=a1c_s1}S0vP+(7=IC6dhjlB5Om6;kV~1BY%!)00jLb zJwh9CiLxd;pQemD5x{8u80kyMp|GC6Rf^K39kz@do5<SVfDAiir`eF3Q3?Of zmDMA86U5%x4Mfi*TDN@JPGj03dX}X>OOGU`5vLUkb1SV0u35ekqi6j-HN z3LiPF&#NpXVoiFzPW%dCRn_pjb0J?;J4-Re5kJ`){|uO$!cCF8#jw6QTg~7nt`~DP z^t|xj4u5QMUBC)(d*g&mAvT3Sm<#PA;+VohGkM9@DuEIbt$}?77b@%4Kz_vYLim{4 zSi1BjmBg|268mA6jrYYCWDPD9gkP>!s$*=HrDsK!!Tr1YlKJUJ+78ODz3dBGpEOZ0 z1i9Kcl17PbZ;7tMx(EznV*H`{K)bXo0zFJXt$7kL4G0j^uY|>*gc7LJV2v|wewKHH zKUxGX68x1zhi6qg=v>HD!^am<2!R#^=j7-Wrl?FU8UAK6OngElYiJEJ2|?oFkDBpHOpXaSko*Q~`?FOtlx?%mykUNDv&F;h>5} zN>8t-h5xx|v8G6HBk}hvS(32PT=;+8mkOIRBCx~|5E!Se?XWGj3j#A@30UpRK^>@d zRgAS*{KB8QvT!+TER<``I*0Wl{Cbn$2x(={npzHHSDK?a3gOQd+tFN=MV4uT7gI#^ zuy!H*FZUJmBXzX6OITnU7ueoHm1gtDZllP(c*6JtQW9f==0s#y4g!x*8~*nqPyxow z1|ALJaO|ByAy2yJ&fmt2m3(9Y8Xlg@szleb59{PbvYjd?-O{o`kr)FkSFEqd6kuK9 zK~JP1W4VN~sG}*JR^!1LvZ#%<8LKPX1QB;a+ zp2*|yHQu6Qlw{`#?CFSVkfACzimSW|UF!%xAXbA-C}cUO*b1QX^f5e~oop(Y1XzL0 z88z&w(=3EndvU~_=(HvnU`7N%4t1$mXF(T{QyhR(46pI_(XgTk5t=D#pGV-vtc?<7 z3g#eA)H*TIJxrpKff7L-M7q#W$7{WXLKhl!44Ulw0@l_fGCO>&*B0nCXItZ~6??>F zP$-L^EzNQ!%nZe5c%65OfFWVO(ORSI^p579w1m%#*TbwEVuxamnVZ}%stBz}mnn_4xz z-doFu?K^vAZC1c4TPYIeTq!gN<*J2m^qx0ggke&q!$f4h$&=8+jM=EE3vFg4GxnZK zE))J%5E91T;xrCH1Yxb7!}5g-g`E@L>`6##yfsC9(`}E6BKzR6UDo7w*@6n`#%xr9 zeTzjY864SS;>DDFgK3(z*5mlMr&Y?n650V-y{QKns%VY3m(|X&^dj4vAqG@aEN$T! zsPHYGP`?=iZnsA7pP8Wy? zx(e?+wLe(+m<{dvxzLst5XqQl*rbb2VY(|I;jj*d;P-SU8NSU^54oWP3)Fv}M&MKb zA}c2pse%nrSYEz_tQOvAI{(a8-a?@o;UC2R;aq2pLamw(-|jt?RjnKyRzd~Mp+&Js z7ANXE7Ka0Q)^P$~YzoKn2O@mKcP>aI3k8^w_KqFm zP{zU8Ac%|qSX)b)X7l#42k)TXRbSU)`Q!0@LxOmw9 ziB((Sdlt*A(*&ik+`o#StVRTFCA`@azq+8LZd6c;Px(z{6%Qt(-Ari)btg;AQx(i( z9c4azZ#)cbt;ZP;;+VkuRDp2!SF)q8M$1FzbX9$kjStuar-F{^F zcXc|a2@07RksH02qO*Wa|{hu7vVTN^Lb4%_y#D?1Ob;Z^7b%e%3evHJmbiSXk} zwMxcvHJ=~1Gp=-IsN4cWZHKMMc4s;Cc=lYuE}1TdpYZx+YpIKO{=PRj$s%;lY{?89 z;X2DFF+9Q%gr|#LU}y>FzfSDlA(3d#*+WGA)c4jnPR1MDPMqvsB5vHox#%a(2uU@f zXBzeO)yv#Ik&J53N==k96UksLn_RIq0Vl!+#DnG6CsXTFr4yVR-Q^s&g2+rPpB_3h zJ$T}9b?^3V>uK7K-ItxXyzOBo)ed2 zyOP-3^%rg5QRR4w6OX(^57beY)B5JlJ<_ogm*bo>XY#BUJ!$&HK{=FWJ*yXw_~cJl zE*X&>n)Mv}_4`ss-1^g%>_>jFY(?#U!Ck%CKXBlHdtkGtf91iEduOvNZ(VLQ!xfwR zNzzou+1#hMq$lJ?u2)>a^$MFH-&}Epvw1+XX@=<5Bt>63n;mX#$=vx;%7M+p_B&g+ zcZF%-6`JFUE2xL^X;~k&P>=Tl-)~&9Z&~No&(46nT%qBma)Rw;61B}H)Xt#1@3#-W z|G57{jvVG_WKLLa`R6aQinccLPaNv!@3Bnx9%-J`-yM%4E-9B>k`HsKD z@%=$|{2p;RhgnXbcHKUIq|f76KMGmOA1T^j=8gEvM>w3Bv3JNaDt}$qS>gH)M*XJxdYRFBDaB8zV zI7q9HK6;QtnEQA^ExsJOtY>O-uCt#=977UaaT5s+dNv*Bcv;EmdLtu}*`X_pm45_X zlwNQiciX=eBYguLSjgMxpNy9b7|mZHc^yW9^SPJMn}l>2f{ z>^VlFasDwDX`JtPN2n{S{fM_|=j;Bcg!W<W+#M}K(_@8w@ z=e}&;)$UE+JG?{gSKS9V9{eHqyYAKAHQsBzH+UcL-s|1!ebBqZyVLuqcbE4G@AtjC zy~{u1ea!n?_n*Cwd*Ac&k9yztzUh6V^w-Zj`{jEsJAeP{-PgHa^{#QR^nc_v zwlsfx@*4kI|26KF?$*t<`m3sMbbrVFh%Gx?llNxt5%+rU?Hyw2-a-Gry&ri0*SpI9srQ)o*WLr(Yy6*iSNpH^uk&y6uXW$yztjIm z|KI$-@&C#Dp8u%-eg7`^Xfce{V!zRg?m!FR9tq5lL&kso;OLH;@A(QV`28odpi zwVpHP1nydIW%=#b9wPBbd04g98(E<_^v{?dcxC4#XDILj|0HLSi<|cnT%5c&LRw;~ ze7k6v)KPnOeT} zFQv#ia`?eukXWI!tlb>zA906mtEGNgt?jzueNqUy=V-+7V?+8`&{uX(a#ja@!Qctr z$^wwmSAP7xe4F>OyzDElX6RR%t0z7{fir^tVSAJSaE zylVTH>z~q&paxnMB}YFmBXAr|UNt4iU*0k`?k;s?CcxkI&LA@wE_Fw|;h=A+I~;hl zP1?D#{9W5B9%ca5Sb}^luulvh0pJ3!94iLA->>jaUGl0O6DU->IQj)?((vnH(FYXn z$K5fH?g;GDBU&a;u7Z}lmSSk>@rno1z?J1M3iJc8Jj`sH2XvZDfBk1>Si5Cn4g-(L zla9E%hCevCAjQ1%Dk*Jww@I3tVwUf7m5wOY{QO(*HH{WnRD9~7nvX=3=^m{~3MJpQ zGFBb=9*gpQPV)&#?waq3DBqVg-{@TV9yCpK%YXJG(?c!qwX^DdD9ZP(_VTWrna_~^ z?`fU^Q|EOv^OPTr%KD+^vwc;P+R@j$Jxhkarfust<-LAZc~3;;{aDMBS?xN;S4ZU? zyjuEdS<}_C$~zd9_a@C}na=FFxGu`~-ud(05Y>B!<~z!??+vr+y&)>^Ud^}4Fx^Uc}5o1^}ITJu>hI}29I zw@3Ltulbgm_FX?~Ts{@m`_=i|cPPsDH=6J0x%wMR0gq|EV@_Qr#lV{+u*nRW_T2Q5zh z7)so1P7V9<7i7yK`dYS}n8lWrVF3bzxyed%#5p8CTFTz7Vdb<`tXEwYl9`k6Nivr++N zW~r`@J{=mg#Q9#ES9|j&MWQe3hzlof)$b1f{AHsxbI3+-)>g){(HbKgz2X^=jm~Dw zK?@mR6=cfpnb8=(`C1{iuam!wle=qmxxb5ev0P*ocl49e;^80v+@;I=ojHc^hRz|p z-!Wr&HwgK(3z$EDz*##-uiw(y>$RrS7d!)fzGnbt<6aSysK?M5BUN5e^z$kNyInvA z3I;r#=1e&6J{eC1iDV%OPY*p2 zfIFDjH5(3I`I@V*yWy5Y2M=6T@I@3jW@@azj1j;;5V&I^`wdRDO>8I>d|pD4y#qDBJ0D1Nis?;U#q6JvizoRf}mwr24_a~O9!R8{=Bz| zR+#aIHHuPumS~QshGGKn%HW1kagFM;RJ1yIXZ3EYkoHkM3FyJEkmB;*Ib042BhOQw zw;@r`dgR0VO>YXts=+w{b9U_SgLaQfEdF9kNj}F9t z6?~UF+aspV?`XCo=gJnDEB`~Y%{f$o9rf#UsIa1TZ`)d%?Jb(k zD$27JuAq5r;B@V-M&j*Oo-X=#F9odeQ+e$JmMnk0~n z8<*0>z|}TEACS(p9$_A|eC2qQvMNrI_iM&!(^_xs=(|m$)_Q@}5NPVE?Y4~Jogj^j z1urj`p&$3k`*)%DCCb7|{9WVT>cE{sMLL0! zQNH5=uA|?Q8kvE6~9gFC@V8(Z==KU@?V}{;6==m+Q6JgS~LK9p} z96W$gp7!~I2LTsQZxt7Me{i(mkD51wWP|ap3uxq&mW4h2-zwFnHlo zul&Xv1!Gr^-XdjqX3oH~K+IC9BA^iE;wlgj-%}B!}-`dq@TvPgfbQ3!!*NJEONrWxyl? zJRl5z61F8&k{p9mT+y@4t5N%EwDn4wE4c>ks}Vd*pvopK528)M)CM|I_~Er!$$MTk9N*n&ks87C-Mo7hk#GMkDU{sH zB)4QwV0F}10DkKnf4onVkJ4n5-Y4k-t2B`}ccQwIGhsUAw;IwnvmvHpv^>e*Z&Txn z`%E%UNl6~C$*qcQdVhIn3=ox>TjvbYdhLt9-WlQxY(*}`4D6v3PddAHqhBu(?^|Eg z)(yvB8w^|?^xwImco;Ev$`=4AYPaA&U(m=A`3OtP=>SK6dGw4RA?$XSKDm3w zm{*|atfjD0qpfOlJLTnm%j5<_5gR>0M7UfqC{v@lwjlF^BK!N8+cLv znxrkCD&L?_*S&>zqxVY|XL$5Jxgs$z3OQlafIUpL4haDD*yzioMXWKq>50czH+sZG5_K5c2 zZ5#8+--n7+{>D40QF8`w)7#J0w`nv^exWgo*qI20bZKUX@d-Ts|`%v z;P`;FVL&P$p(z6$Z5V88gN(Fk19$X|rZAMAZ3R_hhJ@01r^GN~G&Gmdx77=Ruk{X! zQYe#avKrVULV{lV`}T~Bb+W7jPxmx2=pR#WNI%UTgF4U&K_vK?v>6067bqBnnZD#r z72MJwg;s`71}Sj1bb=El3UDZ}NiEVQg&Pv!?=m?82yz2NtTOb9ITrH3EVv@Kx#gAM zjRK6bS^)%tAdo4fo7c>;P}LD&#!j$&GQ}UH6le9=fPYFb0R8C)Qg|&oj7;y!@qW^H zl+yd7g28#{j1Y7oYJwotaD1y%R zCiJ&sf(9{Zvlt$kjCM?r(ps26bHOMB-=r|42EOSF=w;!Xgvcso#3`Ggt+UWA!8L}8 zawn8Lf^O~%bkh^Rd{76Tccbrn4ZL1RiC=yKiQCX|qiVK*8*e=60^G1^x%4dM zyR?`nv%V$upuDDoHq~awRQLju@=i@i*qh9Gz=i@{6QLlOL(ay(5?4w?pYWw(@T$$?5RDH{6 zJYiC=7R2DuX4bbn9+cNiwN15|^)0E_nbaF?s?Dr#Nxi|O-fUBCW_?TQO(ykLn`$%b zTT*W^sdv~^n_1tIdb>%z+osyg`j*tYOzJ&0)n?YWq<+eze!-^N%=(tpLnifpn`$%b zTT<^csSnyzn_1tI`hZFOwoSE}^)0F2FsTpQRGV4flKPNIeblDf%=*@#v67Eg#z#y> zL@z=RWOC&>a04_J6~VciDz8O6=Mz*jNW~389n?}8xT0#nZbj#TxS&=NZpP%tbVdpa z+%q6zN_cogAMKCmmZ518^+HbHh{zLDEl;dfS|~(HiO-m0MOa=7wbOb?-}aB z5MJPj*w)eC!|fo%x4*o3O60Ho$|Z!7PoXvrl<5tlae`;sG=z{gIwj8!3DFP(??5nw zX@Tmy5>WDsH&k=WU|DLzYYYQQ%gab(3@GaSIKzvWf(bV8H^NQ$PlVPh5MxDO;_Wts z3NuqG(lJ7OXjm-l!?IY+n&4-P#r8++;4ztPlw*cnS*#PWSSMz&{S2m&ju=*vABCGT zt6bU?6nZhJI26&flA7YQH2?3CQ#vWqu3neNyW>JOA~Yl z(F2PjN_ts!5|J{{dA-pau0(pk*5FS`5mK1s6jP^UF+)T%+m$%lECV!K1`&g4`v7^J z1Jus|b;ux$LOei+A%m#)F9PQ{Em2G}*kV{Z3G@MGDF`M59XCCat3=gPB|aV^qiY6Q zW`9}SuLh*7crMWOgkm(nFqfKbWO^#roPe!LNz9`b!aUJ^r3I9MR4emK4pW+pn^8Xj zMxE}C9+~+@8Ulx+o>2h>Y?Ce+VuJ*PxtG6GY2E-Fao0a^B+?w7HUtF6IO3voM`#SRzX7X9|Ys-eMyY> z-FX3u@O1|Psq&~b#!IX)AJXyTxqM2}5dQ;zgD0zH{PK-bIq^@e+bm5XLKbum^lpH= zqTa3KE=ijDAc)lZfPCAs#>Tc-L{2dhQ7ptmZLr1}Mh`T=1|`%u!_*K3jERP>J_*qf zJanNTL6kDYQ0BspgPJg*e`*zDkHgH}l zybZlpCrXki%FM<qs;i(velRKejW>!=McJ zQW;eMX1P52!H~Sbjt8*md<}^C)ZN42lOb4s=IUSo(}D;uaBuo!MogLwNJyi{MleDJ zOJ(#%f~7Ka_%~#r$49h4TvRAv#3jHJa%jy6lxIJb?zBFXnI}{l`NKaYSRxiKKq8)T?r4qR zoLb$GZ-5SMlyBe#8*Uj^2k@@Iba2q&hbW3~xN}ydaf48e7|R}2Ec=n<2K6DQ245bR znd+c?Z$VkB?HI1RtU zYZZN{oqb76)e-@@lN?16MH6LSz*INRWq22kZkcss8F~s_YDqjv!`um%8iB1tWfsS! zMkHjzaw!eL5iSLm3w;&#;+NZoTLQnn(w`94E=-gAmUsr6Po4UDS=j^pW+{Z%yvqb3JxYwwZJid z18fyIrIvAQzvvU(d&n%5p@av$hX(;SX><#Td<10lyNIG)KjbA^0cZ!^b~zb}E($R) zD1-$P4z??}5P7zi+a5yFMBH6#LefygiMc?nHw@bcsiOY`+ihgpLlObjlDs$5GvMt6 ze~Sd4*$+Ua7{lOaf?z`mVwKA z`+4`EG^|YX=0vM`L(?|3g{FObR%n{E$s$Y-ZPIm;J+}$4Fi7LIp*j$7g4exGNRoqX zv1v-EKz0+I2D$Ql&;ZP5nr;=YCgEuVxs1dZVMIoP2YBZZnJj+m{A3v?s$P&G_VA;8=dFs@tjkeBR&C^Yd=C0{~F*SN< z$m{D(He%Ub!mNrB0f#LBG_F`>rcOZ#3D!vPh#5vDMmiF!G|~}FRP>BUC^AHKL9qzQ zClZSW+r^?m5sQXIEE+Om(cmw{qF9$eWLbn*G}Iv$$vhz`#iG#?1S41f^`W=2u4&^^ z1oUp4SaBRTQ%kVvS$>*Lv8)_$+g07=Cu2lz#ohNTLSaM{N$n4>M>iHzja#0(Chd?& zY9ERO!al~PCxLLespe06sYZzwGRNpgqG}SoR)bkrdh=i})hNa45N{=JuBYCx)r$yc&QA#l6PTTi!<>4mCs{_i(3 zeeeW-1(ZMDQsypkNf{Xxt#FoJ96;5@{)Aq<$`JUoxZt)vElv=}kE|8P^eGAJY=Zb} z*61t3@g+r;bO~#?z(_$XxfUr~1R^{|szA%Fn0xJ8*8E98l)M!e2e-GnQ}Wr6z2!5^ zh5DAy#Iz+D_)Kg-a?58+xkWKw#s%eaY&lm-pea)63NCzk1Q)(KGVn#<@8nc1o)z7R zUDNWen>=Etj7o37^d?U%m7>+(;*GB?_}6*nt6*h216wH!?5Ki&gBKiSIM~YW9PCKx z6Gn=g(MlrC{wD5)(cUWWtgY-ZH6@r`u5RHyDc6aS2hO<=Z zC#Wl4dUnu@>}E%_H_a;eJvL1@r|P|FvPsinHEqRka8%6Cf|bh0j>hV_Y`}57p}~QE zWnSz>+2T^mnLZ_h?BImmYW53be+MthtW?~c&xl_+t|^*mE-8UAPpxG^f0z|)+42YSP+Y+4Y5Ysq1T$sdW7D?L@Zg}e^}6q5wnH!&nRNa zmI8;>G$y8nSTQ*?2zHDhSid7Sv_AO103w9D9mirxa3LJCqQ+mmKE^S-(DPpN1}Pzk za108`Dx&skVli-`YVeSXMDq{5RHLZO>XsJ8h{eE#s=?JM)%;5@)quxher&5I76TWm z2F@+jJl0D!K);wD+p3Ahz=f*8#VXbOu$OAo953dvTO*+sZrB@{J=Rq7pS@HARC>WN zz}q(v6u#418>?X;kdAe-a01tb5cMNQ@07NHV#t<&|9#GOVU8kV+!uLVg_J4=Q8Ar z;B{zZ9d$heybcw%#ZaD6Ubo_K8H%7$EZ;t(ypEN;hsW!fn8V?9Xd8<{gxS3A2qRCv z)yRGAyiU=2X?rz2^EzvbxV0rr&Rvb7HAKFJ);;q&v^(Jrzu!wW>I1`?)T$=YE0H4X zMXLE^FV(04XGwcCJ@YzS%^&wtjT&%<+NtnS znQ8a6(jeQN-#yq$`^L<)hgxZ{g6O+Wo~JQ(8po>ov<+lcv7bm*)u(MJ>(wH@+WViu z4S3QWpKswk_o@OMH212^J|P@~J*N5Fre}{G-6hsTT*|>*wCGVdS*&Y6?pj?NZr-sW zN~DV(Y0%*D7JSYv60jA1_ep$3Jcpa(VKY;>B~IBsBSlxJ!FbmaJ`fGH`Q~728m?|l zgGsx-m3G6-w3}LKD63JK|1+mg_VeqmHXYvdSsCa%y-c4()wIwPc_+ZIH)k9~ z#@1tk(b10yhLdNR7+#MFmWlivr8~j$IQ?j|VDRX+biV59E=NC(O7P2fd6B#P!d8gj zJkf{HvBM8PJPDhzIP#tKjzg?4F^jjq4%>|&8^d}-d{3qs8&nSeolCQ9Pkd||8jd7U zBJySD4qTFGciOV)8mS)lR@2RnS~gun(mK=ENTZ_i*J=x+(bDge?djRs=_j|R6YnEk zj0&K6Vi098WVa7jRy_~@WN_Y)Da@)8G9{K+5Fm&RLuwjsGyRUnmR~jbq8k~9Af{Ha z_*!c(7FXmK?-Uux=s$rz-EG7#6OTmR!Kq(FOwAiN@joSEN@gn7^J6_wSCw=zr_Q~n z*KtPt{k`jAbLz~XDXA%Tlf@G7LN(2Hlg(X|%8cSRFaQ`U>#-cXP-Rx6`&mo9ox8Hg z_17_gu_(MyO|#u{bJwK8qev=Uqo-JuxOTD8Q)|a4Rv3r~y~;pzsS9_<_vWqpizQxv zPw@!o`o0hzvss`7jN^6^YLskIqqQcz)9ZwjO8h`Vf3n8gWWy7zmx(9^j3l$E(SlJ5 z1R_}SML0rR@aB*>d6r0&!V=@-8S3uiiPUrK?2(ISGaWz@!~h>Tc(Bg%@c(-7=91W} z6Z4CqR+K`!@tL`AQKQ(#wh%JS4neR2^;>6CBUQ#F(jg{Av5jq^YG#w7xvNoSTzyDw zAqYK_*V%Mv?wV8|?}!cPnYPX*LUUK6v{eEsJ|VKC$TmGwRn`EA+JDs>4@Gesb5|2l z)t05TXOe0iZ?Em8n)ylU;Rd7z0pi)y6#((Br+Jml2IpK3JV6Qh-yZ{U_xxMac8a+Y z_8__zLM_s)ctqE<-W;!VS>)Sw&}Vpv@D~^hFg=@15nd~7RSh^NhF0dv=6!oyDRz$gbTR5z_f z`c!3DsGsipCIig>?Rz@vD>kk5z(L)b5c#tErnM%HDYlU~B9jJVDx)rb)7lRo4%HAD z6cNsds=8RdMMHFq4aI0%K=ccWF>CG6CPvD7h0ZbKDG?|(=IQ?rieaOQK3Rram^n;%8=K^0qkJE`5px zsZLtUdMuFle;uiK*tJI~*>I<_oCUJv47M0#Z6lijwd8}KPc|kJcg>6~u;B=0mq-KF zI3gpv!imIArvaKgiCvIA3SgJ4?Ox|N;{&o^^PQ~TAJ|_0wOw~!8zinq7-2ELD7yo) zJ+E0)&8s1*ld^d&`#sALb1H>w+Uv>E+}RD0{ZLrvA1$o3QtI&MeYd}DiMY2$NE{uZ zZDWp*Gw&2>XxEborTw~FHxeaF*7@U({+E1?c*$bnC9;&5mT>H#>?gpW$=YGw`lm1s z{TOCgiXbNwYL-jJ6J<^&+#axD#=Hj;_LUbrm{4|09`h+z4kkR4u}h3G!qLHmVnB6A z|JycH2Ftv8(!Oz7`%1$T#Gy!l8{f)`Z_{GxX5$*tVQ&m`250{Z-pGYO;pkOOD_2#lGvU|X9g$3V0Sa8BjsF}&d z{#EnxvS*pNuz^*_9PK#HQ7ex;V#Vn4WlJ4rWO&KYAn`b6F~L8!qIaGp?=Vq|Q;jih zY4fWYUkznJS0X`Br_()#C0@=llwBK;Cq?8<(z{6>rONVy0=fRklqW1Q4~V;6LIT0?=g( zh-DJy9xO9PPTiHjo3SZ@H^MyW_6d*6=>j$eiJ*1e^8p8Yyy?ROT50)y!AhL!vIE2; za!)KkqI?gdrwyGikX_CN?Bbne`-gj4&hA6mR_n+ zu7WwXW&al6PfyjTUf`GYh`EIZP1%XWyv4nN5cO8gN;5ZlMBPHwC?AovLI2Q_KxD7u zIQaJ{4Dpca#}S)Hh&e}wXMbIYQe+wwDj-fN0+YItdD?6Vz1+ypmg>fZr z&Kv!-7AS-bmE{}+4iP1Ym>>OPNdTL9eb)GL+PP~Ci{pl4uNz;n;YsJJ4bh>y?iH+) zBh%@6HjQj`2y0O=h2Kn_;5g&Uf+MbBf%t)IL`e9rpZ??rfB(5BuekiG_H%p3`>0w! zqWdU)eXkVTE8hppcWvWLLXq2dN|=g>^|JVHyNy}-frwX}*dY5J9k@K`yNZ$syI}~H zwU*vt?yZhS~uLFavTgJah;a!shj_yVz`GXa=i7GzM`K^Wx-lTfSCLNO{(LijO3h+f?|6mkkZ#%i$X^s}*ZvRxkqD)6btN0-pM$Ts3 zhD}Hnvdzq>KT#S1387=sL4_N06rchOkQYaB_C(8dp#}%3Tr-n1by2d85&%b36#y5N zE+*+m(vqHP)71%n`EPouZKbL0Q?qJ2qSxBg5$Kn{+DmQ16FMb-D=)|LzXKZIe*E~9(9Cwf7md4=;SqOv1oLyfT{muCGJ20NYUR^+NC@&;n1YT)9JUpJ!OBPO@qcIq3-3njs@B?R6vr)3={oeQ050r7j)iNRU~z zjr3aEvrTQ^?4>p~YZm!O$XBQQBN*6|{A1_s-d<`WK&=OfgaAs8f)v%J-cn{?!R=sy zgN{X|_0DP~oW?Ck#MZ2mkZmQ%zO9t8v-M_+!B*{Q%iJkKhmfMV@6Vop9v`ah#BJo7qdnAb3X%|R(rXLz* z=$CK5Hl`og5=HKLyLkh(1Br!S4UQdz> z0dhJ#?HsXLtsMP~5z~3Gi6Iq}R==pp`$g@S^8$lGdp5hC_h>j)d^kJ!r=;ZqHo9Qjys>jx_x*$lXcyHrI&$|!>wXlc264Wx>!MFu}_D7T8vXz=F^dK zTAXrvoFd4&iBp-lTrm1MK^w!j&arz8!roU!%UVs!E8e!lvBPtGG@eK=RMQUIUT%R zoC4y)>l8YT!UnX)hnA`M$tfU_vo+wB4JTKr49cpEIDs?0y2RK>f%7Y!k76VjWiv1~ z^ObET^V!ns|1+lY<#SSuIYMcEex~v{wyT^wlxBvhyj^YdMQtLt-sK~2--&!{qsf* zTa12Xi_wpCGWsAcWlgJ;4o3Aqg`IQ2&eOuqZQSY)d*KX-Y%^qCbtnJ)Z2s{Hc&qFQ zc&K{P*f!TMdOENR$v` z^B;0&%<_mhkaPFqrH7nqNbV6iyVKAoXQ@j^@ZL&@D;JHJa7Vu;aT2m-%+eb*vG6d0 z9!mVc2_C1C5rH6js1(Q5ctMcGo%jH?b);GUjjUtBeItwPt;go9*6nG!QjgG6U4GB| zRCJY*2D9j^Lc#R32M3(3ho+#IIQO*@#aLb0ilUmpeC%tYryk^ zba6RT^7VusmYRrGDRi7Rr^n3k4O6frnu6%sITfr>6MqU(G`b(4)W3?wft}~3o{#ZL z4>?q5G;_nUj6e?}M4qFF@2Wl_?OD?(`9!N+KM_8J}6raj* zuZucJuaABy9ur{0zqaFEyB?%B>m0ENGW2Xcrb6tq0xPn;?1u_XWg=1K|Yla0qix>6bnoN;Y!gGn6LYucOVfR(MEl{~vqr1MS&W)p_1Ozkl!j-mCgms*+SvvAw^a)k8&7O=c#YWCGoj`vwRxAlQpx zm>y>}Yjv-s>%A<7Dl#SAhSbX+6kMo5qC`cF0tVY;O?3Pd6|sT=Vgq(Wgs52(1QqQ7 zQDBTVkokPS``r7xzu$XR6o_{BOjoU{dw=(yd(J-l?7h$4`|Pt1=*&0vy|yiLqna40 z0?5!6@TwX%wa=SuzpDn#%lVgW!`&~{sM<0_f($OYk=oTf_q37I18!eEe$8+YdtvgM z%EfaSi!{LORFMUYVzWkMnOtpa$T}8!=YOG{lZrkoRjNlX;MYy!+}NANt>gd?PUt{Y z@+s*b$L8joBg|Zu*Iy)u2-~vQ9L10F1_rnuz6`(Wx1OMqX^xPd{JvP4gkX%m%CN5t zLNC|~P#;7X-e*#P;V)wY7?(>WDuMGzaV6WCxIB}Q&!H5^WMwlpER!V|js`R|YJdQ?H!~l9ajP39~$TtBWD`t4XzbE8T+w zH%Ya2!HL;k#Se0{uVVjt$B0(cZ(i3YUy&Tm>TR{&{N77PuAqoL&3m<*y7`UN*h>e} zZ^)IvOQDwU*Gx(-1(^KPZ{Xfi?fPb(J_VcB)9Fj>PSq)%mj{Vqd=e1aN0_vh4`? zzWkccE^8eQ`7gif|7o6i4hH04i_EN)v0V}TYuzJgy_?^S4MPY^4K6#3Nbhzw9q(a} zefiKma}HgAHHT>_FJ1z^3)bfg4x?H)^R^6GTj$eW0p%Uddg|TLtREX^L&glWwRBkb zj=`D~)REoCWDfBBK>fN$PeEhIv>i$Obet>7LsYGAsM?==@9*gof4`LX59z7KrbB;* zbZ3%9c_$jUI3N|ZtUvpse0#anWPV8ZMRnI}q9_jQim2oPvh+$l=RiSk|E~r|v+Al0 zpLIpS$R(o53V)r|7 z7Tvlk>%)J&t1|f|I-1S+uVb%raT4)dXbzL2gw+f|#V^E@jsSC@G>|igP+&AIkO}?z z)J@u7Tu?@nO$c!2j;=i82wXQV{GriT`vA>#`KrJ$?7ZIf*q=^$)*W)MV*{Q9+FK5k3{vP||`s_TP=qMixI zli8p<2ni>UTsB2h^!eIcG!ZiOA+3qR7urD1YBeTAMP<^@A(PM1j5zuF=98N?^?oAP zoWG}@Ddor>VqA3P>%k4x>TyoNS+5lztkSD`#wP`z9G|Yb@XKXl0C&B1LliET3YRL( z`*Uunx3{0j_)t~$D5dl6SHgYT({y$7c5m`s(o+n04;HSs9g@#2Q|8fZ&z4c(XG4r5 zFAtAQbvY1*NP|2R}z! z8qBrXdWTh*dx#NE97sRnf6Q$1Mtl&FP0`gBDn#&6BWhEoEnFL<*m z2V2AXk)J?XOrDSc(f)s)tw^^tQC5rC9-#yZTY>TCt=rR;^Uzo~I4eQ-$WN*wI##$J zBHGYO+RxZbVJ+1!C<941;H=c2=z`RC^QGoZw8lE{qaY7 z`I?ku&NB~98xbT02$tu9wx(|K&&Bbntrd=%TqKNUl!DQk+%I{TjVGCaSkER8iS2MhT{Ewz+L~pFfI)>OJ#cAz zvcB^VPer&(rp2uZFVL^IZ|C9U-NC>A2lWUiRF9#f%#?A5?^}p%yrWQn-e;&4SpWKz z*${ss2O~>dUfQT%NL~eN>P(@#MsZv^2poUFybFA=qjumz8 z^PSFJ=NUSA@_oQ|pJBeSex*@`N2ELkX+bW=db}Um$GKTp_JU$g4aL1{EJ(l9p&ivf=@O)dcQ(9c2fPl%&p- z!PkU>f{w)2gd$)Lgv&jz`!^sxHSG$V|8Wk@2wjA707d_Y3xGNG`y4P>jBLS6fH4_} zO+=r}^3($&g*^Y%SELns6kIqb4q?CUjueM8?Q!RVETa{FQ$3;-L1fVe|)JozuRcY*Y!J}p{x+U(H5CA3|gNI>< zZANwceffMY(rQRQy}_tc-}|CcO^qxIa@4&Tf5Obmg_8j4JAW5u(wx=Tn$TgMyiwKO zyHR~7_mjNCD>{@QxqtlSE<0~$yCJnWwH$!IFQ*hrJkS7eb;8?>( zoCl!`G`UrC&B}lzM3>M7b(V6Y{bm9MVqkZ(v^MT=J|H<7aQsBVQKOl0p%MwADiOf= zkBhu)gx6f9DXvxzv4NPyk>ibM(j(@>EM8)-_$`Zu<#Bty^ZJ|l}wGk78+=8N6PsF;%x zgeNk}4OUA=eu`s7WF%yD$Ox`WWW*g(uS-UHVlqMu2!|%4d`?E^@UZ^i_nq1Xy_5GE zG5<2@ru0DW36qq-V>`YjQKOu~cW>4Qaxj_B0WnSLz^<00i$cEOUcb;dT0QzAn$-wL zCjq!Kb&bE4Ha(vafUW@nz}I&H{1Q^+Tk@Vx_VBP<(sDOpK)9^U@M!n9!rYaXkk1!j zJu@o75&{Vkuf;e>qMUrDB`U<~_{DRf3)l6791w(zih6@H4?1kTu4rLUUbw|&$DpqQ zL(Ae4v{AwMfk8fOxEWO>PxS(FFI;&|hsrv~$f}AvH4LZ0DCjHPxk32uqNcKdX4*^F0aXGQCKEMm zO&(DzB8N)zxThEfQ$#-V5ckB?{Jbcn4EWy?!E1KFo8^+c5{wnwQanIbLIj{HNHRdO zz^Wb>F)#gw=nXNTY630|FLnn0MX&b&jif((!CQ&Mxm^YkB;FvFfC3V5y>{Spjm9NH zuhdF#BDFH-{OSg&>dz7UHCzr0>AJaO<^v2Y0D5z*5CNsPlNqFr^(ZnE+E6ojfcQ~w zhSN;_mnsSyq~6CmgJ(-Q&F#AndrL3#A!uK=*zv9(S+ zX?!&2F&4Z%pxl@O5I2fRmO_33WA0MOo+ipeR=6twnsu{Y;zanA9`+z0jZUi(jh{c~ z%=vr|34&@ALJ>aLkUcK{J-?)p@=hwAA`2uQ8TUyt&~MILDH3EdE4I`TLBs_;0q&1! z2{|&CA|@%Oea4LDJQ{p7?Sp@GFuNPg9EC8AgyAxyV8a~lRLIWpj~5)_(=Mjar$I=C zgmZBkz{o8F`AGrMMKWen3Oy*=I(Bc(8lJ#=&LQGg3^yZw!;GyVsI;Y~BbgRlhxgtz zTivK$b2s#}diQLlhU>Q36ShTKQPcgXZ3a^tz4Cftko7})Cy|1fLPM9BKM36*4SO^& z&@ASAq-3)aG0j7|(dPan}cb=P$nJvp@6i zUw={|8`;K(-}eiD`RJd&_wGMbDvE%V1TLc1wWcHnJJSAbxyrjLlT5XXf)fhPSo9^UwL$_{UQ-%rAYd??$;*TdH zH${(mS_%h`faNTwF!6?I1#%RFFXEM7xf*Jw9wqpxXBZ3a5D9)hd3>DbXF75hR`gZy zI3MRMBIg*HS_!#9_ETFA4=&Ln!(7NvGmsHzW!DpssYnylxxgvlvn{CHw{7Srh-sevl`=dw76&QDaGt5uqU6&&! z6NQ1F9xl+Jh>r}r5v;-eK~0^NklOsM@}t>B%`z$CL_+N?IoH?yjeBqx_uAEckDfV_ zPC@u%mpIs9^eZ-=)N8n<9+*z=PdqONJcZ6oi>s9db;@cnPe{csRpm)A^7Bf;qA{fBnrWW0oWhiW4)sdxJnBe`~HXmlwC` zdiw|5;cf2uWu9O#x%If-SX?b%e>K)L$P_fbo0eHU01AoC=^6#;3=mG&B~K~7YL$j> z+{T?zug`Y6L+wGT;GvMy3yA2mP(FW^$16ZmRd>jj8MmBTx}Rj^-c7(0)D-D51pp ztfP{gqsXzL-%qIl954-{v>GwlC7IkvUfKr*Qm7Tpc`WRc>}cktec41T?XMIlim|l6 zqGkNiak`snY2O_f=^3BI(!M(0tG%?(>aUmfRTv$Ap>QniugsVBfo6OAK~_}IoFz{{ zcCWsgXhivedi4u8>(v*qNGwHvKlJ8a>~B!8zq1~^e>#x8$vbQ4prOvH{qm|pNJDFHp+r}|YIB~=Sg@L<66>YPh5(ry!v zP--}9nLGFYMyDStP=t-Gs#LA|&eL9mG59mVbLZk`JW&_kw)7Ow!~O~aV(m+LPezc% z{xG3LKAKszE+Aroeju)7kg^f~8*qA-)e{zPFS4JeGI zIc^+0G88rSj;m!+*os)Br)PW;6xMTLQ<&5*1&^pO6t++}C~P>VFqeX|R?O|R_b#oM zH%E5C$xWLML?XVj>xr@>yS4zMC`@?7blU}Xmi zRuT%%4HPJactXK>>h8Jf720d+)wz1cCxL=<=O{S0IxnGMrA0wgI8boj90d$WFxh~r zjS6rptJ-|kyLV&trkSS}2yT2gQvO_7euVMM6r*3^Uii;-8p2!KE4dBX6;rTPy{h~U{s%^7;Y4chF<;nyA}kp$~}$^J-80x@5URz^purGKKwxrZAX*Y3i@E56 z*$UEJQ=x+<8n`diL#n$cNBR_k;XZ1q$gO;juFSn})0G6(1`2KaE`Ga}1{{7bfdg>_ zI6I+0V&D;bR9LM42^D=Bh39?#^``gmZ1O(!FguG9g#>~EN4Oy9wm-uuf(_uGHU6a@-S;WyAY0ZqrFTlB9aFw*`p8oxv^6PTIG_9D?q6)yd*kjo zt!D66Xnqh6U(Idlb^c7!Dz_go3AfXruR4EvP*#wW9+B{j?0-c?nzj3N{hG^*pV#%G z%YzOHS1}!O=6)Nj%UoYIw?jCVPL%|-*5v zv{I-~8Y*94gvhbLe|Q1WvXkm2SE_fmt~BD8$jP>c$qXJ|#ekWuR%_2$ zAB0e6B(`N!O#U(v^Y#z$t3Fsisq5r3@s#GT+^jz-E2TbX@>z5Cs^&94f5gwvjpy+B z8vBZoR~4#4eS25267xAph0G)>*?y&{l7}ys>2Nf=UV2?@JVeh)W?{y#%Oa!eGYstH zU14(F_iDkRYP|NzJ7R0(d4ancFE0jL+*+4DQe5BJNn0P0B@|s~wjMG(sPOq2Q67#? z%~tBGp9`Kw;_+Bw`N9rC_f`Pb;g3_yTWuDYE1&btPMf>K9`pHlxv`cf}0RgfVs9%HI1 zrO5`V{K4D7rY8!=-0${+fGhZF4^ow&nscPEoFktNNy4Ac1wFl$#YO$l8>p_nw0=_8 zW(lgo%N!h3ROb*BuTeRZ|K*1@T)Vlhj-0`Dm1|g!*yCv`YH5{WcO>y?UIPmmkq^`4 zHj7$&LxH6%tQK4*0TWItI3UEXxJ|}{+kCm!p-^N!9>HnymC!ULQ1HHjBge6boS$Mc_@u*!=axu&0+5{oL}1O}V&6g&|f>#LR(Bt(E=e8z0!t zraaW92LC{UaLZB!7G9<^!Q&|t9<_*U8uu*$MAT)0e5y}b zJf}sS`qb}GWb&Syx3^uJlpyIs{Pr$Y)$)Wsa4j_f&8lN^$1SP+QiG3u$p(LTPj^4e z6WP{mm!*|*zUc3AqDV2J(mlZdS?8(gi8tnIub7~V|sIl(^M0kgR^kJ4SC6d7TWHj zTb+-4X(gZ7P;%7)1IT~|Xp|%aom#((&9W0pzNrP8n9wr=t)XD;`Lr!l*_(-gSIV+f_zM!}GW5 zU$~declLUCU0h&XEIKXIJh-tyX;^v=;8&mK zPd8#ay844&)M=Gjc0mb?IPsqgT2O46EuIIF zFoBbaaZ@h&$v&85JM({0p{Z*wrDvk%$|5gO>hsi42r;VF=)UN*qbm}9VIoXApC}V8 z#e*d>_O?5LX`)tR5vBRnY7AKrA*cw1JaCnv0EZN5NNZ(R{6d9Nl4VN~E~D_(Va+*- zY5vQ{pX!(WlLcp0!q^3dM=ed{U(4FUnz`-}RyJYd+MdI{We$TueUOG8e>DoyS!aV& zGp4=gf_nm8w+J&wC1WKKS4VlZ3(W{5z*z%^*o@;HH>j^#OQIcxL82m$P1xJjbmSWn zCp670U(wqiehZS*>hevSENJ9~LWSuh@hvRA6&o3~uw01|r`ve7+Pqr9SGMcp;Z7KU zK6aMN$1%`4R31mzG%5kW+yxAKvZC`RN3UP4UwW**i=`3k|Eu+nQ-MyOl>n{3Hk?>% zGAf4kO~>k&$t+lv!D6Gpcd=h=u{plR9;HFlx-3)d&9L4ZmErp%OuD}Mo0=*ZW;rzK zOSP)Nz^~Td2Ml4g`NzKgFIV^e2U-g{fMa@!SZ+#}g!%qpN!4 zwWuI6g76>#`3az8X^^PBirS#Gq6Z!yJ1QVQ2_uP|31&OpU#v;FODPC(+k)g)?ksk^ zO|@DEj1DOpPuK7itP;U)npb^5v10m^>q&7wV>8NF9wZ8rMnt7ogQXN|$0r2AW8|n# zcA?Q{H&Ly5cPVTsjPMOnV9%MY9KyxR`)cJ7G589(2V)$#WM-0#5SVa%3#R=20VX_W zFv~N6DevAKOtyjv1Iu8dBy_=)iQNTr_@%(CR+W?iv4F>xf7i{%hi281vb6Om9PfI;eiLugi@Fqg!X=M zHOO9J&S6BD$hF^qPHyqd$ya!cUcjoFa!e3DSM|4WWl?6d>u~rWtQpIK5)%yn3gx4* zhGf_r$xvw=)V3&+4Uo39o3U7dutv|Bt%_tQQ>~h0;JlHyD(--vm8v=X>@405eg%~U z{P-dazb&L4RG;7%IqePjhi3)9f*8&key}Tw;oo(Kwn8pf<8=wPJ)lHfWbY4akjK1n zB~VSa7topt$urTC$5`ai*P%{dF?pet-O6gT;$WF+r=0@>G}_$ifnds}8uKj|m$PESPY@uVrEq?~sy)XeDBZ(DeB zHf7juT8$3bCgF%Qb#V3c9UQBJj0hb}65}LPx{e$@DG7k9QwA}W$iB7IzKjb}`%*6G zR!6w7I&(PQRUyhR;uqVC*zXy8gAfF=AF_($a}oNUN5(%pD)$ltrbzVVzc$K%JZA?w z9LnFL+1jkA^H*s51xov6@|57Bv`dK_Qi{>jg7COXf<;up<)AhD=8aGqfA*8_v$eDa=bLU zP-^G0Fh{*ReglP7aRq#B_oWupb#KQn?rGh77d`9psB$rDYCh(dd%+|5uk^;A9~mpS zPhD0MZTdtLE$_kEMKe?fP&oq|c0gY$ZOrkpJbvbEMU=tBX_PVqN~xsj02vE%w29n9 zaZvjKbS?=2Xj?FjE1k^tZb|N8St#AnK7D<7b`H@foOg1L&NP`y{ba=s-6}@E+DF}e z3HI0AEnG1A702{mgv2bW{p*FKx9)}Wz5G3(f7czV_8*#^OWXWIBOX@gDza05r3%X^ znf0Y7up&cA-tU!G;5YUfM;rVWY-&@Q$YG(4wuLsxztK-XTVFWoSF9eg#fxs!cj!%1 zU|%`}Jt%agCMj(Y{YBLtz+P7uNL07xIknF^ixeg(D`zz9b5;t6Is94k}HwvO(yQ%ovbFo6$J<$GN$O z-w?c7s~>!)`uqg;BmT%gF3TYzL;JL2C>*hUfN&A%aboU>Q`OdXpc&JI)qG<7I#oxfxpsMf&n;E;|Ch3r5#l+CL2CX~Im zF@{W56J<~kxuIbk;tbLCIDe4ksukH2sRdS$5731{LvS2WfVvo1qID6Ruml>+glHBb zIHbA)WK3}4KM@=>(h?2Uk4hN)F*XA6%eIOLgxZ|34OcX`PkhUfL%INyC~(E`2nuis zx;=o#rspVrY*Wx89BuBPy}fEm$}?=YgZ2P;k@lbjl$u<9yr^1HiUQ(5{e74Nkb{s8 z;^_8xzl2(D`shu5E9T1&?=Obf!e3`cLap7LyExXHvDMX%<5*#!I{bGcOSoC*D1D9) zt6UF>sgz5nS3mUcAhY^{$zO@kcvK^k(I2B4w$W%z{R9|4>auy1<)P15rLqyc$fY+^ zWSlCX7iI>cYpvHTfG4#Bl(RPV4$cudSd^Lm@_8uz>HNwmGb zZ;fMYKvjx`K-wZ>NVB3xe=fYO@72!&|4Nlj{)3(rS8E}((qzdkRV!=&*G+i@LP!N4 zS3#{1Ra!99;s@RUzvOyxxG%kqS;=|bfTs-FxHHSiC*AVC&Wn{7YN41ZN0Hemo1lhY z2kK7*CiP=^^%FvM1(Qdjw!o)G%wPW5X}^3necrcY;8zhvEjbEdi_Bo(il2o5tv0#7974ZVyeZa0&Z zg7(6_;1Grq{{}%fwPLT(n;ddc6YFBbR;2P5LG;muSl;WBDm9Bvf(6_w?MyzO$85ZK z@DzMgG<*|Pa7u3w76LSplxZ(0Z`iy%1J&W#P=?3TQXOYvxI6O9K&O}Kzh@qQ_BtXY zF*Pd2GH|6w@Vpop#jz^(ZJC+R-9b8>T0pYTj4YpDPZzy|Gf@7ItD`y>v!e-Mt95?s0(RN%=6#2q})Iqke~gAB_j4acyB zLro}@*Wcy!XZ^a@NRiY$vvCKNOz6*E-xCeh-xKNL(g$;%S8Do8=R6-TPzQEU|9>%@ z)e?~Ai3Mr<>~*FPM1bV0Myr%IXD*bkV$Q2SLyT33{lb$C+OpVG4%?nsv;GJLN;7SV z*LNhnsi6&>0KUXdLzymqk6@4oWeFg8ksJ-fz)CRm?Bx>?mHdmgkr{2Fa&FO{1W=I+-&jb!0Q0x_mnG~jAwBis0= z8-&E&>UjhUKpFKkV~|~s6^VOEk$dZnXb-FZ950PBZp8OefL1nM^%BKWG`*IYywqzs zQhIXt#xTI0Xbls<=BAAbq}x0M$WDA+)r8l*P4wS{*YP2g9;{K;->^|6ie}#p0JX=H;r#V=@Xt9{+}R&!^fYA9PE&n`zfkO`6XjPn-t& zoZ!oTQ;ZzLp8B!1!qHBII>XA+xK19e=!*{3aBk^@eFzOny}y z)AYG;OLlLv$H==3z(ir!CLq`?9UOw+2EB|79po32y(koD359hn=2lS9`B8L#l zZiGMVvAKKG+eGoAJ9MvGsY^3DTBpUKF%*71e&p4cKbXsweb%L(0yU9H)t+9Fa?r4n5foVp^@UpS2h*+v{npYzVb+-ILdicTu zxu-|Hpz*lyb$2_XMYxiRr8q@wQ|JaOV&z(@Y{1&RRl^kp1?p*rT^pS7E}Sua&z}|f z{||G{EDNxhzwrdhYW#BY&isvpAlzkjLh_g4P?Cz>^3I%1f@cZVCe;W-HzHyc7Tta& zQb1G$1$8n`w5die<|VtFYi!_+PyWiizxe)FfADi3%f9AuyCZ~38L`+-lr`(3|$ z@|zEhCD#RGHqD?*>bq!$IKX+yucEHx#njt6M^*oV`WDnpJ(Djk{(QEuV}L@tS&Wrc&+)mgC@j0H?^y(CMD|+4A}-gSkmuRvxQA&O_A2 z8|u&h_^It|ldWXW$h2;G6PeBHH=Vp5aTx`dizqPH`omKXeE8|t;Q{VX`ED*T>W^jD z(M_Hr%wQzJqF7+9pUs=*ym;Cm?}C9@Y9nM1$wVbb7is`=ix79(K$6e~k+h^>f@W}G zLx#=w?AK#o?Btg%koB+`+$tNtInVnIlDFp@&+DfwIy4_R2M$&5JvJ+;pUeq6Y2BHs<)L*67R-|x+=JR&RSFcy5V znUtSw{Fbi($PW{8^Y;s7qidMVlRY`UwU{eb3t1=7sMb8423_3k$hyVDCeIZ< zC4PN*nYU63<9Q`*ey-DJ-*UngHPtjsPF8+(GjPSOTL~hWfs$|`+w#dRCbFELEs^Ep zkM{HRE|DcxW_-ZHB^o9#nz61W=CU@S3yFL~o;a*Q(=7j1`3G&4tX$*IUY)Ibtq3Sq zjZJ9ZF#&SmIXN~3a~9$o$FvKP6L)L2*J*x1JHIqJu2DU;U=`4UwoI=O=Pxr=X?^tu zXE!bYviVZlhMH7eSZk%)JGoWeb|E}+h!z`{)Cf3J{oA881zxR@{+A{RkEb40=0!7p_jVG#}p3yLf<~3+vh60iZun`qS&c6PR&aUP9S3VIo-pMcaSx)*wYIfOdC4`&^|^5JksJB3@%;sIRD%)(h9a-U zdE8r?UAd413KZ~YP5~eamXW zc*>KFM?d}ehadXbLyx{T<<5EU-EVyDAO6Kh?|T~Y!s9>MQ>>mWn+1@^SO7^PC9p4u zQMKwqQvhL_+<;h3SCIJA^A{>0`g+2KhLo+&>w8KF^$^zih&aH^P`zp z!dVg0N;sAwH{LGY*Wx!D@&^nGb*sM+7ti=)z9FAuXJq{eP1-K4!WexEg=1a3Ki@0t zQlJss*_0mCH{X(y?6)1%`qR;D|7_rHM(^=2#ZP*j?d$Yf%Ld3LaB&bJ%6Ava3Obr8 z^u`*Tx`o+Any~uTlZuzbKh;Iy+B5PO;qa5_FY9j*nm^<)$7mdN@#d3pdjzdF?%?$1 zX$(SkF(TvUTfg&lci#8dshdxR1LI}{kNgVV=T}m_o?piB(VzdG%jl}?zvBWJmvSMz zf?1?0>`U8d4%EqSx}vCf%sQ9Ek7Sg_m!A2AS=8TKkkcX+Rel8J<>vI8H6FIb>dnRQ z(Zz9g4iaROp&o7?$+F8$N^}fQTT>rGL2{d%L8C$@nS=4Jh-aq~@iWXDuSOkgJXh zK|dg8UxiQ+mW>yJpQ6>WzKq3LgiS07tC+YhQb@uQa9tk5G?nM9dJYXpVAe7CLk$1bWP>B7KTwTX1pg1`)ORvrO3Y*Gdvlb%doB02Ts%v zKfuHoqVa$6v)&2R{O;rb&5uXRkN>$Jlf!kf^#AI|ljX*BTE!35Z^B2$dZeT>+N=Uq%i1MBnU=M0)=?)KXm=}a z)yeyV`n3YY5UlF*j2ubIH;W{z!GkfEsg1>T9`7JoB5HZOgJjqJcn8TcDI%QsU{0~U zM6r(8Z79}@vWoz9YlbFQykC6UDU_krN}JCVNlM>2IcO-H==F z895~(oE))TKl%v{pvaU#W9O@n`;`}4mcM$`ue9{Cqr&_Bim;ZQuO2fP2qbLr!sl!4 zEc06~gK0yVZNeGsFwR4Od1j?w=fw!JZU8zLNAP?<+cAPVVQZHWWLn&91TXO89U~~? zf`npUas-`pY;gn+d^sb?Ibh8Qehpacj3Cov)`awLGb!39v=fI93Ws98X0Ph_)48Us ztgaL~gO|)do|3Oi9%27d_@jLW)VIwMN+PbuoUGxo_pe^V4-S(gbHk54v3kuhew}*# z|G8QJn`?FZ@E_fmKl#%#t}dw`{baon`vltE~SHP9C%ya96j=_vQ=2DQjFs;D7QuwL8zPTU<>t%{Qwm9foJw z^YbzYwV;+)nR$>_>+>VO@xT43-;v)~&RU&#sURPf6*-Ztq4~}DY^G*&yx}yH9nBun z7G;fE&4BxdaD?iaje9&D?`5E5fi<}w-!Z^!qy$Ht01MtlUd}kZ3=z-Dfdy+3Mt#9S zCR$SjGn8OnnbKsH%d*7NmySJ=0*Y?0-38unUejE2f(NFL-uRRcz5^;BUs9@shKZ`; zL=-4&{?{J?5u5r&<}{Q}TR{bFnqi8>;8qhFddBNIvAd)m@136F1B<$bcpoTZqRmt1`43h-+je zLRdrZ(FHYIkq5efj*(=SDvcp=2o7B?uV&b-EvXlAV5OSSkm$d5NKj!w8qL=yFApS+ z$G4Q^T^37WjRes$5Zl^UrH2QDg+Ltui#M|R0A~^L=D@5tWM0cfgcw;8)^1*Vv9NR8 z3n|Wg0*-8tvB?l%S?a8EP~wS0W}0ftwE>Z5)SfpLBWlph#rle=06evDQC-|nKO!lS z&IM8Y1gtcvnIKW(s_Z$3s8hm;U5;L;g_ZnMkP3aD)tJ;bxwdcT%pU)y1JO-&!Uh-c zL{G4PL4ADdA>&)jpA-7lzZreFnJo$d;v~-6Fbe37s)-=BbPkMPcwLYed&lFuddT96 z0Y~H27zi+uPlnhkli1>!XjgWfN>t?*vVn)DR1J+5@H=7)>IrIfOj{$iXe0>~10gr8 z>ROUpt_uJxvkJA+$}InKo03_QVTjuFy=nqL#A(PZ^+;rpG5m8#83a8vaDliav*xh1 zA8JTiazy4^YVlECKRM?$<4g?%uYos@4yTF)uK`obYekr>;0kuvsEMtDyVd~T18(p< z;Cj15eyM|v{OW+b*u&kVmn9-K?vO1}W0EuN0JTVfLasey#K+_fny}4&U+SQirSlZZ zH2;=TyJ!#&WboQWPKhKKmD*#Gli}_za>~yU6^zf%>i5}6+^_HXA?E)k6V1u_;tf$T zMQYBp2YbbY#@uK=tDn%98jm8Paf-&XehF|TC;MT(D(VQp;Z9qI^gt$GmZ2h=*QFy zw9O$Kcc_MJ{9sOFUA3vWntV>7I63<_S^HE44kGacv1l+cE^9?35m(X7PH@$8m_#!m z;MPJ{TcZSlcjXwKMF=REhRU#m2O!S_{Z{Ice52GP2>ORSuC8HIW+gJiyzBWZOE@|=Q0qV#oPyP_@x zYeCcp(h#Kha(XopEfX3f@+QX;bnTvkX9cDLJoOhRNXA7MX@UveRO}4DsuqY;jK5Hb zNr_>AVAS#q%z`TV%)vfXJ0Ab~VpvQsq)Ia+tVD@v8X5@Lu|*==Q;ZGlmcY`sTn$lz zH%705H9SBi1H`{G43N{Q81(r7LA-rKvqaHa#8E!q4u(rP)*2asegeshI?I-#iCyQH zDHV5EB2^HTL;;e-9BAy-6|8j{xZ#tzwEj8?syq}4sTEnM8bUs-sfjTke|=V%fa0y? zrsO~leg3%UP8x4woNt*6`FWTLU*{x;#Fqw{lZ^o9%lE>>^*4Y}@)+DM@mZg;tWH_B z=v6wIj3VvKvc1TEc?>pX1uev_*ig$6NX!FonrS4UXsbvgPge0J`IoZfL`6)>4P5w} z8n_Hzq-O0CWdaG?EQ# zJKc`o{beE|Xl@A+U7AC{F4LSafCtSeP&7ahi)9^Bys$w=T``iosXdx+Kw0q0A^{l_ zt*Fx|wxTX@cS~+rmxdc9SUL&lu{x~4Yxw}?BP(;4S8xNf!oQPFM<}Ujqx}vlNwJhHedmE&la?bW$a{FcD_x1_k4-NrG=q1Wd0U=#9 z9o9!9F8>=)5Fa#kT}0F;OJ;azWGO4X1!g%oCP|zP?0MivDDH~o))3%~n60vu?tL4I zCd*63glV1H!RQM5SIc=tdI*vO$d$-@0?gHbDZC+d94GpHkQfcDLs;rp#9j=wBfQZJ z(V57~)s5hu?>sbzP{F`%KRcUttqfpLYRKqiH!;mQ=Dfbt$tI3w)fAp&m7F%O$|}`x z0B{TyJEiAP*}*#4a?c#yBkq+)hz-m2rIE!9=(jWexerw9MG3NT&<(Pjb-U5@F{{RI zRUtnUt!Xe6yYxCO_LGDrjtCbX0ezM`-ado;hjRHwxD3O30_<~fygf@_X*}F_6U0FV zNj+6?Afq?$3V|`gcz2-{P~8<{Nl|@Wq-1O--vwR^W#|GpF@>bJlORwb_6=q1-i!f> zf@|YzGrlfNu5ty!^Abl(kR=?OLZ!Nz!zk9p_4s@H`G{GFw>WDZf5zef=9`lZDM&z} zTRE-KM$9MrQPwv?S$e}i#i6MJ62)t0N$k2%gk0xGXV=AucA7U+4Fz#$Loq^B(|HBi zv0_1E7;p5#;VC{PP#ex~-P*y>40=~xk zfcW+p7gP39h+0SWsrZkGJ8~y+b_!-uaf72J)NhWulbe{3l=_L`F?`;1pDs)@V25U8 zd7gYlJv_nK3{D&;;_9{$>t{)8-|Yp5f$si=9Oyf%$~XB#i}Eeczzo#mjXlu*NKh$$ zz^kB7-Te6>mP_p`F;v^V>+8u0h1HR{KvYZVLH&6=ibXmh8s#q9BM_zmeVWndmB6fK z{9R$vsuG2aX$s+uPZcTrx5WX4AVDp$KXvm(T2tHwGKS_1GfPY<;ZSI2mPg)vN-EIl zW|lOaq{-#XGs`VycWO~0-7?KBWqps1i`T^BnT^((CtjhJv@}E)ad|xEI{C$Mxw2Tq zGfY-OPwKmV)U^=WvQb`9{41WkQSwl!c4wOV;!N!4rkOCd#9htvJDXD6AN2f4bQ||q zVsE{aDf2;#yW7eqG~>EwEOZhzfAk`w9<>P)_-J6N;~)-FUo>F zk?lsJsvXOkbLBjfXB%wuVE1f=Hmm8H=kRdp%{I+W5Ea>;^*7iF!pg~wccT=1b+&?R zXe-EzC7@uPK}a^}rN8m9?8Si8zuW2P5;V$XqWBGB; z6q3@RyO;4>dy^1C3T|5@FohS|!&)%$lsW^9!IyDS)axQEo_YI`SP)B#DkE}ksTM0o ztkckD`VRf%6=`=8Um@m_tp2iRkk`G%LK&I9t8Mb-%pm&-q4^PN!{OJi27SIL`t$AC zO1sm{DjrfBpc>Yr*{IR{$$uk`Nwx;=Q3dO=Ipa}P{gy{GTs_?9uuzYjO31y%u?NE_ z{#DTtofdJlqEs7geLvvM9*zXwS%V-Tbljy&Y5$6^8eCiuxuh^R6OD4CYZ^MlG^BZu z*P|lnXf(tNb({%Zd&R)yvELW<5q@@@ma?i0|RiY#moRm$g~WfnT7wNUnIhm-$WS@tZYgs;a>Q^}Ev^ zwq06}crO)7c?fm`QQF&_;u+Fow^?(d@8QpR*V`j?g?=mnrmP(< z@{8N}^W6k@qw*bo((En#B?Z3-c49mB@!9`%Uk_Uc zkx`G1`@*u^$A96}cBV*|dVB*##)K7ce7Dz}kNdJ*rg>eQ`88&oDmmTPXL`N-kyiAc z!(iptA~mSCp32kFsasjDvie+%{rc1Wr1Mcqqs5z^-Y{?2hV}j^fBIP4@uw6D$z}ym zD>o9kZ8e;UhnG zVPlYrdR9NEw%e4b8BNq5>^}PKmF`3$^Q7NWJNAWWTJAax?c!e`y;;FcqLNFp?Kp1| zV;>!pd6-8}$zEphyyj>A1bSaQg5Sk?cZYgG*)Q6*j>M*e`U~`?$sq1ThFW86 zzwGnn{ddzV?Lk6pDs>%E=Mgi6oqC<}VrUFKbXCbtHDJUq37RV(N2X{Sel+faLsA@A zDOB7;K2>2pjI5lPS(l|itCxlx9xP@~QTBbncnN);-}2DvuUPAWd4oC}cK zSR1>2Mw4-)ayO-N0!SODqVT|nGKC)^>U&ix*C|52+?0jv9)vqwAU&`H&w-#!j3^Q^Cyo9HBb)Fvf(--p8fj2$@r(cIP`&{blH>cF} zm9nchX^d@q{>fHpfMx3o%+Jrk#MVC@n1Ij$bGhjN^Gr=^U`5)!Cc!5yW62AEN5y%8 zCoK8X0RUz?00<*(-;K>U{|CTasFdv1m*$I|GbN%JA>MqTO=X2*k$N3nuQ<%mZj0bbkslS}(|npM zn=xOr!qicaC2}q90^w`Q?jZ(S*S%G? zC1s#%lxco92%Uz*6l$%Pa!me{f&8%rh7>}9>392!1ZI!$SR#t?Op90LnvTCEUDL)< zts>-bJG-E!Yw9oa4%7Kal8+1N<+T&M8c%cdJPu0B+3i)WDW@u1mx(gLgRi9i)4X)2 z`D&qf5l0CkDj5!{rmEzvMlZAz65yNzcZD5WpI9IO<$;SQO`dN0Kt>JfU{cUdM@WEv zcuB?`tNJ0seCWn%W4!oKM0$g-0DRma9SfbC)fx5QKAcC~?t2p90V0X>(=iHUz6Nx5 zO@+r4>>eBcYO$a^CV~mPicYd1LREgb)T=oR_8mullok*htT_tLLG{NblD3=!2blex~Q;J%Ns!S~`SAa9To_J^T1& zAT}{dI3C0w1D)*RfJZb$J8xp}7yn11?KqKz6oza9+^pXwzc6G~TziNLSv=6VU$ZWf zhbWb3bVoTzTZ<2Iuu5Kb{uF38%e6M8eJV3fbzPZ8FS&Qzp_ zur$KIbbVUsDJd*{nNWTZEpI6#n&JkSZ5e5Zz3=cl{0NRN%_u=}oOH^S5r?;zEbAisa>+6) zOCc1c;9xr=oR|vawP4kQ0<1O0YARcZ6ualI*jUBGR#0+$6Qd$KLI!gxfw|R`K!8LE zPNYpHHFl5QrW0vLOj*aRtI7NrF8u2ImqnPuf!OKc>^3MBa4*|kR3TP@^6H?X#54K^ zLj$@3*wbM7xNOaVfe=}3O^IPs0>H!nrVN03n*a|`nE`DW#lgDG zudtD1HAAySZDk12Q*LRxL3Ap<0&Qb+{Jt_KC@HS9T#kp>mZ=p}lq&imT`i4|R;C%f zjIJu$s+=M4=y|{{C%Q^ zW9gM3G^H9*V#7!^qOgF)!eQ_Y=LVmvM5KHElHRKoVMH=^y*QYKD7v=T6?A^y;7~aG zuJ8#}Ico~5>t9Y+&~uzM<#b&scI`@EDm;A`(T9#3Dyjx`e1T>i50=K$tdtfc&nBxL z6JWdH1T|$e!|1?R`4U<6ZtmqPje*0?l75Ib$V7n-h=U0xF}3Jy(~(F}L@~qNa-`0~ zc(5L{(!{k$-A`;>t!$CFViKx*yfNMW=&WMLO~ytvF5MeP(u!7yQxl5GMEqKAo?zl1a# zTw3h}Uq4}dy;J{R2u_jUz@mAKSs_+IOI8E1P?L9|FUNtL)-zh z+Xx7zAvmHHPjvTV?(Q?eUJD&JlwhSp3`!=PqL9A)C=+e{cdh^tPb0Cme zW#C=j9k;hOPw<= z#k1^~A;q(3H;b!eH_dv;PL_~x$I_fK0j@=2J{@~lAll|x0Q<;{LIMs~38E{+r#wru zQUcUoCZ+tVNbM&Z6Y+`bbB(shDy(I9q@2J3h-$Po+q0?lxi~S9r@XdeSnYujYn)%Q z`2b9|i4nmhy<11-U2z*ou|?>hQxp)HjqYW6re1=C$Uh?_?$VKkt~}pvF#)LBWo!28 z55Dsh5+%8d1htTX#plgaHu>iCU}>;ZB(_xbBdV)juixgYJaw?(n@wH6Y3hRB=fstb z|4ERo*#cT%;fdM#!S_>%c_XXuYwvf8*zq6qdIOgG6@8Ro!aLI8lAx&O|KL4kzy~F; z4x4Cn;V?GMf-+kL!AH=4!2o#IKh~V^_fCf!xDiT;8N&Xebey1&O0zgkhA3X6$*Gpv ziVi7QwOOyYAl|Gj9#XKvN=KOe9BsmauMR0#m6EvPLke_|0!ks&h)SWkW3=lb1uV1Z zkOHQ~bVva!$~vTA;OI>{H&L)BV>(nyn&Hy%Aw!=^;AYgwXyfERgDmL0mf5_$NZl4t zqmBH=NOrFEw|i*qNQs}TT3f3PEL#*4p8~;Sv>qA(bbpLbd*OC-Osf_XxU^5*8 zsk>~(L}gm~478+{Ht3r1sK^Ttg?5vc4z-$~&*Ym8>a!%Lm=1*0cYK4; z6UCC2Qfhmui{x$4p!L$`pbR;$646Ptjk+{QN=eaRlQu@TopOj@KwEZUn$MiWbbrDm3!ReP9| zv6M|4b|7_$dH&K^K#CT$lIb)G1rQ3RMRX+z||aEegT zU*kAecse64D&i}An+!s!lG?EloM$|^@6A?a0>?GPibD_BIKNu6HP596M3v3XlBVpu zlOQL~5E!DbAmy>Wlnf55PTP@J*bM=-3?c#RG-t*ZOB1ekLeO1jVNp(^V; zb&yKieI3Y2$@(?jrypA_&*faX)-2iXwG$o~vB^nTCa)+rhvIty*@6)uhZi8Qyf< z^_8sg5MRkUAB@Anur3F~+VQEV8()dNLTd}Y66s^(SQVFHEC+)MmrI4iSF%2LFwDlN z#}CS*MQMB{$oR6}Mz>Pb!dQ$XJ4|jbfy)$?*4H%6Z<3|ZR7JWv=_PDI-&At>eN2uo z=QzUp?fvO~7O9=@`T#UaTlw@{@N!-vREt~m89W2EPbQK?_AlfBQF%4H3xEhKB>4vF ztUfHWTyZ;x6;n}P$lZnP4$qn74ih>A4XJ{eQ)n07jKe2uThnzxl9iyT+T$n%#f|B3 z6C^&~hFw8GqZJ6~c`h&;-CM2SJ3IfT*+EOAUUl$p#W-NBI<^C91V4tZB0=c_bi8oT z5^JAX>JX3~rhnD>09b6@ORaZLIhhhhQqH6IHM13sSdbgkM?*l%^g%Mfl% z=nwhm&@vt7o?tMl%lgBg&#p5$f8EPwtC9y8B6wy*VdsGri0JzI^DGB*_uqgVF64ezzg5Ax zb-wg6+Cbnke=K~ak!iv_yDv1X1ReA?54(-39DiV3=-k%1Ns-4Z4aV|cQ%&pbmo5ky zSr-%)nv88CB4VWAp#vlp47K6{2)6$9zxvGARKpW?KtTCY*)#1G#j9^mS9)SQovA8+mH@PRHu`tD87hu61#P#QjRF6 zn!keBvUQzvDCY#HZbTnJ&$_&+OwJ6Fbh+qZoW-bSQbg;#f~LUU)Iy49ZQ#)HqSXHx z)z1luYt1?ciNnQTMg7`t#OgZfDgr^Dbw7!$(bzGzecd%Cv(EQr_HPG`m+;W(1`VAn z25o)4!ANTRd)#(9fReVUW;FR+fV#ehGb5Y)KZav{&EAOgk|qD9*Q=@5cZV=&dcE47 zdsv8)MLheYHhLpAonAVlFZa2#fscozZ#8G@u7?vurxlXnIR^TU1?mn$a3CS=5WQdx zoc`rBbF=$5XrRh<(q!uT7u-y9sHN=vph-?nG@DBhfOa&~MPLa-fN|7)nLKCHH63xW zTi1Ntx=(0Tg(;Ipa}Hn}|4sEq^se8_B-3UE>)+jC3&C_`Acu z&~aYP{R`rM^lOdp{I4F00lDnrv%wEQs(v->Dvy;-7nV3_pm`qN0{be@ z##-3wLDh4dkb(0%45au?bchMV>Lxeatxpn!euB0tvIoF zKy&FZoCA#8itM&}=exd=Jx5v{~s>vTYgQQf?#R+bzIx9#iB_?Nae)g1ZryBI~y zc0oFg6R|y`n^zLl3tYe>+AeoY>3Ra7i&J_TQ@W998$FGkoL*|v(>Ld)uQ3S8<2DCx zw>u_zP2m5-dM{h}v$~S)$@b14m4jh6%9z!QtmMBuuntR$p(fsQuyU%5H z^f2|>Hx>}lnw#fo(gz!1>xr)*`WT_{H>#w#S|O!JBvqLQXpLW&O#WlM6533f8~H!e zYfgckt!(7lAi8q*o+2+qMhOL4URpu{LjnpqS^>SO7j}m{dwt%8RFC#CFYFhIS-xx( zo3z40fa@i*9)JLNzO!ko!#Xk9{lYxx&R-IAf=oI<)sw9D0qdtjiuA2zyx8yh!oUgn zF*c+nPheT_GQ*g*Nw)oV{EFMRzx|{fODggpC+K!Ch8uSoW16_zo|16m^D)jrOU+T| zmVk=z{n7}ahi5{7Y77LdNlRq$ucaSj2>N-aC+kKvo9ju+_#$8_vN-iiUzvO%;EwK~ zv6z-6ZiANpShRe0EzVWxPK%4GG=n!}np8xw^2pCwVG#_pjD}Xx)9M9PgNfakUp+gZ zT+EeqfLhe4qsZiofry|t=`*5oK4NXvxLeYX`ymUz^gzt5pbi9!YP2*QCVNKXso-X@ zcGb|nE8xN5jzZmmYf+(=I8K1G{9?eD6l!ULXGK9)7@4_bG+5hDKKw>Pt097>B#pRJ z-bya`q4B-777&xSmF#;F-(^{>nv@J+W)-HilDuR7fKFTpjt~JX39BFg^MOm97Ozr% zn{f>>)1fShqTevfEF2(TE*t{BI|?=Sev?hMZ$UD%0M-C9gr?u^T3ek;2yfqu<`=rN z&c0c>B0bx;`el>gr#Zb@qKl^G{><2{HrP{kOdN2cWo3gi@+uaD&}Fkc^YUp-L4 z6JA+b)~U4pj<#Vzp)vk8vU*;*m+M$R!-Lv18H#bw9#occS&3~tIP&S{{6w`1|Ei9a zv05A!5yoJ%_Vub4(=92mEayR4p)uR)ny;_15V5enhRw|SAJeF;XN8gWT8+7s#;jp; zuT$#Z1+EC$r%ppT2$Tim3o11%8u^7v$`^X|c2NIO*EpTm1>$K@?m;#l>dTG1vDQU5 z-r`s)LlN)L+qJYu2mFy~5Sr3LQ2i&azNJI0l`X(A*u|{!f}y|f0;XHku!0W=A~UY zO7oH+mF!RAVHeqN@u2Td&rvMmH!`A`j>K5PTS!v1@l`~$ToVbu2)@(cRejb>B+Tv3 z(eKO)%}WgmJdfJ5DUU}{|5Vpm=mE+@P!)?NtEb-R|3B7_#wvdi(u~WiX8Fd2FLF9% zCa=Yhm?F@X2yK(Lm(XJNS z^J-;L)8&yUUrMGTyv_M5i{^fW(GVu1xF)KyvsGZWp3uSgcXx|x%9rU%{f6UdCpg>+ zY{WR3+!~7d1q_oS&n(G=S4B@M9-hp75lCW1(oqj`EsMI@J}T8G;X)bsTk#y>E9jVQ z_>-g!^a=Utuc?&EL-h@jo*bH3N)i5)L_O8qpXPSlAi|%5H$xw1{1no?ptcct$iVd%1%w8CAl)%yphDwP zI-ZUa(;xpzk3C3p6}(s;&_G}es|^DS?#6j3-*FS`STbK#!x_7o0R-k{P#uIw#Dav# zOtFoPI*hlcMJlHR;wKEbpn>d}P-I-v?c{}qG_G668-%{EC>%Bm`TT4i6PYSss0+Z( z^3Rc~QaL^eaVf)1C+L+kRlLIrAUs-m0c*EYaeDD zT00RuxS+fy2bYC9N*s@CVyQwO$s>qZABI?GplFfsn2X3!D`r%i5OUsN1G9m^PV#qX zd6ztljxVR3k=AKReA%wkj&`imj>39VUuQmTd$dR-!TTzuR+ngnx%quEpW8eD1tKbF zq0*krQoIQipXi2K{nt2Jlho}0gK@MLxc^DxXg`s&6)*f2$V#nU$=)Yr43Ts4a!3k> zd`IvQ#5(gK<#3t=k9`27v9aK3!>62Tac+l);2Bvac?PlI(cA@((v)Tk8fhes&krF- zgXAi6z61}P%N^kuQY(=!-rgJ^;pUK^cPSoH%ioBfMK=0bJapaQyoWO+SK>W9DG2)y zy$9CB$Mi}01L>PCljI+I8|Q`va|W1G|E)_Y_%UTF4Itw`P(E0PM+lcR-k@Y%JokF=MzGzwh8 z^a%dr#`^%{q;&R_@)b2}4?psb&^M(;bT{NCH>Hv@|b09fPt5h1#jfoPkA z6;}*sPt%21rEaPQa9E)Fg?G;A&FdN12NO!L z^I)tZpYCg79hsT9?vjS-W{IpTF!bM05ovOE(&7;iYA8; zPBcR!{uX&fWulU7*ZLeRmfH0JiTM;jJM&gH{>Pt< z`GPjvkuNYZ$+Q9QtW}#r4cot}OX#C`uCK$9EyXygHkzW5CLD?AWoyWGK!>*?p`T=*HDc`8j=8)C-#L^kR@e z&v}8^pk2WjGEpM$VTh%P@duiPjo{L+Ap8aZ zi>o7y$#9+_`UWiI0NF(9DVBOi@Qrf?jPGf{qH1X(e;?~D5}rV4xt(GOkr)z_WeWo% zNpO->k+jyrHrH%?$H1H2I{T4`Q^~uMFt97Vhwo##2xK)ed$G-p@e%c>1*1>^u+EL& zjx=p7#Bd*ipVPSHW1ZK67o^h|LZ1uiV;qh|jI$`hEq;cnu%J(8ySCHPB!>`a#Zvq3 z7lhTiL=$?=P;g5Kz(Wpo>iVxhqy1M%Y#{L>($b1f#+$h=nd0=NwBqxLobO40TcFai#b+HyId##iHv`oD39OFlt2%l-w6Y6siBC{8jzUnx$9J;L^eN4x|do6m$t54*5rI3sruRiWqyH@z9 zUn!Pt$5%dbUckLdOu1P<+CGvaRhr`>02!EA71Rht^@|RsgbhXg1-?~wU7GAYJvVwhUF4J3 zn6wiz&I@E5FwBd{IN#59Amfl9#r+-hqsRG|L7QRN*rtgEGs=IN+VL zXNe4wg{z}N#@8$(19ZifGZZF9L6+N2!n$AND8;*R7LV^=%~u=dk};ddY-7!B8agl> zD}&xb#iz9}KJwV%23C|nFtj{*Sn|lJ`ClkOTWe&=5N1ry zFnQ(JzbRxGcdJeDVvY!HR!Nk&PABOt3aG$C!2>+DE3G!*DV>|a zD+QiFD}bXrPD8cTvx&~>N>mr1fx9kfZBII&sdxjLdt%TuQq>U9_EaO_TAjo7Z;VHv zsdW~tp&}JjK*j3B0y*^N80b<@(L$9ibRtvn%$-p2tlJ4g#a2Ol9m+Gw#8yAq^)M{` zy8SOSj~=N%;WB?9=MHg~Dx$!f*7r{YK3FmrD4PvwzA(H&@Qk z8Exn*kq%sDFAp=g7%(t&RYZtHVj0Pk!Tt^3E0J)bQ>krWGbyM^079Nk_8VTWu5Ioq&QBxNSPlBaL&Jni|Zj!D3Q@;qJ=(0&n@Cm%YcJaE|Q zI#B4a5RL8Q^w{J+#eT4{Q zWS}v;mB~5BcW;xA|d}A{J{8DLtI=-l$&T%2#ywd+Qn(|jWMbf**c+3+fADd6R z?te_EAOZS-WQ5n<4ZPnqc}cEF>B5z+Z5d1x36E(#t})KuYfVzvEveYfi{{A@uO zMk3d&uwVyCca}NQGlZBUmx#72)*KZIxl|9V;(GL2&Fm5q+LQYPJ`IyYlYo4v(!;^b zJoYwKaJv@T>S42P7;s8h?NauQE<0K*t7)Z1>pEQJN+eYAi}oaI(9)1IB%=u_&PyDE zdMS0nOYFImU!^h`SMZ%r{#5cMkik|5YcOEtAJSjf`41aB9gbLN2B6Z+qw{B+dsYw7 zk@R53db&LP;&mhhUW%%}MJdd}yVRN1yB=Qy7dM<`d6D>5<@re_c|I}KC9LaZT6R_C zKrPQ+&VP-msz(R)=-|R5tX&E0ZYi4>?fGi7@0UlKK0e>WjB|^INa4dj2~R8k2F9M%V(htrv1bWmvdrCY1%xGx1s0#B&-C(J zE-#*iQ-W0yyp2Z+4ybE!1o1ZPS1j&l@m?)9f$%yuyUshsd;o7Iq{=P?e7Y`=pZH){ z-)Guu!!7aSi4k^?^Ut|hy9^%WtWxpUB0RasBp}3&CGSE6^>tZ@%UBAv3lE+-$Gk2# z6{35Wu(V*p2oJ$65hs4Mt%q-{kr)yq>J2LELYTgyh_$u|hlv{lM)=t<<`7}{q?8nf zm$YGLjJhQH-W5H+VDzL7o2gkFQYnzdKAFdwl_h4&Kkv^cL|hYj7*D3BZ1UaGQ)EfZ z3fn=nDWonUTa(=)=(euxPJ5!2zu`v`Qp1jlbp^gHRB2V#-@mY7RUB+_#+xPVL-9aC zNBEMch6W&`QlNmUa5#x>@iIWpuw)0t68o_q&o?Y>Rh)tmZFv z(f*CEu!|{{%cEGaNI2fD@GAmG(r~N!4mi=i^T1@Z~)n&&3F!Un3>b$#Z#G2bR)Lgi2ik2I4|7Gv} zqwK2dd+)RNKJ)XOnK?-&Fpwzw9CM#eyrGvrEbvfoo1H}!miS2T^4{g`Wv$1xp03t4 z;pu{q6=RDq2yq2(+C~MzmTFX5qC$%m6&34%2r0%ZRaC5~QK?OzqQ*iiwW!bQ{rP@L@FAu$M|R*ctFgvHL#_93NT!HcF1*=GcOg5|5DC(djDX~Q zy@dM=l#QP164IrCmvQ&m1(Cea+65np8MQXGeEZBkt(O6s$%QmT+9< z$2gor)Yu_Mr@RBzlFsm?E$7|ZolNtOH7?!Jo3#19wmjyEij?J2eNhMWAH|7Cv?OhW z7QSd=!rszPX34#_=E<~c@zSekk5e>IktMQBf2mING@s( zj8Dd+4YQjj(^mFh*^4(aG{RJ&mHkKCuq3c5yUzIe7hX(J_oQa&lb&|Rzg6l( zBvDbpR9OMzij~{S63?wsswWQK142~qqY!bBHE9jG=#;gH9?6)D)5&uh)7c}xclUfF z`;U-1-s!`p86MH!eA$~erSP~+D7H$NF8mPS5P0yM;85s8C{#frcSNYz6d{_@sVX~a zCXUypYW?`XjvqPB31}iQx=eTkV^#)LCb2_?ueLA`P!!^%=xykG(ztn27F+xDhGlIZ z=OKhWMctDg;xr|a9fvCU3I|tPrN{M*Pdvm)v@+=qE@0#&OkqY+E9?%gsU>7gmQYIL ziGh}lY9(s9OLxfKm<{9Cwq&l_8jepnJ5;3*n#Q6xKuu>iYObBxENf93Hx+TF5A1=u z6U!x*hmA@)jpLdOyDFSx zH!tki9V@YGRR*jAFH)Hq!y6bH`TtnM4{(SK4nZ*GP&h1v=7Py#oK6}{>C{v@DPDqN z;Yf&^Z*>G9EHkZ#x>-U6OllDQgLl;$i+Li4BIn;BK`=N|8G7b4$TrE>5$iI`g}L_@-cdCf z=;U>cHP4XL@d>*f52iVJ(`W)$Uc0w8yHYg0Ry2{&k^X2ZA2|B#sti_hh zWYLEZbZ{|08kgQxeL7H&A$OtA+K@28hv#%%{fm=iO412+X_}Y5wZUMqypT@4nBDAC zUFxDDz0d^EXUdS6shIp*)AY)*#Pb)+TGk6SFB#@wSUZ`FMQm3AB5jGm&mB;ft?YUY z4gxSs++N({FD&Cj?Zs#J*%y|Wq4whNL3?4d?b?g`{e?}VYA+6Z8@c*6*jrLj`V^u z{DNGq6?VBgU9t(i@jyViF>HB=HnH_gYfiYzgsNqz1%}ozC*u*R9D&Siwc%tK1K56I zt|5F)pd$#)Tw5#p#~ecQs+6P$|K_XIPEitD+QfIl%re7<<@iqW_0};hA11bZIHuhs zVfir8Y9q!@utEgUrj5QZ+1O%9_o-LX9z3K9y3 z&`xttC!1qV>6Eg;h7H*{lo%>5V;RTLW=t6jf_tlVW)FWtdiwsWOr`W1F1K$|uElI^ zpW(IsD~E`r4b9zb=R??9z)!%N#^|*hHTuSHAJ+A(|?VO$1*FV^caLuyzq)7_JG>2zmwX-h!Mzi^5!&F-nXG`bt;E}H>g$%R<;U+2;~Gkz5p zOtg!+jGq}_&V|sH-CS5ZLJnI!#d`kYA?Gh=9+J=Zjn{tV+L5_*Lw4iW4qn%s z>%37;aW!;dccU&Z?>pw?+Ytv}CO?|JK8Z$0hb z`pMb%-gWP1hUU_l?911D`GKU?`m$rE1+`8KYMmC;IxQUU*w<&D|Je5){_VN+r0nKB zKYHV9YOSB}v9HUn`rz+g7tLV^-1zyoExfkY`UxNVn(Pz*^1g#Wer@&_|MR|g#I@E> z_}DwykG}bX*YDOu=82E|^YtUO)=&7@C$lHM@!frw&!J{-`Q2k*9T4vvwS5tEMv7{d zD$`TWj9<=W;>`F$F4Int>zpFjIz_H=iX;N*a*A}EAEuliI4DQ5V8Nt-Bm&Z=lnI?T zXGaFwZp(HMUMtE>T_WIxd=N}>gCbGLf_wAdncy@7dN_O}Ye|`Yb ze`P=My>T_>2StzakAs$B*(>i#|7{fT!6Qv1Mrq~0N#=gpi8&_m6FS#QgRto z)^UMW=#LB26X&{~IM4OO1=17G7%ooE-gE6|KSwanO!nP}Z~ktbD^ECItk3@XjoOkgXkUB*?Tasfw{QWxg$v*^uMY?z)sX;ka0n-T&ji z`N8iNZ4v@cvh`@#kA7A}CdZ~?r93*aqWfJ5N|910iUP`Chx zbzEq!+7}mQcb)5Y*LmHJ%P27SjNzh_-T%(F-S%4Pi^p%6|Ip<%$~@t?n9Tn6vp2s3 zO+A(U)qU?iv)1^sA_~$MDjMAbp|Y-?zHB^Pb0!A+RU1J=Z_-v1eICoszxz z501PQv*pz6sV~3p@9M_#vbgx^RTm$<{^0u&*fZHf-+K4K;TmP0aJE>V?fKH7H@`;e z;!of7KYwp`t@UMb@zbj=K6Uu-7EE2dV+O^rSxBTgw z>H>0ET>SK^i<|d7dWWftw?6o(eb4gLYBD>v@SdwpUF`Y$I}co0ql9H~@zbj>_CEZT z?*Wa8>@BZ*^QWU4G)_2QoRWRupYQqOMEc_Jci!=ly0%&t7ynB7Vn&A3x$ccR&u1AI zXqNGenNcTY4?OgZe`0!Za`yhW9y|0byIW?m$G`UByE#95efF8_9)IKnPcN`@F9&qk zxiV?7b7j(k*t$u(?DS&Vaba%1^L+Mwfw}#jscHAA*>~@|{*&hR`_7)fxVi2EvB}NL zeRA^(pWIy3g<0fWlM&x@BfjqX!vCfb_ch`dI~}L9z1Q6IEgUeXWY-;g$Dh=7w|N_1 z?%u{%$lEBVBg~>u`-`~ron8QM^$d7xdI7vOy#U^?^)uiFKGpxOjoY7FX}=b@;It>TF{7TK_jLGjW|rG7{6LawySl(*RS=->>s}O$@iN(>ihS9>-)u2 zZ(8vaZ9GFQ7L8ehA-#@vFpnskkx)X67T$F3UZL|BS!=^n%+`Lq@7!Ie%?FC_$HmlR z7l=8@i2_oLK||i^87{b~r@7!n*5)`%*4U6=TRDPoDdW_aOSu8W=A$`Z0BC(7iiWk2 zL!?*T9#ena;<2IZ^9Tz=4Hpo*mY+)}2F1Q>kq8o@*a=s8h>){-1r-BdW=RNt*Fi zNY~Q~F*;(Wv=F5~zGF|cIaJwlH(?n$=@u(XB6~oxku@$GDc#-1DCg%7Jvee!+{|v# zkZu2DY)Q9RmuIU$L}7AlS>TSx_5dU;uzdl7%pccK~w~}6J=le97D+WCMfhI)BX?w83}e~=mu=k zRFXq#NDJj~g2E_Slw$GF;*XSqB+2%Eo@zS(An>tlXW*a9F) zmCDf1D27fI@KtvxjLbF}3@NNfXEGA(%Lb>z>i1bxaK>DAul?AkW$HXqQ)r&fZnqZ& zT~w)pkTDg}YNxM4E31pq5;7DLNvkxZ>NrY$s)H`5AtSCNgXIwf?xsM-?lD8!qG z>UVXsDG?Jx*$;p046=rX<{SK*S2~nM9SF@U6gFd<5P-;KUjfU0GZI`tjVhHMvgbN_-@#&r)*{L z>eQtO<1=zZ~{a~PMIz~6b(z|F<34>bzh=gGZ3g9}=Cf2u$8ghzc z%SfIVH65iGWum$5oevB8>a;W>TN6De5t3JeA};k~+Gy>SCNcbKpa^q;aUE{R7p?O8sBpEXcvMNa|imPVXIkxMqO_Bd*L36v_?r=nVHFfVBDbnW#pw` zR5xhhN_#&vg4IT^FxAzD@A}e*IJ9W^rig7T9e7wed`PoUM{(7Qy(z9A1Rb0`m}&URm#DxfcA->49Vw8}{Fl100=^Y^qDZP=+8ebAp|&)EeV&jIw_ zkiND}BIsWVq%mwSYRzjSR7un&m0U3e3^3{@dQjb@(@NGmln(-CTQms5o-~S^{*Yn+ zN~^`lI`0q(Hd+sg3rjO6+GJegL`l;Y`xnNljw!z=07g?~5&S@Gi}r5V&N3SdMKlcV zb1XDp3QLtRY#-C2SC~=caFp9mXgCd#S)< zs=G_Zn|<%LhYsd;lNceT(V(z5%dFCVBRkX8o+33(jyJNq9-@L^wp#fj)~xl$xa3f_ z%?&%ooJ=1Qm19(EJEPqjk+KE&Jopyi9uNV5J81tL|KZ;mVc1uG2SyHusubUuNd>4* zd+03mpx#U13~OYJVhyoQLFl46$;I#-E*v7aQIil+BsssxiY>+*hWI;wA~cICtx~BW zoz0|ql|SHJ=%Z~0@7$#FEwmikinE%_)*7v82q`;U2N@)a^oj%c*DMy&ZyzZ%(jQ$ar4#h`^H~=<#Ia%5Pg8K z=e%NLe=uCFNSqRH)n|=uPrmN0AG`iL_kHriY+BPHPz1??)9!$bdHPwH9jzYlsMKyLZYzC( z5)qsfDMsZbiean3H!HMP#t|Bkg#bbbU7{*~^vp*RB5u&2#}`S6Jg$DzCz4QRg6JT? zb9-vr&HyUP`oUb{j0*geLWpaL)uv)kK!?g9qLMI(b~t)fVVA0HN@{dIt2zW|us3LGm!e-{?O{v@Vl{NL980%C&Y<$z*neT}NPwTh(s%Hv6rUUyx0= z=~3r_V5pTXr;XNc_iM&biR>Vwnv63T#T)y;7Z<1+eWgnO)GGayS85EP*}{jdh)wku z&y#C|rs*q}ZyK~nJJ5cR+SA#`ejnjO+lcVR6^EeE(8;?)!6ls(Nfba&qt<_hSLm`q zRBd4yG_nI`G#FWAPrijF?X2{rjmm=TGmCfW;qbFT@Mp4#0u`$PMs*y`x|Bd*C&Uw$EL?exY(FVY3gv7_67`7w<|sBk)_CBMx!hk&(Rk>?D1IzO~fKNb^kL+oRP z!tsH93)O&*1h}*%xI?+X-CaT7u1u&)S*^;DW4biEd?&S|4*etLkE@4F48^>wGQN-kwi<+>TsLO4EF=|;dXqumz;p%eomTL2;VOt zg3Y~b=+6a?8RUKlq2*U^So#|IIoSB!`JfCb?Ov&r7*Z9xUn=sH{=P^*U!{um>s2CR znR-0@^{~}gCP!wwxD${qPPQb=vXc1$5!%FE)(Su%MH}{=P9sw8xn&JnnI9(K?&m|-ccIc}AoA9XE z{x~jd5n>RCjI5nDH?ZAI1{oFtpP3Zs{IO^PKmY?*{k$S&ARBuq>;@_T6X4(spJT)l z8?-ZuWZ@EQh!2?ooQi=eHUvL*&Sh_y{>6seBzT&YMHy_d0+L1fX%)g0`hfJhkO0oE z00xby()Cfb$bm$m#Zm7%b>`WJc|-Of>p4nDrZqhut@m7Q+un`i{Y>6S;2?i6W0oJ$ zh)+Am%w5UDj)V-qg%c+}<*DO`pNlK-@uPHd$h_}jEsOY=qdM`WdCh61=8Zpj&Egbx z92>&KE1eu)a%H>0=V)rR{(H?@h=NA6c_1I!;Bc?Sov(;=e7vKWBdAk%kU;{>R66(T zHKe6sdL6BQilQN$Y7z`@6hnG{wt!WtP4NY0*1*093XWgY8{5zuPc0WPm+jhg?OP@J zOg=y^tf9G^8pNbBZJCJp1H24djNt5C(=;ZvLAEKw@gSK*Rk*w48*qvgYMI9GiyWz2 z{E{yIz-(tWw`fOGNZ1pI{|C-R)KVpW?S+v6-MV?W%stDLKXGtma-$}Om^9f&4fB?& zgUXvdlXz$zcI80ca^#cFmBauEL(liFlTQ@?d{?d&lI$B*GqVLwyV6m~${~nf6||(X z#qlnJSutz=in)~}Lc)|_i1LZkL?~*XG|4Y+%u65CSJ4VkaLyDE5N8f=z$ZU9RJIXe zVoQ^_?zLgfcGqn3OUi{JEWDay*!&p0m+;w%p#|WnBc1DfM8ZTJ+1Q0>LxcS6=viBa zK8Hz>DG5&OwcsmXIGur9TI$u1_DT!85;V&e5;>`SlTonzv2!kE->F>%x6b1>cj6E* z0g}#{vzE$c{U9suQUh?VON=O(DsRs?dP&ob23YLk`@A(v<^labP7MLd8Cll8CMY|O|kfuenYDBb1Jku-h z6PP6jbwp#LQ2?)WH$pEMIAd;;$WbDj{2Fv0^pDa0XxgGq;CBG+=km`V(i2+!QnXWlKbRi|KpyjFm z;WTv^DfA_ERNsu^TlLO}J_P;%Q6+pJZxB1A(L#Ks0U4vRt4tXmd-R{qBdN3yz-ovI zgVENPhNAYBj2z2E!$}N-+#=82>CQm-IjW<3)Nptxi7rTT)*2kgKP~1^ZZF9qbVa%$ zjT*Y$;u<{FT9ooC!{~W|qBpdA7 z%iUe3^$IJQa1QmqFbof`(JX_32P@77OfAR+Wb}CFPGj)Ua&GGZ77QDW%9a`p^o143 zn||M4PEm|STAXH_$i0Y0`IV17fnWh06EvI5+7JP)e_;4%t8aC%B>`-ZgBE+GIvGEq z6-H8I76*Ec!aI(!LLL6xUBE|=YF5aY%k_HRryjqJu^791J_srY6#{WMhk zHz%XX+?A<(uVF%+DS0ac(U}@t!dkCx8!Y^3=^4&cZZBh{{E21+o`cJn2~V-f8@_^> z0-^S7*^NhAw7{+XpvWDrY*H;b$oXg7RUwxGW>A7iy6vkSqJ*Iu1C1Lc3@N%svfLPm zi!%_)0?}qHR2`X($~hZ8a^fucNI42NIOFUl9*Le_UOrxjS8V`3}R#yDo+KHj|(JFlllQXHub0hk{ZfhtJOQH2y9ZGU1M`d zZsvjdoN{bD^`yB^Sj#?>FCc3>ib||#eibcaENB_yR8-Tuq?&YQ^$61vK9u^26&`XC z(uD6{k@|8DaU&N30VyQ~wKY2*Q1_6E*7?9KhNM9UshqPuNa|z}fiZ3@>0r7W=?Q17 zXwuDLpj*$<0HbU#5x%5-Ge@FGiGgFPfk#pw3{sMe`znVqKCSao_*~8$F2?UR0^{}^ zQB-Ybi1|QEW(O;|2q4;o!wFQY+b2f#4-*b2&m{c?^G@_k_~xUt5&$XQ7c4bp?JVTP z-_D8Ojv=*SUsxHo++f9!iG2b6GG8^0q@*_+f{+jxR3lXP=&(Jh^m5hyRXf*ojA+Fw z0J_?@IAg$z`UjPJ|71EC#KVVYR0gFL++t8I8Hi{j2GxRY!AqD5VMt?0p|&~EHEoxw z8RY^|xRD|1K<{TUn#?jZ?M^2un#?S*V!~(j_R(QvI-wp5SVV^bGwT6d=PcE)5BQJV zlvVB)=|zT6nms}_!f%|}j%t(EcY$4KeNbo$2g63ZZXXy$n%0-#uZeqC{D@O2eiQdd zeRWty^HrRoL-U2^kC)T@%vS4a9Z6&0UaYPK_~oElQQ7d51jms)A8+f2ol?nGB6PB! zDcNAGKC?;|p}ee?y%5A8Fk$9XHsvcM zeyzUPCVW2RN_}S(04i;Z7X;fPaoZy4Yg;5{Tl~pkn?xVKZNZ0yZE?BV7Q55JwzveC zYJmzY*KCXE=?&6s%0LD9YJ~qSCGl@^RHh>RMGY*mFdd2o?Nk6+wO`}}Vy*;2Ry8Ip zi}7m41i6taYTBr4Ib#CI<;Da?RMh!I&f=v7#TaElRSC9A^eLtUlX_RxX2wwXl@$(& z$qc$!x1T86qcR+`jf&x58wriFj0BuT<5|pr8q>1o$Ay)#9f$dWz#hc>NKT~r(Wejp zrp%Aw6J>t%gX&WAquf36(0F;KOBunITOZ5{3^W`ES|1osd>5fx@B*pr%^FfDd>u9R~vHW4LQrKs!TO=Wt` zvJl>LsW`Y8zp%UnF)otA%an^T4$SrmGmxELDhe>p0zWPH8maSY?ls$ZWZR9lX&DRm+8KyznZOw6xwx))*Q#V!GxJRb1$#0nrwwKc z<`%H%2jG?7wSo+#2`nXSByyt{^O1w!K-9xpw z;YGgopoop5jzjs1sZ9Cib}X#qzO_bBzFO20%v3<8bFSf}jKj$wLD0(I8~mhUkw&Xw z`G2b^JZ;-48briF6H5s<-&WSz zx8~V)S>^G#OV)*$yF0E41hIA1ma{3Bs&f&&wEVhIYo&D|c$A19KquBHSGaK2ysm1_@SgJLgF0Iy3ye7BoMfr>!InJaepsV}HyZ7l3qZVMl7JU=?#&hP%Y8a|A!yZm6(o_^Q}}; z1^ABF^eD|M28rHdSQ|SZ%Mp~jr7EP8H&8HM?hU$b#2NP}? z*lm7Vuv4_==4TCd`Jgl$CIs5_Zv3#CH_qgNB#3Lre9;U@WX<5Us>HLf#Dj$JB`R)g zd55XZ((n&fkCxG@`dq4MX%GlYcoCh}5?j~tVv}RCOGB*27 zuT1qRWH<=aLZ=~6tsN+`5USE|TPt&g+zNN`thIP%%&`l&V#x`wyYp#k{-?x3q88V* zbY&lM5)+uTcj^{vgoRRNILTctG@k3~{9$b(juPuTa^_u{Sen$RN%Fjw8c_3x`4X$a zwUl_^TV{kr-ry6;C2K0SoZQdQuf%Ies8`oiE^x7aUg}d1rgEUvCX~|UL;2jp9TY)l zY2>9Nqdv|h#M5_1Szx#AdRLyW+@31LdJeOC1AWALF8+*bf(SJ1LvLqP=uK;LZtCO| zG3_zcAl&SzMjlB9*~s^Y{nu}9`uS6$HMu)u)j%-8lSY@iGeAVuG&Jj0(QiN9pe%&b)ttdY6v2z8|%~bF?eu-+ZtgJx#m<1+KbOY zg;Fp4scDehe2ZWM#o-R>H9Pmqda3~`gnrpMb9_ZQF0Ch=?tpTSn5`!)D@t+zScFw4 zJG}+~OT1S2Fa!W?eXRk&{F5jFSS_8hkpw@b4=0SI**Ro}-_V3XtK1coa}y^DUTR0# z(E=WI=0KclhfyN(;_yo;41iLX-C8WMiWp3Tb8VuKE!5CQ9Ri2|{Zjv> z2MGF4rwIPgGbV^_PE*qzGkzRa1f!e7D){%&(uIHDh}_vmC$AbkgHc*?rwPf@%|@Y4 z;K3W9Avm*EpaZm^ba~JXRIrqh`>@^{xf?eH54*+V_7gW}=wsDu-TSaBePDrQGVQF%0a$HLPLcdEN<} zC(>-r8Wv0}8P%+?29c{gf3adnxjJhI2rAX%s8EG08*6j|Yk(lJ#u{UdDQAr}VvXS) z-6^rguzpb5S;Ojb)))o~VvSlUXN@%#)|jfYhFZ&6!|n^#P%*KFNn2KA3f3sqVlN5S zkugcWPL@Bc*$6hNe;{`hw1Y)iER_{+`Yx4W9~P`+6dp8?cu&zFV8$X`WSN!rhMA-; zdnq`N!CV!-^wLIzcvw}Bf?sXbsT&elql<*ECRjB+ipU%R)i$5jY{oQrHoP>}#AeBe zf)Hd%&wY+*LkJWpQV5v+)2gs@F1v}_<5#nb{D56s)-5bVt4R+v%F@)5}p)M7L_9%~V_ zD-40wb0-RQ1&4u&*3`~h^eE(|E`lTFWCrDlLV`VOAo$s|CRfSDO2)uDTx55W=TBO& zzK(GMrZv42KCS81ta?a(ku>_*v}Un5t}6VWO>1P*KC{!BK=V&yT2rUxpG|9I;W7F7 z*|g@TWm>b8H3ps549Xfmo7ViRO=~{2?6jtMbK<8pfx@1~w5CpBPkUN3@^5%rGx=;! zYgixnH#)6Zgr?=EHT{Ng!lpGJpNOXN)tbtJX!f%mg~zj_5chhYsf|05^eT88ZBuHz zg6AEg&{V0YO*5=~nZqNrmiOALsLg$~n3mg@%ey6+L$eAp)n^sN9HJH1xi1%mRgg-Q z%&OiS+@2gaQ&|Pkaw@AJ`En{Qf~|B~^Ci|d%4Hy%E|}{Hzi!oaUUflD6^kHRi?qe! zzs%JE`^L0dJOd~N{OW?z63>~1!}Rf-J-x4D#pXnvq9@hB9E0nsTiFb%A@mr}mB;nf z=)yM7mvk{$3_`IlzUUgRK&k~y<-T}Up5`GUg)&%-Z?T2EzVRyoYgL$Pa$nmQZzk4& z`{J!G+qYkZTSaY)t`~(yED30!e?Zqa+nI}<5AaqMgNX@ftGX_icR=Cz%gFkX4zML2 zZ`x8-LyDG4bWiDwGTv0~Gj8NOU2RKzpFRu}(erF=i65^kc7mGvC&O9EF9~Zdjp*qI z)urybBKDy55=%I#bt928*`HERnmr>wkW!|0{#If^RmA3bPF0AQ=`0~X6RxR#5shtCAdkB=)FP3Qu{QyrM0v6 z+h*3OX2r4uC6;tdLvM116@Rv~uBKyNvP(FUK-Gqvk9G`zIxaUI3`YdCMlq@{m0(_p z*0ji`xu!{ur0T7@BCDp-*3eg-CE)oD6+&VlV|?`-X7F2)Ch-1=@&J+n zcESiP`G4Z7K4Bz!?cT?VILdd$NNMy7+v*sL+JZ)XR}2d_${OnH=vwH823+?nQ%(K> z$hE!dK|!NLa|Lbs9IW>VR7mL^N99?NErXJh)ZG< zYMa+`qY^e10f21awcai3_{n?6rc)GuEdWrk%A*HKamWSU~lMb2_lg4g|E`? z5HEY&&afK+tZ17_IM2#IbELMO!HyhkZqRG##@Q?OG}KijGxQ zw1B*YkUme*dP zfUTf~UC}lzfM+yul2+)ad>DGJe6ndfOHw)rN=U5|GOxaD!canRDa1o%hJ2rUax!Ds z2I_(*D7xcptDKNhORn!a%SD}`bis9Rw3v{pL#{pghvkJ>E&!8<6D*sNE!Sq_ze0Mi z@rpLv0(*}y*|4mzytJ}m)aIiQ9xzQus`F7BOrX@!z}$BFSuI?pl&SS_6`)*U?&ZQ& zRH`>B=H^T^MRJV><{n2>!Q2+J$*nPWOZ+^(qdOwz9ydoW6 zo~aHm`_dSPY82$Adh}b?cb&WY@65(F=@ZcKGX_N%oL~kG*4@)!(9*j58G{yV{J$52 z{tt4|Be68^^&=c?s>;r*ogwYEzibyTr9T$EoGD&%zGd(+oj2C6u*7-gvrNB?NhA#Mt0Xp|aW3>i! zJPtpqr$TaK0P;>J21J@sR}LcNd1Kq(KXBFCe)rf%5C6Y@I@Xu}@%R7ikz?r{r)77IdZ#%a+mvsuly`c(RK8RayJiQFf=Jx?@>S4bS2lXwc|`Y0dyP_7)s8YV z>V&e|XoiJ|(O`*{dTYJf@r5yAzDZ>!cHKufCqpvz37sJH%GL}Y~I49Hg&m&q>y-UQ;-|I7AUX!r7P_E1d< z;JSc5$M`ocNofSXnoxM6CKQIDdA_zJm6ui`@9`#Dluc=$rOSo}y`_`8w4K)>@7vG_gf+YH@iGZBCzW0QKLtWEi{*rUb; z`56(?v9MfrO^v(yK7F*EG+C4?QiL5NMOf3T&uI`uVHgfg#!&-!G&L_yshrD2T=x9{ z5uzyN<~Gh_|8<_&v6upi7Jqca%`5FL#BGF{nNeeP(xZEIiA8@&Zq(mY zMs75b+SvJKg`6IaDnKdtQ3Yd&bxxI&bzgcm?c`~J8*bXfh3J(ur#Nd1i6osN9MIzt z)*stJSp(-;Sf9(LVCrKAsCkKy_Ql=d1RRM>MH$P|=h-%Hq573}XJqw)5};_q3e?eg z!#(uB9sDeC@qergF(jO}Ip&CGfrZ0%@Fz-gfgoKNg}7$~DWVRiNHn$&#o0~{i@wB$F;P`Br4-2_X_ zU=$bLW|jj}K+*<8)cI1ZiIMDbAp@}Jydo-YXSXg`?&@KrIqRRCVx_ER4oIv>kkm#m z(Pl8SFs~SX3pDgvCh(gQye!3T7lvUFVK_;p#%$oPD(U2aAnyW@sS30tR?QwZJmhng zr~M5KvJG5f?k6Zp&J64P%~hZl2KLn(iUH3@QCB)mW)1@E{k#za(V)1O^ zPxy49H<~i+Qs~g2sJD=Mn{w%9RNY@1Dl@oilGc+$Q7iWm$P)I)kdjv703Or0Fie&m zaLbe1!(;%roELAnN9?H+db_bVtV!#zJED<*#vjt@X0z}>v_ipfrW$vfAObtjtts_B zPRkHucQn~*%?!&HaALNgZ+Z9_-r7&=0oB4mVIi_JHm=Q8%qZBta*@m()iy4r+ z1!*AxoE8s!UQRt7J4w(yFxWQCzX`!gY@?A0D`k~yGl$Vph-rdIVK3v0jSb9;6NMgx zt>P5nC5X%Gg@MKF9Mm_Lebo*zBIpD#_7K5sSh=|!u?Y)G7IC9dh%Y6lc@pVsTnN<~ zYdsAie%@27l7&dPS{+>Gd+!mW4E=G5>?B0@?JPZSkB&kwgw$Tfk^I&+s_h>i99_ zHVe<$p@&UYydaHb3TWYYXpzuln_H*)Qx$@0a>8TlBEr8@0q~)aDRCtrTsV*a#q_>1Cl) zY5K8etm$%!o~;kY5M5yspG}|=H#e^O62L#JA@Y)r+}wCdP5T3WJ(2&4v-K9)rJPDy zm*tlxfe@)AsFbds0PmC}l?4f%?UY24J{bZ{V3?R8pc{+;9w7oXGb?)u^8=vJ(;+hg z@E++=a3sJg>+^ev4_{N*PKV#As7&Ef<|=Ugtq8d%k|e* zzL3u&S1-svzS`>YP1XNEebKXXT@({7=h`9J!{=cFYF#mx!Sa2YjN$W&kdXx1 zdR8*yvP7Ubw}dYM%kI^T#sCAa3ou80+EW3{2cH&T4m7=?pkDw0r@{pQB(s{JNQQWy zf$O3^A84MH%m%&Y$F$U@Q`UuO{x9bN3ncolj9#jeNcR*LZ zxJg$aexnKz6|`U1yzpMVr0~416n;wGqwtelRrr{$dEujaN#P^9Quq;FDg3YssV@)G zmk0GD|KgBJ@Wq0z>bi6qM{>5IEQ15kB z?<4=>Nv`&VMxgurgQNVg5$LKB=&BKLRev7TH7|UKAJ%zY)p=djd9GGFdjf9Peg45g ze%JtX)c|zW0J!GeAr`CrU@t$c|GM&ld~THAO%aV3mp$hl71h7W3%}CKUgTw8K><2` zVWk|hMU}#|8FQ>_MEP7L%Cf!A&nCa%j;EZykP^U9oMKW9?5ixg&m><}ci%izh_!=E zRP%WRvgt;96G=?nRJ<|97Ef+86|JaS%m(<#rp_-khQe_trnRXiVtTu;KT=I9_q=%6 zcsXbATMGbnQMCXPl9(j&SG{<;eO zTz?ux4(nalNaS!ek#nOg)?hM?KT9I#XTk$fzq&1PlY}3*xshujJof8HE)VvqgcPi< z5N}P~AP-KEq!F)5cnmIX=*#}9AY0L{QS}lY$Kd*6s7He+I1)s`^2SZh*@wax3*n1@ zE#oHd&;M?c=Iu5CYjYUv-06+rMT-AZqy3AGKN7j_|LaolkYmz>5!Y)ZoKA!wvME|= z`^eLT6*F5HOj`qy1r)j|<_PhIVTWozuWWChvbUX3k5$JnoEV z$e=a_!Dqt2d_AypkNR~gHX`oT2EM!yYi7+Rr#F;^7~hRtL_=D&B?6(TzE5X=7rMib z#ofU-krb}BwAs2N;@}#3qT%*Pb#5u-F%buK`1lvs;rWPS-2T_FdHZjP?x!)!>zfB^bEm~@mA1L^32xX=KPE0+@13>6V zzShBD=%xE=@R-oBrqqqr-^S&!KP6o-p5{(mMInkW-pT{k{(jt$3!atKaviWq=kSg(*6e3@Se01S= zQ#%rU4Og5pU(yLPKnTNWj5A*7>Tw>b5kM zYw%zsC5Wg&#LtK>?elvREZvRke)9awHn2W6mg=U<(35rekW8=q1&Aes6Mv77W|IfH4k#>V4E(M^07VYZ%j%Acm_)v2}T|*IKc- zH2|-^pP3OnD zI!8f+nZv=&6SYlTtcnkdHQ?E&n3Wa<{tUh2`9&(PbdiLggxheAK1U0V1uJ{!rV{MpD$DFhTcU$bfvf;hPNpx=y`ZmrlzhA*yw(4UV}R#z*ezsddxXP(-BI1pf;2@xgd|Z^+*RoZj#@ zSqA#wFJGPx&wKO+2)-(%O_q*Q?xP*QiBoV_Z)7LH7}+%^T%1mmoBTAFu^JIH(Dg>|ddn&WQTT~7>RtYOL zDTT2n<fY4pNjy2MQE!MhRKveATS%dg|obc{B%T7;e zCFTK98iSy><2Tj&U%D(G4V_bEp%f;96@&$r6!Z}&c8Gx_6zu4qED&@Q(g_n=4G}fO zMP`YM+1|-gs)`z>^vmeXdLyY0m|@Jq9iQ9yg*iUv*Go1S>U4X)u(wWkFSD8zmrAC6 zBHzK$$)dc(bj}DhpNyG^u;Bt=r`$LLRI1i`dw%a^s~7|V9_nNS)QWYaTKP~doD}L* zQhFlOLWRW4GFj0#lb8-ZvQx2n0x66DX!^OPE3%AU;{3oj#Lqi|6+^Ev88Rn@O!@yC zKqYXk(P=?Y$jS+`c`N8?P*g}Xxv>a|)casO7o^jEO=_t*$(}^~_(o%i1x)%~J#77* zJqSuaM=mB23X9Kf2&;bPcovdSK2@8{(WFo+WrI42++?Otf^qYFW`dYAx*wLwta+hs zS|5#~u`6k^AxXmoR3(!0ne`#k=#U;TRX)8DQv;UHFhvGS}QLkk^1crJ=__Z#057M^t!;n6fj|b`{UR^KF-_BB!LIBz?+fI88 z)$=kr72p?{%0+Y#6EnU_;;rh6r9IOa(b1eo*lYVx!*9OVbJ;SYK1#q56xBSPyQx;^ zbNJ;@l;^X@4)qhoTU9Kdmp7!|nD!EV#n=}9@NRQ;glTVN^KqLCHS%e18Zqss2Kh{A zEe|1XZRD3Eo?p0IvqxqT|8U&AKEf&RJiE`zC_3{LWp{slVV>!?ek}HqAfw!A17_s3 z0ofKs;(i+8HTz`vT8^mfLu#yJ?RKu!eHY>=X0P=8n0ReTKLCJ5E|m_XK7D~a^1hJC zBJYcU2{3Hrd^8$1H{t@K>4rjj6NH=fyG;c~jdb)H>*ziDdnzafc}y-8!by0GWD^6g zIhJgXH(sr#&iN`GOMSYDK&^~8Y5jMwUJf|gM3eJi4MQ$%Shq7GoU_r+SM;2b_#oIr z5aPNhizlr_egVzam9?5Gn4}%WK2jFz&xTV@dI*niYs%4j zZ(NQ7w^E=bv5lymAn-n&Kc}HMKjZ>rEb>-q@HmvCgsx z0D*<+Z2u=00KffM1b#W0tjGuFg`s{$oapn3j41=T$E_&crO&FN+4;T();gJA*}lJ} zJ@<`@%duKokBdlnwPmjJJ;7T8BjgG{GoQ`x)>PW1`D~2$J~-vQP+Dvi-?Zq>h5bH% z`JzG>RSHpI-pVUAlIo`Ni+eVtOR5{iU*&tgp|f(Mxca@@%U<9-J_2h3XuERA-_GF z+lT%3jPmI$w|Dx}l-q-Tt7VfL{Z`Wea4A9$p(-A=qUbN8K6z+?a+~Z{3o#J8;aO5d zcaJEb=3H)LFZsf(5DSm}4V}yggj`lEyp-=yyBBbQ&CW|~JU9j$*&X`UpwYHdeGkpTA#)qP~TsKZ%y3yduP;e|%amvbATuRW=z$&O84i`B{9@6J*zsM_- zb%h1>QA1a#)?^wbMNIm}1n`@!I3F&7{5cKL8PtJ2BDH6i6l`wVGV0M>PpUYft z%zimcUEmV_3?(>RE8-TqkZ?lWj$)$90I)mJ&VFcVvUD{Xk>8nUCZkHCp zgr?{DY6ty?MCO;#u#7FNafvz%z%0Q)LKW!ZLUxr?gD%Bn=;Tl}m03eVy%ViJS=rDj zg}6{G#HkZ^N)2S~>|VPvamhX=L}Z^1zhl@k`wPR(1JZ{MP~BD_&4CCO1$S<^+G{kR^lQ!bie&kQ+%(Z* zuE|Y6U78eH;mu|Z8QIZqE~wc?YdsG;SE~VD-kNLB{~*DwPcw5V8@|4-o`UvlQ;s{U zaG`=>RoJ%`p1({DuvT-GD<5Om%y-eBVjAJ4{z^>Tuo!3vhLs=0-r9@KN3`Gs>_=S=!i7{b;WfB!=Z z!ZT9Dm%?O5X1D5L=RV=nzNf$pUxrVP9PRVTqY@y?esW;dPqK&pP8HmL6>Z|tZ;9&u zr>L&c+FH}L0j6n`Hf)t!@{caxqt0fZ&|e`PmkM6gcL_?3)@cnP-vqbO=N*5)P{T^ zu5>IiM!#A4n7&xOV=i?uYbjX=x0MzRH<(XZ0W^FgA|j~fUVne zov(`i^k~#Gxgg(g2e%Ax=4I;%&<&h{ z$ZDFgP!Q1_XklSY|D`xNgS^>d9(`r2Q%m|?{fhu_#_K8C}Uk(Cblr?~-{y#nW zkiY{Ep;QscW7%W&)UqSNv@bV_EB4cBn6_04!jZvQJXuUHWpTvil+YE4e}Ul%92!8= zH!mGurPIYGW9krSmZ|hL^t5z=##<%9-=)#^;t3mHc9Y8pK$boK%sAyT|8*eXvo24I zA;T99Eb$ZKZQ^WNzl$^(F{+HQ?2W>rL>jlg?Xh10?ZP*XbS@S_z*Wv=O^Ae4ZB4TP zBf~!)dGprYV3 z($f6ASJ2MJvQOJp4P7s6WDomu19Wz;9(95N%cIhCZ=FXoA~kKg=7rBI<1E$EnUNy{ z>HJXNYZSE2&mYx){#ZX-SI7N3tbwzmT5Y(L@jE5>^*dw@ZGlPz6(x3@)6mjnl&#&B z9n&u`!>{38#cRbJ;0!JwOb`s9h_qTIMX4iwE1Ad=bLZE-VP57o0Q=49LuH#D+Gg$IgTbZ4svP%EZWFzpN5OSb)cD!%vm(#w~V zy_Q^{&20YWqxpr!+^}D=mt?*YkD(OSDDu6Yb`&lhL8$7xyBp_we3^c`z|h1|1>o1T zT0+y8`P{dr%*T9izfj(2UAKNHCR$*Oe}((}NTY~2r6r6pvjWd)oE=7BF)~_)hifu~ z>jhlylxI&dv5B@Qznmx6sR8XiDsHz>TVflRFSNU};jA<4Zb9CgSzclSC)uHVgJ&tF zvY8;Fu=^r#LdEdzHkz2%7Bz5^5(l{PEHSp^P=fG*(h(JkFtI8%rDiR#^LF)1BazHF zPh;4eT!<*Mxb_J0Q|%1-GVQ1i?|39fY2@3G2w)hJTH|4s9F#HH@6!y$<-JIP&T_^E#2SBi!7fca9t8Rl?1i)d@*< zAw(0;5+NITGCKekhL**`Yy}HvU=!3mXE z1Qjl$H~LB}0`H3coEV9<=J+}U{7Z=yB$FbJFjOL2wwb6>WHKm4V*iRFzp=NF7N~Ry zB~&ioI-)Ysx7}jT3-SeXu?oUtkT= z2~5!Jn`I}4TiIS)!tCUV)?8$g{dQoR%|e=$g|<>BSjx&1Z7y|j{N#3H)np=WW*O4& zXEFhczUs@S%uNqOSxv71sb!$L7=jqBKtIWj(J;&Zg0_%w^GBA<^(e2&TB z8(Y!ftBR`=V(>u~%g|6?@oCy37@#Lce2yPqhk*ZB#o!A9RAKm&2?CV4r`ub9E`cLM zs0l%s>EJW=rDmO$>t)sj3HrU#th4kw&FnFMB8?gcvo1)`ioI0`>eZSF?Dym#&6osL zD#yaCD+Kjw%`7!immiJU!s86?NGT(8K~031q_OSVi#j*SNn8qQrc*MES@Q^j+V^mo zpw?U}_>>xmX_wXcd$K|+PqNSLBx2fxxR#QJnA==_N6X1-CV}$z!s}?cTvkhR>$!WC z^5>dRpJBN*;)&K!}$;3N~x(G^8Z*0GUAPJ??1 zzSi2#QEX%V$B=NFXSQUPWDm!4xy^dCyk*P>Fej1Q3AuC3s%4LPF1eGvx+gQye0WF7 zoZ=lj%dI@=DNOty^0M*Gq3nXLK?B^%z2JLCcy~nK#-wQqMQ|x3 zlesQ%WoX%rTuBbe+8WYDvvx0|&j-b~b6xvYj#=|4IOM}T~*|nhJ2JG6= zpCb)8*$B>!(XsJXd%~vcBpNLzxF?B$W#_J@K7y8dvtlXSNMr#?(}}(Qq^b-zNas$` zj0K)b=dK^LnJ`_yVUT9n4qgg>}c4=)sx^_RtpwX=Yl@)cjA{Uo_BY0^d9`NHgoy3=X%FJtqcjCfKSL>a-er z7B0xbX;*kUSCaxDTm=2MgN(*pkn5_HR(LvBYbNl`KMc}L$ENC=lNmYD(A`*>*(YV| zcitx3R2plvt8@ZMr~6!XX%pta**AK1YI>3iH#R2+uEI$oPuofQbz}a^43C*qx)+Oq z(93+u(_WCY#w`yLg(VC6!IgA;_LAIK{!%u_!SM1xcu5*Qe~FWCzwWVp_J()!m3L2K zwd&n5U8(1&u5RljN4QU)dsecW%g|ZLB~s4Jj#0d3ofYbNV-6PCJav7Ji*Ko+;|9rd ze0c>|jw$G{3S?T4Wgt_~VIAlZH5l$6a%GKLt}E+@{kdt!2UQ+*?l4_RaZfL6EZ@sFY?!q-%IH4BN zaT{xLkJRZN!xKRO!{g{=Zva_Xp*XlFzDrlk%bUXQ>vVN)iuZ9}#XLw{b~3>9){OS& ztY%`Dq_))Qj&Q6s7@E^)0#p9PCN|pSSt6*@j+da&KxNlXC_z2(lsr$vw`E6zgrEPqTFb>Y7HKx+YcdS!b!}c#D-8%y5 z-dZ8uo8^G)#{x>EUlIB%k@RpN>C>u`@-&x}r*YEJ5=m(ip;CDuUkSu#ihK!3D{16} z&JerDOCvQ=eL~4MJ>IT?n4EmWeBYP4)9QlKsZYy+2))Yod-9D&uUZ!lD?P{jNdqFv zDHu)4_V}tL8$o{q8O(Sk)y(6AG-HPWq_q0=(oczhu=E>_x!>@i#2kur0ja)_;KAg2 zr|mNy?!4Vym^>jzYa=`RV%aA9NDY2=Veau*%TNnR+hzi%(PCu@%eZ?tfMB}3R4|yHQiW;rIGee9kY)^~27qc)$)HUID*5mrP4zL@a>wkyp4oZQvMkr% z>>PMf6Q<9%4+0quK`V)PxI)BAyGP`_({m8;<|Di_oCa_zh{6Y7_tGB-UV8V<-uzVsAm<(elJ zR`<5q8G-|e*5HenAEZ`Jw<#$wEWa4pExZ15EH3c-1i|7J%+F&L%*NLwox7nDQ3$`D zDogX41IF?wXMepnDJt8izyv2Fe|KH^j@5+xohsF$0B1+k8ahyx=Jk?>ZY^KmURI`t z%%$+FM$uGyBq}=eD508_(P?%*8$S_MNB3A+n%7GjeX@N0RJ}5}0bqx?^A54BkN27q zRJ?9xo9dw2U%tMsgu8!wQ~3_(L$%kpT0^(Top+WE9V|=px|tnr)LXive2<@_THC!= z+ac0mmbERErFqSvUU_ARErJ3%H@i?`xaeK}E+m~l)+62DX;?A9^0J9ic7PWPcdN1a zCK?G|2?7oIp_3oN0)qJ=QhRFa3R*)MXemK5(wyH*mhbvcoMpit8<`6M;)H28TE7!3 zk=OGiEm;IDcGksPGgejCT%*VK&bJjrWXMd2p5GQ-F7FgYbhagdVE{=F;v!z0=-=C~ z$1uz8)6=QB?123``WBvb4y)Qh7Z1;V8jFX&RtqqX!hjWEOHUC^m`~ZLl+E!c>9|fi z5o2^3YrDx-Zd9FbtXHT#KQLy4lF_nqPwRT%X`)8M_b+P!tQzNu@STI~b0K3j}xi;c?mb=r3p4P6`6Ol?#ar<;%J z1xwp~p&sS$3Ck5^D&XXd&-%FkpRgyv2STWH!*N1R)=EW|IjpG1I%LA`Kw-c&EEY77Ur+Kx;tbY8`{>u zDV%Ht-3z1=MwGx$c!PC{WN(-)VMEoAdevV@ev)ZbUhm;MKGDM~FSjg?Nrorrw-rjf z-6GS5vsW1yY~R^1JKr?Y(VRMQ9MUbgll?of?Q4R)nOEGlZRUzwNRgG1NYLn06i)8r zJo>-Yx+N;X9^h@E5j=gGgS{(L)9F6=C?r}CA_8mxWiy`nVt_U*g98^u(DX18sSx(U*_vpCpo``xal=)oe z-PV>4i)BBfrB>uE%63w0MxwSIxAuXClHaP9`MjK!>;qg2gq)<}ur#(W?sZggC-wAv zORzB&AUBVdvI06LWg&L>XA6j%lf5exXY^VQnvJiENg;@rmt$_?-a1(rbDj6t@NMmO zbFzQsS~_ZUE&psqnYEggi?0tuIk0lEwW^i1pYF*{GY3~LesZYw_LYmBq*`bAcZy@` z=D2sN0Do$FY9HzWL|SQ{jc=tGWw^UN?rp$qn(MsRAf%}s1byeqtH4{J z?HmaV)05`XQ|8iB=h6+NOC=}HT*{({?ReLApIg=Oxz_)19gYfxD>B=!24}D*JR*xV zhwm!BRjR~;a`3{)1+#>~x($RU@tWERrah1n(2dryI8orzNKNLL)g;=*bm}Kca)C42 zOI9dl0;fsWg23SrycJ640%vB$QcV$s615XQBW$KCmL3U|#z~JWv}{4Snz#pV^w~j5 zEh9NBlQB)7v0|l!8s=m{CKSlRX<~G)^^GVRvZOLqbYcqxbZ+{su7ouC`uW>nlyOjt zmOROHUOycGGUH%IP={tHfNU7L_wQ5Y)67>QO7H-4)d({f^?i&O$iR*%f zdpfHSwL=Q;egJWL%2KO+<)X?&&+aaD!}J*Y+;l%8tEBUF6CNTDk)4qUid*mP9OGqm znbegwo}Aubr@al7TurNg#*Q#@GO^a2%aSpU70Cz&As5XCA*08%PCJU13>x#S0f1#w z6h;zhJ#L8OAsAdeScHt(rMPgr=(up&UqV{iVsKnOBEe~Y=9!rm1)~Z5WaTY z@G_rNptTxg%ucQX<^hiX05BZ8afP%6Oc8`CjW0HbjU!cxBRgfyBaL9KaXLFHkhTQH!C0Hid+gRDzX*}Xu|Vs> z%*^`;IDoCfyiaX1Kq(4b72?~OY>;AmQU z6=w$+CkPZmVLBm{gILIlQblO>mmw7HEB4b9&s{0J$G2HWpd^j1b_WFT2{=Yhw{B1u zJ#8IH$SENEuQ3R&g@D zOU{el&_vW|b^iJ)?xpqRhG_$AV+Y)tP3|Rid>vI1J=sONVa@Z-S8|iq1;GMQYJs4K z1Sf?({sLdyJnV{F=0F@&8*jg~7u$R+$3mNDB_e*&pw9P=9%_^y3`19i#oOn;Pbo|Q z8&2vSODfs=%upg}HezXf(2|b#rX7gGi8jeD)WOK5q;Vv9uZW>(DKkc${Kv%BBYU^y z{1{!$?vWq==!gIE{qKJ5<3Da(V_u?BdP8J#adv?TC7L1ky@6T!u(`RRqmIogq&RFa z+<9Cid}=yunpIg%7)r9;^S;Biwk<})gseAG@VDb!o5TW{@f!#;l}Q6>__}H)aAV8)Z0@q()j+^mQ2G zFu$9Za?r?Zo;Abpg|Q90g-2QB|YI9(|qA-hE$kuhXw7Oh4e1vqq<(!e9W^zS8l zG9u(e*^dw#%7LC;$&X|w^qh_S7M%Q>yEHImhRy|t5(TRa!vH!l$-^@8fpl&c<;$*o z0UjYPXGlcQPo3k9!$ya{lWhbTBTvT21E%7jguLIL!;B?sGGQw9%qA{`Vy0=lZNCOj zxREDv?J#0u4^96?P=#rN5pk+<1hQQ8xX6bkZ$K*nOzC*;$7<;lEOP}lD&q`3l#Vzoj>MX>V!? z&$V-29fnV*5Hjp?P?dlVo)P!;`NsH^(V^p^2MV^mU1pnnFkG_hNMClvdg`R(S2H3~ zk266nICG4qoh?)2Ny|)rneFQ`H;;}706_nNF?{-A&JR-X~CsM->Xv<9`tv6md(KKyd-UzEzVY$59Dd|OkLnR?ASvIFtAq3#Uw`!a$G`B{m+pE@ zZ`f$bqknwh(^r4-)-QkPaXn(&OUkyI^MDb$!#0nTfcpXUT*k&|*Df>AW%CyRjaeY# zB;KU}iVM=5@5)@J%8?&$JNxz5^x{2uVLR9Id*t%o&>qe;S${2ZEJ_=f_Zr*MYcKB& z@9B-G1pZV8HgRp**wc&r<+dM3d+e(beFf6fcn<)Mwyn9gD08`*7*+*Pf>pq)bSSUA zY_j++jq{h~mqo+XFV(2pvL2~tki_NGuI9O?jffF&yQlT@4U_0l$x;&noV&$Yuw3iO zf8RnDNp)g`?7n}`LN>!FD8(#(F!oGJY(W%ABU>?Xqw(Ld#I-TG@nRBJzn4hd*+%2c z1~TK>mAIBEDQmAHaaXtXHKayBTce7$))U{2o6Og)Sbt@+5ZR;KdrcSF@zxXbA6CIH z${KnhA}1mxU3TEHg?aPb$OAL^pCi)UY@YqO=l>u7Vbk+^-So8QK4;^GQ=gyz@06L7 zPYUR0+6qYYKq1M{ZX9Ara!_$L^@7y5`rXeZR{uoA_ zmqX?0!4u8SM{`Q+oPwK^`5~!NAF+*mzdFS4 z>xR&bwn4f{%BEm87(}K?fCV&d4vGz(g9Ov@=TLolZm^$|6N5<1!%QMHb3ddg!hJ(H zAUxlyOadL%+sv>}=eg?llk_Q%eLu!MZx1Qe{(?TH=X8nlMcHp^E?0LK<)}Su%bU&Y zM$IGjS&^59(cH-N(Fc5BxHocEa$wYn9G6+xG@;ic%63H{!|lv3e4FS}5QcBB%PrDikYUB}_gqIJ!Cz_gPC^9&3C*rU?5@~65(r61XNb;b=#OXw7xRL`yItqGet4M61oNr9`W(uDyGyU1QN9S|AVbY zm{x@)hf7G!%vC+Q8R$!)l%Sej;H;|72+nX;jW=cx#cnu!RGF9|5(+u^&T(R z;<@Ca)&l(fE?E+LEcM_q|1F*sG)&q5RLY5=5(!r{r9`6G5;l)e=sNITHRI(^=z9LZ)W>1b!`6^ zW85glTdBl1ZKA29=rT^wT-*G3)v^AsJ)ZF6`OO(WF3=T|uylUhLf1;si|sVEFh4FP z9DY17))PTE+4&7)kBVD|Nwn?jNf@;%jb;`yU=@+}>L>)fW0mT9i6W-$#?3*XzKZ>~L0xV;$1DtH>PY`9#=`HC}G3 zZP=7mn)hHYv>)3+c&-V~tg))lQCIvX&BkwAcWTJU-?p#t82qf)-%ACrOj1Wstcg#b z)i;8;GQ!VrEiq{>bML4xXKEbEdrcCGi_HPanMl}x8edG&QLom=Hh|`jh;6>Rh5cFF zf3{A!PbCW}_n%u(xj*-IDfdrmX3CK%puBS5q!p|Ort;U=Iu_KEy)zfVj*!kOQSKkL z19GKqjB(%W4htyvTXfBMkoLRwbxZA99qv2gouvR$?{l1mhyV%eq`&g&GMMg8;Ib`! zdouy>o8lAA1b~bqPPJdx)KaYozw%f@0P>qMD?+TpRdb0r(YEw*krO9=x1HupdJ)Fe zjjU}d>WvnE+D=mm6|Eap+f;O=8`WR6(^Nu5U&0GF-;yA!8TvL(G%`b=5;x0~X}1++ z%cT@{1D4X+8#!geC7CZ!Cd$~XF?3=N&mQ+S2yCEGA_#T`H#js7PDLmObk~?}$ipbU zAww$sZ)vU^D+5(xpw4P~T>3z|U}QNZ$xcJqozW0xB`)6y7F!*6wv4!Qbk^H6W-4~V zp$Z+Ygxx8zH%o@na>rH?Jw`C0TM3JN zkX97RZu2N5kgZWh*{UZCC|hSt*~);;n8QTaZpZ4_#LQK2Ib`fl`c*qtA+a&PPgY25 z%r_IpDw?u(xm%x}#GKu$C8TrR;qvOw`qA1JX{nQwJOfNxU-H~$RR*Z%lIN_eS(W-z zixPD0a@<~H&F|%{7-E_>wHFQR{KBtpMmT@R$q_B%&G7t7z3Xx}!N59Z$;!a5TTT?z+#uu`Tf1+_8Y|&Ig!r3jFNw`-&2@_j0!p5y;8Q&J1u2|=k zuZ@*YF(FI2S#O^rhP27vB6H{0#8BYmvgF7XXw{NI{K8@1m0$7LhcZ|WCcnQ3_C2W$ zM!qaT{cGXL2aG9HfS5)Q=*^~H2R#V~#aga}NQh~UXS-$n^JTZ{nFenQ6 ztCve(cEM1_F_j}K&B~=`IEI?u!yG#QjoA64wbL06a_u>tEoOCk(#fTBlC-l@H-fK8 ztNdNW>Qu|cxD#C&x%8Ap7-!|u#kS%WT{Drn{jLozwQF@-v6e5p9hXfijU`1bUxK4c zl@$N-(F8}YaOB_@o5_KNxPxhP9d4^KCsflC92IRKYR)8#9`}_1bLkXNDCNrueN)8t zFW!*yB{rNMH3AS@wO(N?KP1Oi(VMo#Q1ANn@6+8re=J?zj&wRRmZ0j!L4F%aN)>RX zaVTf}P+s*zd0F3nD8f^ff5C<#OspG5nZ;{MPvD*9e!87uXdep+UNiqx&X0+al(xED zj&gM=ctXenjd>%cG0glKkq^-wo~hff>KO>~xceO(*0&p4aJDnjc*yZpKPvMT5=+!s zGu_}5oq~zp>VLF&8!<~qbtJ5^f7;t=_D_0kUW}jVbZQ~oa}51_QgqY1p+z#!E}wGj z84bc;XH`U5DshT3lu9*O&=G!TD8^ur2Ew+-Ld<2U#<7HISg;o(Jkyylb*~eDlgh6= zJDWb6!Iv|ZWO?#9Nis~l>#F_`lPuYqyR$f5i9wVjM3Qr=9%{_Z$$Mh~PO0ap2b-U3 z2W*nv76^@+)D;5Yu$V@=g(rOKxtSoxLQbXmJAY2s8g~BdzJEUbO@8>% zCK=o`wt^*~E9EfS-p-n(0PkzkqA3&i4V!&)i7vWrp~LHtV+Z>D<`Od4Qsnpk z-;NBx1A97WT#sDA6U8e|-?saiSE!?577Zibg&>|-iB|89V&py(Mw2uXTfW%(-iqam zbXP__vX(DdrD}ob1ijOqZ)Pyhw#XD_d_YQ82%kyGieAfZv5EOh?>*toUW#tXHG4S( zVUDvzW>#myL9<9sR+4-8+hq1qUfVdPWtMB{OPKS<|ST=KHf}f z%daorsM;o? zUbOjz)E1TBlo3(U>$(YSn}Ej71MM`G5YU!pug6Q~ut!hCSG6#E>9#j}!LKCNFx|!m zBl;q1*xKZY*h5*vjtUyYd^VeP5~7Tq1$itwL!u2F=PR+X%WmK?pPIu|qR||Nd$i7n z@=T~o)CUnBHXarFetAd~y<_Y9E^pu|&FIBCI7fTeG34~8Yv%Xaz2>@MR~ zc8#PQAYW*gdB-`E@+`+#uPLgdc5M^ZX7`2FPE+(3k2JB2Z-Y-kGab)wu8z1Sbi8fi z+Dymun>t70+Dymun_8H-CeexK>{Iag0#p?1vuMI;C}17Y)Qv`>i6B!toe)ixsP`dw z1y-yekAbyeB_Wz?n}{Y&8qt)&+!0MY1Y)9jcxgnFb2-08H0xrzTTrG({`c*sOc#!5 zUj9#jXkP4y=8G4IXy!NfwiC_#rrvgifGO!L{lZ|iRSY$(Oi=u znrqH0(d3ljCZhQ@-`Q+pjB_WVOQuv8j)<;3XClh3-H;mNJowIf67b8-bo3m3XMLE= zU(Y5A#Qdh-20qv8E8lFVxpO4hb_RGU`eZ8E=a1|hN%nyAo&B+Pnz~RV`z`p+9&04w zy3vY+A4^EMO4O6^lOo~ZL<`^9%W&O{)d!a~5%t(b^uqYga_YO0{cOr3k$qDze9i3i z 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 From 47b03423db16cd19d409d0baf54b9eeff606d7d6 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Mon, 9 Feb 2026 09:29:01 -0300 Subject: [PATCH 25/29] Add log_index to payment key to prevent collisions on duplicate payment_reference When a single transaction emits multiple events with the same payment_reference, the composite PRIMARY KEY (chain:tx_hash:payment_reference) collides. Include the log index from the transaction's log array so each event produces a unique id (chain:tx_hash:payment_reference:log_index). --- tron/proto/request/tron/v1/payments.proto | 3 +++ tron/schema.sql | 3 ++- tron/src/lib.rs | 12 ++++++++---- tron/src/pb/request.tron.v1.rs | 3 +++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/tron/proto/request/tron/v1/payments.proto b/tron/proto/request/tron/v1/payments.proto index fbf2485..06ab1e2 100644 --- a/tron/proto/request/tron/v1/payments.proto +++ b/tron/proto/request/tron/v1/payments.proto @@ -48,6 +48,9 @@ message Payment { // Network/Bandwidth fee paid in SUN string net_fee = 15; + + // Log index within the transaction (for uniqueness when multiple events share the same payment_reference) + uint64 log_index = 16; } // Collection of payment events diff --git a/tron/schema.sql b/tron/schema.sql index 12e87d9..0c68a29 100644 --- a/tron/schema.sql +++ b/tron/schema.sql @@ -16,7 +16,8 @@ CREATE TABLE IF NOT EXISTS payments ( payment_reference TEXT NOT NULL, energy_used TEXT, energy_fee TEXT, - net_fee TEXT + net_fee TEXT, + log_index BIGINT NOT NULL DEFAULT 0 ); -- Indexes for common queries diff --git a/tron/src/lib.rs b/tron/src/lib.rs index a07eccc..d3beb6b 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -63,7 +63,7 @@ fn map_erc20_fee_proxy_payments(params: String, block: Block) -> Result Result Result Result Option { // Event: TransferWithReferenceAndFee(address tokenAddress, address to, uint256 amount, // bytes indexed paymentReference, uint256 feeAmount, address feeAddress) @@ -226,6 +229,7 @@ fn parse_transfer_with_reference_and_fee( energy_used, energy_fee, net_fee, + log_index, }) } diff --git a/tron/src/pb/request.tron.v1.rs b/tron/src/pb/request.tron.v1.rs index 00156c3..2f72410 100644 --- a/tron/src/pb/request.tron.v1.rs +++ b/tron/src/pb/request.tron.v1.rs @@ -49,6 +49,9 @@ pub struct Payment { /// Network/Bandwidth fee paid in SUN #[prost(string, tag="15")] pub net_fee: ::prost::alloc::string::String, + /// Log index within the transaction (for uniqueness when multiple events share the same payment_reference) + #[prost(uint64, tag="16")] + pub log_index: u64, } /// Collection of payment events #[allow(clippy::derive_partial_eq_without_eq)] From 4d2b169a14b5bfbd6b4237cd0e07afb8ec9909d0 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Mon, 9 Feb 2026 09:30:30 -0300 Subject: [PATCH 26/29] Add Easypanel deployment workflows for staging and production --- .github/workflows/deploy-to-production.yml | 14 ++++++++++++++ .github/workflows/deploy-to-staging.yml | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 .github/workflows/deploy-to-production.yml create mode 100644 .github/workflows/deploy-to-staging.yml diff --git a/.github/workflows/deploy-to-production.yml b/.github/workflows/deploy-to-production.yml new file mode 100644 index 0000000..2690392 --- /dev/null +++ b/.github/workflows/deploy-to-production.yml @@ -0,0 +1,14 @@ +name: Deploy to production + +on: + workflow_dispatch: + release: + types: [published] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Webhook request + run: | + curl -X GET https://prod.request.network/api/deploy/${{ secrets.EASYPANEL_DEPLOY_KEY_PRODUCTION }} diff --git a/.github/workflows/deploy-to-staging.yml b/.github/workflows/deploy-to-staging.yml new file mode 100644 index 0000000..80705e6 --- /dev/null +++ b/.github/workflows/deploy-to-staging.yml @@ -0,0 +1,14 @@ +name: Deploy to staging + +on: + workflow_dispatch: + push: + branches: [main] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Webhook request + run: | + curl -X GET https://stage.request.network/api/deploy/${{ secrets.EASYPANEL_DEPLOY_KEY_STAGING }} From 5a2950038fa113c94d330451708433efe275bcde Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Mon, 9 Feb 2026 09:34:45 -0300 Subject: [PATCH 27/29] Fix hardcoded .spkg filename and incorrect DB connection scheme - Use glob pattern for .spkg COPY and dynamic discovery in entrypoint so version bumps in substreams.yaml don't break the build - Fix DSN scheme from psql:// to postgres:// in docker-compose.yml to prevent database connection failures --- Dockerfile.sink | 6 +++--- docker-compose.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile.sink b/Dockerfile.sink index 4261808..4886b39 100644 --- a/Dockerfile.sink +++ b/Dockerfile.sink @@ -37,7 +37,7 @@ RUN ARCH=$(echo ${TARGETARCH:-amd64} | sed 's/amd64/x86_64/' | sed 's/arm64/arm6 chmod +x /usr/local/bin/substreams-sink-sql # Copy the built .spkg from builder stage and schema -COPY --from=builder /build/tron/request-network-tron-v0.1.0.spkg /app/ +COPY --from=builder /build/tron/request-network-tron-*.spkg /app/ COPY tron/schema.sql /app/ WORKDIR /app @@ -48,8 +48,8 @@ ENV SUBSTREAMS_API_TOKEN="" # Endpoint configured via SUBSTREAMS_ENDPOINTS_CONFIG_TRON env var ENV SUBSTREAMS_ENDPOINTS_CONFIG_TRON="mainnet.tron.streamingfast.io:443" -# Create entrypoint script - uses sink config from the package -RUN printf '#!/bin/bash\nset -e\n\n# Setup the database schema first\necho "Setting up database schema..."\nsubstreams-sink-sql setup "$DSN" /app/request-network-tron-v0.1.0.spkg || true\n\n# Run the sink\necho "Starting sink..."\nexec substreams-sink-sql run "$DSN" /app/request-network-tron-v0.1.0.spkg\n' > /entrypoint.sh && \ +# Create entrypoint script - dynamically find the .spkg file +RUN printf '#!/bin/bash\nset -e\n\nSPKG=$(ls /app/request-network-tron-*.spkg 2>/dev/null | head -1)\nif [ -z "$SPKG" ]; then\n echo "ERROR: No .spkg file found in /app/"\n exit 1\nfi\necho "Using package: $SPKG"\n\n# Setup the database schema first\necho "Setting up database schema..."\nsubstreams-sink-sql setup "$DSN" "$SPKG" || true\n\n# Run the sink\necho "Starting sink..."\nexec substreams-sink-sql run "$DSN" "$SPKG"\n' > /entrypoint.sh && \ chmod +x /entrypoint.sh # Health check diff --git a/docker-compose.yml b/docker-compose.yml index 0a4062d..788c30c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,7 +29,7 @@ services: postgres: condition: service_healthy environment: - DSN: psql://postgres:${POSTGRES_PASSWORD}@postgres:5432/tron_payments?sslmode=disable + DSN: postgres://postgres:${POSTGRES_PASSWORD}@postgres:5432/tron_payments?sslmode=disable SUBSTREAMS_API_TOKEN: ${SUBSTREAMS_API_TOKEN} SUBSTREAMS_ENDPOINTS_CONFIG_TRON: mainnet.tron.streamingfast.io:443 From 4a907d6db00ce578ef2c1c937ad03e98b4e42f2c Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Mon, 9 Feb 2026 09:37:51 -0300 Subject: [PATCH 28/29] Add replay.log to .gitignore Prevent transient Substreams CLI replay log from being accidentally committed. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 968dc4a..65003e6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ target/ # Substreams packages (built during Docker/CI) *.spkg +# Substreams replay log +replay.log + # IDE .idea/ .vscode/ From ce5ce3673515be87c64434c6160650e841ec1d5e Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Mon, 9 Feb 2026 09:41:27 -0300 Subject: [PATCH 29/29] Fix endpoint mismatch, timestamp cast, and missing db primary key - Use native TRON endpoint (mainnet.tron.streamingfast.io) consistently across CI, Makefile, and docs to match production deployments - Fix timestamp conversion to divide before casting to u64, preventing incorrect values from signed integer reinterpretation - Write composite key to the id column in db_out so SQL sink inserts succeed with the PRIMARY KEY constraint --- .github/workflows/tron-build.yml | 12 ++++++------ tron/Makefile | 6 +++--- tron/README.md | 6 +++--- tron/src/lib.rs | 3 ++- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/.github/workflows/tron-build.yml b/.github/workflows/tron-build.yml index d27de2a..6845b91 100644 --- a/.github/workflows/tron-build.yml +++ b/.github/workflows/tron-build.yml @@ -72,7 +72,7 @@ jobs: echo "Build artifacts verified successfully" integration-test-mainnet: - name: Integration Test (Mainnet EVM) + name: Integration Test (Mainnet) runs-on: ubuntu-latest needs: build-and-test # Run on: push to main (merge) or manual trigger @@ -128,13 +128,13 @@ jobs: fi echo "✅ Package created: $SPKG_FILE" - - name: Deploy and test against Mainnet EVM (Streamingfast) + - name: Deploy and test against Mainnet (Streamingfast) working-directory: tron env: SUBSTREAMS_API_TOKEN: ${{ secrets.SUBSTREAMS_API_TOKEN }} run: | - echo "=== Deploying to TRON Mainnet EVM (Streamingfast) ===" - echo "Endpoint: mainnet-evm.tron.streamingfast.io:443" + echo "=== Deploying to TRON Mainnet (Streamingfast) ===" + echo "Endpoint: mainnet.tron.streamingfast.io:443" echo "Block range: 79216121 to 79216221 (100 blocks from mainnet deployment)" echo "" @@ -143,7 +143,7 @@ jobs: # Run substreams and capture JSON output if ! substreams run "$SPKG_FILE" map_erc20_fee_proxy_payments \ - -e mainnet-evm.tron.streamingfast.io:443 \ + -e mainnet.tron.streamingfast.io:443 \ --start-block 79216121 \ --stop-block +100 \ -o json 2>&1 | tee output_mainnet.log; then @@ -179,7 +179,7 @@ jobs: echo "=== Mainnet Integration Test PASSED ===" echo "The substreams module successfully:" echo " - Loaded WASM module" - echo " - Connected to TRON Mainnet EVM endpoint via Streamingfast" + echo " - Connected to TRON Mainnet endpoint via Streamingfast" echo " - Processed 100 blocks without errors" echo " - Output valid JSON structure" diff --git a/tron/Makefile b/tron/Makefile index 2de0949..06ca8f2 100644 --- a/tron/Makefile +++ b/tron/Makefile @@ -10,14 +10,14 @@ protogen: package: build substreams pack ./substreams.yaml -# Mainnet - uses Streamingfast TRON EVM endpoint +# Mainnet - uses Streamingfast TRON native endpoint .PHONY: gui gui: build - substreams gui ./substreams.yaml map_erc20_fee_proxy_payments -e mainnet-evm.tron.streamingfast.io:443 --start-block 79216121 + substreams gui ./substreams.yaml map_erc20_fee_proxy_payments -e mainnet.tron.streamingfast.io:443 --start-block 79216121 .PHONY: run run: build - substreams run ./substreams.yaml map_erc20_fee_proxy_payments -e mainnet-evm.tron.streamingfast.io:443 --start-block 79216121 --stop-block +100 + substreams run ./substreams.yaml map_erc20_fee_proxy_payments -e mainnet.tron.streamingfast.io:443 --start-block 79216121 --stop-block +100 .PHONY: clean clean: diff --git a/tron/README.md b/tron/README.md index 1036fed..8ab7a69 100644 --- a/tron/README.md +++ b/tron/README.md @@ -54,7 +54,7 @@ make run ### Substreams Endpoint -- **Mainnet (Streamingfast)**: `mainnet-evm.tron.streamingfast.io:443` +- **Mainnet (Streamingfast)**: `mainnet.tron.streamingfast.io:443` ### Option 1: SQL Sink (PostgreSQL/ClickHouse) @@ -74,7 +74,7 @@ make run "postgres://user:password@host:5432/database?sslmode=disable" \ ./request-network-tron-v0.1.0.spkg \ map_erc20_fee_proxy_payments \ - -e mainnet-evm.tron.streamingfast.io:443 + -e mainnet.tron.streamingfast.io:443 ``` ### Option 2: Direct Streaming @@ -92,7 +92,7 @@ Export data to files for batch processing: substreams-sink-files run \ ./request-network-tron-v0.1.0.spkg \ map_erc20_fee_proxy_payments \ - -e mainnet-evm.tron.streamingfast.io:443 \ + -e mainnet.tron.streamingfast.io:443 \ --output-path ./output ``` diff --git a/tron/src/lib.rs b/tron/src/lib.rs index d3beb6b..d795538 100644 --- a/tron/src/lib.rs +++ b/tron/src/lib.rs @@ -55,7 +55,7 @@ fn map_erc20_fee_proxy_payments(params: String, block: Block) -> Result Result