From d9ad5e5b3d5a3d5c49f99d214ff8fdd32135a4f3 Mon Sep 17 00:00:00 2001 From: Alois Date: Sun, 28 Jun 2026 13:08:37 +0200 Subject: [PATCH 1/4] (feat): add max message size to wasm (feat): add pq key generation to wasm (qol): update gitignores --- .gitignore | 1 + client/src/lib.rs | 72 +- codec/src/communication_value.rs | 31 +- codec/src/data_value.rs | 83 +- docs/NATIVE-CLIENT.md | 25 + docs/WASM-CLIENT.md | 8 +- example/.gitignore | 3 +- example/web-client/.gitignore | 1 - host/src/lib.rs | 39 +- src/sdk/index.ts | 71 +- tsconfig.json | 2 + type-map/build.rs | 12 +- wasm/pkg/mtp_wasm.d.ts | 318 ------- wasm/pkg/mtp_wasm.js | 1483 ------------------------------ wasm/pkg/mtp_wasm_bg.wasm | Bin 394684 -> 0 bytes wasm/pkg/mtp_wasm_bg.wasm.d.ts | 72 -- wasm/pkg/package.json | 15 - wasm/src/client.rs | 59 +- wasm/src/config.rs | 12 + wasm/src/crypto.rs | 6 + wasm/src/frame.rs | 5 +- wasm/src/transport.rs | 17 +- wasm/types/mtp_wasm.d.ts | 2 + 23 files changed, 341 insertions(+), 1996 deletions(-) delete mode 100644 example/web-client/.gitignore delete mode 100644 wasm/pkg/mtp_wasm.d.ts delete mode 100644 wasm/pkg/mtp_wasm.js delete mode 100644 wasm/pkg/mtp_wasm_bg.wasm delete mode 100644 wasm/pkg/mtp_wasm_bg.wasm.d.ts delete mode 100644 wasm/pkg/package.json diff --git a/.gitignore b/.gitignore index 2c539c1..8ce8e7b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ node_modules/ dist/ *.tgz +wasm/pkg/ diff --git a/client/src/lib.rs b/client/src/lib.rs index ac063d7..a60541c 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -1,6 +1,7 @@ use mtp_codec::{CommunicationValue, DataType, DataValue, PROTOCOL_VERSION, Version}; use mtp_common::CommunicationError; use mtp_transport::{Policy, Receiver, Sender}; +#[cfg(feature = "crypto")] use tokio::time::Duration; #[cfg(feature = "crypto")] @@ -81,6 +82,51 @@ pub struct MTPConnection { pub client_id: u64, } +impl MTPConnection { + /* + * Send a request frame and wait for the response with the same frame id. + * Any expected response type is validated after the id match. Frames with + * other ids are consumed by this call, so applications that need broad + * routing should put request correlation in a dedicated receive task. + */ + pub async fn request( + &self, + request: &CommunicationValue, + expected_response: Option, + ) -> Result { + let request_id = request.get_id(); + if request_id == 0 { + return Err(CommunicationError::Other( + "request frame must have a non-zero id".into(), + )); + } + + self.sender.send(request).await?; + + let tm = mtp_codec::TypeMap::latest(); + loop { + let response = self.receiver.receive().await?; + if response.get_id() != request_id { + continue; + } + + if let Some(expected) = expected_response { + let expected_type = expected.to_id(&tm); + if response.get_type() != expected_type { + return Err(CommunicationError::Other(format!( + "unexpected response type: expected {:?}, got {:?}; parsed {}", + expected_type, + response.get_type(), + response + ))); + } + } + + return Ok(response); + } + } +} + #[cfg(feature = "crypto")] #[derive(Debug, Clone, PartialEq, Eq)] pub enum AuthState { @@ -288,7 +334,12 @@ async fn receive_verified_challenge( } }; - verify_host_challenge(&challenge, host_public_key_bundle, bound_id, server_challenge)?; + verify_host_challenge( + &challenge, + host_public_key_bundle, + bound_id, + server_challenge, + )?; Ok(server_challenge) } @@ -437,6 +488,21 @@ impl MTPClient { } } + pub async fn auth_connect_or_register( + mut config: ClientConfig, + existing_client_id: Option, + keys: &mtp_crypto::Keyring, + host_public_key_bundle: &mtp_crypto::PublicKeyBundle, + ) -> Result { + match existing_client_id { + Some(client_id) => { + config.client_id = client_id; + Self::auth_connect(config, keys, host_public_key_bundle).await + } + None => Self::auth_register(config, keys, host_public_key_bundle).await, + } + } + async fn auth_register_inner( config: ClientConfig, keys: &mtp_crypto::Keyring, @@ -588,8 +654,8 @@ mod tests { #[cfg(feature = "crypto")] #[test] fn test_auth_timeout_custom() { - let config = ClientConfig::new("https://localhost:4433") - .with_auth_timeout(Duration::from_secs(10)); + let config = + ClientConfig::new("https://localhost:4433").with_auth_timeout(Duration::from_secs(10)); assert_eq!(config.auth_timeout, Duration::from_secs(10)); } } diff --git a/codec/src/communication_value.rs b/codec/src/communication_value.rs index fafc549..96acccc 100644 --- a/codec/src/communication_value.rs +++ b/codec/src/communication_value.rs @@ -129,7 +129,10 @@ impl CommunicationValue { } }; match tm.data_id_enum(data_type) { - Some(raw_id) => self.data.get(&DataTypeId(raw_id)).unwrap_or(&DataValue::Null), + Some(raw_id) => self + .data + .get(&DataTypeId(raw_id)) + .unwrap_or(&DataValue::Null), None => &DataValue::Null, } } @@ -594,21 +597,28 @@ impl CommunicationValue { } } match *alg { - SigAlgorithm::ED25519 => { - self.verify_frame(&Ed25519Verifier(&pk.sig_cl_public_key)).is_ok() - } - SigAlgorithm::ML_DSA_65 => { - self.verify_frame(&MlDsaVerifier(&pk.sig_pq_public_key)).is_ok() - } + SigAlgorithm::ED25519 => self + .verify_frame(&Ed25519Verifier(&pk.sig_cl_public_key)) + .is_ok(), + SigAlgorithm::ML_DSA_65 => self + .verify_frame(&MlDsaVerifier(&pk.sig_pq_public_key)) + .is_ok(), SigAlgorithm::DUAL => { // For DUAL, verify_frame passes the full combined sig to the verifier. // We wrap a verifier that splits and checks both halves. - struct DualVerifier<'a>(&'a mtp_crypto::SignaturePublicKey, &'a mtp_crypto::SignaturePqPublicKey); + struct DualVerifier<'a>( + &'a mtp_crypto::SignaturePublicKey, + &'a mtp_crypto::SignaturePqPublicKey, + ); impl SignatureScheme for DualVerifier<'_> { fn sign(&self, _: &[u8]) -> Result, mtp_crypto::CryptoError> { Err(mtp_crypto::CryptoError::SigningFailed) } - fn verify(&self, msg: &[u8], sig: &[u8]) -> Result<(), mtp_crypto::CryptoError> { + fn verify( + &self, + msg: &[u8], + sig: &[u8], + ) -> Result<(), mtp_crypto::CryptoError> { const ED_LEN: usize = 64; if sig.len() < ED_LEN { return Err(mtp_crypto::CryptoError::InvalidSignature); @@ -617,7 +627,8 @@ impl CommunicationValue { mtp_crypto::verify_ml_dsa(self.1, msg, &sig[ED_LEN..]) } } - self.verify_frame(&DualVerifier(&pk.sig_cl_public_key, &pk.sig_pq_public_key)).is_ok() + self.verify_frame(&DualVerifier(&pk.sig_cl_public_key, &pk.sig_pq_public_key)) + .is_ok() } _ => false, } diff --git a/codec/src/data_value.rs b/codec/src/data_value.rs index 99fbe35..8b79d75 100644 --- a/codec/src/data_value.rs +++ b/codec/src/data_value.rs @@ -493,7 +493,8 @@ impl DataValue { let container_bytes = &blob[1 + sig_len..]; match alg { SigAlgorithm::ED25519 => { - mtp_crypto::verify_ed25519(&pk.sig_cl_public_key, container_bytes, signature).is_ok() + mtp_crypto::verify_ed25519(&pk.sig_cl_public_key, container_bytes, signature) + .is_ok() } SigAlgorithm::ML_DSA_65 => { mtp_crypto::verify_ml_dsa(&pk.sig_pq_public_key, container_bytes, signature).is_ok() @@ -1046,7 +1047,11 @@ impl Hash for DataValue { impl From for DataValue { fn from(v: bool) -> Self { - if v { DataValue::BoolTrue } else { DataValue::BoolFalse } + if v { + DataValue::BoolTrue + } else { + DataValue::BoolFalse + } } } @@ -1115,7 +1120,10 @@ impl std::error::Error for DataValueTypeMismatch {} impl TryFrom for bool { type Error = DataValueTypeMismatch; fn try_from(v: DataValue) -> Result { - v.as_bool().ok_or(DataValueTypeMismatch { expected: "Bool", got: v.type_name() }) + v.as_bool().ok_or(DataValueTypeMismatch { + expected: "Bool", + got: v.type_name(), + }) } } @@ -1124,7 +1132,10 @@ impl TryFrom for String { fn try_from(v: DataValue) -> Result { match v { DataValue::Str(s) => Ok(s), - other => Err(DataValueTypeMismatch { expected: "Str", got: other.type_name() }), + other => Err(DataValueTypeMismatch { + expected: "Str", + got: other.type_name(), + }), } } } @@ -1132,14 +1143,20 @@ impl TryFrom for String { impl TryFrom for i128 { type Error = DataValueTypeMismatch; fn try_from(v: DataValue) -> Result { - v.as_signed_number().ok_or(DataValueTypeMismatch { expected: "SignedNumber", got: v.type_name() }) + v.as_signed_number().ok_or(DataValueTypeMismatch { + expected: "SignedNumber", + got: v.type_name(), + }) } } impl TryFrom for i64 { type Error = DataValueTypeMismatch; fn try_from(v: DataValue) -> Result { - let n = v.as_signed_number().ok_or(DataValueTypeMismatch { expected: "SignedNumber", got: v.type_name() })?; + let n = v.as_signed_number().ok_or(DataValueTypeMismatch { + expected: "SignedNumber", + got: v.type_name(), + })?; Ok(n as i64) } } @@ -1147,14 +1164,20 @@ impl TryFrom for i64 { impl TryFrom for u128 { type Error = DataValueTypeMismatch; fn try_from(v: DataValue) -> Result { - v.as_unsigned_number().ok_or(DataValueTypeMismatch { expected: "UnsignedNumber", got: v.type_name() }) + v.as_unsigned_number().ok_or(DataValueTypeMismatch { + expected: "UnsignedNumber", + got: v.type_name(), + }) } } impl TryFrom for u64 { type Error = DataValueTypeMismatch; fn try_from(v: DataValue) -> Result { - let n = v.as_unsigned_number().ok_or(DataValueTypeMismatch { expected: "UnsignedNumber", got: v.type_name() })?; + let n = v.as_unsigned_number().ok_or(DataValueTypeMismatch { + expected: "UnsignedNumber", + got: v.type_name(), + })?; Ok(n as u64) } } @@ -1164,7 +1187,10 @@ impl TryFrom for Vec { fn try_from(v: DataValue) -> Result { match v { DataValue::Bytes(b) => Ok(b), - other => Err(DataValueTypeMismatch { expected: "Bytes", got: other.type_name() }), + other => Err(DataValueTypeMismatch { + expected: "Bytes", + got: other.type_name(), + }), } } } @@ -1543,26 +1569,47 @@ mod tests { fn test_from_primitives() { assert_eq!(DataValue::from(true), DataValue::BoolTrue); assert_eq!(DataValue::from(false), DataValue::BoolFalse); - assert_eq!(DataValue::from("hello"), DataValue::Str("hello".to_string())); - assert_eq!(DataValue::from("hello".to_string()), DataValue::Str("hello".to_string())); + assert_eq!( + DataValue::from("hello"), + DataValue::Str("hello".to_string()) + ); + assert_eq!( + DataValue::from("hello".to_string()), + DataValue::Str("hello".to_string()) + ); assert_eq!(DataValue::from(42i64), DataValue::SignedNumber(42)); assert_eq!(DataValue::from(42i128), DataValue::SignedNumber(42)); assert_eq!(DataValue::from(42u64), DataValue::UnsignedNumber(42)); assert_eq!(DataValue::from(42u128), DataValue::UnsignedNumber(42)); - assert_eq!(DataValue::from(vec![1u8, 2, 3]), DataValue::Bytes(vec![1, 2, 3])); - assert_eq!(DataValue::from([1u8, 2, 3].as_ref()), DataValue::Bytes(vec![1, 2, 3])); + assert_eq!( + DataValue::from(vec![1u8, 2, 3]), + DataValue::Bytes(vec![1, 2, 3]) + ); + assert_eq!( + DataValue::from([1u8, 2, 3].as_ref()), + DataValue::Bytes(vec![1, 2, 3]) + ); } #[test] fn test_try_from_ok() { - assert_eq!(bool::try_from(DataValue::BoolTrue).unwrap(), true); - assert_eq!(bool::try_from(DataValue::BoolFalse).unwrap(), false); - assert_eq!(String::try_from(DataValue::Str("hi".to_string())).unwrap(), "hi"); + assert!(bool::try_from(DataValue::BoolTrue).unwrap()); + assert!(!bool::try_from(DataValue::BoolFalse).unwrap()); + assert_eq!( + String::try_from(DataValue::Str("hi".to_string())).unwrap(), + "hi" + ); assert_eq!(i128::try_from(DataValue::SignedNumber(-1)).unwrap(), -1i128); assert_eq!(i64::try_from(DataValue::SignedNumber(10)).unwrap(), 10i64); - assert_eq!(u128::try_from(DataValue::UnsignedNumber(99)).unwrap(), 99u128); + assert_eq!( + u128::try_from(DataValue::UnsignedNumber(99)).unwrap(), + 99u128 + ); assert_eq!(u64::try_from(DataValue::UnsignedNumber(7)).unwrap(), 7u64); - assert_eq!(Vec::::try_from(DataValue::Bytes(vec![0xAB])).unwrap(), vec![0xABu8]); + assert_eq!( + Vec::::try_from(DataValue::Bytes(vec![0xAB])).unwrap(), + vec![0xABu8] + ); } #[test] diff --git a/docs/NATIVE-CLIENT.md b/docs/NATIVE-CLIENT.md index 48d6a76..5f7d1ac 100644 --- a/docs/NATIVE-CLIENT.md +++ b/docs/NATIVE-CLIENT.md @@ -131,6 +131,18 @@ let id = conn.client_id; let keyring_bytes = keyring.to_bytes(); ``` +When callers already know whether a saved client id exists, the convenience +helper chooses login or registration: + +```rust +let conn = MTPClient::auth_connect_or_register( + config, + saved_client_id, // Option + &keyring, + &host_pk, +).await?; +``` + Protocol (challenge-response): 1. Client sends an unsigned `Register` hello (version, public key bundle) 2. Host replies with a `Challenge` carrying a fresh random `server_challenge` @@ -207,6 +219,19 @@ type-map configuration. conn.sender.send(&msg).await?; ``` +For request/response flows, `MTPConnection::request` sends one frame and waits +for a response with the same non-zero frame id. An expected response type can be +provided for validation: + +```rust +let response = conn + .request(&msg, Some(mtp::codec::CommunicationType::Pong)) + .await?; +``` + +Frames with other ids are consumed by this helper. Applications that need +subscriptions or broad routing should use one receive task and correlate there. + Two send modes (configured via `mtp::transport::Policy`): - `PersistentStream` (default) -- reuses one QUIC uni-directional stream - `SingleStreamPerMessage` -- opens a new stream per message diff --git a/docs/WASM-CLIENT.md b/docs/WASM-CLIENT.md index 5cfc3b4..7686f63 100644 --- a/docs/WASM-CLIENT.md +++ b/docs/WASM-CLIENT.md @@ -42,6 +42,8 @@ const client = await MTPClient.create({ credentials, storage, serverCertificateHashes: ["sha-256:abcd1234..."], + maxMessageSize: 1_000_000, + authTimeoutMs: 30_000, pings: true, logger: (event) => console.log(event), }); @@ -139,6 +141,9 @@ await MTPClient.create({ If hashes are omitted, the browser uses its normal TLS root store. +`maxMessageSize` caps inbound and outbound MTP frames before buffering/sending. +`authTimeoutMs` bounds connect/login/register promises at the SDK layer. + ## Sending, Requests, Subscriptions, And Pings `send` accepts either a typed message or a prebuilt raw frame: @@ -157,7 +162,7 @@ await client.send("SomeType", { value: "hello" }, { }); ``` -`request` sends one frame and resolves with the matching parsed response from the WASM layer: +`request` sends one frame and resolves with the parsed response carrying the same frame id. `responseType` is validated after the id match: ```typescript const response = await client.request( @@ -252,6 +257,7 @@ Raw crypto and key helpers include: - `ed25519_generate()` - `ed25519_verify(publicKey, message, signature)` +- `keyring_generate()` - `keyring_from_ed25519(secretKey, publicKey)` - `WasmKeyring.from_bytes(bytes)` and `keyring.to_bytes()` - `WasmPublicKeyBundle.from_bytes(bytes)` and `bundle.to_bytes()` diff --git a/example/.gitignore b/example/.gitignore index 894dd06..0d3408c 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -5,7 +5,8 @@ host_sig_pq_pk.bin host_enc_kem_pk.bin host_public_key_bundle.hex clients.json -web-client/node_modules dev-cert/ +web-client/node_modules web-client/public/host_public_key_bundle.hex web-client/public/mtp_dev_cert_hash.txt +web-client/dist/ diff --git a/example/web-client/.gitignore b/example/web-client/.gitignore deleted file mode 100644 index 1521c8b..0000000 --- a/example/web-client/.gitignore +++ /dev/null @@ -1 +0,0 @@ -dist diff --git a/host/src/lib.rs b/host/src/lib.rs index 58c79ae..389af78 100644 --- a/host/src/lib.rs +++ b/host/src/lib.rs @@ -1,18 +1,23 @@ use mtp_codec::{ - CommunicationValue, DataType, DataValue, TypeMap, Version, + CommunicationValue, DataType, DataValue, Version, registry::{Registry, VersionedCodec}, }; use mtp_common::CommunicationError; use mtp_transport::{Policy, Receiver, Sender}; use std::net::IpAddr; +#[cfg(feature = "crypto")] use std::pin::Pin; use std::{error::Error, fmt}; +#[cfg(feature = "crypto")] use tokio::time::Duration; /* ---- async callback type aliases ---- */ #[cfg(feature = "crypto")] type GetExistingUser = Box< - dyn Fn(u64) -> Pin> + Send>> + dyn Fn( + u64, + ) + -> Pin> + Send>> + Send + Sync, >; @@ -74,14 +79,19 @@ impl HostConfig { pub fn with_authentication( mut self, host_keyring: mtp_crypto::Keyring, - get_existing_user: impl Fn(u64) -> Pin> + Send>> - + Send - + Sync - + 'static, - complete_register: impl Fn(mtp_crypto::PublicKeyBundle) -> Pin + Send>> - + Send - + Sync - + 'static, + get_existing_user: impl Fn( + u64, + ) -> Pin< + Box> + Send>, + > + Send + + Sync + + 'static, + complete_register: impl Fn( + mtp_crypto::PublicKeyBundle, + ) -> Pin + Send>> + + Send + + Sync + + 'static, ) -> Self { self.require_authentication = true; self.host_keyring = host_keyring; @@ -195,11 +205,8 @@ impl MTPHost { #[cfg(feature = "crypto")] if self.config.require_authentication { let timeout = self.config.auth_timeout; - return match tokio::time::timeout( - timeout, - self.accept_authenticated(sender, receiver), - ) - .await + return match tokio::time::timeout(timeout, self.accept_authenticated(sender, receiver)) + .await { Ok(result) => result, Err(_) => Err(AcceptError::AuthenticationTimedOut), @@ -288,7 +295,7 @@ impl MTPHost { }, } - let tm = TypeMap::latest(); + let tm = mtp_codec::TypeMap::latest(); let pq_enabled = !self .config .host_keyring diff --git a/src/sdk/index.ts b/src/sdk/index.ts index 5e34666..5b2dde7 100644 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -2,8 +2,7 @@ import initWasm, { ConnectionConfig, ConnectionState, WasmClient, - ed25519_generate, - keyring_from_ed25519, + keyring_generate, } from "mtp/raw"; import * as bindings from "mtp/raw"; import type * as RawBindings from "../raw/index"; @@ -40,6 +39,8 @@ export interface MTPClientOptions { credentialsStorageKey?: string; storage?: MTPCredentialStorage; serverCertificateHashes?: string[]; + maxMessageSize?: number; + authTimeoutMs?: number; pings?: boolean | { intervalMs?: number }; wasm?: RawBindings.InitInput | Promise | { module_or_path: RawBindings.InitInput | Promise }; logger?: (event: MTPLogEvent) => void; @@ -185,12 +186,7 @@ function toBigInt(value) { } function generateKeyringBytes() { - const generated = ed25519_generate(); - try { - return keyring_from_ed25519(generated.secretKey, generated.publicKey); - } finally { - generated.signer?.free?.(); - } + return keyring_generate(); } function serializeCredentials(credentials) { @@ -247,6 +243,30 @@ function validateOptions(options) { } } } + if (options.maxMessageSize != null && (!Number.isSafeInteger(options.maxMessageSize) || options.maxMessageSize <= 0)) { + throw new TypeError("maxMessageSize must be a positive safe integer"); + } + if (options.authTimeoutMs != null && (!Number.isSafeInteger(options.authTimeoutMs) || options.authTimeoutMs <= 0)) { + throw new TypeError("authTimeoutMs must be a positive safe integer"); + } +} + +async function withTimeout(promise, timeoutMs, message) { + if (!timeoutMs) { + return await promise; + } + + let timeoutId; + try { + return await Promise.race([ + promise, + new Promise((_resolve, reject) => { + timeoutId = setTimeout(() => reject(new Error(message)), timeoutMs); + }), + ]); + } finally { + clearTimeout(timeoutId); + } } export class MTPClient { @@ -334,6 +354,9 @@ export class MTPClient { if (this.#options.serverCertificateHashes) { config.server_certificate_hashes = this.#options.serverCertificateHashes; } + if (this.#options.maxMessageSize != null) { + config.max_message_size = this.#options.maxMessageSize; + } return config; } @@ -345,7 +368,11 @@ export class MTPClient { const config = this.#connectionConfig(); try { - await this.raw.client.connect(config); + await withTimeout( + this.raw.client.connect(config), + this.#options.authTimeoutMs, + "connection timed out", + ); this.#startPings(0n); } finally { config.free(); @@ -362,11 +389,15 @@ export class MTPClient { const config = this.#connectionConfig(); try { - const clientId = await this.raw.client.auth_connect( - config, - this.#options.hostPublicKey, - this.#credentials.keyringBytes, - this.#credentials.clientId, + const clientId = await withTimeout( + this.raw.client.auth_connect( + config, + this.#options.hostPublicKey, + this.#credentials.keyringBytes, + this.#credentials.clientId, + ), + this.#options.authTimeoutMs, + "authentication timed out", ); this.#credentials = { ...this.#credentials, clientId }; await this.#persistCredentials(); @@ -391,10 +422,14 @@ export class MTPClient { const config = this.#connectionConfig(); try { - const clientId = await this.raw.client.auth_register( - config, - this.#options.hostPublicKey, - this.#credentials.keyringBytes, + const clientId = await withTimeout( + this.raw.client.auth_register( + config, + this.#options.hostPublicKey, + this.#credentials.keyringBytes, + ), + this.#options.authTimeoutMs, + "authentication timed out", ); this.#credentials = { ...this.#credentials, clientId }; await this.#persistCredentials(); diff --git a/tsconfig.json b/tsconfig.json index 1664c17..5a697e9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,8 @@ "outDir": "dist", "rootDir": "src", "baseUrl": ".", + "types": ["node"], + "ignoreDeprecations": "6.0", "paths": { "mtp/raw": ["src/raw/index.ts"], "mtp/type-map": ["src/type-map/index.ts"] diff --git a/type-map/build.rs b/type-map/build.rs index 91c342e..9a0fafb 100755 --- a/type-map/build.rs +++ b/type-map/build.rs @@ -1026,11 +1026,7 @@ fn generate_id_display_impls(out: &mut String) { " fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {{" ) .unwrap(); - writeln!( - out, - " match communication_type_name(self.0) {{" - ) - .unwrap(); + writeln!(out, " match communication_type_name(self.0) {{").unwrap(); writeln!(out, " Some(name) => f.write_str(name),").unwrap(); writeln!( out, @@ -1048,11 +1044,7 @@ fn generate_id_display_impls(out: &mut String) { " fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {{" ) .unwrap(); - writeln!( - out, - " match data_type_name(self.0) {{" - ) - .unwrap(); + writeln!(out, " match data_type_name(self.0) {{").unwrap(); writeln!(out, " Some(name) => f.write_str(name),").unwrap(); writeln!( out, diff --git a/wasm/pkg/mtp_wasm.d.ts b/wasm/pkg/mtp_wasm.d.ts deleted file mode 100644 index 2b169dc..0000000 --- a/wasm/pkg/mtp_wasm.d.ts +++ /dev/null @@ -1,318 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ - -export interface ParsedFrame { - id?: number; - type: string; - sender?: bigint; - receiver?: bigint; - data: Record; - raw: Uint8Array; -} - - - -export class ConnectionConfig { - free(): void; - [Symbol.dispose](): void; - constructor(url: string); - client_id: bigint; - set server_certificate_hashes(value: string[]); - readonly url: string; -} - -export enum ConnectionState { - Disconnected = 0, - Connecting = 1, - Connected = 2, - Failed = 3, -} - -export class WasmChaCha20Poly1305 { - free(): void; - [Symbol.dispose](): void; - /** - * Decrypt `nonce || ciphertext` with `aad`. - */ - decrypt(ciphertext: Uint8Array, aad: Uint8Array): Uint8Array; - /** - * Encrypt `plaintext` with `aad`. - * Returns `nonce || ciphertext`. - */ - encrypt(plaintext: Uint8Array, aad: Uint8Array): Uint8Array; - /** - * Create a new cipher with a 32-byte key. - */ - constructor(key: Uint8Array); -} - -export class WasmClient { - free(): void; - [Symbol.dispose](): void; - /** - * Authenticated login with an existing client ID. - * Exchanges Identification + signatures and verifies the host response. - * - * - `host_public_key_bytes`: serialized PublicKeyBundle from the server - * - `keyring_bytes`: serialized Keyring of this client (must match `client_id`) - * - `client_id`: previously assigned client ID - * - * Returns the confirmed (same) client ID on success. - */ - auth_connect(config: ConnectionConfig, host_public_key_bytes: Uint8Array, keyring_bytes: Uint8Array, client_id: bigint): Promise; - /** - * Authenticated registration with a fresh keyring. - * The server assigns a new client ID. - * - * - `host_public_key_bytes`: serialized PublicKeyBundle from the server - * - `keyring_bytes`: serialized Keyring (must include ed25519 secret key) - * - * Returns the newly assigned client ID. - */ - auth_register(config: ConnectionConfig, host_public_key_bytes: Uint8Array, keyring_bytes: Uint8Array): Promise; - /** - * Unauthenticated connect (sends basic Identification, enables receive loop). - */ - connect(config: ConnectionConfig): Promise; - disconnect(): void; - static is_supported(): boolean; - constructor(on_state_change: Function, on_message: Function, on_error: Function); - request(frame: Uint8Array, response_type?: string | null): Promise; - send(frame: Uint8Array): Promise; - start_protocol_pings(interval_ms: number, client_id: bigint): void; - stop_protocol_pings(): void; - subscribe(message_type: string, callback: Function): number; - unsubscribe(id: number): boolean; - readonly state: number; -} - -export class WasmEd25519Signer { - free(): void; - [Symbol.dispose](): void; - /** - * Load a signer from its 32-byte secret key. - */ - constructor(secret_key: Uint8Array); - /** - * Sign `message` and return the signature bytes. - */ - sign(message: Uint8Array): Uint8Array; - /** - * Verify `signature` against `message`. - */ - verify(message: Uint8Array, signature: Uint8Array): void; -} - -export class WasmKeyring { - private constructor(); - free(): void; - [Symbol.dispose](): void; - /** - * Deserialise a keyring from bytes. - */ - static from_bytes(bytes: Uint8Array): WasmKeyring; - /** - * Return the public half of this keyring as a bundle. - */ - public_key_bundle(): WasmPublicKeyBundle; - /** - * Serialise the keyring to bytes. - */ - to_bytes(): Uint8Array; -} - -/** - * Log severity used by the public SDK when translating raw WASM events. - */ -export enum WasmLogHint { - Info = 0, - Warning = 1, - Error = 2, -} - -export class WasmPublicKeyBundle { - private constructor(); - free(): void; - [Symbol.dispose](): void; - static from_bytes(bytes: Uint8Array): WasmPublicKeyBundle; - to_bytes(): Uint8Array; - readonly kem_public_key: Uint8Array; - readonly sig_cl_public_key: Uint8Array; - readonly sig_pq_public_key: Uint8Array; -} - -/** - * Minimal message router used by higher-level SDK subscription code. - */ -export class WasmSubscriptionRouter { - free(): void; - [Symbol.dispose](): void; - dispatch(message_type: string, message: any): boolean; - constructor(); - subscribe(message_type: string, callback: Function): void; - unsubscribe(message_type: string): boolean; -} - -/** - * Build a typed MTP frame using generated communication/data type names. - */ -export function build_frame(message_type: string, data: any, options: any): Uint8Array; - -/** - * Build a protocol-level Ping frame with description, timestamp, and optional data. - */ -export function build_ping_frame(client_id: bigint, description: string, timestamp: bigint, data: Uint8Array): Uint8Array; - -/** - * Generate a fresh Ed25519 keypair. - * - * Returns `{ signer: WasmEd25519Signer, secretKey: Uint8Array, publicKey: Uint8Array }`. - */ -export function ed25519_generate(): any; - -/** - * Standalone Ed25519 signature verification. - */ -export function ed25519_verify(public_key: Uint8Array, message: Uint8Array, signature: Uint8Array): void; - -/** - * Parse any MTP frame into the human-readable CommunicationValue display form. - */ -export function format_frame(frame: Uint8Array): string; - -/** - * Build a [`Keyring`] containing only an Ed25519 keypair (no KEM, no ML-DSA). - * - * Takes the Ed25519 secret key and public key, each 32 bytes. - * Returns the serialised keyring bytes, suitable for passing to `WasmClient.auth_register`. - */ -export function keyring_from_ed25519(secret_key: Uint8Array, public_key: Uint8Array): Uint8Array; - -export function main(): void; - -/** - * Parse an auth response frame into a JS object. - */ -export function parse_auth_response(response: Uint8Array): any; - -/** - * Parse any MTP frame into structured JavaScript data. - */ -export function parse_frame(frame: Uint8Array): ParsedFrame; - -/** - * Derive a 32-byte encryption key from `ikm` with `salt` and `context`. - */ -export function wasm_derive_encryption_key(ikm: Uint8Array, salt: Uint8Array, context: Uint8Array): Uint8Array; - -/** - * HKDF-expand: derive `len` bytes from `ikm` with `salt` and `info`. - */ -export function wasm_hkdf_expand(ikm: Uint8Array, salt: Uint8Array, info: Uint8Array, len: number): Uint8Array; - -/** - * SHA-256 digest. - */ -export function wasm_sha256(data: Uint8Array): Uint8Array; - -/** - * Double SHA-256 (SHA-256 applied twice). - */ -export function wasm_sha256_double(data: Uint8Array): Uint8Array; - -export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; - -export interface InitOutput { - readonly memory: WebAssembly.Memory; - readonly build_frame: (a: number, b: number, c: any, d: any) => [number, number, number, number]; - readonly build_ping_frame: (a: bigint, b: number, c: number, d: bigint, e: number, f: number) => [number, number, number, number]; - readonly format_frame: (a: number, b: number) => [number, number, number, number]; - readonly parse_auth_response: (a: number, b: number) => [number, number, number]; - readonly parse_frame: (a: number, b: number) => [number, number, number]; - readonly __wbg_wasmchacha20poly1305_free: (a: number, b: number) => void; - readonly __wbg_wasmed25519signer_free: (a: number, b: number) => void; - readonly __wbg_wasmkeyring_free: (a: number, b: number) => void; - readonly __wbg_wasmpublickeybundle_free: (a: number, b: number) => void; - readonly ed25519_generate: () => [number, number, number]; - readonly ed25519_verify: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; - readonly keyring_from_ed25519: (a: number, b: number, c: number, d: number) => [number, number, number, number]; - readonly wasm_derive_encryption_key: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number]; - readonly wasm_hkdf_expand: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number]; - readonly wasm_sha256: (a: number, b: number) => [number, number]; - readonly wasm_sha256_double: (a: number, b: number) => [number, number]; - readonly wasmchacha20poly1305_decrypt: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; - readonly wasmchacha20poly1305_encrypt: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; - readonly wasmchacha20poly1305_new: (a: number, b: number) => [number, number, number]; - readonly wasmed25519signer_new: (a: number, b: number) => [number, number, number]; - readonly wasmed25519signer_sign: (a: number, b: number, c: number) => [number, number, number, number]; - readonly wasmed25519signer_verify: (a: number, b: number, c: number, d: number, e: number) => [number, number]; - readonly wasmkeyring_from_bytes: (a: number, b: number) => [number, number, number]; - readonly wasmkeyring_public_key_bundle: (a: number) => number; - readonly wasmkeyring_to_bytes: (a: number) => [number, number]; - readonly wasmpublickeybundle_from_bytes: (a: number, b: number) => [number, number, number]; - readonly wasmpublickeybundle_kem_public_key: (a: number) => [number, number]; - readonly wasmpublickeybundle_sig_cl_public_key: (a: number) => [number, number]; - readonly wasmpublickeybundle_sig_pq_public_key: (a: number) => [number, number]; - readonly wasmpublickeybundle_to_bytes: (a: number) => [number, number]; - readonly __wbg_wasmclient_free: (a: number, b: number) => void; - readonly wasmclient_auth_connect: (a: number, b: number, c: number, d: number, e: number, f: number, g: bigint) => any; - readonly wasmclient_auth_register: (a: number, b: number, c: number, d: number, e: number, f: number) => any; - readonly wasmclient_connect: (a: number, b: number) => any; - readonly wasmclient_disconnect: (a: number) => void; - readonly wasmclient_is_supported: () => number; - readonly wasmclient_new: (a: any, b: any, c: any) => number; - readonly wasmclient_request: (a: number, b: number, c: number, d: number, e: number) => any; - readonly wasmclient_send: (a: number, b: number, c: number) => any; - readonly wasmclient_start_protocol_pings: (a: number, b: number, c: bigint) => [number, number]; - readonly wasmclient_state: (a: number) => number; - readonly wasmclient_stop_protocol_pings: (a: number) => void; - readonly wasmclient_subscribe: (a: number, b: number, c: number, d: any) => number; - readonly wasmclient_unsubscribe: (a: number, b: number) => number; - readonly __wbg_wasmsubscriptionrouter_free: (a: number, b: number) => void; - readonly main: () => void; - readonly wasmsubscriptionrouter_dispatch: (a: number, b: number, c: number, d: any) => number; - readonly wasmsubscriptionrouter_new: () => number; - readonly wasmsubscriptionrouter_subscribe: (a: number, b: number, c: number, d: any) => void; - readonly wasmsubscriptionrouter_unsubscribe: (a: number, b: number, c: number) => number; - readonly __wbg_connectionconfig_free: (a: number, b: number) => void; - readonly connectionconfig_client_id: (a: number) => bigint; - readonly connectionconfig_new: (a: number, b: number) => number; - readonly connectionconfig_set_client_id: (a: number, b: bigint) => void; - readonly connectionconfig_set_server_certificate_hashes: (a: number, b: number, c: number) => void; - readonly connectionconfig_url: (a: number) => [number, number]; - readonly wasm_bindgen__convert__closures_____invoke__h6588d25cdde23584: (a: number, b: number, c: any) => [number, number]; - readonly wasm_bindgen__convert__closures_____invoke__h4bf2427f775cf424: (a: number, b: number, c: any, d: any) => void; - readonly wasm_bindgen__convert__closures_____invoke__h3c511b580d027299: (a: number, b: number, c: any) => void; - readonly wasm_bindgen__convert__closures_____invoke__h99ead69e8d7f5bae: (a: number, b: number) => void; - readonly __wbindgen_malloc: (a: number, b: number) => number; - readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; - readonly __wbindgen_exn_store: (a: number) => void; - readonly __externref_table_alloc: () => number; - readonly __wbindgen_externrefs: WebAssembly.Table; - readonly __wbindgen_free: (a: number, b: number, c: number) => void; - readonly __wbindgen_destroy_closure: (a: number, b: number) => void; - readonly __externref_table_dealloc: (a: number) => void; - readonly __wbindgen_start: () => void; -} - -export type SyncInitInput = BufferSource | WebAssembly.Module; - -/** - * Instantiates the given `module`, which can either be bytes or - * a precompiled `WebAssembly.Module`. - * - * @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated. - * - * @returns {InitOutput} - */ -export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput; - -/** - * If `module_or_path` is {RequestInfo} or {URL}, makes a request and - * for everything else, calls `WebAssembly.instantiate` directly. - * - * @param {{ module_or_path: InitInput | Promise }} module_or_path - Passing `InitInput` directly is deprecated. - * - * @returns {Promise} - */ -export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise } | InitInput | Promise): Promise; diff --git a/wasm/pkg/mtp_wasm.js b/wasm/pkg/mtp_wasm.js deleted file mode 100644 index 86dda08..0000000 --- a/wasm/pkg/mtp_wasm.js +++ /dev/null @@ -1,1483 +0,0 @@ -/* @ts-self-types="./mtp_wasm.d.ts" */ - -export class ConnectionConfig { - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ConnectionConfigFinalization.unregister(this); - return ptr; - } - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_connectionconfig_free(ptr, 0); - } - /** - * @returns {bigint} - */ - get client_id() { - const ret = wasm.connectionconfig_client_id(this.__wbg_ptr); - return BigInt.asUintN(64, ret); - } - /** - * @param {string} url - */ - constructor(url) { - const ptr0 = passStringToWasm0(url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.connectionconfig_new(ptr0, len0); - this.__wbg_ptr = ret; - ConnectionConfigFinalization.register(this, this.__wbg_ptr, this); - return this; - } - /** - * @param {bigint} id - */ - set client_id(id) { - wasm.connectionconfig_set_client_id(this.__wbg_ptr, id); - } - /** - * @param {string[]} hashes - */ - set server_certificate_hashes(hashes) { - const ptr0 = passArrayJsValueToWasm0(hashes, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - wasm.connectionconfig_set_server_certificate_hashes(this.__wbg_ptr, ptr0, len0); - } - /** - * @returns {string} - */ - get url() { - let deferred1_0; - let deferred1_1; - try { - const ret = wasm.connectionconfig_url(this.__wbg_ptr); - deferred1_0 = ret[0]; - deferred1_1 = ret[1]; - return getStringFromWasm0(ret[0], ret[1]); - } finally { - wasm.__wbindgen_free(deferred1_0, deferred1_1, 1); - } - } -} -if (Symbol.dispose) ConnectionConfig.prototype[Symbol.dispose] = ConnectionConfig.prototype.free; - -/** - * @enum {0 | 1 | 2 | 3} - */ -export const ConnectionState = Object.freeze({ - Disconnected: 0, "0": "Disconnected", - Connecting: 1, "1": "Connecting", - Connected: 2, "2": "Connected", - Failed: 3, "3": "Failed", -}); - -export class WasmChaCha20Poly1305 { - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - WasmChaCha20Poly1305Finalization.unregister(this); - return ptr; - } - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_wasmchacha20poly1305_free(ptr, 0); - } - /** - * Decrypt `nonce || ciphertext` with `aad`. - * @param {Uint8Array} ciphertext - * @param {Uint8Array} aad - * @returns {Uint8Array} - */ - decrypt(ciphertext, aad) { - const ptr0 = passArray8ToWasm0(ciphertext, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(aad, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.wasmchacha20poly1305_decrypt(this.__wbg_ptr, ptr0, len0, ptr1, len1); - if (ret[3]) { - throw takeFromExternrefTable0(ret[2]); - } - var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v3; - } - /** - * Encrypt `plaintext` with `aad`. - * Returns `nonce || ciphertext`. - * @param {Uint8Array} plaintext - * @param {Uint8Array} aad - * @returns {Uint8Array} - */ - encrypt(plaintext, aad) { - const ptr0 = passArray8ToWasm0(plaintext, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(aad, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.wasmchacha20poly1305_encrypt(this.__wbg_ptr, ptr0, len0, ptr1, len1); - if (ret[3]) { - throw takeFromExternrefTable0(ret[2]); - } - var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v3; - } - /** - * Create a new cipher with a 32-byte key. - * @param {Uint8Array} key - */ - constructor(key) { - const ptr0 = passArray8ToWasm0(key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasmchacha20poly1305_new(ptr0, len0); - if (ret[2]) { - throw takeFromExternrefTable0(ret[1]); - } - this.__wbg_ptr = ret[0]; - WasmChaCha20Poly1305Finalization.register(this, this.__wbg_ptr, this); - return this; - } -} -if (Symbol.dispose) WasmChaCha20Poly1305.prototype[Symbol.dispose] = WasmChaCha20Poly1305.prototype.free; - -export class WasmClient { - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - WasmClientFinalization.unregister(this); - return ptr; - } - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_wasmclient_free(ptr, 0); - } - /** - * Authenticated login with an existing client ID. - * Exchanges Identification + signatures and verifies the host response. - * - * - `host_public_key_bytes`: serialized PublicKeyBundle from the server - * - `keyring_bytes`: serialized Keyring of this client (must match `client_id`) - * - `client_id`: previously assigned client ID - * - * Returns the confirmed (same) client ID on success. - * @param {ConnectionConfig} config - * @param {Uint8Array} host_public_key_bytes - * @param {Uint8Array} keyring_bytes - * @param {bigint} client_id - * @returns {Promise} - */ - auth_connect(config, host_public_key_bytes, keyring_bytes, client_id) { - _assertClass(config, ConnectionConfig); - const ptr0 = passArray8ToWasm0(host_public_key_bytes, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(keyring_bytes, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.wasmclient_auth_connect(this.__wbg_ptr, config.__wbg_ptr, ptr0, len0, ptr1, len1, client_id); - return ret; - } - /** - * Authenticated registration with a fresh keyring. - * The server assigns a new client ID. - * - * - `host_public_key_bytes`: serialized PublicKeyBundle from the server - * - `keyring_bytes`: serialized Keyring (must include ed25519 secret key) - * - * Returns the newly assigned client ID. - * @param {ConnectionConfig} config - * @param {Uint8Array} host_public_key_bytes - * @param {Uint8Array} keyring_bytes - * @returns {Promise} - */ - auth_register(config, host_public_key_bytes, keyring_bytes) { - _assertClass(config, ConnectionConfig); - const ptr0 = passArray8ToWasm0(host_public_key_bytes, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(keyring_bytes, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.wasmclient_auth_register(this.__wbg_ptr, config.__wbg_ptr, ptr0, len0, ptr1, len1); - return ret; - } - /** - * Unauthenticated connect (sends basic Identification, enables receive loop). - * @param {ConnectionConfig} config - * @returns {Promise} - */ - connect(config) { - _assertClass(config, ConnectionConfig); - const ret = wasm.wasmclient_connect(this.__wbg_ptr, config.__wbg_ptr); - return ret; - } - disconnect() { - wasm.wasmclient_disconnect(this.__wbg_ptr); - } - /** - * @returns {boolean} - */ - static is_supported() { - const ret = wasm.wasmclient_is_supported(); - return ret !== 0; - } - /** - * @param {Function} on_state_change - * @param {Function} on_message - * @param {Function} on_error - */ - constructor(on_state_change, on_message, on_error) { - const ret = wasm.wasmclient_new(on_state_change, on_message, on_error); - this.__wbg_ptr = ret; - WasmClientFinalization.register(this, this.__wbg_ptr, this); - return this; - } - /** - * @param {Uint8Array} frame - * @param {string | null} [response_type] - * @returns {Promise} - */ - request(frame, response_type) { - const ptr0 = passArray8ToWasm0(frame, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - var ptr1 = isLikeNone(response_type) ? 0 : passStringToWasm0(response_type, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len1 = WASM_VECTOR_LEN; - const ret = wasm.wasmclient_request(this.__wbg_ptr, ptr0, len0, ptr1, len1); - return ret; - } - /** - * @param {Uint8Array} frame - * @returns {Promise} - */ - send(frame) { - const ptr0 = passArray8ToWasm0(frame, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasmclient_send(this.__wbg_ptr, ptr0, len0); - return ret; - } - /** - * @param {number} interval_ms - * @param {bigint} client_id - */ - start_protocol_pings(interval_ms, client_id) { - const ret = wasm.wasmclient_start_protocol_pings(this.__wbg_ptr, interval_ms, client_id); - if (ret[1]) { - throw takeFromExternrefTable0(ret[0]); - } - } - /** - * @returns {number} - */ - get state() { - const ret = wasm.wasmclient_state(this.__wbg_ptr); - return ret; - } - stop_protocol_pings() { - wasm.wasmclient_stop_protocol_pings(this.__wbg_ptr); - } - /** - * @param {string} message_type - * @param {Function} callback - * @returns {number} - */ - subscribe(message_type, callback) { - const ptr0 = passStringToWasm0(message_type, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasmclient_subscribe(this.__wbg_ptr, ptr0, len0, callback); - return ret >>> 0; - } - /** - * @param {number} id - * @returns {boolean} - */ - unsubscribe(id) { - const ret = wasm.wasmclient_unsubscribe(this.__wbg_ptr, id); - return ret !== 0; - } -} -if (Symbol.dispose) WasmClient.prototype[Symbol.dispose] = WasmClient.prototype.free; - -export class WasmEd25519Signer { - static __wrap(ptr) { - const obj = Object.create(WasmEd25519Signer.prototype); - obj.__wbg_ptr = ptr; - WasmEd25519SignerFinalization.register(obj, obj.__wbg_ptr, obj); - return obj; - } - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - WasmEd25519SignerFinalization.unregister(this); - return ptr; - } - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_wasmed25519signer_free(ptr, 0); - } - /** - * Load a signer from its 32-byte secret key. - * @param {Uint8Array} secret_key - */ - constructor(secret_key) { - const ptr0 = passArray8ToWasm0(secret_key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasmed25519signer_new(ptr0, len0); - if (ret[2]) { - throw takeFromExternrefTable0(ret[1]); - } - this.__wbg_ptr = ret[0]; - WasmEd25519SignerFinalization.register(this, this.__wbg_ptr, this); - return this; - } - /** - * Sign `message` and return the signature bytes. - * @param {Uint8Array} message - * @returns {Uint8Array} - */ - sign(message) { - const ptr0 = passArray8ToWasm0(message, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasmed25519signer_sign(this.__wbg_ptr, ptr0, len0); - if (ret[3]) { - throw takeFromExternrefTable0(ret[2]); - } - var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v2; - } - /** - * Verify `signature` against `message`. - * @param {Uint8Array} message - * @param {Uint8Array} signature - */ - verify(message, signature) { - const ptr0 = passArray8ToWasm0(message, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(signature, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.wasmed25519signer_verify(this.__wbg_ptr, ptr0, len0, ptr1, len1); - if (ret[1]) { - throw takeFromExternrefTable0(ret[0]); - } - } -} -if (Symbol.dispose) WasmEd25519Signer.prototype[Symbol.dispose] = WasmEd25519Signer.prototype.free; - -export class WasmKeyring { - static __wrap(ptr) { - const obj = Object.create(WasmKeyring.prototype); - obj.__wbg_ptr = ptr; - WasmKeyringFinalization.register(obj, obj.__wbg_ptr, obj); - return obj; - } - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - WasmKeyringFinalization.unregister(this); - return ptr; - } - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_wasmkeyring_free(ptr, 0); - } - /** - * Deserialise a keyring from bytes. - * @param {Uint8Array} bytes - * @returns {WasmKeyring} - */ - static from_bytes(bytes) { - const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasmkeyring_from_bytes(ptr0, len0); - if (ret[2]) { - throw takeFromExternrefTable0(ret[1]); - } - return WasmKeyring.__wrap(ret[0]); - } - /** - * Return the public half of this keyring as a bundle. - * @returns {WasmPublicKeyBundle} - */ - public_key_bundle() { - const ret = wasm.wasmkeyring_public_key_bundle(this.__wbg_ptr); - return WasmPublicKeyBundle.__wrap(ret); - } - /** - * Serialise the keyring to bytes. - * @returns {Uint8Array} - */ - to_bytes() { - const ret = wasm.wasmkeyring_to_bytes(this.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; - } -} -if (Symbol.dispose) WasmKeyring.prototype[Symbol.dispose] = WasmKeyring.prototype.free; - -/** - * Log severity used by the public SDK when translating raw WASM events. - * @enum {0 | 1 | 2} - */ -export const WasmLogHint = Object.freeze({ - Info: 0, "0": "Info", - Warning: 1, "1": "Warning", - Error: 2, "2": "Error", -}); - -export class WasmPublicKeyBundle { - static __wrap(ptr) { - const obj = Object.create(WasmPublicKeyBundle.prototype); - obj.__wbg_ptr = ptr; - WasmPublicKeyBundleFinalization.register(obj, obj.__wbg_ptr, obj); - return obj; - } - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - WasmPublicKeyBundleFinalization.unregister(this); - return ptr; - } - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_wasmpublickeybundle_free(ptr, 0); - } - /** - * @param {Uint8Array} bytes - * @returns {WasmPublicKeyBundle} - */ - static from_bytes(bytes) { - const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasmpublickeybundle_from_bytes(ptr0, len0); - if (ret[2]) { - throw takeFromExternrefTable0(ret[1]); - } - return WasmPublicKeyBundle.__wrap(ret[0]); - } - /** - * @returns {Uint8Array} - */ - get kem_public_key() { - const ret = wasm.wasmpublickeybundle_kem_public_key(this.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; - } - /** - * @returns {Uint8Array} - */ - get sig_cl_public_key() { - const ret = wasm.wasmpublickeybundle_sig_cl_public_key(this.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; - } - /** - * @returns {Uint8Array} - */ - get sig_pq_public_key() { - const ret = wasm.wasmpublickeybundle_sig_pq_public_key(this.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; - } - /** - * @returns {Uint8Array} - */ - to_bytes() { - const ret = wasm.wasmpublickeybundle_to_bytes(this.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; - } -} -if (Symbol.dispose) WasmPublicKeyBundle.prototype[Symbol.dispose] = WasmPublicKeyBundle.prototype.free; - -/** - * Minimal message router used by higher-level SDK subscription code. - */ -export class WasmSubscriptionRouter { - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - WasmSubscriptionRouterFinalization.unregister(this); - return ptr; - } - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_wasmsubscriptionrouter_free(ptr, 0); - } - /** - * @param {string} message_type - * @param {any} message - * @returns {boolean} - */ - dispatch(message_type, message) { - const ptr0 = passStringToWasm0(message_type, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasmsubscriptionrouter_dispatch(this.__wbg_ptr, ptr0, len0, message); - return ret !== 0; - } - constructor() { - const ret = wasm.wasmsubscriptionrouter_new(); - this.__wbg_ptr = ret; - WasmSubscriptionRouterFinalization.register(this, this.__wbg_ptr, this); - return this; - } - /** - * @param {string} message_type - * @param {Function} callback - */ - subscribe(message_type, callback) { - const ptr0 = passStringToWasm0(message_type, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - wasm.wasmsubscriptionrouter_subscribe(this.__wbg_ptr, ptr0, len0, callback); - } - /** - * @param {string} message_type - * @returns {boolean} - */ - unsubscribe(message_type) { - const ptr0 = passStringToWasm0(message_type, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasmsubscriptionrouter_unsubscribe(this.__wbg_ptr, ptr0, len0); - return ret !== 0; - } -} -if (Symbol.dispose) WasmSubscriptionRouter.prototype[Symbol.dispose] = WasmSubscriptionRouter.prototype.free; - -/** - * Build a typed MTP frame using generated communication/data type names. - * @param {string} message_type - * @param {any} data - * @param {any} options - * @returns {Uint8Array} - */ -export function build_frame(message_type, data, options) { - const ptr0 = passStringToWasm0(message_type, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.build_frame(ptr0, len0, data, options); - if (ret[3]) { - throw takeFromExternrefTable0(ret[2]); - } - var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v2; -} - -/** - * Build a protocol-level Ping frame with description, timestamp, and optional data. - * @param {bigint} client_id - * @param {string} description - * @param {bigint} timestamp - * @param {Uint8Array} data - * @returns {Uint8Array} - */ -export function build_ping_frame(client_id, description, timestamp, data) { - const ptr0 = passStringToWasm0(description, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.build_ping_frame(client_id, ptr0, len0, timestamp, ptr1, len1); - if (ret[3]) { - throw takeFromExternrefTable0(ret[2]); - } - var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v3; -} - -/** - * Generate a fresh Ed25519 keypair. - * - * Returns `{ signer: WasmEd25519Signer, secretKey: Uint8Array, publicKey: Uint8Array }`. - * @returns {any} - */ -export function ed25519_generate() { - const ret = wasm.ed25519_generate(); - if (ret[2]) { - throw takeFromExternrefTable0(ret[1]); - } - return takeFromExternrefTable0(ret[0]); -} - -/** - * Standalone Ed25519 signature verification. - * @param {Uint8Array} public_key - * @param {Uint8Array} message - * @param {Uint8Array} signature - */ -export function ed25519_verify(public_key, message, signature) { - const ptr0 = passArray8ToWasm0(public_key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(message, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(signature, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ret = wasm.ed25519_verify(ptr0, len0, ptr1, len1, ptr2, len2); - if (ret[1]) { - throw takeFromExternrefTable0(ret[0]); - } -} - -/** - * Parse any MTP frame into the human-readable CommunicationValue display form. - * @param {Uint8Array} frame - * @returns {string} - */ -export function format_frame(frame) { - let deferred3_0; - let deferred3_1; - try { - const ptr0 = passArray8ToWasm0(frame, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.format_frame(ptr0, len0); - var ptr2 = ret[0]; - var len2 = ret[1]; - if (ret[3]) { - ptr2 = 0; len2 = 0; - throw takeFromExternrefTable0(ret[2]); - } - deferred3_0 = ptr2; - deferred3_1 = len2; - return getStringFromWasm0(ptr2, len2); - } finally { - wasm.__wbindgen_free(deferred3_0, deferred3_1, 1); - } -} - -/** - * Build a [`Keyring`] containing only an Ed25519 keypair (no KEM, no ML-DSA). - * - * Takes the Ed25519 secret key and public key, each 32 bytes. - * Returns the serialised keyring bytes, suitable for passing to `WasmClient.auth_register`. - * @param {Uint8Array} secret_key - * @param {Uint8Array} public_key - * @returns {Uint8Array} - */ -export function keyring_from_ed25519(secret_key, public_key) { - const ptr0 = passArray8ToWasm0(secret_key, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(public_key, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.keyring_from_ed25519(ptr0, len0, ptr1, len1); - if (ret[3]) { - throw takeFromExternrefTable0(ret[2]); - } - var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v3; -} - -export function main() { - wasm.main(); -} - -/** - * Parse an auth response frame into a JS object. - * @param {Uint8Array} response - * @returns {any} - */ -export function parse_auth_response(response) { - const ptr0 = passArray8ToWasm0(response, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.parse_auth_response(ptr0, len0); - if (ret[2]) { - throw takeFromExternrefTable0(ret[1]); - } - return takeFromExternrefTable0(ret[0]); -} - -/** - * Parse any MTP frame into structured JavaScript data. - * @param {Uint8Array} frame - * @returns {ParsedFrame} - */ -export function parse_frame(frame) { - const ptr0 = passArray8ToWasm0(frame, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.parse_frame(ptr0, len0); - if (ret[2]) { - throw takeFromExternrefTable0(ret[1]); - } - return takeFromExternrefTable0(ret[0]); -} - -/** - * Derive a 32-byte encryption key from `ikm` with `salt` and `context`. - * @param {Uint8Array} ikm - * @param {Uint8Array} salt - * @param {Uint8Array} context - * @returns {Uint8Array} - */ -export function wasm_derive_encryption_key(ikm, salt, context) { - const ptr0 = passArray8ToWasm0(ikm, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(salt, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(context, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ret = wasm.wasm_derive_encryption_key(ptr0, len0, ptr1, len1, ptr2, len2); - if (ret[3]) { - throw takeFromExternrefTable0(ret[2]); - } - var v4 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v4; -} - -/** - * HKDF-expand: derive `len` bytes from `ikm` with `salt` and `info`. - * @param {Uint8Array} ikm - * @param {Uint8Array} salt - * @param {Uint8Array} info - * @param {number} len - * @returns {Uint8Array} - */ -export function wasm_hkdf_expand(ikm, salt, info, len) { - const ptr0 = passArray8ToWasm0(ikm, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(salt, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(info, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ret = wasm.wasm_hkdf_expand(ptr0, len0, ptr1, len1, ptr2, len2, len); - if (ret[3]) { - throw takeFromExternrefTable0(ret[2]); - } - var v4 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v4; -} - -/** - * SHA-256 digest. - * @param {Uint8Array} data - * @returns {Uint8Array} - */ -export function wasm_sha256(data) { - const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasm_sha256(ptr0, len0); - var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v2; -} - -/** - * Double SHA-256 (SHA-256 applied twice). - * @param {Uint8Array} data - * @returns {Uint8Array} - */ -export function wasm_sha256_double(data) { - const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.wasm_sha256_double(ptr0, len0); - var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v2; -} -function __wbg_get_imports() { - const import0 = { - __proto__: null, - __wbg_BigInt_ff69cca7a537413a: function(arg0, arg1) { - const ret = BigInt(getStringFromWasm0(arg0, arg1)); - return ret; - }, - __wbg___wbindgen_boolean_get_fa956cfa2d1bd751: function(arg0) { - const v = arg0; - const ret = typeof(v) === 'boolean' ? v : undefined; - return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0; - }, - __wbg___wbindgen_debug_string_c25d447a39f5578f: function(arg0, arg1) { - const ret = debugString(arg1); - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len1 = WASM_VECTOR_LEN; - getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); - getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); - }, - __wbg___wbindgen_is_function_1ff95bcc5517c252: function(arg0) { - const ret = typeof(arg0) === 'function'; - return ret; - }, - __wbg___wbindgen_is_null_ea9085d691f535d3: function(arg0) { - const ret = arg0 === null; - return ret; - }, - __wbg___wbindgen_is_object_a27215656b807791: function(arg0) { - const val = arg0; - const ret = typeof(val) === 'object' && val !== null; - return ret; - }, - __wbg___wbindgen_is_string_ea5e6cc2e4141dfe: function(arg0) { - const ret = typeof(arg0) === 'string'; - return ret; - }, - __wbg___wbindgen_is_undefined_c05833b95a3cf397: function(arg0) { - const ret = arg0 === undefined; - return ret; - }, - __wbg___wbindgen_number_get_394265ed1e1b84ee: function(arg0, arg1) { - const obj = arg1; - const ret = typeof(obj) === 'number' ? obj : undefined; - getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true); - getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true); - }, - __wbg___wbindgen_string_get_b0ca35b86a603356: function(arg0, arg1) { - const obj = arg1; - const ret = typeof(obj) === 'string' ? obj : undefined; - var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len1 = WASM_VECTOR_LEN; - getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); - getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); - }, - __wbg___wbindgen_throw_344f42d3211c4765: function(arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }, - __wbg___wbindgen_typeof_b1bf2ff71f77b13e: function(arg0) { - const ret = typeof arg0; - return ret; - }, - __wbg__wbg_cb_unref_fffb441def202758: function(arg0) { - arg0._wbg_cb_unref(); - }, - __wbg_call_8a2dd23819f8a60a: function() { return handleError(function (arg0, arg1) { - const ret = arg0.call(arg1); - return ret; - }, arguments); }, - __wbg_call_a6e5c5dce5018821: function() { return handleError(function (arg0, arg1, arg2) { - const ret = arg0.call(arg1, arg2); - return ret; - }, arguments); }, - __wbg_call_e3b662382210db98: function() { return handleError(function (arg0, arg1, arg2, arg3) { - const ret = arg0.call(arg1, arg2, arg3); - return ret; - }, arguments); }, - __wbg_construct_4e1a16de27aea5b9: function() { return handleError(function (arg0, arg1) { - const ret = Reflect.construct(arg0, arg1); - return ret; - }, arguments); }, - __wbg_crypto_38df2bab126b63dc: function(arg0) { - const ret = arg0.crypto; - return ret; - }, - __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) { - let deferred0_0; - let deferred0_1; - try { - deferred0_0 = arg0; - deferred0_1 = arg1; - console.error(getStringFromWasm0(arg0, arg1)); - } finally { - wasm.__wbindgen_free(deferred0_0, deferred0_1, 1); - } - }, - __wbg_from_13e323c65fc8f464: function(arg0) { - const ret = Array.from(arg0); - return ret; - }, - __wbg_getRandomValues_c44a50d8cfdaebeb: function() { return handleError(function (arg0, arg1) { - arg0.getRandomValues(arg1); - }, arguments); }, - __wbg_getRandomValues_cc7f052a444bb2ce: function() { return handleError(function (arg0, arg1) { - globalThis.crypto.getRandomValues(getArrayU8FromWasm0(arg0, arg1)); - }, arguments); }, - __wbg_get_78f252d074a84d0b: function() { return handleError(function (arg0, arg1) { - const ret = Reflect.get(arg0, arg1); - return ret; - }, arguments); }, - __wbg_get_unchecked_6e0ad6d2a41b06f6: function(arg0, arg1) { - const ret = arg0[arg1 >>> 0]; - return ret; - }, - __wbg_has_8374cf06984d8bfc: function() { return handleError(function (arg0, arg1) { - const ret = Reflect.has(arg0, arg1); - return ret; - }, arguments); }, - __wbg_instanceof_Promise_4cb210c0b8f8c959: function(arg0) { - let result; - try { - result = arg0 instanceof Promise; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }, - __wbg_instanceof_Uint8Array_309b927aaf7a3fc7: function(arg0) { - let result; - try { - result = arg0 instanceof Uint8Array; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }, - __wbg_isArray_0677c962b281d01a: function(arg0) { - const ret = Array.isArray(arg0); - return ret; - }, - __wbg_keys_58421f8f96795607: function(arg0) { - const ret = Object.keys(arg0); - return ret; - }, - __wbg_length_1f0964f4a5e2c6d8: function(arg0) { - const ret = arg0.length; - return ret; - }, - __wbg_length_370319915dc99107: function(arg0) { - const ret = arg0.length; - return ret; - }, - __wbg_msCrypto_bd5a034af96bcba6: function(arg0) { - const ret = arg0.msCrypto; - return ret; - }, - __wbg_new_227d7c05414eb861: function() { - const ret = new Error(); - return ret; - }, - __wbg_new_32b398fb48b6d94a: function() { - const ret = new Array(); - return ret; - }, - __wbg_new_cd45aabdf6073e84: function(arg0) { - const ret = new Uint8Array(arg0); - return ret; - }, - __wbg_new_da52cf8fe3429cb2: function() { - const ret = new Object(); - return ret; - }, - __wbg_new_from_slice_77cdfb7977362f3c: function(arg0, arg1) { - const ret = new Uint8Array(getArrayU8FromWasm0(arg0, arg1)); - return ret; - }, - __wbg_new_typed_1824d93f294193e5: function(arg0, arg1) { - try { - var state0 = {a: arg0, b: arg1}; - var cb0 = (arg0, arg1) => { - const a = state0.a; - state0.a = 0; - try { - return wasm_bindgen__convert__closures_____invoke__h4bf2427f775cf424(a, state0.b, arg0, arg1); - } finally { - state0.a = a; - } - }; - const ret = new Promise(cb0); - return ret; - } finally { - state0.a = 0; - } - }, - __wbg_new_with_length_e6785c33c8e4cce8: function(arg0) { - const ret = new Uint8Array(arg0 >>> 0); - return ret; - }, - __wbg_node_84ea875411254db1: function(arg0) { - const ret = arg0.node; - return ret; - }, - __wbg_now_86c0d4ba3fa605b8: function() { - const ret = Date.now(); - return ret; - }, - __wbg_process_44c7a14e11e9f69e: function(arg0) { - const ret = arg0.process; - return ret; - }, - __wbg_prototypesetcall_4770620bbe4688a0: function(arg0, arg1, arg2) { - Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2); - }, - __wbg_push_d2ae3af0c1217ae6: function(arg0, arg1) { - const ret = arg0.push(arg1); - return ret; - }, - __wbg_queueMicrotask_0ab5b2d2393e99b9: function(arg0) { - const ret = arg0.queueMicrotask; - return ret; - }, - __wbg_queueMicrotask_6a09b7bc46549209: function(arg0) { - queueMicrotask(arg0); - }, - __wbg_randomFillSync_6c25eac9869eb53c: function() { return handleError(function (arg0, arg1) { - arg0.randomFillSync(arg1); - }, arguments); }, - __wbg_require_b4edbdcf3e2a1ef0: function() { return handleError(function () { - const ret = module.require; - return ret; - }, arguments); }, - __wbg_resolve_2191a4dfe481c25b: function(arg0) { - const ret = Promise.resolve(arg0); - return ret; - }, - __wbg_set_8535240470bf2500: function() { return handleError(function (arg0, arg1, arg2) { - const ret = Reflect.set(arg0, arg1, arg2); - return ret; - }, arguments); }, - __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) { - const ret = arg1.stack; - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len1 = WASM_VECTOR_LEN; - getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); - getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); - }, - __wbg_static_accessor_GLOBAL_4ef717fb391d88b7: function() { - const ret = typeof global === 'undefined' ? null : global; - return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); - }, - __wbg_static_accessor_GLOBAL_THIS_8d1badc68b5a74f4: function() { - const ret = typeof globalThis === 'undefined' ? null : globalThis; - return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); - }, - __wbg_static_accessor_SELF_146583524fe1469b: function() { - const ret = typeof self === 'undefined' ? null : self; - return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); - }, - __wbg_static_accessor_WINDOW_f2829a2234d7819e: function() { - const ret = typeof window === 'undefined' ? null : window; - return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); - }, - __wbg_subarray_3ed232c8a6baee09: function(arg0, arg1, arg2) { - const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0); - return ret; - }, - __wbg_then_16d107c451e9905d: function(arg0, arg1, arg2) { - const ret = arg0.then(arg1, arg2); - return ret; - }, - __wbg_then_6ec10ae38b3e92f7: function(arg0, arg1) { - const ret = arg0.then(arg1); - return ret; - }, - __wbg_toString_34387d7c1df9ca1e: function() { return handleError(function (arg0, arg1) { - const ret = arg0.toString(arg1); - return ret; - }, arguments); }, - __wbg_versions_276b2795b1c6a219: function(arg0) { - const ret = arg0.versions; - return ret; - }, - __wbg_wasmed25519signer_new: function(arg0) { - const ret = WasmEd25519Signer.__wrap(arg0); - return ret; - }, - __wbindgen_cast_0000000000000001: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 128, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h6588d25cdde23584); - return ret; - }, - __wbindgen_cast_0000000000000002: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 65, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h3c511b580d027299); - return ret; - }, - __wbindgen_cast_0000000000000003: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [], shim_idx: 63, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h99ead69e8d7f5bae); - return ret; - }, - __wbindgen_cast_0000000000000004: function(arg0) { - // Cast intrinsic for `F64 -> Externref`. - const ret = arg0; - return ret; - }, - __wbindgen_cast_0000000000000005: function(arg0, arg1) { - // Cast intrinsic for `Ref(Slice(U8)) -> NamedExternref("Uint8Array")`. - const ret = getArrayU8FromWasm0(arg0, arg1); - return ret; - }, - __wbindgen_cast_0000000000000006: function(arg0, arg1) { - // Cast intrinsic for `Ref(String) -> Externref`. - const ret = getStringFromWasm0(arg0, arg1); - return ret; - }, - __wbindgen_cast_0000000000000007: function(arg0) { - // Cast intrinsic for `U64 -> Externref`. - const ret = BigInt.asUintN(64, arg0); - return ret; - }, - __wbindgen_init_externref_table: function() { - const table = wasm.__wbindgen_externrefs; - const offset = table.grow(4); - table.set(0, undefined); - table.set(offset + 0, undefined); - table.set(offset + 1, null); - table.set(offset + 2, true); - table.set(offset + 3, false); - }, - }; - return { - __proto__: null, - "./mtp_wasm_bg.js": import0, - }; -} - -function wasm_bindgen__convert__closures_____invoke__h99ead69e8d7f5bae(arg0, arg1) { - wasm.wasm_bindgen__convert__closures_____invoke__h99ead69e8d7f5bae(arg0, arg1); -} - -function wasm_bindgen__convert__closures_____invoke__h3c511b580d027299(arg0, arg1, arg2) { - wasm.wasm_bindgen__convert__closures_____invoke__h3c511b580d027299(arg0, arg1, arg2); -} - -function wasm_bindgen__convert__closures_____invoke__h6588d25cdde23584(arg0, arg1, arg2) { - const ret = wasm.wasm_bindgen__convert__closures_____invoke__h6588d25cdde23584(arg0, arg1, arg2); - if (ret[1]) { - throw takeFromExternrefTable0(ret[0]); - } -} - -function wasm_bindgen__convert__closures_____invoke__h4bf2427f775cf424(arg0, arg1, arg2, arg3) { - wasm.wasm_bindgen__convert__closures_____invoke__h4bf2427f775cf424(arg0, arg1, arg2, arg3); -} - -const ConnectionConfigFinalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_connectionconfig_free(ptr, 1)); -const WasmChaCha20Poly1305Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_wasmchacha20poly1305_free(ptr, 1)); -const WasmClientFinalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_wasmclient_free(ptr, 1)); -const WasmEd25519SignerFinalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_wasmed25519signer_free(ptr, 1)); -const WasmKeyringFinalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_wasmkeyring_free(ptr, 1)); -const WasmPublicKeyBundleFinalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_wasmpublickeybundle_free(ptr, 1)); -const WasmSubscriptionRouterFinalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_wasmsubscriptionrouter_free(ptr, 1)); - -function addToExternrefTable0(obj) { - const idx = wasm.__externref_table_alloc(); - wasm.__wbindgen_externrefs.set(idx, obj); - return idx; -} - -function _assertClass(instance, klass) { - if (!(instance instanceof klass)) { - throw new Error(`expected instance of ${klass.name}`); - } -} - -const CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(state => wasm.__wbindgen_destroy_closure(state.a, state.b)); - -function debugString(val) { - // primitive types - const type = typeof val; - if (type == 'number' || type == 'boolean' || val == null) { - return `${val}`; - } - if (type == 'string') { - return `"${val}"`; - } - if (type == 'symbol') { - const description = val.description; - if (description == null) { - return 'Symbol'; - } else { - return `Symbol(${description})`; - } - } - if (type == 'function') { - const name = val.name; - if (typeof name == 'string' && name.length > 0) { - return `Function(${name})`; - } else { - return 'Function'; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = '['; - if (length > 0) { - debug += debugString(val[0]); - } - for(let i = 1; i < length; i++) { - debug += ', ' + debugString(val[i]); - } - debug += ']'; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches && builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == 'Object') { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return 'Object(' + JSON.stringify(val) + ')'; - } catch (_) { - return 'Object'; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; -} - -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); -} - -let cachedDataViewMemory0 = null; -function getDataViewMemory0() { - if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { - cachedDataViewMemory0 = new DataView(wasm.memory.buffer); - } - return cachedDataViewMemory0; -} - -function getStringFromWasm0(ptr, len) { - return decodeText(ptr >>> 0, len); -} - -let cachedUint8ArrayMemory0 = null; -function getUint8ArrayMemory0() { - if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { - cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8ArrayMemory0; -} - -function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - const idx = addToExternrefTable0(e); - wasm.__wbindgen_exn_store(idx); - } -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -function makeMutClosure(arg0, arg1, f) { - const state = { a: arg0, b: arg1, cnt: 1 }; - const real = (...args) => { - - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - const a = state.a; - state.a = 0; - try { - return f(a, state.b, ...args); - } finally { - state.a = a; - real._wbg_cb_unref(); - } - }; - real._wbg_cb_unref = () => { - if (--state.cnt === 0) { - wasm.__wbindgen_destroy_closure(state.a, state.b); - state.a = 0; - CLOSURE_DTORS.unregister(state); - } - }; - CLOSURE_DTORS.register(real, state, state); - return real; -} - -function passArray8ToWasm0(arg, malloc) { - const ptr = malloc(arg.length * 1, 1) >>> 0; - getUint8ArrayMemory0().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} - -function passArrayJsValueToWasm0(array, malloc) { - const ptr = malloc(array.length * 4, 4) >>> 0; - for (let i = 0; i < array.length; i++) { - const add = addToExternrefTable0(array[i]); - getDataViewMemory0().setUint32(ptr + 4 * i, add, true); - } - WASM_VECTOR_LEN = array.length; - return ptr; -} - -function passStringToWasm0(arg, malloc, realloc) { - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length, 1) >>> 0; - getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len, 1) >>> 0; - - const mem = getUint8ArrayMemory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; - const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); - const ret = cachedTextEncoder.encodeInto(arg, view); - - offset += ret.written; - ptr = realloc(ptr, len, offset, 1) >>> 0; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -function takeFromExternrefTable0(idx) { - const value = wasm.__wbindgen_externrefs.get(idx); - wasm.__externref_table_dealloc(idx); - return value; -} - -let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); -cachedTextDecoder.decode(); -const MAX_SAFARI_DECODE_BYTES = 2146435072; -let numBytesDecoded = 0; -function decodeText(ptr, len) { - numBytesDecoded += len; - if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { - cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - cachedTextDecoder.decode(); - numBytesDecoded = len; - } - return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); -} - -const cachedTextEncoder = new TextEncoder(); - -if (!('encodeInto' in cachedTextEncoder)) { - cachedTextEncoder.encodeInto = function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length - }; - }; -} - -let WASM_VECTOR_LEN = 0; - -let wasmModule, wasmInstance, wasm; -function __wbg_finalize_init(instance, module) { - wasmInstance = instance; - wasm = instance.exports; - wasmModule = module; - cachedDataViewMemory0 = null; - cachedUint8ArrayMemory0 = null; - wasm.__wbindgen_start(); - return wasm; -} - -async function __wbg_load(module, imports) { - if (typeof Response === 'function' && module instanceof Response) { - if (typeof WebAssembly.instantiateStreaming === 'function') { - try { - return await WebAssembly.instantiateStreaming(module, imports); - } catch (e) { - const validResponse = module.ok && expectedResponseType(module.type); - - if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') { - console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); - - } else { throw e; } - } - } - - const bytes = await module.arrayBuffer(); - return await WebAssembly.instantiate(bytes, imports); - } else { - const instance = await WebAssembly.instantiate(module, imports); - - if (instance instanceof WebAssembly.Instance) { - return { instance, module }; - } else { - return instance; - } - } - - function expectedResponseType(type) { - switch (type) { - case 'basic': case 'cors': case 'default': return true; - } - return false; - } -} - -function initSync(module) { - if (wasm !== undefined) return wasm; - - - if (module !== undefined) { - if (Object.getPrototypeOf(module) === Object.prototype) { - ({module} = module) - } else { - console.warn('using deprecated parameters for `initSync()`; pass a single object instead') - } - } - - const imports = __wbg_get_imports(); - if (!(module instanceof WebAssembly.Module)) { - module = new WebAssembly.Module(module); - } - const instance = new WebAssembly.Instance(module, imports); - return __wbg_finalize_init(instance, module); -} - -async function __wbg_init(module_or_path) { - if (wasm !== undefined) return wasm; - - - if (module_or_path !== undefined) { - if (Object.getPrototypeOf(module_or_path) === Object.prototype) { - ({module_or_path} = module_or_path) - } else { - console.warn('using deprecated parameters for the initialization function; pass a single object instead') - } - } - - if (module_or_path === undefined) { - module_or_path = new URL('mtp_wasm_bg.wasm', import.meta.url); - } - const imports = __wbg_get_imports(); - - if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { - module_or_path = fetch(module_or_path); - } - - const { instance, module } = await __wbg_load(await module_or_path, imports); - - return __wbg_finalize_init(instance, module); -} - -export { initSync, __wbg_init as default }; diff --git a/wasm/pkg/mtp_wasm_bg.wasm b/wasm/pkg/mtp_wasm_bg.wasm deleted file mode 100644 index 42eeb7965f4533bc134ff35657a604e3dbe31207..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394684 zcmZQbEY4+QU|?Xp!xEIhSkI8aRA0|n47nCro85XF$d2oh#ss;^IAsjsiEXGmZG z(+R8~9*E0WpTL+8A@V``8S@hu7!nvjx}k~~p?V?agC!X2K_)Wg=Yv!;g7oDxB(Q;v ztY=7I&Ie0?r0Wxy^6MG%LC(leV9L)2yADKxlz?o8YlE21SeL+3Usne*q#i`F*4Nj8 zT+LcvUkjycpmcqGJ;W>xoz*fG{6FxP{`SwL=JNMNl;s0X_V}80#795}4|d z%mO*8K7p+cWCYZ?Ak}cUv((q;=R*{MNiYG9K?sWp=1Hh7P_RRy4#Z-vug{0lbs(Ch z9_$PjNLaBzf(~p2+;^ZrfSSda4~yV@aN@{k00mTi0%ILxJ=h71`Aq+1Tm|&>b4v>1 z%M*)paIX|zsq^LBxB;F*|FwxK~CDq70F*VUN$r6i)pl-@ett^f=wJqeK(KBm=WFGX^OPeNbya z(Uh8EWNK#(k)RcHb3nP;hOXD;nOA|v&<5W`y zUJN}@E5H$-YMf+dW@Kz(WMpWNl4NPYpoL3$Nk(d3yrEf&p@Dg_iK$_#rKN#s3YK&t z1@Sn@MMg&EDdx!rrY43asYw=Qh76(@hRZ-y7ndX^XU7{S8KhX6n|>?l$4lcXk?aTW}K3YCC23-RuvTGC#Mz{ z$D5cWnYY; zK;4vE>Vv(Gdl9-y5nuJ9sQX(@pN;0;zNJ}!YNHR;YG)ctbCnVJ= ziKa%$X%=az#wJFV$w@}|RVSyIm?kDBrKFh|m>Z{Bm|*cdG?_rl9>X*POEZ%+lSI>0 zqhzxb3oK=iIwZ6TitM+8W|U@}j3viIa{)+Wd1gsQJk+(RX66>A$;QUX7O5u5 z$*C4t$`@#IC@xJ(EGkN@j5khAF)}tvwn#KfN=!{Puw>B2a3wT}g3AlD)MP`0#8hL8 zB;!;|qcn3Y<*E)OJdi4i(9FCN3rC1`29`;dM&^l$Y37N>Y022ia#-Z%m&aR}B^#ue zBqbWBC7KzSCRs4(;Bp)|_zaCxjg5?x%}mphEz(TPu*EJk|6~?JoMT{SZk}vuW|U-P zVVGiIn205Mp#fHsA6!zDnU@}KY+`HyDg_Nw(kzn`4O6ic`9_csC@x7X$xMzJn z`9<;WKK@RQKJg(Qp26`JDTYajDamFQNv4VBCTS)NTo^vn#%@ZmtB+f}p^2HPg|VrT zNm{C*iJ4^*7VWy&wL=|YlA302Xr7j2Y-yNcVUc7`yaC~!elGsu@o7dDMwW?2M#d&7 z<`#yQsaOnvhILVDaehu&YP^x5rD38;N?NLkg<-OhX%d#a2aS4A9cylpW@KuVVqk8P zXkn6Kkc1_nK~-lY7ROr{o0}x38JJmGn50-Fr6pr&Q$ST0rO^G}SjVxhTIRu{b;4EYZL+$vi39#LU#h(#XJ)L7qsB28l_gNk%C~ z#+JsZmX=A_DgtP>0mWKoUP^juUVL6@Zc=JdJSa4bElrHfOjA<~Qw@_WOj1*^RHV>i z2uXiQMp1rwys?Q%nu$@0v5}!+vWdBwDVCa11EeWE9z;T|29;y^Y4J&hNohuDY37D$ z=H^L;#@MPnXtNMWZ)S0PUTIEFd}^YlfrV*`nWbTxsj+E_F_ydqP2#AU^OLetlS|?g zjm(V>4T1u-;z zX69v<#HUu2q!xj7mn0_Tq%!bfWJYjf8mc8ZvA87O02LTw@gN~RMr7zQCPR-2gD%Pb z!PYq-8KDS(q3Z7+F|Y7+6@C3^>^h85mfY7+9DT7?~JAMlf)(urM<+F)%R+Ff#~( zWSAI@1QeMVn2Z(Kl~`CzK&`aU- zEQ}0XtPFhYjErUsAnhPsAk4_f$;iOK!onraz{v_?uz&yqBP%B-n89u?Zehv7%)rS2 z3Ik;ZW@aW91_mo8MrKBKCTk`JMph;{2396MCPoI3`#~YW$jE5J$RuEE2Qpt>osp4| zNzmSbk}gjS&LCF~`Tp#Kg$R$P5Y!Mpjlv1}0WkRt6?M7CshkrUJ%8jE5NW z85%fPnHd>`*yLI2866uM4lr=nGdMokc?3)^*#)8*9UC~f+4}@M*m6^I^NT8(7`T&4 zGjmen(~1&vQyFG63qZI9pk@|CtdE%|Ex#x?u>`7SF|%+%Vo`Bwd}3)yMto6faY24w zaVo<)W^RZuMAuqoa9NQK9vex{NKDR1G%_g2#tHZYA(D@sjen8F0@sABfZ!Sc;a zVvw>GB%hsH32ypW^#6FWm0KgN=_=o?AMF}(4KyLdTL&3QDR9d z!wzOXm{?hAQD#~t!xCl@gt_^-@la`oIm}WZljBoTi!#en<5Tm%9ad0GfRLgL1!gPO@mVKd`5AQ zQ=mfN{E(cVmzSDc!f*)^xX4mPsp*-;C8NRoo; zEX^y1%UoepM1(I?xB%4tD#|Y{NiBlp=qHRUxrv#148NJc?#7}lC9}97u_QTz;Uy&d zVo?GLq3KKtAopRBg$gC5GQ5JMM5q9=TaexTj1k%`hsIQ9eqM5ZURq{4#KqSbr7$F* zzRyfyc*P`wAq#TeJ0>{{aZrZ|q4Oh?9#$2_sYPX}Me)h0MJ1VOnaPPIsqq3xx8MzNKE@gVdbd~Wx;~^%Gvy5Gg2bsKj81pYNmYib@|IX<1 zm}w@{FQ&iDf0!>b-(tGQ*v>M8%wd_w zvXEr~%VL&AEa#Z#vV3Oz%RHZDE7NwSzf4P5<}o)hFJW5B@|XD+<6NdKEU%dxShlbn zX8F(D!F-kZ8}nbrkBnPb-ZD3`9A-JsIGy=F^EBq8%x9VUm?kqFVZO$6nE4vhHKtR{ z$CwW@UuQbZe23{O(?h01%r}_!GaY5#%e0^Q3e$P!lg#&+?=wGOe#ktDaU0Wd=9^3h zm{&00Wolvm$8?j?&dKo{^GcRK%+4-HSoW~|g$Bn2mKK)(OwBB7SuQYlGyh{;!L)_t z1M_?4%gj%i9x_g3Svb<-U!}x`1Dhm&zDc9Xu!VN6@!xKkGa`NqpbzRZ1}_8>?8peZD{zx-|WQE)&i2?=x}NP z3n;KSNr2dY*qcG(8XaKm3M@_*9W5;_N>+^WFtq|&Lt?j+XAm zfP`4ULM%>_ovjKi3hWAUt<4~^xwS??L4nbcBMammR*-jC!R`Tjht;V8<{c0d;T={d zgm+kxyu<1Q^A0Q2JHj;z%nHgiO56&v3i7SZ3i7Qr3fv&?af7|b?F90k)7jH|=TDk+ zarQ@s8YQ+GC03A&S-~!51-qCP`n8`}=fKgCe1 z#8;!l4016u*u~6X7c(ocD6oQE%nEX`tOBE>1lYxFAQ!VCT+D`WF^Gw9F&mPL*^pe! z26r(V)Wu>o3VaH3HA;L6+zLFc%?jMDH41zn7xRH#%m;DtkrOvQFYoSLDpso`P@}{K zaxfd%!E9g$vneox9n7o%b}+XBqoV@Y!Mq>`^CBF~i*PWAiEuD4l7o4X9Lx)MFfY`> z;x!8F3Id=+!K1*}+N{8XHBsz%wP@D<(;HS>)+q7TD4{281$G5y1-8~^5D5xl9tB26 z4X}fGKn~_XIG6|FU=S1GU>+m~^B_5x2ku}VsDnjn6j&5^A!!2SU_PvAV&;PB8)ol2 z^5Z50*u_}#9h(AsYqJ8I0z1gXd+1Or-ZIpJ!kAFL10@Ozu#34tF6KtKm>c0@5EJ2IZX_3T zBe|Fx?qY7Ji={v%1uvmQ@#62vHH((M_;>~4VnX>2lqwvuL1h~aQiU|Aq#&3o_Wl0+ z{Og*jf7HQ2Oeo)h62%Dya2V4dRY-y|9xtJiV&DCPtEW7;c2EeMj0t5tP@=d1aWM^2 z1qU?eaVy{}Dtewy`u=45!x<`I7Zb{OphR&4;$j-43QlOw1Jxh6%Zf)Y|E=G-NizyAs1WI|aFlrCOCoJ@ms!4J)Qyh!PS z7gXo*g6lk9NS$~7($eK~4qTq_pMj`KkJ0f1%^b|Fzyr#B0yRnk3cTQ24^)W=fSfD< zcCrA($)|5WzSz6^-^3>jwMv47t35`?9}p+gASLrC@PTrlV2zTX0QtqQ_U>>aHNLNyAKphlr? zrvkSVb7!jpw-Z}OE2xm-1!X0f8YLkG0R_RqWuVi-N5eu2J9sweWO16?nkb^FXZURS*DW3z-@vVFf`2q1I*v!PXiD zVUYF0VC#h;*3aE?c<-G4cMAl-))UGVVj%0qz}Aa_trx9P-~=_-bUPLJz}E9YtQSxa z1SN5q8YNK$AqC;qW(A?v8U<01^`cpHTH84zgYxY`r+x zda)V>t{MeiC*4j3UablTB9HavR({qy%@y$r#m+7 zJ-%~An+n)^LUn}*$a)d5^&(*F#cLG!YZL@P)(e2G7l2qVq#z7RdNMUi;tHY)Vy(>z zqOCOw;vnnA!PbjItpD1w=H%Dj(_eJK))OlDB|z3ofUTDRTQ5?hzzs^#x}6GwVCw}T z)(b0$LX)0|f|!DMYqNq_YmI^k$a)d5^&$}Kn@`UEx@_vgU8fkp_7h5bQXu=K!1hal z?U$$ll?p;2?+bzL7lPO?svrhUdlCvFVEe^eYZN3v_Dg{6mw?!R<$L?9)4NyQxC61D zP~wvY*)I*YUm9$`R1GML3xn(z2HP(Tv0qF<9Gdu~6hssxTALL_T5A-fK=w<4?U#bs zzjgW187pQ#`tuE9KcUno39?@jY`-Mfe(4$oUQnXe?Nks2+b;^SUtB>1R9MQ?C`l_w zC`h$7D@e4~C`g0smj>G}4YB{~fhRo|ufBfpoB^Eq2qixbko_EB`#He&OV)rgxfsa* zVqp8lAohzWNI;XHq=J-!bZfJMRBMfbB*=bAu>Fz{`#;QHKWXizzUS8=_7h5foFMx- z!S-{4?dPZg<#KV5{o-Kz#Ub`fC`dumABTb@*na8O8U+rJ{TyKXIUx2Q+&g*4x3+En z&O_`cl>WFt_H%*l=K|Z$Sp&-EA|U%k!1jwk?3YrIhNeGG1r7zt)@B9C)*1y)ko}xs z`#B-@&v|sXqosYp2$?Y9I+KcVEu4YHmaY&|#Fdj1+vK9>S{ zUkYr!6vTQ-P>ldC{5TXi6}VcP6*#d5|Lu)epSN9~y+*56iJx#)%>%NY2W&kL*m~|7 zP&StaSuYK?UK(OOH>gHnQQ)sp0);-vdM>P?|GuTKVcx45PuXff))Pv6d?4%jz}EAD zt>>u$<#I`o^^#!gB_Y=HfNBI*koEWj|HGY~7e1^xHAMt$J)yM63$mUUY&|d7dcGP^ zCg%oOk5=t-fYKg+jS~LA|8xJuwksD7-Bt%%PbldLfUFk)TQ2~%p0@^+$9X{3qgDHy zprVgp;4hmr`(f+y6TNz1>j@=2L6G%=VCx0J)(g~tvN#{edbDbv3smy)*C^o+{I^#p zTsyjd_O!DMVEYM`d_o}mg~0X;f$bNp0cCM)^**@AMKJX5Kfm^7=c490mm&5ON_;pP zeb_2~aQ}&5@ZUSW_wI>Tb6TH5>?f4^u(kSd)coMi5W(jk{uj3oop|);=r%pD^@IvPjCxdL&f(#8tYdr?$;n zcXHL6bC5;{p|nRrrB7U?`}tV^?(Zizox2UOpHSi>q0%R=(p~)V)YiTKW>0?sv7b=t zBcakKuG0PUbl>}@cOM-80w|~xOi2a1p9|_eyarN$v!=InrZ8)&tJ;Z)O z>5qhZpSX&5ddt`DLyw+ZzYVdUQ2HaG;wP@=eck))WlQ7q=7SLX38g<0YJTFX-m5pa zJ-PUB;c-iF!-G)rBcbLeuIhcV=h?c6%Qn0*1zS%j^>HW=UH8MPUS6cp9?Z$4pTGZn z?0tT552VpaDDiPB5MB4fs$KyFE(PA!W(Ck_59Y+sqm_RqOg{Qxk|@~sgwh_D0*<<$ z12p8o0Uqz+fQ&zdJu`WVM4@b?<1+tzCY&{pmdSTG`FFVM3(5xJ2jtMl$gBkeC zHZGcWYsdYKT;PTWp`=Gb#V-i$aNrO8b+ey*Ki%+bz986oLP?K=dLKN)#$Tg^Kk#Sw zeVlRe*`XcMVCxAbJ#5uJ2li2Z@C+M2WJ(lw;J5sqIOEd4yKgmWlsE_vwP36DIk9*3 z!82?egr+wqpPbXS<^8IsMquj+B|U7FJ{R_$J};=R%Rwmc_xxS9ZsEc8=WW2&6H0nS z*ZD%Al+U8TK`8Lg%sTMk4N1cy3#Re{Tm_hb4BNaT%peY7s@Du|xWQt+cpQ(?}Z$7mjw5Ut8Mu``+ZjKkc zZjKkcZjKjqp&z#bdaVy09c`sX9L^L2C@Ck*W1@Nf4%+m zK0^&?)gCu!QCDj-hy<-5;|4i~8|)ZvkYj2 ziVo|Fw&@$@UOKX|ZP6Qs8YR9OMRo;l1-TkUIRzF4SK z0;_^@jiRywn}R}(qJjdmf>Mp5k^-Y+17nsFqXLsVF9SEX0)v8*IkSZVgMxxNvw;GG zg1kAih600vtU0rS0)v9GIkSWUgMy+tvw#AFf}A-shXR8FyE!uh_kMjQfqLdTWd_Fs z{MkxODhvutjtAJYK*n?Y;bLHLWKd*ec2Hn)+`yg%lgd(Jc5GnDQerb@VsL8Ovy`b$ zN!W?Osr^6$ixY#uGA0Ek#|0qOn#?=cm4uvx+7y^HnK!UI>2IQ`$>@P{9w zl-cqB{)QSy1}Ftmxqw|kxMsN$i(}(~|IGf<3M^SlEDFpTObklQSxT%hQPwOoCI$sI zm_B9&mTa&T$Z=4O%wQ#qjx1S9jE)T~pn!sVX9CE95TAl{G%!KE^ZeCQMojNCfK+QT z&p>!*0@2=SppAFH@ecRS2R78$VS{?-q$a$^3&29y=e{aKsKMp0UKy12&q( z5vr#yfSidGM~qNUt?t=_CCMECsn%q^f$-D?T%N*6atCPR9Y&NSw*llpB=0aoz4LkB zc`V*p08*{VyaVB#4Y<4mO1xO&XaPMuH38&IBu}wIJ+=A3ek`790IAkwo`LYx1e~5? z0p&}Km};Phr#`Tv<|cNir(R=Ccn?6THJN{~B61TeuH3|i)l&~xX_A{zlivl9GZ8W6 zkPRun*FC<)j9K6v04dgFzJc)51zdi@h@t~D@y!7S)XW5OAi_5XU}eMA**CD1-wQyh zHJNuHyt4t9cR;l&w#-BiPfY+h6UkGsN@>IG#aKMm08*{VJOkmW2{=8)gf-nY(8E(7 zSWq(40a&s3h6cGzRsx_H+AUw4Jr>9u4#?%6O zcxnR3nMj_3wTvb;D`6IU4Issu%rg*vnt;2QFiSO5C^9=mMIwc{ruEqg~_iivNi9ov=7a-mfLF;OOPLcq1ATTQ|W(A>|PtmjWlqMVwhm+%QpYsEZ~*U9^HDONkq+iy9y_+X-ZP#1k*f`ri;jw~fUtS)-Mlm#;O2NOKj zJ}`k3C1$MkaAYa*L!APpKw2L#fn!YoX173=l7Ip~$VL2FN`f#^L9mNhVER}U*kRp7 zr2ZwSC&>X*!l}T8LkTxb36BCV4kdgrCHx8kIFv9sUVw(q2Ha^H5;`{!p>qLy=)gV3 z=r{pn8p!*sFgGx1G9Q2h5=zpBxeG02!;NAEWdO9$VRGC6b@UdHHCUr`0mRWe5RTqJ z(9u&srlC7}0o5Em0qW=-AZxHXx&h+o83;#DAn52BAk)wt-9R-*e_(`Uo;@IIz>Y>A zU3tI=$vljR5}gs8dC*5!;Bm_6IEN!ki4o*zxEPZr^8-e3!HzVjqQnYI9!O~hls_0@ zsftB`6;vQY$5n?TAuig1aM1=_F2Yr)LtI2`p$>Hs zD6!!v)FCdKfpF0TTrR>@s6$*tY@yBoNtd9M1S!-p(j@~pT~@%8WdYVy$><0w(qRb- zmadpInG?XNksnre^JgjXD}d81W0n$9IS)#X@Kj8<5}i?jAC@&3VJ<{V{R&x-)IZ_v z0R}~8M|g{dAxnYTl!*b>qEX^jU;||#c>YFD{SMin3N8Yk_5;Adh?(>;S~3pcG>?*< zApyvar6FSgiB29^GX_026~K{c0gp@ruq)7u80hdShEo*4amfh_Db6ey6J8%+$kJe9$W}sDRHr10)@DZxnZerZA0R^)=xH3eE%Sg?L9}K$`V0UxoLC%L zvXxjI|1g81-LdEW0R}}DM+QY!aKwX#9l@0rB+e8-dX&I33TzP1b6~^}lj8-r=b^p> z`wOW)S*s)p^}Yg!0vjxJkfL#IostNe#}VUdVzAB%#N%QZofS|*g_+Oj$OEmtITYAH zl{g!QgJEM&NY+)D~<3LG#OBS)2jC}w0K2G3xT1syy?k1TlN zV$x(@0EsNLk`fe4iYyAOpghV7&7+{U0*hl0sK`Xb7G%nX1JN5*fHZKyp67ti1|h`; z#D^2$K7>RXD1~Pu=RTxJW5yl?n30AUXoE!>bf670(m+)|JSG?&!OaO!e6howj8r0m zoXqG5s+(b5Km|reP<_t}(!vMt@Szo#km{2Qkv2dTGPs)LSKtEafjUMwoUj4m1TI8{j~)u>)f*d9UALS5+X%Pl%LCI5))P$L*n90ghkkOhS%u2A}`~VrPK@U!pJOx^Hfh|uV zoIpyRf;iy@!U@npHFPJS}5b)fdQe^#RC0%nc@ZqK6K7;dAu?9Igh{h)Avm zjii7pNH%yij5hcM9^ZmRA~T{jhn`3=3Vw*I36FW9w2heX7W@v`kb+-8kyU{k+=^vp zc7VDKTm&hwIx=P}u{tu9XfRE9?U1d6RE4Zn6ooDdVFc9?@F->j4b5ojfiVMfeGFk;9JR>Ob5KG=fNV_^hGG?MX1o@_v!o`?Gfw3-8M2#aF_ zbCwd=JIwGY3A8|Ca=d`>6)VD5NW%bYozDH=kHuF9AVWxmhuPr43~D-&{hw^cFKbD}cubK?49dvJ>jsF+_Gk zOL(B65r~(-Wd&%C8(gURODn(%i3?XFTYe^a%|wsQs9OTV!;b@0nmIl zNQMzKAm_C3z+YyJ1OsZ`Nx+9hA)|8Wu3>U)5X%CG612VqX=1?VEO4cwzyNm=$c1vC zakWj_OuY5%poOs$n84#|Ob$%-Ob$p8m4_??VZ-GW7<3s{usbql^D(nCF*0x~FgSuH zxj`god=AQ2Hhj%LQx!mhyJ$Y8~Af)%vN*o^58 zivrjkH$XIl2GbihB~~-0DxVnK5;MXjU_(77)#0#?-)~z~Fd-HA|6~hY=K*U?wauL4kMz)L`Oc7v^GRVr1ZC z<^~V?DYEgf!&$6w7Be>}TzXg(nL%_1iy}CjT38fWLHq_5MGg>sheeScMBiXhWC1O{ zW-()W0E-PP1`ZbnF!*3E@QGQG6BJ7-j*T1&oC2qr6^j1r!NlM=2SO|IfLTrq z=1dFGUrmf(>COQ|Swf-Kfxasb6~1K1UsOcqM~=FAl!2~8#gB>{8h0tj0}Nf6{J1_e$t zrWc^tWHDoU0-^=YncjeC0duA=Ae!Ht=?{no#X743H~`obm<19*PEY_XM<>z$&)X>X zzbwddg#Trs{%3)BEy0|50o3;qAm7h`asoi!p8(}}fc)P9Ba0%70;eO3z$_Le4p&ei z=gP~Vzzm)+VN>9A2W2ZzmSa<3&jRHVHU-d>Gt~ba3aknc?}K(D@PMYlSwP)07G6ef zZUtsVHc*MgV8ze?D#Wz(_i^q)V4u}R7ZXlY&jOhx9W;0{Dz{(9y-%6mMya1Xy z0+&`wYy$p{%pf}zc*UeZHtHzygSZ-yT&kkTqQEZjgHeISl~+oEL4n_#`3AEBg950a z1<@>KOc$6Hm>rn}nn3$AK7iX1EJX?ojyNfl3X~oQVRH;|tJ~r6Yp^i@;h& zP&v1NRf*Y=!Go8N$w7e`6o8D70A$c$n!~Ed;>f7T3XUsC2=Xg1gF=u)fklBCQo}KU z>K`2iCIt>NCJhBJPX%=FyA^{1v`k`w*s8?r2x2K@DY1gAW^!D?n5DoX(8>rZ&lQ;T z8CNhmvV&s;6b2g@LEBuIK+F}4psg-U3apUw&H!56fjr9Sc%$n8g8~@^-3LY`Mo{c) zFnwW!mUG-7M<^&UIr8kqu&o<^=_2*CJPl^ACV#5+UU`xN7bIrA97LYExhUoyNa{)tu=H zIOR!Xftn|v1)BlULi-0)-v?06+`yWp2+G+LSRtj50)yie2oqG0&Vexb6c`*AK$sk$P=3IyCM2vkC(^akD6JWH~B=CiWOSco{&&8jAxsW3f9jf{G?iS6(IsW>8hh zp}?%bZpOp{N?pv33}#F`3gC138wAXmK*J?0Spxf*Kto*|ikzUvgOC*i1K1>HM@BOy z9mVOR2V?ISrym?ZZk803P^BS09wP%;J5{xlN1;ncR(4M%%H3YTG=en2+qSQkh&1j zAm$YX6%iVswmhgq0xtEK&6q%?6S!ss6+N(0klBps2#C*W#&iHgvzRgM0T)LC(Bepm z8C)W=fs7P@l!(IM5>W&c$?y_U5KwBo#putK-76mRIQ0D^5VbEo0U<3CFxfz%l zxk0@`4N&C|b1S%gzzixu;lXf)HA{&V+!_$@1~~#$3pInQ3{W^bGFve)@bG~OE+!RF z5vjqXp$K-YiXyWDt3WFgs0XXSzg&UQu?eh;mq7{~r;L#9UA6+FqkL&0$W2TPjLh7Q zS9Tm=aFi1`&BVjV?f41AkrX)1#0{REWCU5p%MGdotQZ&+7#$lSM)E4~FIQv*Z6Ag3 zdBA0?0;>YQlS0RGfe?_pRX}??!P21030%;cGarDof|)hUnRkGhjyo8$5Ow(q&^B;pf-y^AH>kw=$^?n_4~$Bnl8OmjS+jsUCE&_>2cr@TthQ!>)Yd#8XY65A zVsYgKGY^1kGl32k9v*IR^PM@soEh3;2e}B+U12tWHOZMR;4O7#2Xkgn6BpzS4|8U4 z%bo??eg@g00B%3)GtOgFVs!-78y%p5Pl1)pO6-pR|1%eYs~k{kONq^qLxDwL2D88) zM#l*o4=@PyGP?3|DzJeIWw5Xkt1bhBBa1sPmjaU`N0tJc0;sBa0^T0Ws>v*%#1E=l zU|9mh2Gw+$%rBS)>OgMcaAYh51vscU0(WK~un3%D0{NH$RQoD0DR5~raX=bWT$)S_ z;P#ZGLYBZRP}sj<$P!r1tN>~bF+&?S;GXgxR&W!EK?9U)AYDPQ_y)N67Ep44wmmeM zmcYeVpoq_ai_bw3?}3X?KoSRcGWwYmSOh*ZDKI!Pf(IM81a>ki@C$rqR%CT#;1L5m z1MEk~y_*g&IPxm6D}Z_^Y><|wz*0sH$2XwRp2EVw?RaDT0R{mOOJFq%1Gm5$ z76wr1#0f5o9RI+Sfee8N9oYd@4{9PqY+4MmNlM@}6QlwKhpfOUCdUmM4=^|igT+Dl zxd+zn%Yk>^6k0Fs0R%{FoFjhxIjaUjNp<7)U{y*jSew_ zT9#Y_FPXr>e1%yFn>>T#73M6Mnj4sEco`HJ9B(jZ3H*Q+Ug9Th-*NkD_&4aVo(4jBu7SW(9n1Qc8h8caP%LQ04*WN_?Z&k|^7;&x6xB{|6W6C?q!IyQ57^D^>4Vrc;x`dc_WK}|_kaC&0UU|PVAn#N$BUjh;L zKlXyhDv|kE$>^ih#!RLG31KMbN5KP`jT|i2)?c;0O}dU=mSclm;bt zN08}^FoPLD<2npxObpx#Y_7a)Ob(!WO9t*6@CF72CP??6O@m1Q#9{+kFQUM}%f!RU ztpMf;C@}Cc@^Ek~fStym016dQ2b#@{Ndjb|03`@q>jk&(#(Y#=B-vN(d;0nBA3O3a0zAs|q42X%&uK;;`K8$lB>sOkX^ zZd4R1F+s!>L1Q{F$15^}YE@8T0S!BY9M1@vrQlIu1Pu~#fO^#&S&9r`H-P3CAT9&D zk%xsFoYcVtsMG>CY-Auo4Nkhujsl>p&II=}6Ufi(paB3-Sc5vwSs-g5hJw7s=*r6o zwo8MFL6HH?zl@F`|FR+c%c8&r_AjGjMIpp*N-TRfjP6P)6IHJIQ0JS7IvXmHH!9}wp12~I= zf&o$qAe8}3pa=sMdyL!)td5ePW@TBnBWT1@-d(x`yvT%s*#VN@K!pWpuZ$;XEESwo z6qx-%EfYmX1$I!q;>Z9lNEkrf875Fx22K93D=;arILekevJ_@%FbOCzxl4m)f20)| zK&_b)Pzrz^RKo}wlmbotIWj4*l_)VdGAJ-)7b$QSf;_^ER(dIdI!2(*B(no(a2XUL zpkxJd7K;KiDEWCSu}CX0DX@AfF-e2m1xnEhAR%c*@X)1z5)(_k0u#8!E5Z#b>bSWT zzzr*SDXPTa3o=}RHQT=sQY1cfMwAE?rVm3FM4q|EFHD{Yt|*-wGlv4IJs6f`b-2Gp`Z%6UwV zpy5hT&SOF3JSGJeaL!|P{J{vzdd!NTzNrFO2%h&q=@6dxVBQ7|nL+a&xV(hcrHr7g z$qXtY5P6RgHb6>DB?geEI6!+*7?|o6SRL0l zuw*$lG}II-F**vAfi__LXD)PPaL-a=bYM_oajbU(H%J&A!6P4xjsl=sKp-2On*=~D z15l0NCe011WI#iGpp%=JK=lX%sQO}1-~f%|fg0oBI+=qTB*3G{?%1>M2w0Lsi3QBo zU;?!-%$OJ)CxB!i6sY`T0>!Ymv>6k46wJLyYaA)@s21N$Ywh>UflmRp)0kVxP z%Z--_B*FpCO`tZ~45%(}W>#SIl?IhJAVIJrxgF>1JHp`jUmj%ri`_>UAm!Kt5Q_yQ z2C@jO((%XcBMjg&6eQfR=Lmx%C@Mi55Dk~<0LlE>eFT)C9YHi)*#wYG%N~dfhz3i8 z4446u>4D0CXh)DVNM->@W(rgWL_30{K{6{qGIO9ZAleZm4U*Xal34A3z+C2uS7)GUo?~0}=trH0%Y%57eh$kYzeRGJl{l zAleZm4bn3KB-64N8b2ToNE#$F1H|cp%7AD`n6d>RnJG{i5bX$(2I*M=l9>aQ0nv^i zX^_kYkjxUO42X6FNrPl|fMnJ{Wk9qeNE#$_03@>oDg&Y&LDC?Z6CjyAP#F;I2$BZL zTmZ=&fy#hrN02l~<_1XS3{(b0JA$M^G7ms9SD-Q=+7ToTl6e7=xdW8}(T*T#kjw{= z%oC^#h;{@?gJeKCR)NuxKg+SAP>BJwE`$jr{03PAsB}_bant~<8DUgl$j$;S)c|E4 zP`M5*n?Vak9W~6DSRAK-a%)3F1E`YTNcz{X9AsL zhsAV8Zm4ER3k6j2FeovD%308S2&kmaQep#lFF{5rf(lY@a5;t=D$JlzK?DRR$c;z= z0UDiyR8ouzoLQIwp}?fT=BSVjYWHzuD=~mdO-F$&PiZA)M`=)?f&8b*#GuFpssytf zpX@%u02)MNVgRkx0aYnn=1dHZ_)9;KCQus!q(>$TT=X(HvV+>!44`E@3<_+Xpq2rX z0<#-vsSjv4oyD=P5L6w2f`Tbqi2)j!%n)N3ptUTM0)xOAP?rd)mSuDVP12*)vW(DL zmI0}j1$AyfEe4Q~5~Os_0=2CiK}9mCO9*PDF@pLb(8`Gi)ZGC!?7@u&4)8z}xOfLm zHfk`jD1hbwLBlcNGz&_xpgm!b1_K);A%g^=b4m=L{V>en2-RR>aN`9{V?+BVZoJ@= z0a=uo9GMFt;~St!y^2C5Mgh>|sRC;jXfRpFYtsJ18CBN6%MjhXf#lBdGVp!v^UwKsz;%J|B}KXjTr~lK?d(AblV(3)E0Na9V|RzF=KB9#&BAn?(V%z>)>*4KM-r3naRg z7(o#Z@)OwSU;@;-1rKgBC@@0uDX2U`@iPmSe9FTN&HSL^4QvpY0GS5b0}62t-zNWEkT5=4}>fY1kW{tSBHU@(7nNK92+R2;42!H*dTLMkR^z0j*yM_;8lfF zK)p}UDkv}ws@I_F5tO+nnrSd~Ko=smKo=@DfX3KBYb&7( z7GJP{X5|?a_{^EX%feXAm_D$8cMyPvxKS4{}qpwT>>3lwoI&|`&+Z#pP( znK2=j+wsBX_LvMn%k>~LeoPvmg&!H9g4m4d2WYt*vl(PTqJTMMK_b67Qwu1K@qw4W zF(`0>SHyt>05qRR;{}TN{VxLw9mE1f8SoeOyC8>&;^PQK$D$}W=u0ctDUecP{gr3aS14LAnWtyutL^FDYAeMi2&7% zTncPR%Lv&}mJzaPFhQ3Qa)8$AC@?!BEhA)6-~jb-SrpkpIh+kVbnXaRBg_F=M#zq| zj1aVKmqmdC)YJv13s5}>T1LnMI%kO&6h|7MmH;nk6`KNRNd$`{PZoHWJZP5}bQvLd zx&pS0kPB@YAq#X#13PHB0AyGZ*D^v@#4uWptVnIkY$8yuDp^8 z;Nku4iWPJWH*66h6KGkOg#wc!3wX^RXnJ}E zi#f9abon1UXh>3l8L{S%U4ZyCf6Rz=0vQS{kkx){pv3`f3M`~1VsU;!3tirz#|E2Eu3#f$; zUFA0ed6nM>@G3u0KLB*hB50u?Xb>B`$_I2nEi2lJKhOdjO=b&F8U?NR;|GP4iXsbW zQcstG@QOcC$VynyItWlrh|O-WvK_Z-4s|HVXMA)SQS{ntGYO{6lk>o4YXnq)U1O$Mu`pN98gyV z<{ZQVL+}n?@DekS$CTJX3k*3F1VL-#sJ_6ELxJ`S3~_pu1Ge~*ge9nhh708EJ6$oM?Rt54QtqSBrS{29#Ulqs)TNMbJ$KnT>OXXFJpivLl z5>!2_UFe z0~N2ZqLJB*3A|^C1-cZF4YU*xR6c>`tU(6?DS;N!1v!FO)d_%hV7u`OL6-osC@_PH zNmkJE3DEREtgeQd4PN!ftiTDHGh={q5K92LP?rFLnmPlZWPvRK6Qud_ff2TKr}2oSV}0JN7vfx+<$WJCm1-yo-c5F1p>p|17=P2VwrmivL% z6@36N_k)bFg4vGuL5tFO6xczRttcQZi(}#80;RYY3|XLwIEZ_cn8B+L-FU(K-yr%C zi`rOtI0-GJV^!b)=V-?}8=$M^98uQKL5w^Ma*_;aog8F!yC&$y5)Dw_l}UjUzC4i= zG_uMJ+B$+|c_Lyt7kH5zWUYq=XmKyn^29ChWraIX)USYxuR#%?0~cR_Bn~Q;1W=YC zo?%ts6xhoMT7<~r$N)}Dj!29BU>#x5)(p^;x&~7LXlVjsu^*D*pcR#%1u5XEwj(eJ z&}|%`{4~z@S?si@Wp#SK;;P}J2Pl7HNYdI1r{t|^`Nz)P){N)7UhPN zPoQW4E$Rd9OnHK`a_<4s$~`>m{WO>+AT7fK4Noy>Fik-c0uR+HfaYRByFuWK`oKO)>42-OOTAjb~)qCRdb(BK=hA~zFghM5VnsE<>i2eGIRRNa6k?_rDjSU>|f zjNsuK(DE424pZ>34X9Q^U)0BfWlAU({iOrZ6?jG*$8&5;qbn2ga;B}5FgS{U>L@k^ z7Dw<73{a4O4FNAof;btp28fy4kpbi^$Bv5!7z8ddGH^RG!dkX0kZl+st&q^<293iO zC_#+`Exu$mWh&tj1uXVpv>T?kgddynLR*D zgBX-Jz|oF~anN=f&>%Voc)bW@>Wo8!NkE_tG@uL?1qHhq6DY1YxfM7-3(hzc*d1qF zIl$m3EAX5dG)OL^zz*Jt;K-Au!0srMCD6ED378Ea-5o4o8+>`$L1hJ( z0<*w%q!R!X1+kXYEDnyMaGODHy$ds+SAoOv28;u;`2vgsvRM>nGe~y_i-I6@P+kx` zD39b*)X{o=s4{-AG8Rw@5Co+P4qlMm^`LA5nvhcDa%52CXL0~Z@qlVs@U8%1M^Gie zpdc);nF%BVDn}IgK~q@Zfd~!-a5m#o5CkW4s7=fen?Oe-^KfuGc3e5YAOOx;jE;hk zHX@^=1dJgHVH^M{0_8;o$Q%QztC`VF<_1;uED8dklm?=}la=g_3Rx>G}y~D9DCaFb-&Gr!dS0kZ!0AzMxh3 zkPL@%s03*JJ*aOAUWzLLJ#eC40d(Mm0;2|#1Zht@x0=2O!HqbvUyblLBblg&C6!Xz@FEnJ`Fz!Hh`; z6lVgL8I^d=m{c5@6j^w5xD|Lcm^gUF6?j4Oj~pPLgd(#7uOkzvP+@jt0vD{H9w`%O zDFSE_r3Mp&AQJ;94pkHxL6m|b6G)!|xHrk`r~+E#02)-|5oBQC25qx3V^UGz1x<)6 zDDZ+*f|5NbqXo|&9AV6Ql1jC1cxKgLN&)YZW7S{+4VA-16Hrea0VfC0T49i5A{1C1 zufTHz3nWK4WGk>b-eAa50J}<{nHki=0EL}{5}PAqp(}{#q6Es9o}l%<3ZOg>o+|-m zH3rZgDl;Zn62Hdm_@A**kw*cf98@EK6mu)^I5L5@$vZMA@_?#9NTL9zUGTXMJRobp zYcFqr9LEaEt}GBkEkMqKI1ZGBn!#tM*(kDu+R++J7T|z(yJ#}hlD<%NI(o8ti(2UK|MfN?+t9Js0l z6`>&A;DQ6bO^Fq>Pac-OAho$XB)-{Pc@-4c9G}As5?5ezd;sHs?7IQufb6>fTnEVg34CIXOFb>EW z?_nH}Gh|@S02u{tVL-A5q+;ZBghnK!_~e1686I$&0X4Zm>-xdD2%M5ZJa9?|WqDA& z4N4mf3LIeNppst+lYh;tw|f)<#A77c^C z9K4e7#=E0H7WjA;(D5yx0e(<}0zC2nYMX#;19=8icmAID#~EfQD|7vI#S!!~_+SeJqHU28$~%$WWw~28$z7OM}G`sinc<2ySVB zY=E{jm|Q_MHWz*1g^?O!0FJRrCtFPaiG?Q2&)1!w*n|RfbtZgwZVcd zPl49YgBlLASU_XB(hAJTtqo>JL~8@IE)$emMaSC@_M`3>ipELjvwhCTJ4` zB*6eGkr@@3K`jnGGbRPl$w54-+zNc47KfAqAEd>>2U-rmqQD1fae$6a0o78VX$bJ# z1nBH9Xmf)F(%fKBWC9rhX>RbLH#hh|i_TOO_#n*y) zSaU-mO9>QyO5C6hKX@RI8`J{l1~oT0!OacO@hxC?F`F^rZEiGz&V2&6MKPNj;EEO8 z+~5SI(gJYXf*G{q2Rx(+Zf<}MegZc)U?+&NYA_{$TLz%K2u>mJzy>!tn9Z1CP?{Xj zoFM?JO75UlB?5@5L;lY<+%$-xb2a&RhegEe4na)5#k$mUWjW}1JD}~G;2{-I&KFkzi;94bY2pSQmItWqPfkOu7GHEGo}k5n%Ru$4CoAxS4>%oJfI#T zgCm#;S>yAH2^2~!EWAu?pq-!^OgET7oAWi8t}ubl-_l^Zzyz{ggXs(tXkRgSTi*_l zag5fCFF?jKXfoYlGH2QY5<9|_r39W$djej94eBc?FgPAy0(b900|5ddpq`hE5)&jN zxPi{qQDD&o9RU-ezye|^m@@}}SfD{y#HzCip#8orpmp<(_dq9WvN%p)%u-?kb7SV7DQjG*1tpsh9F_6Rpftc4LgW67ey)B(z{pq$OEz@pC> zfN|!W5J-6lXu=Q7iU74-Kxfzpfz6QsoznwyvWJogXr(6D`3_2=ppgVH+d@eUv{Dny zHc%2bXHEclOp{qdNy3~N=3OO8kcSySZI2dEaI%^)HGpVIbLI{ZEn&_)0Yr^9qoph&l5H5Df}q(8h%mObXx)$*Pd95Th$Emja{X#4XTHpR59- zV-JiYp}^?a0^lo{khW+%`B2?5XwPi9bV(E-&OpyC)@c_=`5G9U`n*9R*R z0G-$fsdd097M#34fWn#4is2&T$U0a>vosKTHi2#R))sRE$$_d)ln zDF{09WC^TcR1^VKDWEm53ZPT5BEf6GSd{n`M3xsSvMGo-Np>iSIsIp7c4};D>6ozK zKm%i)BDfl2P~-&9enGb;D6lDTW@$1oD2XbFwVlcgl=D3T4{AH<{};>1|1AOcno-g7RBY>J|Y0w1Uq zEE2%WjADu+2WWCeL_ySvv8_3Pmsv`ILxD3(hk-$f&5^;6#X*5nfm4&20og3D8(Mg%%cF(3i1{+=!ifz1zynF2PO^$FbjNAFtejbHYk3;Q)vPU!XR}_P*nn;wZvdm zOdy>I7Kb?#2e*PCcz+3~YGdG5i=&VrCA_q_^1g}LGQ3UPIVgM&^kTIYm zM?mR_1w5?Eq|2ZIGSrGe0~9}?lZ|2O6%;_72*~NN8cdK;SSFCM8sMTX2AVfPuE++3 zEEA}?4H_P}!;mGgoQWHf+d*wOP-X(3fVl>=oSDmv=?kb}0#^c>%nattpo555z-N>= zegPL{pb2DwAV(%eW>9blD6xSCC7BeUJue|h6MYu=G$GJV@sqFu3A8Zb2#f+=f!3{(iP}2z%zl@+Bs0gUt0X|zs z0ujHAp!fyr1jjEUXp$VXCV>Goybp?B&{R4|IV66;#=_zkvK|HG3UK@~qQ@_|Y=+0L z2Ga*7kXkDS9nj>xj3Vgl6h2Rwk14%EdUDR7DeCv4Dw7pS8SaRP(m2c|5L zW?cr*0z!z}p{W|;Jdm#yzT)A^vL1rs=Ff>R@;EdK*K1QybZ z0v&$D4Y{ofq8W894*cM)FQ7&RD2<}ZGdO->gde>115*tzuL5X?C+OfU&`=iC4WM-< z4B)_H(q+)$1!W+PERYu&Kqv1&)*V9UN|=pj8%NO^|3{2Nf;? zFna_*D>qmiK=~5XW&{@o;A4t7z-0#L01j|Gf_6c%gQEZ`0fXWkfkCM*?$k^wt789*kc92pgvVH4Yo zpq2-t_$lH3@kB3N#wT2y!XN zTMSkVpw5K`(;g;pV;!{65bhPw3I0|L4A4pxRLp{k3`g*>Ra^oyz=zUYKspN#RADh_ zFyUQQ2R`Htl2TAK#p+(4f{AUgL+M%(Zd_epuL8ma|#I> z2P&*ljROrhfrjkBlLcTiFiv#?@9}&BIZ=?fQ{C9D7+!#e5Ep>@)}RKk8}}ViM*Vta z2FDAK?lmY)8z`|l))zwt{~%q(21X?z76-=z3<^ToO5)%_do~3oPtd;oY)AVnN47Er zPVYj{N!<$KpkXF)N9ICB(ENjtqkXX>_&fmy1)(fOJ_T{dKMaMScB%p+XzRGJ0Ct@R^kD- zd6^W%vq6QGf_Ro9BM&pEXa^Tdpq=uHpi@~{Kw$v(Flgl959orALPa+4VK2;CO1z+x zrn8jzpnm3s*~bg=Gphn0%+H`RNx^}^>&TR)1d@RI8A*Z}A_4U?Tmm!^No_w1Whu&n zMm3pW5e}NtbbRsh0E45p0*m8$#w^DhAkLIm2N(p-f!ni=_JxYFpwirttxQP^R4}oE z8^Pd21{rIxQIrGmEEMHIl!>AOh|*D11W_7_N+3!_Q5i%jD5`)c8AVkPC84MWqC^yh zK$L)@IEdm=6b4Zoio75Sx~&)7D{|yg)KuV9}4H_#-D5!w?DvE*%LW;}^3W`z+ z%8Jqoyo#asOU78LV6bbc2F~0vFgG0g$VhL5_g966^>L1xc`^B*WvuMKJ|_1sMfq1r4x% zW(EB$sLw(7??OGw3<_p`kWm~UqXe>)1VA$E<%-M-nxH0|Cg?m576mQ^xhyj#7X=mt zNd@^VGf*>LK}ta(%Z$kev^Y^gBFl`)0@QO?P|Px8GEo36X;R8EV=_=+QIJ+p&N5@t z0nJq^sAPfeS71@#QBci-bos>;)UrSgY|z3)p)6>}UqL(zG?T@mz@Y%T%v3~yMS)jA zG|P-hK!HVpPeCvXbQlGT0;d8$Xep!uivpv9x+7ajmJ)|11LWvq76lGX2Jm^vV3r1C zREa~AK>;$R#G%O`0U1%^&}0xW2X{Ri`Nh3>922@DcfbJpCV6sq@0P#!|ML?8}q9BOUP?Q2uDvHt|N(co0`aQ4Ay~pvVKFcoZc;6bER#BIryM@O};kMJ`7!aOuIWz^}lrAep7a z3eE}apybaF&P;*|tXWEO3Tz5opu&X@EX@hZcx=$(g%wmw$}4b!^QVFWTb7cd0xLLk zC}k-LD@Z6XgNh6`utrt|sVpUBP+s6ES5g6~mn-rpfKGsx14{^l z@+Gf=AlP-RSxS5$R|}LYaVjW+jADfv#Rtl-5dVmPj1q+!#je1spsb(@swPz+Mkok@ z3{ikM7Cd>6FoFZ>R5p;i1))YTEAT1^D~KzoLG{aLDe;1J^C9cz1*K+)U-&_~rJ%aS z6u3d92REqn0Pps&0cX`3(8gK~CJS(RQ32tYD2Qa4F_l0#21=~pQ& z6r{31$CZQ4Q&Eu40a3LjpvZi~@TWXo40jBcZ^YWyTZ%kr7c4%Q9mMfp7#A zKsPG~KsY=Kl38XMbMUdW(65gNHKs~XrS9oL0O#>)=c39WiHTxP0*$p6G8$!s>9|8ZKfbe zFoPxs*c_qF6u1QFVjIk6ih@QKsNDs!o#dt&gMzFTLj!2a-~y8U`L& z5DT>Ig+~T_03?eN^IFhyFHrZz3ADn6Ux87RnL~+Hffd4yl3t#z1U|D?f!S9Ya`Gx@ zEJA@5G?Spf8YaCwONkjYy2}FEF3N(~hRTB2h6-XLwxO~hZ9`>2+J?#k--gNp*@mjf zrogPpz@bC~lQ|q&z^mFEKRh@9I>Sqe9dvhrB9j99az$nZcBlW0%}y*qpoO%oP69Qc z$xlWF7IS9MlKTIQpmQEs+(EnK6gbR5o7X^{EYM^Kn>n)tkMwB3g4SYCCtz7XoiGLk zaKK7|1C{|a6vtEt8XE%5fpf#sEB9K^U5VfXsRZhWJF zFHnCUv@@C=bk8&BU_EAEY0!BHj?7t(HH8XH*^2z2!*s!uDxed585Nj7-csT@pu`KA zx8PS`%ywi3^?Vr>`22a9zKKcbY$}81+7m98^HovPxJwFS1eDXWI#S2=^t-uIsOmh0NIDkU}bXq#ZOCUe8I6#8+04R`{xIrpF2ZVzvG-iMB5CwSV z3G7yg$_F5oj4+j;*n^(R3^&w=ml2{AWGFXif2acE+7{5F3~tc1PYj^Q0M(0%U_XPR z1$uBb*dS=4&|zQz-SY-M<{T7D;7h8ZtL{Mw0%R^TXcC1RH21`!zzrJiX8?~>8-T_u z863ftiUdY-2W_ebEh+Kl1+Aw8CwE5%MJCX6rw6YDsEPsYxM74k33NCQ=t2aLJoxe} zM$maQ;9KPwLCa#YU>D1QXGD2GXS0DE1?GWv&$EMSHgOC`@PdY%HJDhud3iyT?w~w} zaD+H9j*x(4N1`0T1#*NKX^s#h#u4HqID#AG2vO1;AxexR#7J-i56BTBpymZHh$Re~ zDPsnWeS=m6fQR(KB@t-B6oV2cXa$u5CwS-|boK~L05mnk0UCi-U~=SfWC63F$xVpb z1`2{lZxuk(5TMAo8Kqn1AN(0bEn4r3jLkU*-vBEPVXn{1iG*I9Ib?P}lhnaxRGvxwlU{K%$@0Nx* zLLf?kOP9gGkY;ir3t!)NkIY3vM^_sfUpce?Jq9S#dYAc#sE^M z0g?r?6hN|ImISEk1+xUqnL*ox6(Gq^tnz)|}7K?EAbHYSGhxtPM2HLp`WwC*ZW-bjT3-I&`)bF4w7%C55cnMAwpzB{C zG0F%!p$fdi4_xFz&wT}zylkMU4+SpA3k+E*4E!LYnZf4%m0}jIXRKq)S7vbhzyMw) zr@)AND>tYX24T?rtpR8W7&9{?186C>29u5=GY=Q2?g!7u8Y(ajhzH#>Z2;ccqQK&Kh5>X>p#gYb9}8$l zH#^93&@h|^lLBO?3%erZN<`4InF!D+W01XhjE+)}RZL8v)0>za+jk#e&}U$yFVD&w{pHc=GZpfVL@s zrfwNQ?g1?xg3Qc7*3NY=(+;X zT&W;r$p`4H5AZa%AxMXWA}@#nUH{1<@RM1I2Quc!tHA2Wlar;y2N|jqgp5=2LIx>$ zK_isBpwVnsUKRy*@C*hs=yW^q#gPn3{4k4Hz$X|fiGf?&ki|rb!U|%`6$LI7(!JcX5FC6M;6TDsVs=#!9T9LX^#sBOAPN6&!bLpv`sJ zp#G}@o42$gc-OfjqaqhGXzw{EsMYLf1v*j~v;~YYONkRSI0vc%K&B{hdGj)IJMQ}O z;vzF>YRIvnsReZRFGrS=5NIJ8SfW@-G+RNm2qGs0X03&=>&t)L(YkRW8;2~-J4 zLV-hGJ>j4ZeQ@mC2(UlTZt92B@whAA9O6eivo)ilQ|P;H6$x& zpbIo|4jQonFNt(K!T=s50~Z;JY|0Fd4q2cZTosrdB|t^U4F=F;7b|Ed{Xs@Z83H0f zvvv}Ya)eozK@!xf0j<*&0HvI!h9eB_pj`Ku@Q1;ha@MFaJA z!3PC^aytj8lmqXHQUTo^176-^0AVqJDn;H= zoeK^HHgLBFv~Ut+u|u{B=;j%L$)Nkd7#$&p3W0f`1n=Sq4o=X*T@5B5CGet877eBV zP?iC$jb#Kc81qr$gq1wt+!6v=#S);%t-vDiiy2fkfaVj{f$9qIW=0Os7$u8>fC3kE z=O(Bs0c|j4adgO5U;(8HNG&4po=Jg4mmvbYLrZ}LR5+V}+!X^VZJ;~SAf+;Bf0`#R z=v1W5OgyZh+yN=U5wf5H4zinq1!=bl8^kHx3akR#!P_&)aSF(Cgz=#20^}5s)gY%} z%7WB_WVsc16qrF32kQ0>PEg_ib%((#Boz2r92A5>TT;Pobao|X1wK$&rNF1i4mv1> z(NPNAByilb3wk;VS{(=K0pK!?#nB*3i5;{(mJ@Uq1PiEH&XWgP^aH-Bof&*(7^D-y z1SxHLe+p8q#LD8Jzz(&66>0-J$OiCbQ!pC@SsWC2L91q=CM)m=>|+776u{|>9W*G; z;y4|Y&cvZ93)Cioq%2sYM1jRoCkvLaK&zNREAlYX6KKZ`qR{}__6dqo&?Zb!l!Brd z5sBa>YVZaCx-JFeNd&Yt8`9c>7ERFB7Q4V+7G6fjGay5h zK_{-Tf;S5yTnzFTXjus;ae`tE#7FX{0y}7{9xKS6~924FF0pO5j}x36QoXiw08!_-p{s zBnc$fvS=_FfHMP&29pVBAuc%gvVe+FCh(>)Rs|-|rZMoP$dIxM#0RGn4MjFb5y)D1 z@TF0p(|(ya6qw*k-eIz=ptR2lI+Kb+ffXSu0ny9s3cB6FiP4-%K!F*e2x-+kDAg)~ zk~t`XA#G#OB2uuBCoemA`zYwx9>nG%7Do|*b)b3zi6H?N0X1bclpy|M0Q(E<4;8Qw z$b7ih6u?5D6bBXpjTb@2mqnCdr@4XF5b81*f*K&;MXxg8kOi$Jg|v7u z&@N?A83)?$2`b|tdL?D{R>j+HlZ82~-Kr zVo~DZWprdzfLv*;zzjMC1vJ08fiX+q10%>Y3LtlYQwFmJ6X>FD&?@j5;PNg7)M(RS zN&t=dfYoLw@_=?AGAZzYCj3Af*Fdi01QlAGiYy>Dj{=JVCrCm8B*4h6zzMP=16=!q zw(={0&)8uxV*-cR*8{Lqci7CBhz>DD(D})b;s{g;fEK#3BZnK}Xbw=gfwDFz96`#M zLB~7`1@MAWu0)oCkODKv;{wk?*PF6JTJ0K4GD<9<0dWQe@QF~Meh_GIA6#pI`$(XR z#vun+fRunv-2k1Z3Gy?jPsOUh0`n~BEb?6}O6*Y2egGv8Hc;~5Ai=Y!ry4-KiCQ9p z8yBE+$v}lVC=M{B89+COLmDig9Hz5SI~-JM@B^f1ujr?j7y2d zk-ZR9=7U!uF=j(@T?1&(BpYa%2B>W3R^W03-GR*P0P6TPFl#X3#)_<W1&{zE zw*uIN45;l2Am6Z-WC5j8Z3| zDh3VLCR0;?h~sI|xonn!_b$X8%?JOEy6 zv_gSJu%4xku?9R44{8fCLDm~7Fbed5syGEkfqoY70(1sP@MIn6@B{(KAsI@{kX;N6 z3e1oRDJClh@IVcdqe+$mqreC7HY^j!&LJ3KBt=**dnqVYX%jt;Z1uOEk3TIWAHXcL6PL`v3pFy@L3%1xn(3l|-CO zI+i>B=Lg-WxQWA;r3O3()c^wZFlL1UgX4ep?6vJ++EZFVqe5G_oIQ2^y^>(1qo<_H`w>!;AvolgpVU=>Kc3p1vHo#6qqy_z+nU0 z3C-cjE1&>Md7wQ~5HEndmj+4+4B(|kknOvSpjcH9->W1FUaAH59z(N|FwE^g>_d1N z6yV$s#~GqPgErtESwlm^kN*r&yo?H>PWJ6e!bm2xDvBrwJJq);ih<03WEZJ69bYP6qq!bIgl(>fCa;Y<7rBa(hBg%bWc%Y zmR1l~5KmHKkp|EEIWaiZgS0b%93ZX0EUf^N5CDZG19~ zj*l+QJ0e;2QRKXDEP6h!u>Wg{@2qkaLd&_OU4OyYhlgL*Xb=jL5c)EZpVM17PT~%;N;;09qA7`m}mhL`0`Gqpa$LI01l5Da1n#3+?X60%^2q} zDuDJ2&0)+En8B zL?wXj1U1zJc7WDbX)vWI@HiUefR?Wbf=&WvR1g3a_KXTl`iwIetr-MC;~lyTvly)y zgcTSSgh0Db89@a?1EV>k1V~boxr5Q1Q31l7z-Z2>p#a+K4O)$yfi_AFx;+P!Ga!v7 z)HV{o0v~Ag6nNMh;$_gfSZLBMfLviVFbP}l3ry7M}ur7MitPU z^8&^!C06wLcLf$cCI&{(etAa*D+Wf;z%fX-60@UrHXkz+BNM3o3Oek78QhL_)OJ&1 z%K}ZbfqEbcY}raIj*9-^A#xV*(RZM2>LN}IPFzk50?R-fBo(q0gb{quRyIX8P{}9Z z#1I6cHI%>wp+Jq2sDemH5ie+T(f~Bu%jFL~=9@7Kv=1ND&tL&5S5OjDU|UXy+8jJ)jU` zbL8{}otC5ks-K{4X9o42m_e3ufCvU95wKOl3L+tEYZO6;S%dZ_LOX1%pskvWj^KrM zte}EiK!Fuhqe*}dJ_nD`f%fbgWPzeWmjTpfVRU>1DhY+LWnE5g$19+GEd`PU-BS$B zyP$RkILCrklY$}~v{HphlX(N^d=5~%fq4fbxJCfk4Z4&Dv|<*t@&mkU5LC-OU_ed} zZ0P9$oa9(Qt$SF)V1pzKc5cx89fJ}pQo;a*o+7MEs=x{kVofQQD6j3rHLpAD=>nJKY?}NnMwxGO)?rxF}zF)ETE`i0mT|P$#^J`E?w zUeG8ks8P$qj+_u!KnVe~BGw>F0o3rpNDBr^!XTSPK~^woGFvDJD~N`ytyL5T%{OK% zfh}YO9bO9_6o8~5P;JTLr~t_)V881qfEqd=8x$BpQ#~-Rvw|u-9bP5{R*=_OL0$)^ zKnW#L&_OAn~k*yeyzGP|*Cp z0chr%(;GZlgVl4;gpO>wqA-$qETH=Z5P1o7G$}Z%v4AEs8Lb#V834=%2P_jv6f6%~ z3IIuwY@ob>mMI>9#;YOK3NI_DY~BG*%}(I-yn#_kxE8!{3*6RK05#-5ZU;9aK@05J zz{B_qs*D24iV~ptDn#rFe-34vX+3VSSEeO2x|sL(7BnQS${@Qq(xaVFe@;EP8b4h8e{@5 z%;SL6rXHYp1J||zphAfWG&Yn44sX;T0G+D_s+>Sm#-KJdxPn~42pKV9aO42lh0TSKC`F+r^17vXl7ihE-G&~7u$S^@i3MR=ga)I_FfsV9e1NA0B zg*NFJw1Ce7w1AJ5jhTs&fd!mD9l%TYK&6|FBJ36w5Q_=CtPixFkHwsc2PDs+2r8Lp zZacu>2wEivT2nHEQGpG-)e|&*rUW|MdN47&(?tw0u+5_W&*7R+GaX>BMH82in zP2Un22h_gO1kJO8Zbt`M0zPyXlmr>T=b(eiO~{M|`1WMbu@j*CC!wd|LgK1k0VD?s z0?28&EE-H`XYXS_4VPC$fmvWLxNCKG`vC?=V^Es`a^|luuPBcQX!Sk#{90x+CL8cd zI}UJV3BKn6JR1(GIl!~wte~TgKmo>)1u6`{ZA{qVwQL$pJfMqok!Hg|3nG}Iv*E0; zQ<|7T2ZMu_C^3OHAv1$UvS7#bFoKG33-AdpqTG&Kw!znefF{R5E@lADZ!$XCWGQij zW>CSJ!AIFbPc~$6P~Zknj)NC)f!g*gW=s;0!`4|r$CW$Ih99=h3|cS63L5NX1f7u1 zuD}XCYn>G|I?My=7E3@+iBjSObqhe97Enis8QkM#1C8E*Rv&^g0H{1D1P!>bf{bE@ z9JbCZ06uITv~vv9I0nTQ_$n1p+2#p3BOEm54LW=dbhriduxaoZC**P!&Fszi3jIk2=Zpup}p1;zo5DfhrQpksMK%QwKMwu6?Qf=s~38JwU51KN5Hx=$Xo zCku8iC@4TmK&62OQvo7l3vfd+_7qS$eZi2Wz~(rGF-w6MN9dI+>|hf*SQJ2c z7gVx>@-Aq$lLa&c%L!hU3Gs_4q#9!b&G@o_T$TV@H2|6~2BipoZgBYk>Z^m}8nn_6 zQcysWA*kR6B}z!a4Z2hUbcYIPYZj=W5KscGM^a*i?D}Gb?5E-2VFFK#gBqj)kl7E= z?MJK-cR*L5fR`15);WR#U4c!39loCdbQ})oZYR*4PLLUJNPf3o-$GaSNpGfRq-Tpo$DNhloI8lMQ?$4anIZpaKKb zGGhTP#70jxCg2zX-Tk1z=x6}qfUb?ha?ZLUWPKNCB@U={?~o0;P#3hy)RECmiCG#H zZ0sP{Fo5iI01+Gu$fYy$H&fHUC z1+7?ORRG^+0$LTO1U@7cTwXAP7Eua-S6qQY2+~vmpXdy#c3420JYb9PKsBWjC?kS$ z3OFNz=BPov4~r}%uya`y*g&6(MRV1iV#8*WM zV67rWAf^g{_PJ>=DS+1ul2%2sSTR7VNFi8jlMB+?1Z^nAtSCWMj1snrk{wY|a-bdd z&E|Lso;O*cdD8$?nhr)7GOGfU<7*fP)EWZk zKu~K4a`>SF=z;)H&BFyPzERs{*Fo+9U$6#h27n4iPH4f%0Umb(otT9Z!3u1k)y?b* zEZ|~agGmDvr8=Z1#Z7ceiVC=sq6#F@fVQ3RvVrP+Xi{{5CPh$~U{8vmti}dfhmO8> zkqwek*g(rxz-xKPNs6qnq$mJ(2>51r(6Bma0i#1U=#X9P3mBOYNe{HH0aBkqiZVtG zCL8ebI#5;xPq~6>5)(`z156-;{;|R$>DmsRkDTAF2jA zWDPFD3>t=D1Px|Ebb(fUD>1>&?_qUfG-rOm1hNTqr`xjw4B*j^8=&#D9WdSn5N`vF zcLKy)0plG2@eVM7?lxo;SPmLEW5sapE67=J$nJ#;Ash@BLbwJh*dTfOs$9&INU6G?_b?&6$5NLf8$==FA_U>>o_#%rBtq4@~CF51{N9 zOys{y#lMF zL$(r#w}COs@d5*A4Gd_Sz|r0pG?55e*$lcZ2P6#IJHlecU=JGY0b2&TkAkgCiD_*O z=nN^)rXD7NiMj%)nKY)i$nH6gZsZJHXl% zxFCnFC~-g&4F|0Q19X%#ILg5h2J$bcpAI_h7P0G^5#CEFGGp2TPJ zFh400q|;++nc>mSpqd>1#TsvS`K8&65LAW zKuuYITM4L+1er1iw~{GPQ)b{+0-6>F7j#*U3TSmIivrd|AKo2(DA1?u82>91IsixELx#i#iqJTuAvp0Cg$@=;G%UjOI)d z3Si~}@E#d3a|WY16KDfIt0vO~M$qjN;FF)@6&OGZBNSLcD_fz}FX*mlX3&K-DRCbUIOtY<$S4bpRA6#s_GNK^pI#vfI`&9O%!wtCmr+5?i8+wPK|vI>RU33HID;Z+ zVjsM*1#*4|s6)=AzzW$61v-WaDgYk)1@HG@bVQur0a`Ov0UAhPaAdJ&J^wA*+88KMtuerC1yvC5(Q>Qj?vhiYb76peUgrx||y{39Q8I$O0bSbOh~TR*+au8^4Juh%1OG zh=)ioS7KHGUq#CR*>r;%1Y%B%HHxB`)A8U_fpr-`6YngAEDqqKu9y@=6~sXpY-l#* zkP^_r#h^n>gR?95>h(B z9!R2~KoUg+k|;coB*1|riU=eS6A?%fNP#4Q7Dy7vfdtAQ%N5xaM3-Yr51>GTrU!7= zfdrC3Aul6j`7cd_iGv%I-a#0g=D``sk;(DFg98lM6CVe7+6#0BfRczKBY63b5;OG7 zZ;bp0-rvqtqQSJ|frApWz-$&J(2h|@(C)9>%nYE_915UALczyiv4Ji~W`WE>fVYyX zK-ciIXfSCg@hLEYu9E?+WS5bIhPi zWf&lfEIGIp#1%!sGTe#+3ZkGwiXF741hbF=EwoTz&I0ZCP+$g~G|uYC0iG0Naa71s zWCtDA4qaQs2~76bE!ZfPxYu$St6&nOJlgltGIoSQJ?F85BY5DL^-JF`0l4 zv;klKYy+CQ1hWi4+do0FpbN=3Kxb@fFsXn7l|=#6t94>f6jg?tuEPwPum@Sh;K&IY z6$H=ofbQ3304oP=pJxR1!a-LUf*fX$lcmTHIy+pSkwFop&H!{kvOtzV9yq2T$8dor zlo%922PJ~5a_}lyPDh1oMOFn)&_*IqpRGhu(6L?-w1bWVq!WB{3x|Rr$PG-2jG$Bv zx+F=FOM%0Y36yw1Z9LE=sGvl{s=%Yb<@karOP`TJiOU;w&agKmt8#%>@q$j711}xs z1+C3n>!i@8C<;33of*`d7cgg50Cl9nBRrthcFda0pcsLONkF!*vT8DOfZ~u9w51gs zb6^%YHo+`#3^VI8fRZ6-Co=T>CuVL1UeKCDUeMWApq)^lolAa8xG{_S8!pN<_4LZJnTY(?6xCK0xt--_tI&7OA zd;kvUus(K2Ml&Yxt_pV0=qhLe0<=&Rba}W2lL9Ex6j(HwR6qkG;6$MVI~5fSnXC#N3QVBl3KXZ9#RE3CfFg@UfeCVM5G!bBEem9?Jc}cj z6@vo!EG9)xXew67R$>PwV(^gB1%@moUeFo<@T4a602yA;>D8d?rvLwEE(E7uR#0MO zR$xU=j0}n#pacm@jG!%QC`l1?xDG~A1Z|2{WLDruON#thlOp&oSVlxz1f9wZx)~L8 z_+v>HIGM2WFmi)tT$#bktUw2>GlLT;1L#^dO=byDf&?9Z1WKA5p!5TkWri+-hKdP* ziX5;QNC#-7j2)EXL?BaH0t)O3ypVLn;|K~5P?-TbjY5G_;0x%aVNjU_Dx1LbT`Zsx zQ_xu!;M4(f9E&DX06axSm@#F5Mu3GuOEwr3K=vsxC`f`FzyR9b1=@Sg23niJpdetz z1UjNl1hgiL0d&H7f;p3l0=Oc~0L3$df{-<%nF50&gEgZ8D5Zc?lm>W6T|ofSQYeB@ zpxdh06hJpQgSN)AK+-(-T0tg3$cXa>X7Hh5pe?J85ACxZ7dU|0{S1yT7_vY&L4rU@2R)d@0V?gmEC$dX4PFIqXk>v|U|BE=tOLvf2OgLOHkn0%L6g}6 z64DId5(;#x5CiyzNzlEL3}6>{D1g;Tfa)bMO8`_afms}&dI`(|9rFV^@Cv*wfB{t2 zrz>$d%7YpgETGvi4$whFoS{$wI3j7cgz*Qi+JD{!rtxrw|Da}#@IeL?UKw=Vzpwp!KlE(R1b?Vdr+qnY#QkPXiz=^t&hSU z5iE{37_;z31~?EL8Mr~d0ILQ~p*w11!G^+FLDo)ZQsMwb8)PV)1w4Q#s=(oBUkr|R zHb=%RM+OB}=ukL#2pk-46PUom*kE=ClR5JYW>6DElevKjJd6z%|G{X^+yNE;z-Z3g z0A+)Q&wqfMJDSX(;qwnrHfZ?#1(O0OOTJ)&4uOMjg#d*TsNwhkdh5drDE$FS|A5jB zOpx0nI+#G)DHRm>6!;t!{H2vxvlaOiSQI$cDv5!{#6>}4;^Lse3rGj@A9FLLZ;9w8 zq4p&~w?Kk6nSsW{MUlqDMd4%O;?Oa1QScS0EDEBu3LQsAMGja9!E&1bXqcBl0Zef~ zD1HSN@L)M8WI#>$IZR6Ih~7V9Nl%d((;Y@o%xN&qz^w!n{vcD9;8yYkYRUrKNH(7yBsGAC#Np!%3ZVFh4vB-9 z4L|ssojBTBT0lKG&`<(MKw*HBf`W(wytrl2V7kMk#D<7sHpD2I8PgSLu-?F}gq$$r;>AjzE>1z^w#y2@ELyj^I|Z2WrXz+)6-mGoYpO3M`I05GAD` zXeWpuXc`c7nIk8t`FsIsQB%R~J4lp?KDX=)MXU=l`^7H_M!f=4nS|?EU<0enD&XUQSd=)|DvE)Y z1~4dcD=>nG!8pMiTA>#zh%1OgxZn#FK)Wkh6*zsR9hv-D96)`41#a-Dp_qa==tc#7 z2GH>e5+$HkOo?Md!yop-BG3u;T%bw=Ho_&kT!{&Ef;}5}m~*)zizAC7mjY6D{zAbf1qdmgU+mQWKrZ$U{z!SjmE-8IVHd+`iq(~gH9m^ z?Rf-^0J1x>xG6D#cDr(bZptlDU@uZ&k_Hv6jD?_)P*5<4feKOYkdXiFc=9W0<$7sw5ukz*XkTeCT`K-SDM zfZA7zEXd&}>cmpR4H|C&EinTRK!N)G5Yst9cZY#6D3F-4VSZ*&V1oLY3FK!cPz)iG zG?JguECMB5a6}0zfO@VVKeIq1N>BkBQ7qty;)nRzjl}^RC7|(4B_{C7Hc!y$MBd=N z%8a00ToRy&2OT@cETI5CaYICb8SFgJunRM2cN#NjLnFHan}DAJvo3=JXb1V&1!7K+*uL69?rGz^#lL8-P{DDyd!ZI*t6o9Za%o#Z#ECq8$ z@ZnZGO5pWc;1j`_9a*x#8(o<}%N;>E3*-%EO-2WEMo@E#-%+3pwA~fdn`HDbXXFC+ zFc|~P8HFIM2y;d$2rI#yQ3=9I18s2y?Q3St0_}9>Q2^g+D6GKi$;*Xwgtq`_Yys4X z1Z^dU91IOUJ_ zS{9_i1Q`?;L>d$aTf++)vH+zau%V!}s*0eExX``=XeSpn(pi zRAfO4J_c^^3FzR>I-pd*#A43i4BEG?$>3nl08Tfc!5;>1h?u)M0|)4e21p(S`&s}J zlmes$r2x9GSwJ0scu;ad4CNxtP%d;snZXCCf+qi1NHd8A-6T+Dq5xZu4jP#R?S2C# zal{^}yP$RD=zFBVgOUuOo+d~!VviJPyVnQMCPMDN{7l@CL+>^)W`j=Y1(g8!FzCwH z9n7HJO3ds`j0~VO59)C-INkuSBmy6{22!&EqJ{^eMuVw?8MXu#)O7|;>ob7T1q*1Q zD(Em3(BuyTFKCZYJxB{U-OjE!#Xj+rSjA;V+!nPjl#<79)vVrznfM=T6 z96_ggu=|6|1+@ynC*^~UUII4KjA;Rw2Hoz?WX3cHv~d`8aV_|`6>uK_yt?lOXuJLk z&@G~%@i_)ZFcWg4>I+6tP_S?@vVeB*f_AVgvhaXz-UVGCcZX4t2}Ivu1l@oHK8ElK z$Y>TbCQz#%e2%3R0|)f9iVyYzpO_WFCs3+5HgYI1fmWQe!p;$eog%8p24+Fln}eDk zjBe7XOS#bw=xG3*yZ~{>6VOQv0-(k0ilBiB9xw~M*H(i`1Tn3nc1_fC`MGknjeh%ms zdM-1jKcEogHe>n$qM6K?zJO>pGo}w9n#qjm4e0o4P))?(_y)8`65Oa%ViE8MjmSHI zPo!lAO&BpLvVitEGHWvVD1y&i^nffucL9yH3;bYIU<3{3Gb*xxP9tSd;01To!EyKp zUWbSEV6R&jK*NaumKvv4Ir8c8s`j-KbW$h@y-a1cP41O zvqIw?a%H;`=s?3DM=$*um%5fT9yrE`ru%2s{RR57Y!>&|rGQ2y!p@ zHs%kY(iG%v&|(YFt<9jih(VJHv^>-U6g!$spw*!c3ZQf?FbjOyG)Oy(11P`4b%RRB zCrnuaRgR!d`V1OON0^kDpczep34BH#Nc{=W=_?@HxIt&L-dGRa<|nY4g@IdO4GRNk zn-t^_Z^tK_p^}boHbPkn431zsKqehwf}eqfbcgr}(DD|Dr1`(W0j?En2;QO;2LB%=v$f*^uE5tW| zOm=MG0F~`b*v$jAG(nr07`dT`?lNdFZ9t1NM`+Em1tRVVI-vlxlAej%@x%E84335Z zt3YS^BC$c|Wmz%o0L{8>03CA%3UN2?%X~~c^&Fti_yMMDB__~W8=!@~O3Vt30^OjU z{Y;w76PT3vKz(odX3$Xspo6(UrpMlL9};WPY&8J3!mDnKyvR6<~4!NE^sZh-QfSB4C3= zog_P)gzFRpK>FpIYamWo4%++->Msc{2i5%Yg`oDjfC7_(0F2KLN=Zx#qF_FMp%Mq^ z)(<8H5inoA5VWyX0pu(&pTAIv3p7i_q#z9AbA#HkObUEpzI-9*iVq0|CIulFpBGf2 zfsVt_$btvp0%XBa)fP%h82@(z<854+}4In+BAcg3WF9cmP$^;2U{$>Sm{Kz*e2!dS)4t6^x z8wG@iL3fvct=IuF2xK`VC_q;DC@?92PeKD51c@IZSo}cE(m^pxLje?27Z{Mk%89WJ zl4PKa2~19mZAxJ6O6Y+GKCTLs8lh@`FhUt0Kn&ER2oF8bArDNN%qu|VD)56-6C^M| ze#n6YQwLZQJq%+Yk{iI1kkkm#2@1vnP%;Dg7VP_f|No;0V+xAb6Ch^ofSQFGlAyz| zFhde-W(_1L?3hAOj0*srh@{EHpu}g+TmfNoC<#E1iel7cQZQ!*A0Wl3$s_?eDhhOj zfB<-s3bdGzNkf5ed6pRySg!_?fr0>t2R>+uNrR~d)QHl_GGnR%xf;}501236L683c zABO=Fv49*_0X`h02V7U!WSKGbfC~~0rU_sXhb%J?3#?`eSi~jEjA;r~%?z-JM;3UK z9azmAu!v6a^JHTdxk_ku|fxNW>su)Y=+5?rslDpPGrLbhL z10X4IF$GQ-|1lHB7LW=^HUcH24InNPXvztiIw4Y^)OiFXg_$tGX2KK35|AQ@9*}XM z6Vnu!G(k(Pz*}2DxtGZRlr}&i0g|y$;x}go6+9r0gOZRrGpLXUaXi5DHlW-OzR~yt z$Yg=#3cQeJ7?T43as{?5GbXTJq2&so>x>~+I3bp@AbP25^%fd;%CV zlmn`+%)vJ&Gifq+FqwmTX`ondU@~X20M&t-%s&{-nLvlXGifq^U^Hja0JRwzK+8HV zfDQ1B?LS)kz>P)CZR5OkmelOv0#G`AAdS|^b@B>~W~WL_3foyeZ$SW&11+LsEN3I|!i z?y11y_ye?C$h!!%sKt>3G%U@=3u;lHU{>JKU=onxVdWOM2xd!2fsS-xQ(yp7t zSnZgw;6OutGx%OBRt09z(Ta+o3t0sMz{jS6PN)E_vjO#=m_XW)^e71+nGgs%+6-Bs zRZ#$R*f1w(!>EEl)pAGXGSJQFe2zIeS&kyv0&5tTEAba9v1Ms8Fd&)JtRxt~;^4>u zz66U+feSQi&gIAfItCiFE|3$u4)C;yfD>b_flh$6VljZ18!9j;@G3B8gPJegperUoDN`iJQ5u{= z7_uBWvp}6A&{Q=;wgTu*p$-=CV2A<>OFcLa6+ycQS(zL_XS+MH7dkSyXDKm5)^0L8 zG8QT@JO29*T6Uwz201wrysJW!nL$Ya6!GjGPK`}1;HYP81~o_i{r&y@{r&y_8Cq&U z>qx-eWl-OiSPiV8p)t_-2ovPu2=KBvCQy8nUQegSR#lXM~IuHbO06KUU4YYiy0dzAgXqiB^A{R&y8a<%%!9hn>DS(c55`iT> zMFCJKvM8}B2rO6PEL36v9WAQBf{_+MxxkSFygr0kfdh2b9|tHcawvcfnqVtbV#cBa z9NSE=B+s0s09FT2f#|sik^-4QCq}bmgLV{V7b~z8!h(T0O9`|%3N$eQN}J%ZTTpIR z0&TkH$W~y3Bv7z8Xt)ECCKW+*W1vMI>>3Q91B=)dm^2s|%orFz?gmpD3=l7~YcQ~w zF@Vk=U=^<#X;&h%oxD_1XCIeJm4T=*I?i=W8eWD8V;s37zAMI!I=PbY9|9Y za2XUqqu8JWbXl_$I6;mF4FrLLok5970W`eAkqvP?NE{r=3anX<|3SS~&~hWtz&EQS zR1H*^Nr4@j*_agAp_vWL0;LlL7SQMws{*$hxCB=O9iPt)vJd2PaQV-m02&2#gcOks zpt7IU5wx5Uln;5BV8twh6b~be%^?L^&j(tg#{C#n&wyuAL1z?#I&YxcgO#|}Dhh%c zW1v;4kclNOP_y(ubS6~*l)L`_|IZJeNo50_Q>(y*m`UYS;874z5Cq{6>E+<5HV)9V z69?+F6FaDafz6}}Emz_M%{{Uz2!ZMrMbPc=>J|KpS%%Sxdk-*Dx~Gfx-%eLDP2Z3S6Ko_*g(!ZYZ)S2!eu% zMG=&md5~sT*%bu9^QfTEPykJ5v4Cdal)%$-+|u9$?FV-FcZno&<$Ac(k1izX~Y|C?NdH$OG~(D4w9g z+@Pb6!7CHEK>h|{kl&f1+liPJc))ia~Izvj0HLe0erVGD`>h3J~_t+nw(=);Db)7fi@VyHV}d5IoUw%YG&{S+039bP9T$~ ze2$3ybYKfnXZ$!IhH{W*C+ippn+?J zEYJnMpavZyq>2Z5oxv4!tOjWM8*$hr_(((!NET<(gw3)tL1$UPJu)6M@GL8nCIe`e z6;y75PZ{N2z{|u6>C6a#kF$UkKiFwdVgn5i^YJn=F|)9;vGee9aDs0lW^iP;W@G?e z#|vfgfZ`b}#?1{%E&@s%p#54Li2Yii6YQa@%|J}h;xfo;GY%&X&<1>vfC7h;1c(jV z#HPUEqygQG&*5az(bCeQ$O$r8f)*xofU8&#!2!Boksq|E7<7oL0O-C?(5@Iz)eowV zL3@mu6*$cqKr4ATKx>I10RTGj(-CxODhFs9iV1W`?T8HkPHs@b0iVqcnuTD21S@!g zA2e?TzC#rsfEcydY zuPQKSgZJ)&Hi|m3K%)zEBM>;&z|CH^ECnV|qZA%fpmil?OdO!g!I?mr5L_dHECMY) z0l5t9E+yt{Z)m~81T~jKkr`AWf^PidR$v0n#DmiWsK$lt4T0qXP;yXU&H`D&4!*6P zLy@MIfUY#Bxlcg%Aky3t&`G{Dw*-8{JGit09sLf9d2l-85tz&f+DyZs!~~g$Wz}Z{ z-5tQH$pl(F#{gRA0N%XBpuhpzxx}ErXw3+o)C3iVAfrGoX9g*Q-E0Ip7gPy6Bnw^{ z$)UsoO;jujh(rZy(}9u`XpRV;s93TWLci{Qx>vg^qpzwf#ZMdqEpuKwW$l2JZ9ROe%GppmTT)vX#_T7!=e&(Zismu~rFu zIyi%p=2|6|IwfwW*?%rhVypvqh8UZbIGrwSJi}54%DF5`T5Cb`>vbTVEJ}K7L5KL& z)hH>}C~!KxU4H#JW1RwbjgxFgjgkbKDO^q>Z6IAdO4@6ccoo>d=5Z+LtOf0C1??Tw zU8}@V2OdD@QPN+l#IL|!SEImW$|Rt~tiS@205N$KSnFz(lxh_;LCz6T(#%?`B%r`t zSEHZ-GF(JSBWtaapaM@_je-tHg^ZF;)>s!l;?t&+5Y z?ph@oke0PdvIS{o%y6S2a*uf6cSgRzjpt)8_p{`a* zMS;udEK{8VcWn)*eOy-q+Fwuy+CfrR1G+4vu0}~!fzxT)>pAZk>uMCZAW;BfKtovq zdnj`|9sP9v!OiD}na>T2MX32KXtBr&*TMxg zMu8LLks1Z18U=2+BrD83R+xD#5ci^+hv_k>LN+vuSs=DBgM7uSz+YFRzyS_aDFyjD z1vv$Ux|&)gJ_P{<@j3;?S_MG`(YhLtgU&L6d=7OgDEMF@$^vsC3(SRV5ErteS9j=8Fl!w%6LDyZ@)qw5?sH;&BQUE1P0R@q|8U;ZGF|do| zK#l_?Oi56{D9D1GsKj3jNpm1Kz!C`?+-P=~YuI6~;lS=1Xla0y;b98F6Nmp93qieN zbp;+!RH%U53d&U6P9kj}w}Ms z0UWUca7icG4m&0tkn<3>YbY=%s5|mx2`pw*Phin(87#V039_9+I9-s+Y2%>2Q(eR05TJFsnH+M2npo)L-47o zpzRnHp!%0Zfkm6Sff01AnGI-)1JsIT)nEcGms4PcT%*n62s(foRA(uGj;~f=akR-& zViQ=ysK6$$54`8IMu`n_(1JTJBj^+z4JOb&H&Ba^iQ93>sRIlG3&CeAfX;1K- z0%|g|fG#;uYXXDLA(pvH43`88o^@+>9qja!U1ueHz039)_z~RUM z8lwc=A|-H)5fan_j!aNvM8Jy;L5C7RLI7$Be1|Hd0w-vtC1|Y|BPf)AFl2!@*cm`q z{()T!T66%~3&#Y$ZWw%xd4MG;J7A`Cr zOaU;bgdm)v!Q`L>8U_YA#04e{31b5#Zg>>I(hxhS1;GKH=VJ%mTgm z!$IniC)N0nCd0s!YRCeuihQ715@rQH@U#JFE=`HeQ6L+%ObWWT4|Fav2S`AH%bgd* z;Q@1a6u1Q5GJ!X|@PX#Z_?i{@K;v)ON}S-)40h1G6bERMiOo?2qys#x4<5z^AC{a0 z+C$6ecm8oEC)^94WNzS99f{S z>|n%_4>;iQ&7%am&I*(dz*j0OKrcFn=L67<$)Kh-=mY~$EINYj#{!+P0t%Q$4sZ@r z0xtt&z*yqT3|<%pUSI}V`0fZ=;>!TNw2A?A*giOWBT@^fImZAxjEO^u8Io2&*EX?e zFj;{5yBbU;ko0T-y8B82GzSgp5P+9e$S85L)PvfI0-%$jz^MQf`}k4|18BMlbk;K@ zwSW!`MM@vdO2~-=Yidyd#kL|pD2XE{8U{y58esyZ5e7#{8evml0u@c5X%ZGt5&*4> z#t~@TD1pWe4>V8|fdfr}Pk|pLiGlph;mDZHs=&+*3K4ctNe(*Moe@%OI8Fd9l;h`i zJOWEtKe?IM>e)au`wQ4$%jGVxf(kgqa=8XJ(3sN?@Vz`ASd}=y3yiqI>!~=w)gEY3 z258L~lP2>6u&Nti@&c<84_GZPSS=S^EojOMw3vZSffFnbF$J_7LTvRMJNT?fFd;7HBCRL(~=O@82&V~7BNtsKJ=n&6dVgn|>iatvV{XyuqA zXu%a|)d%>}E^vr`04-QjV0L5`03EFfI)4bNHCon!1G`%jz$ojH&{TYTElcU zu!3|lIzC|l$+Cggl!7Ch4Wb-W?0~EQFWLf~1nB`;$~A!zwmOWdgAukmjHv;>I*h3T zv^b2(aRD1>QP*ZcCV_fMP|*)M4-&L(88jxWz$mZ+v^9X)lu1NM$mz}J?On`upiKuH zN{nljgq@y0da{`jEWo0~v{p&P>D{TX{~198DBy{;wMybnJ(EBDW`KwYD6y_pl5lE% z)_NJFM#$;y=j~mLbu~&-wV-7Z8cY&OY*}lSq~WH3_iV^0F=ee)l5u+WXvr3kHt?ng z1trF;wMw#1-IG8328|U6L(NhUff=u)s379>pBX+JCJO5*i$IksNh*j!JI#_;WJ*UmupFQObBKZ*Gz%!GKvKVgYK@X~Eh6>82Cc;5c1ggTCxPZXIkfnL z=UG@rRgi-OtQ@%Y2p+WZQD9aOf`*TRIw-7QWsoe~0}5~tD8U@73~{WIOs#?>IG>9{ zf>Qz>MTm?g2Oc$&MA#Xiz^ot(4JZX66vOT7lw=jOYHAe};I@l^&6j|fkH|=pU{fJG zGr&FxQD9b3K$r?E?-W5{2^!#nW*rf*KFE#?u)YWdW(8qT^hwt!2%$^HC@?FCgCy0k zNG2$N&TAEEQ;@+T2|CFRoGN7DlHdU@&_Q=dwr4^ZZJj0L$x&uVP@y721pe1wJ zppKi2;}s;HgyRJyo`~ZaB%Xld2_znm;}IkthvNYx9(ctDgX0dUkP?fdd})^B9vGJu z#8qMglk8xU159#)NiHzS4JLUUAKqH@^JFFCWL9>)_9v=!1boUxUr2vYYATm#i zI1XqxrlSU^p63SlX&DO@xL^!U7y~ji!dM8pgX{nQ|BQtSkS)KAg`nGYAtJnv;JJlD z1s13-(0XgxvMdEYN6-XNVU`lBBZ$lI2p&W)1fBZ?;tM!}b7o_Cb_^Q%zdD(LZGWZL3@rt!^NQ6vSBU--IvFx0CO&AnGPe|&ENoqI~>##1ugD? znF4Cf!dwp8yu_%$?I>HOzyn&b-q3J>p)d>TEyz)Hi~?IhbK#KP-Rrp-#h?>o%#d~H zppgRzR)C!?3OY>#yxNT4k)x~#d^DaC=;%o$76m46UIr%6syBYfURWOR<;)5kkXyTW zKr2l+SR531Kxg@7DL@Y|Jc1@JLr+zRa6O2VLU1s_Bq06KQjjETpQ zNl^eap618|+F}eg7rfvbY&VM|2lz}Fm^WELmjQy+fUcYZ4aY%Fc4XFI(oh6n;iCfD z;RimJLI-qM9%$tsi-Q6vb#uax8Dmux0j-t>k9N89f_5Q7#_>S0#h@Ty#Q?fCj!i*0 z3v`|%*s&@KAo~O^gI1lg3%p`f5CW}TQ~-GwG_lDKx^0sO9Lyaop#7>0NCtxL>Sj^k zcje_!fGgqPc4Sgy1qV78$m6`=m{R~{S1z!}xj-K0LIgTX7HE3X8+?`wC)hEd^DdD* zF9>ecA$guvfeUo7CMWP<$0SwYZ@Ny3o{w6TE6L4gnCc~OYx zMHLto_`seQ19@Hy#q;7|HI595T-ZF%2lqTXh^3>*s~`sTJSa#-kvz`@I#LZ9^Warh zU^XP?c|o3M1|9qZjd@nE$D!V3RS*QlydXG41)+gM&7g8*f-GHC5C??{8`#I7Ta6VM z6~w{e!VU@-(D^&iOwW?#2~H58!95kwfGHzVf&lLc2j>RxhHf22PH>K7VQ~PR_^QB$ z6egfmACLr#nIJepVFEhKnOA`i>Stz0i7bI5j0$Le2h9l`VZ=!2paD@0CJ|7+X8>(_ z=K zq`*gY$|x{^Ze|8uAs_)Ni5V1lAm?{-fKHrc=XPXNfb7IZN$21^30`fhzz$jc2QEBx zAZ&16g0jI$3(5uuDU=O5{Z@s6dzk_=e?4m*V~sL{;|8{DB`#2@t-u7{G2_SxS~J23 z-!~09-|{pdtc-6+oxJ zfp#{4?mE|GU{DfvI@U9D(~}bu7awD&Q4n_8@ZdmWb6d|0gIXow7UU7$09Rfn1tF(~ zL)Z1|6oj3)Km-SP0Mo|cK z4FPEX0=pwewi3G|yEkOiAGA>e!_U|hI34SYK|7h4p#j9<$ms{(al|$-!NUd`XlDb35@^voGp-bn-6i{WUHtpr*F4GJJoIi<)3nl%vuMGZGRoLE4<1ntpa%vNFs1vThOH&AiR zo(&0tHHx5` zl?pN$v_M{on-{!Ehnw4pK|!=uK~#ayQP)jcNmxOoMo~n8+f|VplpuHU+>8>;B!luC4vR8v)uK0XkTRSsJwc4M`@97i4X{8!r<` zNj7*Xx&li!IAp+gVKXSOWP{QTD=49GDzJb&2D&^fTY(cA`m8W#FiU}^k+K!p6u|Ca z#o`W7y#O%?vqYbb#d3aBh<5C|(O;sy1N#ll$}6oi&5GAan~QWRGZa$*Pu zov7f*T%yg~vCTz6d=V&MxDMFeorOGM8j)GczpaRuqRSS71;;F$EkrpbZB?3c>;#LER6=LRSSY z@OY&ogGUiBs8^(rr68mr?8I0ju#wTR-mzYR4YWT|gGs|(8Wd^*AVMKXT9FNu2^kz4 znP9b@0vqJEW-d);0YzbuEEnh~d_Dz6$o0aYO)-uPij2w(juY6xN1`i$FL~y6WN_?c z`@;?D!9WhSV^U%RP4R&a{Z`~vU{YiR#R3%9Lum)ljfw z@Ja}D-(Y>Q0$Y|MXk#kqR-ON>patN}poTGMojqui88bv5V;1Nb8U-FuEdw%;6~!db zLQc?Sx}b7F333>g0#6orFD0`hgCclsIOvEeMbOR4pq#113aaQp{sk=?XNOz`4%+$w zI?qOdB^!KZlOAXX5XeYH&^9M#&>=Q#3ar_R93XuP;6w94H36t51l0ndWzDRRN;PqG@F^(_3e1X(3SbqWJPM5h4h3dKCeV&x(1vZWA6UVqH#2D4 zCHM|X1JI%q(EWp;ogh$;fSky|!vdY{UG zD{(lo`+_f|2RW4^+p&QSgg)GWmR1TN6G7z@2QT;<2L(pRZ6q*Zh*v?iHfYxhr#EPd z9dy(aBd9F~nsEl5x30jR1v>3Y0CdbGQ$6^kEG8w^EG0olNLpf55Xe#hZA1iJ{m2VS zOQ7giWCC>yvz0g$SQQ|9tPBwL@G^lm3UWI#a4T|v&(a3(x?%;TJZ?oM(8gRdCeXeY z1r7!7Z17rnZUsouugD0>S8NI#pqnb#6gWIVH4-R)D6lDTfYwHEf-ZMp18r|*a!_DZ zU;}Sv166g5kfIBeGC)g#K`l^LQ0oG;A5#G|YXfRUvn#MDFoKWX0Uegp$Oh_XG_Wax zhCmwFK<#UGP~p?V1}YrE2cv_s9<*h_%b);W^^&c`!UE5v3QV9n4%Gfo;zViybAVbD zkkjNqcW1DH(iC`GGP48Zo>WM?LWu)Zmx9)Eapfq04wcj3oipGy@R5Q8*~k3wgQs^C#V>O?AQdY+y`9~BIM1>$n7W$@-Ae# zKO~+(I>4ue^MMN|#~wD&I&B4Z#|fa>B}ioq+O6Dh6Pm_AjV(}-1S&=qK&2L!29t^s zljELR4_*ex|NM$<3QUe$nY?&Gry?-;fZJc7%R@jpoY}$A2DCTUQ5dvlh)I{>#4%^k zo(WL7slY5Soe^Xx$gqY2AJ9c1pi62%dsi5|;C=*`!d#9TS&E#XNLK)91zjZu>WOga zGH8H~I0GF#z~l(h$mA&v@`4S>m)S~8j>7(++6Q7Ww-U3!Ot_8z`9Usb1l@-N(#YTg zZWVw^I3*^>#tI*BgBxU-qm5%zg#r`kdQ?V78-HmfMv%K1LAz;~9GfaU!D)=i@jrW( z<3D~cUIwrW9Zdyh!U}b8S^;@f0kYr<9DXd03?96oD?Nm~L8lwIvN(WRT%aP01-zIL z#B*c-)n}k{pFoT39OViXLHjPjO*3W(aDzutNP$&>S&7k`rA|Qzv^6iwQ6tNcfuV*~ zL5SOls}3v=y0%4$8MGfnNP$s-E6Y(6tVB@=v?2&pHY+iM3P4c4V{-h*o~6hJs&qk{ zR>7lb+=`4ayBHN%{dpM_K*n&w%m58>frY`@5!AMK11+G-QUaAdO3aR|Zs6l{nH^a` zcZf4_D{$#DtY8Cq9W-bM3U5%GjePYTMGXQWpu4I-(Vzqx1DFo# zQVD?yc_s(Yq8SDyPEd*j?PO761&63pJ;=|FLg4X2@UdZ_kmO_>bN3KRY6@ zIYOirn6f}8K7h|TWKdvGU|Z{C(xxEXvLCgz2I|jm0F@Wq*SVRw>X~Z5hm3&cqnT6~ z9Gjp!hCrnTehe8o0Cm*(cp0D@^*Fe>xdntk1t#bgY(*9xL2kz;4##E=kYYw@XhTAP z8+6N)fFd6#A!ss7DDgWnM6x(Isw=WNszU~A8C`ifL5&IpCeS@PIiRzMK-cduIjWm6 zrGQEaMnz^v4MjFb4Y+!C1x80*$nHc&h*}LZrW8;aZ^o44#Gt^hz~{sew6>;Jk>80y zfv;AP541m#BMY>mOM%JJB1_;PGiWLW8UP?Bj}j~B#xd~L879Xk44|zste`zvOd3oX zii{v7IgqVcpt$5#03BWeN^}Y=u*)M53R6IF1F{CRV+_=kVG&3Kb<#k4)+~4#6qvM` z9h7)xx`1Q&zrAy+s{)S#&)kL3MmGaPQV}nM0*}Ba@K!L;Nh;5oxgi0nz~;&enmAzt zkA;B_4hC=BWz=LA00p!J%y*!?2XZrL^(})3FP8!=&0`P^nX8Sj7foUZO3xZ z%`TABsU4Y0Kr0|SjyQl;IchMyI0QPBk`a1(jU(vbOz_Qg;G=^;InyFb-~*`j#tzCW zps>|ZVuW-wpa*|~2T_h_y;K*3W;s84A23#K~FoT9CL9+v( z^Eg3=)PZt?1!&6007QV&Gn1o9mcV=P-d!8eScEQvg#zfBdwpUH6si~~Amc>#%NA zI2&Lb1qCL@9WV}Pb=?6N$3TI}@dS)xp}+*XhQL<<09s4ypv2~6)}h1-+8z#GD(j)d z>crKi#L=R}j@T{Ej<}`LiD@Tbx~i4Qwv>))Q8z zhF{Y(CWDv=li83=Wn@gRbR2jKw_6X5|Kq>c1ENE_*S;2Y_AARFl+2TgE;%;iRy%Z)G>#6+0O zjbtu2lDXVY79C2w3fwT`TUuJcDN}(9WHJ}RWG;lsASS|OE+mt=kWA)+83{59wDli! z6&sTRC&*k*gt<8Hbmv4emlMfcPPn<8u#f<)$L0aeJ}h^%FLXS>P-Mj*4_XVo-0=rv zA*dAtI?;J6C}&fDKfgHxX!433v0WrLf`1~V5_HZ_3m zoZ-I7#l#M||84@RINCwWjPvvMmm{6V+@P|3JgvS4K4qc z-Fqk)0_`b1V8~KnaAI(Jd!_U9!q2Z;gPp)*yUd`HS%DFo1n9s(kdA8~&UXA>dh?Pc zOh*G_7FY*{#017H(8U%FjG*JTHJK|woB|~-5S3A*#I3*;vbF}ojZokQi3TX~)F|+T ztgWe0;;vERaWd{uU{v4Hy6&!gSdwY zq<8|O0z-`wg93xogmVlHO57l-u6DT+D|o?&;}eEFB^F1<63~>}q!Z3o49cLXV#moR z4l{r{IaUmy<^HS+ERIhYanZ5TilW26~}Y*73eD1j!q znKeLc1xON+Kus|mkQBp!nPM1VDaJy9O945-Fn|*bC^w=f7Y7B#8YM)&lbbtk^`LDI1x&~QJ{b|Eg48(3mAS;e+xn*1%&>U|p*Sx}qZhbR-aHg%4D( zBV&m!!(>o42j8O0f|?&d8v(OGyKcGPb1^a1>wsFL7eK?epu4)9IvSc9IzYoj_29M& zBY3Kx1KfUL1T7N)Ni{Uon=|iVRA6*!Y(%Ku021hGXn<>90TBS*nFwMvfG*|*X|D$# zR?O(s)X)Utf=vS*9_-YNB+voU(%Fbm(Et+YMlz#9fzheEv8jQ>oVh@O(FtTThdFbG z0;5xB16VXcfzhdh(VRH~B+CfeAPSKJTUrmgO##&d4j>OTG=L1W0GrJOy2uEWvJjrs z0GWm4Dg^~br=~_GPy>q5i4oK)VbElr!Kf$$y5_V%Q4mCVC<=in1w~m9HGxr44n$`t z%7Z8e(8-XR%o2)RAYKQfqA-X~P!s`C7NC1wLGxm4AYKEbq9}-tP!t1Epw=RTCNqa3 zD~MMCn!eLy4p5W;@iY{9K-2+7MM)67gHe$eL~meJlmgK!7!{>K^a4gjJ`l~I$nVGj zp6udN;BQsnX;qMDRS<6l9l@s{)vCbVsvy#;Al$0N;>6h5s>Gqd-m1W*z}u=I(5fKc zsvy^@#HqjxmSR?rY*o}#;82imbz{MWBRbpv% zGVfGU1Rcw$Al(WwP^?u!v=ww?8Q37URwuhoB_*f&*5+14Nd*A~cCav~f_STwW~Y*} z0<(f(tCM=Ck_t$Pf?}(pv;v2MSgR9Pr;@4yivn+}lSL=!zzzlBRww>WB{h(;Rz+dZ z%H>uk=}ske1yu!31)f$Xl};rMh@`jzrvhKAlTfD;p8}f#cdHXyr;?@us{%)>6Jw{6 z7DSPt0<(fls}o13lC}bif_$r!WT%o2NJ>GoRZ&cVO+l*F$+lAowDLlz)k&liwCz}d ztJO)SQ;7?ttW{A+fkQ#G)k(Kgi5*m4Lj(mtSIMy`v4Fv!ca7d7S~&+X6RtL8}ND6okQtpfiA06C{9Ef0;9b+SqL1 ztg65aJ}jLFenIsE>>Ys-~wf51_e%VImMtL2r6J06ofz}2I!z4W(5TX&}GmE zKz2%-Gp_*A{Ggr=_#T-ZAg+`-Gx+#wK6B;;pvy)sfcBbl|KVihst1kyF*q@Tj+q2c zN`jU)IDiIRbr~)&f(OW$9ak_auxBf=dGdk=K9~y?LFZ$#JKko<0x!{E1`Pr+f)+D@ zHsk+cECgRf&jOm(1|6TQ#08oT01YLuWGQj!GB6Z_x-G1rGk$p#cyt*+lPQd#W*=0X zD@zG3&V(e+4cht23Q^At7YE%X4cfc~8i@yQ(FRxVS&FO*EDG#d3XGuhi@~=MvVd;d zWdJX7fm#G!+5#HMR|H*^%$Tjj0j~YH1+qaW&VV+jGl3`FL74{>1_hvtkUz zKfwT1761{8PynAy08tkK5lc{Dal8RjmjDsVP+)O<029lAh!rS+@9c)?Er5uDPD=Oy zQ&#~I18;Tz0TTpOo}f_c0BwM8V1zmcRL6ouCxApdV4|R^7$iCaBsu{m3OczTB)R}3 zIs+yOO4}gO6(G?CFwqr^3ZOV;aa_R&S{=daxPlRMN#+Vhe{g)WgQwNmA&X_0K~qi4 zj-WISx*Z7=)8Ld1TDkiNbWnMrA~$&UoC~y&A9QOoc&ZoFJ%B7Agr+S{(0XvtN+$5E zE+Wx$A&Fy8+-#1B#0@&qg1U*D8I(=IO-y#MC&5Gg?2arTk1~N~Wim!L)T zO5iNa2Jt0}0vEk}$*jPV1%G*)$lgvw)7N1)2AP#hl?O)bhtH=FAVE?At8n%s0SnU4|qp2CzHy8567-LC$A2 zW8ha{Q(!S;0ISese!*?dpbWB0llcL+IfFEWd4t=WL0EweG6~&9Zs0dn#>^EcSG5r*f|VkgCgxTl zknwUy2T;eE+0g-X^}v6ILhv3k_A>A}JmA#7fmz8=fpu+-6379d;AGQe-odP3pkNrX zw#FR91l^#`D&PuPNe)^v1v=RUT+L)b4(tTwThQ^sY>o{qS)gs%plJ)x3B?B(ia>My zYzj=!XaN;nY@pFY#|O+HMG9<=7dRkW)gM6P3Y_w}ASvnqls*BaFF@%VQ2GIsegUOF zaDf^{jte-m6xbYhaAhem3gm*)q9*ePE_3D;JP`H^E_3DuQ1$~ZbLJUP_6;s`<_S>t z1uk>u4k-HsmpO9-lnp92en2xYsNDF#t-$8Efg=laTE624?kpvJfi=uvM|@z(a$ErM z6QcsNz;Q;(%tO(HU zDqvOu=*kr^D+6>73z$^^x}1d(bh?8AGl&FP$>z9$ElZKzi9yj&nZa>^2>85W1y)A} z#|9?Q%o!^vv=@LnI830+FhJ=CG@Zl%NmXDbB&~s&;1md2?ZxZ>Ue*LUjuo^v6cX*A zBl|(uq%am{DRF2rGbk{v?NBsOU;<4ESo^cofv)x7P+(cxreM&*s$jtFB;TxHSfgaH zT!{lTFAE-oWCSHv@Ip2w#|9>MUeNL_P+OTb%Q3-`LBYU@KTL^5T7e@A)H-K!{LSd8 zz_M1+P=U#jHA@k6UKeO}Vgpka%!440DKR75T&3f1fo0?g+Y{xq6mocQ502Ra_r#CQsPix1f62X2)bYhG)2o) zV9s=b4>bCy$&_KvbOOpuFlRadWk#4Y?SL`^%$YWT`nosxK&@49x_A8X^8f?r%nbz* z1yRslN+6{|;9Z6dAf|?b7U;qyUIiuv6$LfWjZGjXzk&?tRwfXWS3x|>jOhc2DX1Wp zWybUd#N<-|ok{%y#N<{0UFh@##AFBG&-4JqWO97K3)&J3&FgplSFGe4v6GbUMlft}F#csO%3e@c6Jmh61|+p8}IWxdIocAq&>| zf+tG}bdM1um^XnpO9{Lk70lbg3+k$~D{z2#8cYXx6vaWyOJ49O3W4Y&Jc_~~`VEhw z2#7wx14^D6Odog@B|!W$Jc^Pa`U{Vu6o|gSqbLocfAA>Eg6JzeigF+5%!q zE68SL@bB^9Ky%$U}In4$_2S!PTtKulo;kt{Q&B_O5{I0G%0&JAeZY2bzAojW{`ywk!9 z$vY2tAbF>Q7m|0L@IdlT53i!80`((AT|pC;Pm~o@VfjQ+K?#;m|4@6VQnH0F9V4(1`g0 zjhGA2i1`7Hm@CkT`2&rZ8_xypoQ8KXra~vD%7YSA&}Av zTyQ~3D{#RDDXqW-7o@ZT7hI6i3S4kON-J=|1u3n-1s9~Wf<_3a=0}YX71Rh(p*TWR zKoN5S8ZjTB5pxC_F<+n&a{(GLKcEqF1sXAbpb>Ke8ZiyLklN-BG{>|+bIb#1j_H8r zm?zL2(*w#e)Q=EIwg5*6BwK(Z1d=Vl5dz5;;0S?a3vh%$vIRIoAlU*OA&_hVju06I z6fJV#@XvAEBM$8{*#N2>JOam{Z8E^-h zV_Kj&<^eRvbU<^=6KIa<0p%F#M+hWafFlHwEx-{1$rj)Ufn*DCgg~+dI6@%V0vsWb zYypiBP}>-1glM2fhz8LS0$yVNf(NuRSA*#Y4`{`n2GbiJ(2_k3rV~7%nJaL+O8^ux zXLvyS5jB{;@F;@ooC`dP;3Dn^k0LlnUExs#N8leGMeuz9H=q&Ozzb>5-GN4A3ooQS z_W&A^9lVhC+!JU-_V6l7)1VH4qr-p<%0%?K>RyUzKJ>W4iNtdly79td;r9M1LYf=GoRp7 zU{x?QXTAWU4a}KufM^qQ<_93!$ej5Fh&DE7{s7XqLKw6soz<~H7<_N4;|1X?MNS1) z#|=WDOGQ~7JA^CD5k*b_<=u5Q2;y^@q;f5v~!Iw zOCSO=77Zdndl<5G7#Kk7*}W7P9T_~pyXpCuSQr^VLk2qpL7IN>fyQwJKqn( z6X>`WR!ycK!sbj2pzWNROfv-F%mo4<1>6d(noKJMK-$2}4FVv;z|0*2AS<{)3VsN| znID8e3c#W-gh1NB%m+ds!@$fNLgq{ijtrnp4NM0d8OuOBJis%d0-zaEMn?|EFFOuG zmwT}~4%Ywxt?MrX?E`iMdz%T(+c$(jeI!V(VRT%;m;)QL1C5q}cG`i~_b7maM~Mk^ zVYDG+@{~!F$pAE93hKQufd=)MLDQg2;7&Jaj+9B034FsFxX5ErFa+Hk&H*~)3v>yY z0f-0E3EKAoD(gV^KJ$R4AT>Zo4Qnv*WP#3d0iQ+)dK(a|7FNgV0oXhzUvsuHgP zXog)u5OP{9qhkXjXy`&*K~Nw=fzfdVBSa7AsCYr}C?iPp0wZV(259Z4Ao%!r$h<4l z1x6)9bI_`M(4;Zb4MtFiH86o3rpW|a_C5p31}%)A0A+*Lz;}Sz8cY`$K_RCkXvXvd zGlw`m+XM?#n7!?ebXDO+GZ`}rqv@n4Nn(i=WDXEz;fjA&8$W#rc z2aH)t8fHu&4oI*EtnvwCmXekk6Nm#61i3|n=>=n!k`VaHZLpbBz$)J`W`R!F0&zep zK|au60v-Pn;`%ySa=oqLA`oL(24qxk+cX!@JLz< zqoM>zV~nCCi0S~XIAYXbN>G#raeEjQWkGa`q8x~tz^Et>qB9f~K-3gQMMV&uqo@R; zW-ux$gXjW9RS-3YQBfU4mndq2s0ECQ+90|@Q3pgVVN}!w(KU*C3QVAgQ($!b!I-5W z4ss@wg06yImKl?e0+WKa0_diD4+SO#NZ$x_3NoY(2-?~JX##={F^04NK?fK^8i1fP zks&o9=tN~mMF={e7*e-sfJXW>n9eYQ2kYj57Wp%3Fr8oo4=2oka*r^A$M2>NL2EW}s~%L7fy`or)^wnnOa!7HT+@MSGLWr|(3%cZlOfl1 zpqdQiK3Gi$%Fim`Sp>A240Px@uL2{Y8UtOr!mj|U#ulJdV;2}e2ct78FljOcfNHE0 zpxTB>lPLmJVO@Z73e1^bK$#ifon&D33Fgct+F23%8J0V!hCV7dVoO8{3?VAB~jnC^hZQo!}p9jLkoV6hBvHT3{0 z_5>`J1Fof>K*e5w#R{^NM9i4LeqhvKdIJ_K0oPG)KxNtvLDV{`0#ZcB|vJZ9%v1f0;!=UKx?QBNDVawT0`YPYN#2|8ma(N zL(PHKP$ft;)Cs!RP)AT}r~{}q)E?9tY6of!wFR|?+JIU^twF7!R-o2UOHgX41&A8z z188L=S}6eP#=z<)P|XFYI6z$&ST_b#S@3}?6mSIqDapZ1Ncj$CLP~uw6H*s|nUMYp zqyhkyevA8Sb^r~Ky|4CXty8e01?o(Qqbz9259-j ztN=Q>1C(_^htq?bp`g9VpqmH5jZXv6lpzb~x(r55<_bj<&?>qDMI#X9p=b=EG89cg zl!Kxfh_X;L2T=x!h9D|I(E>z8C|ZK307V1PWRn8BK!yV73>_v7(8N5Lr2v|k2eTwV z6Z2q}0BB+!%;Eq|%rh%kC|D{OfUg*_1YZ?m0ooh$A9SY&$UHLza|J`NtT|ZL3@!^g zdD&FK0xV|=7UeHAW6DurRxnmD1B)8NML`EK8!4EAO)vtBg3K>aU{>fKN&?(FYaOI!_n@tpqz(zwvK^B%MFe{kD4S`%$VhG}ct||e$+>Qx! zxU?bM9MA#QjG9aV=1em{$NMva>I$X_P^N=9QwNl3Vb0V5Wg3`++fxnD)Ve?fbZY>& zg1!Q?zyr{_H#SWM(E15YMvhhmHpd^_pe2?HY>on1nv4vsEuhP~c%VWOU?BxI#}1f? z0$8M_C4i;gk%1Lykr}fB#_BRgN6?01M@DWl(B39C#|=DLDh&MGjx3G>0_#{95RB;@ zOv-h<^`KR0pvwr<92rYMS4x7f{8nG9#0S2~l0``aEDoMF6j9P#s|3304pgHlX@Mm~ zK{X!>=<-W$(2bEAOfpJ3U0)>l~_S?rc4Y<;By)zKsRiHE*S*XY)blI z<=}Zr86^X-a?m}OjHXN+N^Bt01(XceD)B>15Kv+V32`VHtyKcu{>W&`B%#Eizyvaz z6QTsPJBkT>*(KO4mbw}RwY5qTpj!?#K=)jNOww7aBn7^GQy+BQr5;$J0O%41@RfO- zpt~?Z_YAUuFS}${0C|m70d(gimjcLb+zLW<3Vh%T5m^;L_W<&M@BV{aqA0GQ2{uo* zu10}P0pv(_1(4HNpauwlZu$hLP-SpJmWQW0(5a)WAfvg#M)QD;7E=Hj#0)k_TtOXd zv>@1Mh@qhCL^%{dj^|P^1j{PafiB;asZ(H4kf^IskOE(pD6L=wmQ)1$667IH1<5+l zrJQVau$w$Nz*cc7fQ;t>xq}t#4pFc$ihf=NP$08_E=yEkRxntr1hSY@K?>|UP&xx$_6fQX6XaZ0 z1+Kap1$nT!kRStPZ5aj7ZGAGJdr3jQ5ddqJ20H|Fr)G@;CpZk)piu}3EKn43fjy-P zHjV}CK#*}f3ZQd#MCud-!9M2$#{f4pav9eufpoHhZ>D4e-;&7=zBZEs966j&2ZHWf zf?UT4D!@Qn0YGQz|L1R303WU|->kp_4i*-W-JtuH7!)8504WzxU{H`ykON)b2=Wg< zID~k?zG7C;U0Vn8kTf`aKw-rWPOco_RLTYMBFIoB$nB0G52+|HfbSguSt^Zqooubwn{;^G>w*0pqn_d6i2r-fwna5nM=rIN|dF2H1uT$bN7s&^GG=MSc+F0on4c0NH~*0lHZ{1F}8b z0kR`oLXiWcw1W|{g**YWh1^1s6C^4CI`Tr3xdFOaJOZ*=+yJr>oI{Zrq^1J0S3Cf+ zR~)oTnn9EK03&3V_zp(M#_|oI$r=Vt<`vL=;tLod`^Fg*c^x?v^_W3-zwovyaJ4Ex zc4vcjPe`;Xa6&h9D=~pLWwR-;wt~)_ZB^iFRgeX5^JZ6I1WPe0h_@>0D6lC=wu1J9 z%PH_Fh=cZf3$%jvnM<`Q@qzY(Gqox)f%k*UD}e4&k!%GS2-$JY3f=h40^Sb}-ZI>( zD6RmS<_B#>X9w-1)&y-NXH?(^?*|8O8CQ@8Z5jvff#w2j7H0zO=C%Os%4Pv=8|Q~^ z8*c@z2nTIdmj-PbS5{yLZPZqQZx$C-UMg51?>k{2Q?DG`@x}`#zDvX zNrCr+Ybr1)$b$ESgSUz+sDm~@vnWV__k(jPFe(Uu_k)85hB(0c!8t(NoLdzI6xcwU z)OA67xj7U#A%c7g?4aH3%$-VH3Y?IA->slU1Pb6y7t#WbM+K>Tb0-pbe#A)l^7wWaVW4T2!Z#5gT|4;x>^-kK>NX&6qq5qxmy*P6?8#| zXX=6XgYzmdfwd~If%a!}!!~laDzSr>4lA&MBo!E2mDm)e6;u_t!CaMAB~V({P=M@N z*KAc{Qj}HTLG1b#Qc!_z^i~6H#n(~*?=e@<0BxLCP>=%~qS&g)tssZk0uI_KE)SMb z0Bw8MbL7ZU(nIVA7lrHx7Xxj818>|09Y`b$zDyjv8>+?gwXr><8zA><8z7><4Fu?g!@wwRypt#X(n1vYCVT zgNuWY$Y22N3kUB9=Y{MC=LR2?0p73<-Ve?L-Vd(p2-y$5mxECNRCox$cQv>uvV!IU z9U$8oEFfp;nLu_m=)iV7@Pd>mD1y)4lTie3br4Zx1_=s4Mz~oZ8y`5p>m(RJ7f>;Q z&#V_PXJS!ca%2G=L(SmG1U)d5Lx~eK=)wa!c!UvjX$+%d!$0OiM~<>0Yta4;1s2c^ zGc0CIJm5(`CJiPQB`yV)Yz0Qp`NM*s!=Irhv4GAh18u*67zi2@cP$f9gzz)5_}4p1``jf0wcEqC+LJljuOzG zEffcW2DLEV$Ov*Hc&|J&c=HX!Xch%#sL?E-;L%{>QDos(0B=KP0?h-lWGV0~fH!o3 zTnO3~3pz?0H1Wd>cA*2r7-o3z@qo@^)?i`*UC0750epFf0tYA{InV+UbZRZwG;lzI zj!9Mk-O-}Jf#g1B1rAjAaexlE0y&eJ8?@h^0d#2tXblhaJ}yuW25mb7g(ApAP$=SZ zBL~>43M^R)(93~P;~5r=%qUR}GE{*b)CFNjaV9&eGkHKqP=oK-1_gowbCv=x>?SXe z6G8WYL7d2f9E>bT!3aJc5)q7`pjTi61tS|;FrubMa5S@l+{cFGJ{AQwRQG}EMUV$U zK>)rd0Bk;w0{EnEP*k%huw{WxDg{L~#EsCzh;Sp!3|0kDk^wEV;wS-4f@4jLpmYt6 zXHbSwV9Zuv1-X$G$&HK(urq6UK#2!@f+RTb7_&f2t01|A0W_7z0$O4PnyO?49Yn4G zIz?86f%`rO6H6Tnr~m=YIaW+Y3PF)RUJ-~+mA4|FXJm@ZZVU0%lN$e88Gpuhz_bCJXG14FSRKj^e} z&u z+;;{m2Jl)722ExQC1y}SG9yBc8Fa)Jd$W@S$lnbOhy(AKkq*3LMmq408Ghg$vy%n* zI70@|LK6l}W&@fS4qCCo0JW&&LdYVWPU=J)}$f!(`^mko4S1?U1V0Z8{8bkMdUhogWZ=r{oZ&{^5+uDtBv zJFYiL<>8T#~2(z*XDqZZ3e9qRbp~9$N?>#cU*OKm8dt^-Rux|b0CG4 zfFi2`yCc}$958o-kMx0D3G zP867>0BWs+S>R*`W`R8iW`R8iW`RA&>SzEu5e0O4AEpJ`y$eo(tfZ$vHezk#2HD1h>^BzDZDS?YHXe{| z;0rf-tr!?Ur}7wpr@2ABZ}9o!3aqfJ7+DpVz#{v3n7Hd1^OeCjs)0%?@C_lTC6xk$ zE<**VbYf;@0xgzj05#j06+o9Yg9cADm{b(m9eE&UyfA@orDak8r(!11iS3~4@>n5< zd7s&IfI+}skyqd}qY{$>uNtU7$ppHUl1ZSAMUe?)pazJ=3b|3M1k?#NV*;H!#soU~ zok4*C)Qx2}V=_=+aQwmm8ckycWpgkSA3M zfXQUW1iAr}*^J4?kpXnm(gTq5rm%n)1Momr1#H=IfI$E(#K^741irQjmM*OrKu4)D zn=yGff-X8@1ckOtmI8z02?kI(0NQFV;0+2#1s2fsKdWOi_%c|~83&*MV*?2*fR5r2 zXa%k71D)7d;l|2;~WUB$PQ*XF@RdOpqqji-K3Qm zp(npHg3qOAas(X@&#b^Cu$c*TXAAf)640@*ObToQ0U&ExKu7F@7!2S;* zf(0~^ccS|M=)_KqEP>sifYD$QQ388d0(2h&IOTx-$PDr$2ZkTHko?G@z~ujycOL4(Nw6trM#*)Xi-M6woi@g>Mw zHfYeYfrA!eAneuv(CrwYsDqwdufb#kzB|K_8FXWSBj}PU9%j(R4@^9apqf~N$ptN@ zK<+^o0#))Q3M`;xpabgT%P4@NMPN6J0%|NXXfR1QGFUNiK#qQ5gtapi7#wA?lsGh) z7(kb*bAWCp0(IXY_m1#@PN3iguQm|@RV1Lh05}yG1@+z@gZhD>L=8Gt2696KC}KgUuYeOg z=N zlo%a9fC`CXQ1pl>q1py6oIopNm6$>IBZHcApg?2*Uk<9kB=8b+2R0~Kf^Vk)OEZDX zMNk|ufG+lhst{1Zu0kM7;0MGE&_z>_5P*aSgQG+iD7rx_iI_E*z-EKiJHf183K|0e zCkfDq6<8W!HHW|pNCm}!W-s`%2_{ek3rqx+v!Hv|K-1NrIz<6mp1E;<;uvl0f|@;` z>jH^x>^d?+?v?{LH8GpFOrT5zT0zGIAItz1&PkKA^js81xyT)?k`*7j#t=vj)?FI}V`cGPo%Z zy5@ixbQ?Sq_*55#thFs5ZzCLfZap-ZKn`U9IiA6>_09nX&<#@>Oe`8qJc7&&yx==$ zK_RH31fDox&|uP0;s%v&Oo47%1T{w$I9)-PS~)U; zCiFm8&9N%6II5e2;Kkr8s5!Eg zpqE-IaPl%bzPNpWL0}RK1GfS*_&PE0bzO+9TrB#G&zKZgL6`5bC^9IpDuR0ApmR1g zm>w`GF@O%d1l?)~GFhMT2@_~~8Z_JsN~F)2{K4*H<^|oa3O?kQL6HS?#r6%joeT;b zj!Y$4jxEetitM24zCa#kbp>CF1-^`u8GPM28~7el1$I!%Y&j0rR%%8Qz= zE+VHZCIyf^tR-0ri~`dbd6_^xgDgcZ@SR%V3%fyAnS;C9432Fehk`e4LLI8e0=kWZ z5j2g#ck;1XsE6L($8dM05zN(-+)eF1(h7S3^`y4 zPDW6AVFYyuxOkXAT~S6*Q#}W=%Si#$e+94o(=cZ;0f~VJ?x1_3RFt^Pm~0@T450Fg z5n?`cG#zw2GM5>X1E>w`kgdSz=#ULs4ldvgO8E{-9FSfns2|A+>w$m{8gx+<04Z=$ zpO42&$?j&kt9H_)|& zuXY?@0G*@9Af~|R_yoogP+)Yt1LJ@WcDn-OfMx{bKwUp31xBz@9pKoIL@~5$=K%&? z1_mnzP`9ILC)5Uzp}%0}fDHWv!2o>(2YtI-QLG55iW>Dh|6buR+kRGoaFR1)>0NrLQ;H1#8T!~E}1RQ`$tPtIx zaAOADIuZb$GzT+1K$Ggskdqf7Jz|3v@Z2}EV-F*!?=Yj|0D}Uv;|xYnw^)Hu;42fT z|F6N+!w9-(5M=%Y(4ps${v@+LV}%lC;s0?Oki z0xLl)cbWAW?UdLRAa~+`Jq{X%VRZy|22BKJFbn))1l^Fs;K<_63(*L=r~@?m!VlVK zBcLdxz^2J809vvEy0Sq~nZZ#YTZtRiWd$WX7*=3)1YKu`WF|YvMmA8ti5)at3~DU% zI5H~oGC3%Kr%l;FBgAarT7eyso_Jk(Ss-$}3T&{+R8~he1s14VS#%i~96`gMppp?( z;4&(*I4VFiv%2zvF8khp8k+tj6j&X%!#Dy8td8qp91aCm$K@~%g959g0w^(puCfCe z)xpBU0qXpNhdp>87s4`w?|=nc3KH1*GlI?Z}d) z$ms}5;Imkiz!y_9I!c1a?m*36&?%Ulj*_4ORZhsY=U^Ua(SQJGzD)oz-zI>VZv!zA z^KAl1^KAl1^KAm~`8EOAd>d%lf)L1DA%wX?2y;P9gt&=Cc<1nBy$Ck%oT*2D+n`}Q-R-6B1?f=g9)@;gBz5LSU@xE0?Qb|Ct>io zvpB$_o&}U{SRCiW;uLfc{&W}zbWnajjKiV8;@A%3fCjptQ4dK)9V|THJG(*SL;Q|B zSqhvAETBU{1ZKnR1Qk8pp!Fc2ZE&0lEZ{s0xo(vQoEShw8G|B=0y~QX$h8o89(Ha= zWk@Q8I<@)q0R{~Q1~UeE1s2CYr{GDJ#qkS_19JBp7zgC;Com4k-O7+8%K|pH1AIXw zCv=3^kj2Yb0Fc3J!!~-hdK<(hw%#I9-TnZd44hnprJKsTreV{uq88w(d z>OiFy_#6cp&`3AvvMx}=Cre-{Xo!}D+wlluJl9bU>;*@7W`Y{wxMuSK21f~j(@daq zi#Ol+JRjC{$v~R%CYM03GI} zz?S963BKH!1=O&!P+$Sg(3ya)LIJgUSU}Z`2558>)R|y`jOQ~!29>!$*Ce%cOjvNB zp}rZ3-3oG#07wtWaKzWN( z{qr(Pf$m)Zi7B!xFgx;qSsac$ko?IED#@7@7#(>)g*ZrF;5oA*Xo?M_paV2&&H-9Y z1UlLD7$c~6qrt@C$m9mPiX2o%p$;^&K@wgOgmMR6Wed8l0hIO?xIqmYUIuPQ25v=G z5DzrweBv~8eAAK9kq45@890-g)h?S;n%BnBJ>vXnrh%Ak>SP@fC5;)Owp z3*6si03{_xP(vQV0;NyL%}1akbFx7z!oVjXgJS`Iz=H>|pjm@M0V5hf>6I}Xlq48n zQ36VOjL4C}=m?1nCP;v|DKLS1h6;?3Xi#8+l$Q#Ojx5=bVNpiVu(}SY=`I7AlC)xw z0d=Q9gPWkHxeTb_051jvUC%87S=Yv>!6X67`7DBqp#B%529pBV zC~$~^CLciCHbKgHAj(0;YJjsO=ngbc?+J8kd^V^cV1!J&FbOP&4ChKHF@t)7py?>^ z4oy%CfI)*vMF~6($e;o489~Y!&_yXK4BYcMnAqwWYoG@^Fk!Z&K(k?xDLZBcCeUn{ zfD$Nwf_4ijF*~veG%-2yLXs*AD5OompfZ9Nl;fB{#Wd&|Twc&T z0TXB*A9O=5Xrnf$Z^;f`TcyMW-!16;0tJpg?B>kiTWeXY7!H8OGg%!u6_^|k zFlH&Sft7+TYz5sl23qyOq{%#i5!7e}-`Bc;5nL#N6s%wbHCDl*8yG>YRWNf0BWRT= z6DXAmfC?3JmmI0EkLE#RbtyBPI zJn%BV7*IXH0$SP@Vh-BK48HEV3S^Rq5;H`Xn*uW=H!y*dFVsjD(5yfMtj7n+=AbDW z25@o%&Csx5%+RnR&Cq}@qy)`|p2B?e02x5T_$pS?rc=W)L z7hITv#6isg$P^67`(RD5d=6gl0M6&2f`S1y@x!779*+QzOo6XJ0o|w$ULONf!GS{s z2YBKKG%^MnaRu2fp@dpPFeoruF;plpIeq|dv}fUd#Ky=DT7o11Iqn}^YJ(@(MIcF3 z5i}qM9+hBFV1-O8FbZsA0Tpmrir~bX4JnksD_$7Dr6Qz!;sK|7Hb?eC@GLT$BX}t; znS<)<()<}4VC1Dbc!A$=wvV$hY6X(4CjC|DN7b4lPWNPuEYXe3c;uVHwe@y1LX-OQ2#Ou zJg5y?8^@Lfy0b%p!;!fVG(HU)DBy5}Tp5<7#0+%>XxWS-Bd9sbs=%znzzB8>SP;6d1F>dv=)=7{D1C-0NddVsfl6c4RM8U~*(DD{^dXYT+mZEkj_*0=2_& zNOItlOpY97j{h6~uoo&YLFg>U#s-!g zM}aa>xHBt&7RE!y!C4*uFcyM_>_JUw&{?ApKQJQvpai;`5EQghpkxCY1Ym@E6iE@t zDQw{WfE1{>=TKsRs$oDFq`;WPt;7g%noOYrBQ}?T!WRV-Qli8JYVRsAbI;~r(tz}S7cgZjF{^-fX)uBg+0+Kj1Aq_PF;LP0 zbymP^4^W#B%yIxV`M@mjA)DZ#NCpLM(6O2vpu>DXTT*mDJn(2J=qNJK`D9t3k{`S} z1AGk$=x8z#$e<^9&;WEanFNFn=@5WBn_%?{pbi4)Xfg$eyb6d9I+{!c!Utb@0y>&Z z1HuO%t_V7sOh*B<4iePDf!}k&3_fHN)NBUbBMLfv2zq7kIdT(pc_X-01Ug<* zfeA!{m4Ob~WCWkm2tKP3BnBGYzrd)Z4L)QOG@uJQWK+kSxdF6$gc*LwCRhe~$R?Qm zfYF?}1FQyo$fox4EYNDBAD~7$Gx(5AX3)W8SxQXcLpH%-aD!1nXL*(qJNS@Iut*CN zsKaxIF-wU9e8?tP5M(OkkWEhTA)8>q9fJo;1sYR z=#WhwGbRuRWW@}yAn1@yUhpBCV3l*gf}le-`M`&4f?6_cpmQrhlYF2R!^|2?5sGXe z{Vj}&{2)38G7kdYAIc0mUQ-Ap+5_4V%B;bZq9_95P5@mP%&ftbp(qC8P66%yWY%EH zQ3Uq}XMi?+GHWmuC`y53=YZ}6X4YUTQIr937ceTyg6IlGIS{o3bPgJ`22+iq0*Jc; zbPgJ`2GbfwMI{h_1Lz<$W(}q-jEX8C{tiY(RS><0QBe&<9{`<<#tiCzC~AQCCm0nq zLG&3$MJ)veP_h8cHZX$j0t9c9;{zXs30gPF3%pd>$sK3C<0^@goB?umL_4 zGerTk>KAmoK>}!IO#zf#V?f(Fz}JC*wg57LFFXhVEja++3j$j42sz->M}a{Ba=<5O zGoQ2qC@Z)qFepGy76+}X6bIi9Vxz#IAgTbmM+dZwQy6@%r-=fCf*|+|Ptg8Ce(=>g zI-s?l3T#=RSwLpU@tdGdE)!&W?gFfE0Nqt(p}-8H3?P&Sgi?S|5)euNLUBMS22dZ& z@gVpLHfB)EpB3NE5{o!9_TbH#|tnX=s+vS6EGh5Oe;`rq{OloydRMn zly4P4y^-ah4Y;6du9R4;80x{Nn=w0r=I21YUC@MDVU_|5XebCYZwER+mq`I6@Av|8 zyd#qWvo6DPMkPj2vl+7gh*^`lg9)^&(b2wG3ADf+bO9{r$}R9d9mcgvY@q!@tWKP5 zO6&@3;Qc~uh@o>f#Lzj2i5NO(bz*D-EsOZU->ksu#NPo?*P_7cB;NtnuD}i%ItNb~ zzkrt5?4T6_pkjj=RBW687aN+)HyF*C4?x)$7|oe?K-niix7$J42N=znS3udI9{U0) z8`O~pWopnA8mNB{I&T*=ILVad$S42`O;8lCV1z{A1}MD)N`rn> zFl#a!m@|MfKC>pXhB*Uh<1w=)vw}H;0;m-W+C9MlI`NAcw0nX9G)~A2njUB1fXFhK zGk``2FM!VH<^IeLYdwIDH$`ndKwA>v)&t06;KS;eLA5vJUMx_cGlGxk1_d2xcn;Ef z0PBOd9zZ&oHJHHT6Oe;V!I8-Ws{KK&2WX&z?@I%<9zbR>gAO(YodpLz!W*m}+`0g@ z9zeD-gAO(Yoovt3LH>d0IZ!Ee6T4a_+V3ZGtlYHU_}w&<^hKp=+JJkw?T)QYB0rQ zDRG*C4mkyjfetg(U`ogWEpxa5ZEb)KGu2>90XGBgK*d0ZnQAa)WGV5OF+G5afetg( zV9Lo-;x%J>0u_4!9#kpFQsM(2YznsH4OpxM+@g5{>R+)cz}f{BpmI%vDFD(esDZQ! zLLjYz2GFSy;5GxeRnP)$6~sVV1s%{AgzKq&{jbSq*bs0+A3HAZ56D5whGojTLl}St%5DkR>2Nvt6&c!q*ZVL+A27L z+$sPak;(#U41s#0T3KdHpjH7Nyj8#pZx!&sTLs+kRsk3I&LdE(fD_&-;DEOZ*x{`L zCc3r?K7huyxc9I#ve$z;MGW9Y6Og?qkYNT6&^7SjsSD7&Dx)HU0tXg!o7=mcEQ#1Euv0$MZ%S}p}TsvXpx#EHS(Y>sS5mj<*J zi5s*O2)rze8MG{n8FUx{c!3RQlmomh3{;&nf|rAV#wa#0J2o&YFi1NJ2y}p^#2B*_ z85Ee57{Nxc`GPk-gF0_0>KwmZg04#gc^x#)$Oh``GlPy<0~f&xpap%9g=3(RQU;Kx znL+9p6j?zE7{L8L&>}HVBLmc>hOGNS9zg^71~f+pSvUqNBS8U$3oF44UqRsh0G01u&aC@?s(mVg7BhXu_LM*&F36>5$F z4s)2nHYzYU8stFCVFsH6c0LnK4m@bggpdFqwhXcyEWwD708a$KBtT0>z}tGVmDqV1 zxIr-mjy1>>I%vuY6p;*|h-6e`QD6qAZv`k5l)ykM0U1F9@eRzN<8DA>(U3r3hNWm0 zToDKp2QA(KMIj?NC$NB%ECc9_Rd5)yI6@L4BQ(J>LTqGEf+_^fMZ#3DIyNwKgNExB z7{LL>&HaZBvRj}*0WvVn>ewKVrNjklD+o*lZKi490N>oo@rRqiv7tf{be%e@V}k^^ zjssn=36lT6zoEtvwBn|L1AH7XXnM9m05rM-I^qI61_av3-+16Zv%je!$FI(Ydg8zT#7R>%N4)&`o^0rizZ6N3WgOdQ~jazg_PXl#(dk=2?J+?)rkt#E{% zd&3MGN&~HY0fhiZi2@VK86)7j{;~fI%qb58Duv2*b)IyZ4Fuq2A-XF zWby|Mq%yh}f=XCsP(J{6rU}R((2+i%<556%Kn^p}VB*1go(XbDfD3U@P|GNQj=X4S z5HM#FQDAmd03FLClBK{T5Us$h�ip=m=iy2!AVYeIAnU;q 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 mhel2A~RaTLy3s|0FbGl?jPfmLxqJ*q1q}D2l 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 z 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∓$@L5i^A(xj-u%SawDU0Y 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 [number, number, number, number]; -export const build_ping_frame: (a: bigint, b: number, c: number, d: bigint, e: number, f: number) => [number, number, number, number]; -export const format_frame: (a: number, b: number) => [number, number, number, number]; -export const parse_auth_response: (a: number, b: number) => [number, number, number]; -export const parse_frame: (a: number, b: number) => [number, number, number]; -export const __wbg_wasmchacha20poly1305_free: (a: number, b: number) => void; -export const __wbg_wasmed25519signer_free: (a: number, b: number) => void; -export const __wbg_wasmkeyring_free: (a: number, b: number) => void; -export const __wbg_wasmpublickeybundle_free: (a: number, b: number) => void; -export const ed25519_generate: () => [number, number, number]; -export const ed25519_verify: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; -export const keyring_from_ed25519: (a: number, b: number, c: number, d: number) => [number, number, number, number]; -export const wasm_derive_encryption_key: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number]; -export const wasm_hkdf_expand: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number]; -export const wasm_sha256: (a: number, b: number) => [number, number]; -export const wasm_sha256_double: (a: number, b: number) => [number, number]; -export const wasmchacha20poly1305_decrypt: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; -export const wasmchacha20poly1305_encrypt: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number]; -export const wasmchacha20poly1305_new: (a: number, b: number) => [number, number, number]; -export const wasmed25519signer_new: (a: number, b: number) => [number, number, number]; -export const wasmed25519signer_sign: (a: number, b: number, c: number) => [number, number, number, number]; -export const wasmed25519signer_verify: (a: number, b: number, c: number, d: number, e: number) => [number, number]; -export const wasmkeyring_from_bytes: (a: number, b: number) => [number, number, number]; -export const wasmkeyring_public_key_bundle: (a: number) => number; -export const wasmkeyring_to_bytes: (a: number) => [number, number]; -export const wasmpublickeybundle_from_bytes: (a: number, b: number) => [number, number, number]; -export const wasmpublickeybundle_kem_public_key: (a: number) => [number, number]; -export const wasmpublickeybundle_sig_cl_public_key: (a: number) => [number, number]; -export const wasmpublickeybundle_sig_pq_public_key: (a: number) => [number, number]; -export const wasmpublickeybundle_to_bytes: (a: number) => [number, number]; -export const __wbg_wasmclient_free: (a: number, b: number) => void; -export const wasmclient_auth_connect: (a: number, b: number, c: number, d: number, e: number, f: number, g: bigint) => any; -export const wasmclient_auth_register: (a: number, b: number, c: number, d: number, e: number, f: number) => any; -export const wasmclient_connect: (a: number, b: number) => any; -export const wasmclient_disconnect: (a: number) => void; -export const wasmclient_is_supported: () => number; -export const wasmclient_new: (a: any, b: any, c: any) => number; -export const wasmclient_request: (a: number, b: number, c: number, d: number, e: number) => any; -export const wasmclient_send: (a: number, b: number, c: number) => any; -export const wasmclient_start_protocol_pings: (a: number, b: number, c: bigint) => [number, number]; -export const wasmclient_state: (a: number) => number; -export const wasmclient_stop_protocol_pings: (a: number) => void; -export const wasmclient_subscribe: (a: number, b: number, c: number, d: any) => number; -export const wasmclient_unsubscribe: (a: number, b: number) => number; -export const __wbg_wasmsubscriptionrouter_free: (a: number, b: number) => void; -export const main: () => void; -export const wasmsubscriptionrouter_dispatch: (a: number, b: number, c: number, d: any) => number; -export const wasmsubscriptionrouter_new: () => number; -export const wasmsubscriptionrouter_subscribe: (a: number, b: number, c: number, d: any) => void; -export const wasmsubscriptionrouter_unsubscribe: (a: number, b: number, c: number) => number; -export const __wbg_connectionconfig_free: (a: number, b: number) => void; -export const connectionconfig_client_id: (a: number) => bigint; -export const connectionconfig_new: (a: number, b: number) => number; -export const connectionconfig_set_client_id: (a: number, b: bigint) => void; -export const connectionconfig_set_server_certificate_hashes: (a: number, b: number, c: number) => void; -export const connectionconfig_url: (a: number) => [number, number]; -export const wasm_bindgen__convert__closures_____invoke__h6588d25cdde23584: (a: number, b: number, c: any) => [number, number]; -export const wasm_bindgen__convert__closures_____invoke__h4bf2427f775cf424: (a: number, b: number, c: any, d: any) => void; -export const wasm_bindgen__convert__closures_____invoke__h3c511b580d027299: (a: number, b: number, c: any) => void; -export const wasm_bindgen__convert__closures_____invoke__h99ead69e8d7f5bae: (a: number, b: number) => void; -export const __wbindgen_malloc: (a: number, b: number) => number; -export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; -export const __wbindgen_exn_store: (a: number) => void; -export const __externref_table_alloc: () => number; -export const __wbindgen_externrefs: WebAssembly.Table; -export const __wbindgen_free: (a: number, b: number, c: number) => void; -export const __wbindgen_destroy_closure: (a: number, b: number) => void; -export const __externref_table_dealloc: (a: number) => void; -export const __wbindgen_start: () => void; diff --git a/wasm/pkg/package.json b/wasm/pkg/package.json deleted file mode 100644 index 632853f..0000000 --- a/wasm/pkg/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "mtp-wasm", - "type": "module", - "version": "0.1.0", - "files": [ - "mtp_wasm_bg.wasm", - "mtp_wasm.js", - "mtp_wasm.d.ts" - ], - "main": "mtp_wasm.js", - "types": "mtp_wasm.d.ts", - "sideEffects": [ - "./snippets/*" - ] -} diff --git a/wasm/src/client.rs b/wasm/src/client.rs index 8b7603b..8fdde48 100644 --- a/wasm/src/client.rs +++ b/wasm/src/client.rs @@ -71,21 +71,6 @@ fn route_incoming_frame( } } - if let Some(message_type) = message_type.as_ref() { - let matching_id = pending_requests - .borrow() - .iter() - .find_map(|(id, pending)| match pending.response_type.as_ref() { - Some(response_type) if response_type == message_type => Some(*id), - _ => None, - }); - if let Some(id) = matching_id { - if let Some(pending) = pending_requests.borrow_mut().remove(&id) { - let _ = pending.sender.send(Ok(frame.clone())); - } - } - } - let _ = on_message.call1(&JsValue::NULL, frame); let Some(message_type) = message_type else { @@ -154,7 +139,7 @@ fn unexpected_response_type_error( */ fn verify_host_challenge( challenge: &CommunicationValue, - tm: &mtp_codec::TypeMap, + _tm: &mtp_codec::TypeMap, host_pk: &mtp_crypto::PublicKeyBundle, id: u64, server_challenge: u128, @@ -185,7 +170,7 @@ fn verify_host_challenge( */ fn verify_host_final( resp: &CommunicationValue, - tm: &mtp_codec::TypeMap, + _tm: &mtp_codec::TypeMap, host_pk: &mtp_crypto::PublicKeyBundle, id: u64, client_nonce: u128, @@ -230,12 +215,24 @@ fn signed_challenge_response_bytes( .sign(proof_payload) .map_err(|e| js_error(&format!("signature failed: {}", e)))?; - CommunicationValue::new(CommunicationType::ChallengeResponse) + let mut proof = CommunicationValue::new(CommunicationType::ChallengeResponse) .add_typed_default( DataType::ClientNonce, DataValue::UnsignedNumber(client_nonce), ) - .add_typed_default(DataType::Signature, DataValue::Bytes(signature)) + .add_typed_default(DataType::Signature, DataValue::Bytes(signature)); + + if !keyring.sig_pq_secret_key.as_bytes().is_empty() { + let pq_signer = + mtp_crypto::MlDsaSigner::new(&keyring.sig_pq_secret_key, &keyring.sig_pq_public_key) + .map_err(|e| js_error(&format!("PQ signer creation failed: {}", e)))?; + let pq_signature = pq_signer + .sign(proof_payload) + .map_err(|e| js_error(&format!("PQ signature failed: {}", e)))?; + proof = proof.add_typed_default(DataType::PqSignature, DataValue::Bytes(pq_signature)); + } + + proof .to_bytes() .map_err(|e| js_error(&format!("encode failed: {}", e))) } @@ -297,8 +294,12 @@ impl WasmClient { #[wasm_bindgen] pub async fn connect(&mut self, config: &ConnectionConfig) -> Result<(), JsValue> { self.set_state(ConnectionState::Connecting); - let transport = - WasmTransport::connect(&config.url, config.server_certificate_hashes.clone()).await?; + let transport = WasmTransport::connect( + &config.url, + config.server_certificate_hashes.clone(), + config.max_message_size, + ) + .await?; let version_str = format!("{}", PROTOCOL_VERSION); let ident = CommunicationValue::new(CommunicationType::Identification) @@ -342,8 +343,12 @@ impl WasmClient { let tm = mtp_codec::TypeMap::latest(); let version_str = format!("{}", PROTOCOL_VERSION); - let transport = - WasmTransport::connect(&config.url, config.server_certificate_hashes.clone()).await?; + let transport = WasmTransport::connect( + &config.url, + config.server_certificate_hashes.clone(), + config.max_message_size, + ) + .await?; // 1. Send the unsigned Identification hello. let hello = CommunicationValue::new(CommunicationType::Identification) @@ -450,8 +455,12 @@ impl WasmClient { let version_str = format!("{}", PROTOCOL_VERSION); let pk_bytes = keyring.public_key_bundle().as_bytes(); - let transport = - WasmTransport::connect(&config.url, config.server_certificate_hashes.clone()).await?; + let transport = WasmTransport::connect( + &config.url, + config.server_certificate_hashes.clone(), + config.max_message_size, + ) + .await?; // 1. Send the unsigned Register hello (version + public-key bundle). let hello = CommunicationValue::new(CommunicationType::Register) diff --git a/wasm/src/config.rs b/wasm/src/config.rs index 42f1f27..381d76e 100644 --- a/wasm/src/config.rs +++ b/wasm/src/config.rs @@ -5,6 +5,7 @@ pub struct ConnectionConfig { pub(crate) url: String, pub(crate) server_certificate_hashes: Option>, pub(crate) client_id: u64, + pub(crate) max_message_size: u32, } #[wasm_bindgen] @@ -15,6 +16,7 @@ impl ConnectionConfig { url, server_certificate_hashes: None, client_id: 0, + max_message_size: 1_000_000_000, } } @@ -37,4 +39,14 @@ impl ConnectionConfig { pub fn set_server_certificate_hashes(&mut self, hashes: Vec) { self.server_certificate_hashes = Some(hashes); } + + #[wasm_bindgen(setter)] + pub fn set_max_message_size(&mut self, max_message_size: u32) { + self.max_message_size = max_message_size; + } + + #[wasm_bindgen(getter)] + pub fn max_message_size(&self) -> u32 { + self.max_message_size + } } diff --git a/wasm/src/crypto.rs b/wasm/src/crypto.rs index 08032bf..48aa4dc 100644 --- a/wasm/src/crypto.rs +++ b/wasm/src/crypto.rs @@ -42,6 +42,12 @@ impl WasmKeyring { } } +/// Generate a full keyring with KEM, ML-DSA, and Ed25519 keys. +#[wasm_bindgen] +pub fn keyring_generate() -> Vec { + Keyring::generate().to_bytes() +} + /// Build a [`Keyring`] containing only an Ed25519 keypair (no KEM, no ML-DSA). /// /// Takes the Ed25519 secret key and public key, each 32 bytes. diff --git a/wasm/src/frame.rs b/wasm/src/frame.rs index d003bda..691b2cc 100644 --- a/wasm/src/frame.rs +++ b/wasm/src/frame.rs @@ -253,10 +253,7 @@ pub fn parse_auth_response(response: &[u8]) -> Result { let comm = CommunicationValue::from_bytes(response) .map_err(|e| js_error(&format!("parse failed: {}", e)))?; - let connected = matches!( - comm.get_data(DataType::Connected), - DataValue::BoolTrue - ); + let connected = matches!(comm.get_data(DataType::Connected), DataValue::BoolTrue); let client_nonce = match comm.get_data(DataType::ClientNonce) { DataValue::UnsignedNumber(n) => Some(*n), diff --git a/wasm/src/transport.rs b/wasm/src/transport.rs index c9cdd94..df59c30 100644 --- a/wasm/src/transport.rs +++ b/wasm/src/transport.rs @@ -55,6 +55,7 @@ enum FrameOutcome { #[derive(Clone)] pub struct WasmTransport { inner: JsValue, + max_message_size: u32, /// Reader over `incoming_unidirectional_streams()` (a singleton stream of streams). streams_reader: Rc>>, /// Reader over the host's current uni-directional stream, if one is open. @@ -64,7 +65,11 @@ pub struct WasmTransport { } impl WasmTransport { - pub async fn connect(url: &str, cert_hashes: Option>) -> Result { + pub async fn connect( + url: &str, + cert_hashes: Option>, + max_message_size: u32, + ) -> Result { let ctor = js_sys::Reflect::get(&js_sys::global(), &JsValue::from_str("WebTransport"))? .dyn_into::() .map_err(|_| js_error("WebTransport not available"))?; @@ -111,6 +116,7 @@ impl WasmTransport { .map_err(|e| js_error(&format!("WebTransport ready failed: {:?}", e)))?; Ok(Self { inner: transport, + max_message_size, streams_reader: Rc::new(RefCell::new(None)), stream_reader: Rc::new(RefCell::new(None)), buffer: Rc::new(RefCell::new(Vec::new())), @@ -122,6 +128,12 @@ impl WasmTransport { } pub async fn send_frame(&self, frame: &[u8]) -> Result<(), JsValue> { + if frame.len() as u64 > self.max_message_size as u64 + || frame.len() as u64 >= CLOSE_FRAME_LEN as u64 + { + return Err(js_error("message too large")); + } + let create_stream = js_sys::Reflect::get( &self.inner, &JsValue::from_str("createUnidirectionalStream"), @@ -273,6 +285,9 @@ impl WasmTransport { if frame_len == CLOSE_FRAME_LEN { return Ok(Some(FrameOutcome::Closed)); } + if frame_len > self.max_message_size { + return Err(js_error("message too large")); + } let frame_len = frame_len as usize; let Some(frame_end) = 4usize.checked_add(frame_len) else { return Err(js_error("invalid frame length")); diff --git a/wasm/types/mtp_wasm.d.ts b/wasm/types/mtp_wasm.d.ts index 532ea10..4ecec6b 100644 --- a/wasm/types/mtp_wasm.d.ts +++ b/wasm/types/mtp_wasm.d.ts @@ -48,6 +48,7 @@ export class ConnectionConfig implements DisposableWasmObject { free(): void; [Symbol.dispose](): void; client_id: bigint; + max_message_size: number; server_certificate_hashes: string[]; readonly url: string; } @@ -158,6 +159,7 @@ export function ed25519_generate(): Ed25519GenerateResult; export function ed25519_verify(public_key: Uint8Array, message: Uint8Array, signature: Uint8Array): void; export function format_frame(frame: Uint8Array): string; export function keyring_from_ed25519(secret_key: Uint8Array, public_key: Uint8Array): Uint8Array; +export function keyring_generate(): Uint8Array; export function main(): void; export function parse_auth_response(response: Uint8Array): AuthResponse; export function parse_frame(frame: Uint8Array): ParsedFrame; From 75ea8014b91ac25df7d223ed61e62d30fa345b33 Mon Sep 17 00:00:00 2001 From: Alois Date: Sun, 28 Jun 2026 13:46:46 +0200 Subject: [PATCH 2/4] Add release workflow --- .forgejo/workflows/release.yml | 116 +++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 .forgejo/workflows/release.yml diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml new file mode 100644 index 0000000..cdbac87 --- /dev/null +++ b/.forgejo/workflows/release.yml @@ -0,0 +1,116 @@ +on: + workflow_dispatch: + inputs: + release_type: + description: "Release type: 'dev' or 'stable'" + required: true + default: "dev" + description: + description: "Release description" + required: true + +jobs: + release: + runs-on: docker + steps: + - name: Check out repo + uses: https://data.forgejo.org/actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Packages + run: apt-get update && apt-get install -y sudo curl jq npm + + - name: Install Nix + uses: https://github.com/cachix/install-nix-action@v30 + + - name: Install Bun + uses: oven-sh/setup-bun@v2 + + - name: Install dependencies + run: bun install + + - name: Build all + run: bun build:all + + - name: Pack npm package + run: npm pack + + - name: Read release metadata + id: version + env: + RELEASE_TYPE: ${{ inputs.release_type }} + run: | + set -eu + + VERSION="$(node -p "require('./package.json').version")" + SHORT_SHA="$(git rev-parse --short=7 HEAD)" + + case "$RELEASE_TYPE" in + dev) + TAG="${VERSION}-dev-${SHORT_SHA}" + PRERELEASE="true" + ;; + stable) + TAG="$VERSION" + PRERELEASE="false" + ;; + *) + echo "release_type must be either 'dev' or 'stable'" + exit 1 + ;; + esac + + PACKAGE="mtp-${VERSION}.tgz" + test -f "$PACKAGE" + + echo "version=$VERSION" >> "$FORGEJO_OUTPUT" + echo "tag=$TAG" >> "$FORGEJO_OUTPUT" + echo "title=$TAG" >> "$FORGEJO_OUTPUT" + echo "prerelease=$PRERELEASE" >> "$FORGEJO_OUTPUT" + echo "package=$PACKAGE" >> "$FORGEJO_OUTPUT" + + - name: Create release and upload package + env: + TOKEN: ${{ forgejo.token }} + API: ${{ forgejo.api_url }} + REPO: ${{ forgejo.repository }} + SHA: ${{ forgejo.sha }} + TAG: ${{ steps.version.outputs.tag }} + TITLE: ${{ steps.version.outputs.title }} + PRERELEASE: ${{ steps.version.outputs.prerelease }} + PACKAGE: ${{ steps.version.outputs.package }} + DESCRIPTION: ${{ inputs.description }} + run: | + set -eu + + HTTP_STATUS=$(curl -s -w "%{http_code}" -o release_out.json -H "Authorization: token $TOKEN" "$API/repos/$REPO/releases/tags/$TAG") + + if [ "$HTTP_STATUS" = "200" ]; then + echo "Release $TAG already exists." + RELEASE_ID="$(jq -r .id release_out.json)" + else + echo "Creating release for $TAG" + RELEASE_JSON="$(curl -f -sS -X POST "$API/repos/$REPO/releases" \ + -H "Authorization: token $TOKEN" \ + -H "Content-Type: application/json" \ + -d "$(jq -n \ + --arg tag "$TAG" \ + --arg name "$TITLE" \ + --arg body "$DESCRIPTION" \ + --arg target "$SHA" \ + --argjson prerelease "$PRERELEASE" \ + '{ + tag_name: $tag, + name: $name, + body: $body, + target_commitish: $target, + draft: false, + prerelease: $prerelease + }')")" + RELEASE_ID="$(echo "$RELEASE_JSON" | jq -r .id)" + fi + + curl -fsS -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets?name=$PACKAGE" \ + -H "Authorization: token $TOKEN" \ + -F "attachment=@$PACKAGE" From 7e01d9af7992658c3fbe8956834709b1218df728 Mon Sep 17 00:00:00 2001 From: Alois Date: Sun, 28 Jun 2026 13:51:38 +0200 Subject: [PATCH 3/4] (fix): release workflow --- .forgejo/workflows/release.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index cdbac87..6c0d4ec 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -5,9 +5,14 @@ on: description: "Release type: 'dev' or 'stable'" required: true default: "dev" + type: choice + options: + - dev + - stable description: description: "Release description" required: true + type: string jobs: release: From 314fb981c76436538ab906f173401df43e7f8867 Mon Sep 17 00:00:00 2001 From: Alois Date: Sun, 28 Jun 2026 13:59:23 +0200 Subject: [PATCH 4/4] (fix): small logic error in build script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 29e6045..f7f10e7 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ ], "scripts": { "example": "pnpm install && pnpm run build:all && nix develop .#autoStart", - "build": "tsc && MTP_TYPE_MAPS=$PWD/example/type-maps.yaml RUSTFLAGS='--cfg web_sys_unstable_apis' wasm-pack build wasm --target web --out-dir pkg --release", + "build": "MTP_TYPE_MAPS=$PWD/example/type-maps.yaml RUSTFLAGS='--cfg web_sys_unstable_apis' wasm-pack build wasm --target web --out-dir pkg --release && tsc", "build:all": "nix run .#build-all", "dup": "jscpd --pattern '**/*.rs' --ignore 'target/**' --ignore 'wasm/pkg/**' --ignore '.git/**' --min-lines 8 --min-tokens 80 --threshold 4 --reporters console --no-tips ." },