From ad82e37d68ddaa114ad45943d667a2712ecd8463 Mon Sep 17 00:00:00 2001 From: Ian Clarke Date: Thu, 30 Jul 2026 09:04:25 -0500 Subject: [PATCH 1/6] perf(room-state): carry a signature digest in the member_info summary, not the signature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #571 The room summary is ~29 KB and is re-sent to every interested peer on every state change. On the live Freenet network interest_sync_summaries is 49.8% of ALL outbound bytes, making this the single largest bandwidth consumer on the network — against a chat message capped at 1,000 bytes. The metadata describing a change was ~30x the change. MemberInfoV1::Summary carried a raw 64-byte ed25519 Signature per member, which is ~66 of ~78 CBOR bytes per entry (84%). The signature is never verified in the summary path; it exists only as an equal-version tiebreak discriminator and is compared for ordering and equality. A digest does that identically. Summary is now BTreeMap, i.e. exactly what member_info_rank returns, so the summary value IS the rank and delta() compares against it directly instead of re-deriving one from a stored signature. Roughly 78 -> 21 bytes per entry; a 470-member room's member_info summary goes ~37 KB -> ~10 KB. blake3 rather than freenet_scaffold::util::fast_hash: fast_hash is a base-31 polynomial, adequate for the accidental collisions MessageId/BanId care about but trivially collidable by construction. A collision here is not cosmetic — two same-version records whose discriminators tie are indistinguishable to anti-entropy, so peers would silently and permanently disagree on that member's deputies, i.e. on ban authority (#411 round 4 B). Members self-sign their own records, so they could otherwise mint colliding pairs. Semantic change: the equal-version tiebreak now orders by digest rather than by raw signature bytes, so a different record can win a tie. Safe because every peer applies the same deterministic rule and this re-keys the contract anyway. Tests: determinism suite updated to the new shape; deputy_ban_test's winner oracle recomputes the digest from blake3 independently rather than calling into river-core, so a change to the digest function or its byte order fails the assertion instead of silently agreeing. New member_info_summary_stays_small_per_entry pins bytes/entry under 32 — the pre-change encoding cannot pass, since a 64-byte signature alone is 66 CBOR bytes. All 406 river-core tests pass. --- common/src/room_state/member_info.rs | 94 ++++++++++++++++++------ common/tests/deputy_ban_test.rs | 20 ++++- common/tests/summary_determinism_test.rs | 53 +++++++++++-- 3 files changed, 132 insertions(+), 35 deletions(-) diff --git a/common/src/room_state/member_info.rs b/common/src/room_state/member_info.rs index 5f82c1733..b5b2867e7 100644 --- a/common/src/room_state/member_info.rs +++ b/common/src/room_state/member_info.rs @@ -95,27 +95,72 @@ impl MemberInfoV1 { /// Total, deterministic ordering used to pick the canonical `MemberInfo` when /// two signed records for the SAME member collide (#411 round 4 item B). /// -/// Rule: **higher `version` wins; at equal version, the lexicographically-greater -/// SIGNATURE wins.** Two records with the same member and version but different -/// content (e.g. different `deputies`) have different signatures — the signature -/// is over the whole `MemberInfo` — so this breaks the tie deterministically. +/// Rule: **higher `version` wins; at equal version, the greater SIGNATURE DIGEST +/// wins.** Two records with the same member and version but different content +/// (e.g. different `deputies`) have different signatures — the signature is over +/// the whole `MemberInfo` — so their digests differ and this breaks the tie +/// deterministically. (Before freenet/river#571 the tiebreak compared raw +/// signature bytes; the winner in a tie therefore changed with that PR, which is +/// safe because every peer applies the same rule and the change re-keys the +/// contract. See [`sig_digest`].) /// /// It is applied IDENTICALLY in [`ComposableState::apply_delta`] (conflict /// resolution), [`ComposableState::delta`], and [`ComposableState::summarize`] -/// (via the `(version, signature)` summary value), so anti-entropy can DETECT a +/// — the summary value IS this tuple — so anti-entropy can DETECT a /// same-version content difference and both peers converge on the same record. /// Without it, equal-version resolution was order-dependent AND the summary /// carried only the version, so anti-entropy saw "same version", sent no /// correction, and peers disagreed on ban authority permanently. -fn member_info_rank(version: u32, signature: &Signature) -> (u32, [u8; 64]) { - (version, signature.to_bytes()) +fn member_info_rank(version: u32, signature: &Signature) -> (u32, u64) { + (version, sig_digest(signature)) +} + +/// Collision-resistant 64-bit digest of a signature, used as the equal-version +/// tiebreak discriminator in [`member_info_rank`] and stored in the summary. +/// +/// WHY A DIGEST AND NOT THE SIGNATURE (freenet/river#571): the summary carried +/// the raw 64-byte `Signature` per member, which at ~470 members was ~84% of +/// the summary's bytes and made the whole room summary ~29 KB. That summary is +/// re-sent on every state change to every interested peer, and measured as the +/// largest single consumer of outbound bytes on the Freenet network (49.8%). +/// The signature is never verified here — it is only ever compared for equality +/// and ordering — so a digest serves the identical purpose at 1/8 the size. +/// +/// WHY BLAKE3 AND NOT `freenet_scaffold::util::fast_hash`: `fast_hash` is a +/// base-31 polynomial, which is fine for the accidental collisions `MessageId` +/// and `BanId` care about but is trivially collidable by construction. A +/// collision here is not cosmetic — two same-version records whose discriminators +/// tie are indistinguishable to anti-entropy, so peers would silently and +/// permanently disagree on that member's `deputies`, i.e. on ban authority +/// (#411 round 4 B is the bug that added the discriminator in the first place). +/// A member self-signs their own record, so they could otherwise mint colliding +/// pairs at will. blake3 removes that. +/// +/// Determinism is load-bearing: freenet-core byte-compares `summarize_state` +/// output for staleness, so this must be a fixed, endianness-explicit function +/// of the signature bytes and must never change without re-keying the contract. +/// `from_le_bytes` pins the byte order. See +/// `.claude/rules/contract-summary-determinism.md` and freenet/freenet-core#4857. +fn sig_digest(signature: &Signature) -> u64 { + let hash = blake3::hash(&signature.to_bytes()); + u64::from_le_bytes( + hash.as_bytes()[..8] + .try_into() + .expect("blake3 digest is 32 bytes, so the first 8 always exist"), + ) } impl ComposableState for MemberInfoV1 { type ParentState = ChatRoomStateV1; - /// `(version, signature)` per member. The signature is the equal-version - /// tiebreak discriminator (see [`member_info_rank`]); carrying it lets - /// anti-entropy detect a content difference at the SAME version (#411 B). + /// `(version, signature-digest)` per member — i.e. exactly the value + /// [`member_info_rank`] returns. The digest is the equal-version tiebreak + /// discriminator; carrying it lets anti-entropy detect a content difference + /// at the SAME version (#411 B). + /// + /// This was `(u32, Signature)` until freenet/river#571. The raw 64-byte + /// signature was ~84% of each entry and made the room summary ~29 KB, which + /// is re-sent to every interested peer on every state change. See + /// [`sig_digest`] for why a digest is sufficient and why it is blake3. /// /// BTreeMap (not HashMap) so the ciborium-serialized summary bytes are /// deterministic: freenet-core byte-compares `summarize_state` output for @@ -123,7 +168,7 @@ impl ComposableState for MemberInfoV1 { /// two identical member_info sets summarize to different bytes → spurious /// anti-entropy heals. See `.claude/rules/contract-summary-determinism.md` /// and freenet/freenet-core#4857. - type Summary = BTreeMap; + type Summary = BTreeMap; type Delta = Vec; type Parameters = ChatRoomParametersV1; @@ -194,13 +239,13 @@ impl ComposableState for MemberInfoV1 { // reconcile. Migration-safe: `verify` still accepts duplicates. let mut summary: Self::Summary = BTreeMap::new(); for info in &self.member_info { - let candidate = (info.member_info.version, info.signature); + // The summary value IS the rank, so the fold compares tuples + // directly rather than re-deriving a rank from a stored signature. + let candidate = member_info_rank(info.member_info.version, &info.signature); summary .entry(info.member_info.member_id) .and_modify(|existing| { - if member_info_rank(candidate.0, &candidate.1) - > member_info_rank(existing.0, &existing.1) - { + if candidate > *existing { *existing = candidate; } }) @@ -227,9 +272,10 @@ impl ComposableState for MemberInfoV1 { // correction and peers would disagree on deputies forever. match old_state_summary.get(&info.member_info.member_id) { None => true, - Some((old_version, old_signature)) => { - member_info_rank(info.member_info.version, &info.signature) - > member_info_rank(*old_version, old_signature) + // The summary value IS the rank (version, signature digest), + // so compare against it directly. + Some(old_rank) => { + member_info_rank(info.member_info.version, &info.signature) > *old_rank } } }) @@ -678,7 +724,7 @@ mod tests { // Summary says the peer already holds member1 at (version 1, sig1), so // member1 does not outrank it and only member2 appears in the delta. let mut old_summary = BTreeMap::new(); - old_summary.insert(member_id1, (1, sig1)); + old_summary.insert(member_id1, member_info_rank(1, &sig1)); let delta = member_info_v1.delta(&parent_state, ¶meters, &old_summary); @@ -884,12 +930,12 @@ mod tests { // Test when all members are old with the same (version, signature) — // nothing outranks the summary, so the delta is empty (#411 round 4 B). - let old_summary: BTreeMap = member_infos + let old_summary: BTreeMap = member_infos .iter() .map(|info| { ( info.member_info.member_id, - (info.member_info.version, info.signature), + member_info_rank(info.member_info.version, &info.signature), ) }) .collect(); @@ -900,11 +946,11 @@ mod tests { let mut old_summary = BTreeMap::new(); old_summary.insert( member_infos[0].member_info.member_id, - (1, member_infos[0].signature), + member_info_rank(1, &member_infos[0].signature), ); old_summary.insert( member_infos[1].member_info.member_id, - (1, member_infos[1].signature), + member_info_rank(1, &member_infos[1].signature), ); let delta = member_info_v1.delta(&parent_state, ¶meters, &old_summary); assert_eq!(delta.unwrap().len(), 3); @@ -1201,7 +1247,7 @@ mod tests { let mut revoke_mi = MemberInfo::new_public(member_id, 2, "nick".to_string()); revoke_mi.deputies = vec![]; let revoke = AuthorizedMemberInfo::new_with_member_key(revoke_mi, &member_signing_key); - let revoke_summary_value = (2u32, revoke.signature); + let revoke_summary_value = member_info_rank(2u32, &revoke.signature); let mut parent_state = ChatRoomStateV1::default(); parent_state.members.members.push(AuthorizedMember::new( diff --git a/common/tests/deputy_ban_test.rs b/common/tests/deputy_ban_test.rs index 056046838..dcd6e6f6f 100644 --- a/common/tests/deputy_ban_test.rs +++ b/common/tests/deputy_ban_test.rs @@ -1559,8 +1559,19 @@ fn equal_version_member_info_resolves_deterministically_across_apply_order() { peer1.member_info, peer2.member_info, "equal-version conflict must resolve identically regardless of apply order" ); - // Canonical winner: higher version (equal here), else greater signature. - let winner = if ra.signature.to_bytes() > rb.signature.to_bytes() { + // Canonical winner: higher version (equal here), else greater signature + // DIGEST (freenet/river#571; was raw signature bytes). + // + // The digest is recomputed here from blake3 rather than calling into + // river-core, deliberately: an oracle that reuses the implementation under + // test only proves self-consistency. If production changes the digest + // function or its byte order, this picks a different winner and the + // assertion below fails, which is the point. + let sig_digest = |sig: &ed25519_dalek::Signature| -> u64 { + let hash = blake3::hash(&sig.to_bytes()); + u64::from_le_bytes(hash.as_bytes()[..8].try_into().unwrap()) + }; + let winner = if sig_digest(&ra.signature) > sig_digest(&rb.signature) { &ra } else { &rb @@ -1571,7 +1582,10 @@ fn equal_version_member_info_resolves_deterministically_across_apply_order() { .iter() .find(|i| i.member_info.member_id == m.id) .unwrap(); - assert_eq!(got, winner, "resolves to the greater-signature record"); + assert_eq!( + got, winner, + "resolves to the greater signature-digest record" + ); peer1.verify(&peer1, &p).expect("peer1 verifies"); } diff --git a/common/tests/summary_determinism_test.rs b/common/tests/summary_determinism_test.rs index ddd780439..17480f8f3 100644 --- a/common/tests/summary_determinism_test.rs +++ b/common/tests/summary_determinism_test.rs @@ -15,7 +15,6 @@ //! //! See `.claude/rules/contract-summary-determinism.md`. -use ed25519_dalek::Signature; use freenet_scaffold::util::FastHash; use freenet_scaffold::ComposableState; use river_core::room_state::ban::{BanId, BansV1}; @@ -56,8 +55,14 @@ fn ban_id(i: i64) -> BanId { fn member_id(i: i64) -> MemberId { MemberId(FastHash(i)) } -fn sig(i: i64) -> Signature { - Signature::from_bytes(&[i as u8; 64]) +/// A distinct signature-digest per index, matching the `(u32, u64)` shape the +/// member_info summary carries since freenet/river#571. The test exercises +/// ORDER-independence of the serialized summary, so only distinctness matters +/// here, not that these equal any real `blake3` digest. +fn sig_rank(i: i64) -> u64 { + // Spread the bits so a byte-order bug in the summary encoding shows up as a + // difference rather than cancelling out across entries. + (i as u64).wrapping_mul(0x9E37_79B9_7F4A_7C15) } #[test] @@ -87,10 +92,12 @@ fn members_summary_serialization_is_order_independent() { #[test] fn member_info_summary_serialization_is_order_independent() { - // MemberInfoV1::Summary = BTreeMap. - let fwd: Vec<(MemberId, (u32, Signature))> = - (0..N).map(|i| (member_id(i), (i as u32, sig(i)))).collect(); - let rev: Vec<(MemberId, (u32, Signature))> = fwd.iter().rev().cloned().collect(); + // MemberInfoV1::Summary = BTreeMap — the u64 is the + // signature digest (freenet/river#571; was a raw 64-byte Signature). + let fwd: Vec<(MemberId, (u32, u64))> = (0..N) + .map(|i| (member_id(i), (i as u32, sig_rank(i)))) + .collect(); + let rev: Vec<(MemberId, (u32, u64))> = fwd.iter().rev().cloned().collect(); let s_fwd: MemberInfoSummary = fwd.into_iter().collect(); let s_rev: MemberInfoSummary = rev.into_iter().collect(); @@ -258,7 +265,7 @@ fn top_level_summary_serialization_is_order_independent() { let member_info = (0..N) .map(|i| { let j = order(i); - (member_id(j), (j as u32, sig(j))) + (member_id(j), (j as u32, sig_rank(j))) }) .collect(); let secrets = SecretsSummary { @@ -323,3 +330,33 @@ fn top_level_summary_serialization_is_order_independent() { the order its elements were inserted" ); } + +/// freenet/river#571 — the member_info summary must stay SMALL. +/// +/// This is the whole point of that change and it has no other guard: the summary +/// is re-sent to every interested peer on every state change, and was measured as +/// the largest single consumer of outbound bytes on the Freenet network. The +/// entry previously carried a raw 64-byte `Signature` (~84% of its bytes), +/// putting a 470-member room's summary around 29 KB. +/// +/// Asserted as bytes-per-entry rather than a total, so the bound does not need +/// revising when a test constant changes. The pre-#571 encoding cannot pass: +/// a 64-byte signature alone serializes to 66 CBOR bytes. +#[test] +fn member_info_summary_stays_small_per_entry() { + const MEMBERS: i64 = 470; // the official room's rough membership + let summary: MemberInfoSummary = (0..MEMBERS) + .map(|i| (member_id(i), (i as u32, sig_rank(i)))) + .collect(); + + let bytes = cbor(&summary).len(); + let per_entry = bytes as f64 / MEMBERS as f64; + + assert!( + per_entry < 32.0, + "member_info summary must stay under 32 bytes/entry (got {per_entry:.1}, \ + {bytes} bytes for {MEMBERS} members). A raw 64-byte Signature encodes to \ + 66 CBOR bytes on its own, so this failing likely means the summary \ + regressed to carrying signatures rather than digests (freenet/river#571)." + ); +} From 68997542b5df4fa6382e0539bb4955f3495610c9 Mon Sep 17 00:00:00 2001 From: Ian Clarke Date: Thu, 30 Jul 2026 13:55:50 -0500 Subject: [PATCH 2/6] test: update the two remaining equal-version tiebreak oracles to the digest The digest tiebreak this PR introduced changed which record wins an equal-version member_info collision, but two tests still predicted the winner with the OLD rule (raw signature-byte ordering). Both are ~50/50 coin flips against the new implementation, not deterministic failures, which is why they were not caught locally. - ui/src/room_data.rs `apply_deputy_change_uses_canonical_base_and_version` retries fresh D keys until "clean" outranks "stale_grant", then asserts `canonical` selects "clean". The retry predicate compared raw signature bytes, so it selected a key satisfying the wrong condition and the sanity assertion failed whenever the two orderings disagreed. This is the build failure on this PR: the crate is river-ui, which `cargo test -p river-core` never compiles. - common/tests/deputy_ban_test.rs `equal_version_member_info_diff_detected_by_anti_entropy` picked its expected winner by raw signature bytes. The sibling test one screen up was updated by this PR; this one was missed. It is a latent ~45% flake in river-core (measured: 89 failures in 200 runs before this commit, 0 in 200 after), and the green 406-test run simply won the coin flip. Both oracles now recompute the blake3 digest independently rather than calling into river-core, matching what this PR already did for the sibling test: an oracle that reuses the implementation under test only proves self-consistency, and in the UI case it would additionally make the `canonical` sanity assertion tautological. The shared helper is hoisted to module scope in deputy_ban_test.rs so the two tests cannot drift apart again. No production logic changed. The digest function, its width, and its byte order are untouched, as is the Summary shape. The remaining edits are comments that still described the tiebreak as raw signature bytes; they are line-for-line replacements (net 0 lines in common/src), so the room-contract WASM is unaffected. Verified: cargo test -p river-ui --bins (814) and --bins --features example-data,no-sync (819), -p river-core --tests / --lib (206) / --lib --features ecies-randomized,migration,mentions (248), -p riverctl --lib (314) all pass; cargo fmt --check clean; each repaired test run 200x with zero failures. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01SeAw3G4bFhTT242xoEeMxN --- common/src/room_state/member_info.rs | 10 ++--- common/tests/deputy_ban_test.rs | 40 ++++++++++++------- ui/src/components/members.rs | 2 +- .../components/members/member_info_modal.rs | 2 +- ui/src/room_data.rs | 32 ++++++++++----- 5 files changed, 56 insertions(+), 30 deletions(-) diff --git a/common/src/room_state/member_info.rs b/common/src/room_state/member_info.rs index b5b2867e7..e6be9c6e4 100644 --- a/common/src/room_state/member_info.rs +++ b/common/src/room_state/member_info.rs @@ -20,8 +20,8 @@ pub struct MemberInfoV1 { impl MemberInfoV1 { /// The CANONICAL `member_info` record for `member_id`: the highest- - /// `member_info_rank` (higher `version`, else lexicographically-greater - /// signature) among ALL records present for that member, or `None` if there + /// `member_info_rank` (higher `version`, else greater signature DIGEST) + /// among ALL records present for that member, or `None` if there /// is none. /// /// LOAD-BEARING (#411 round 8 item A). `verify` deliberately ACCEPTS a state @@ -266,7 +266,7 @@ impl ComposableState for MemberInfoV1 { .filter(|info| { // Include if the member is absent from the old summary, OR this // record OUTRANKS what the old summary has (higher version, or - // equal version with a greater signature). The equal-version arm + // equal version with a greater signature digest). The equal-version arm // is what lets a same-version content difference propagate (#411 // round 4 B) — without it, anti-entropy would never send the // correction and peers would disagree on deputies forever. @@ -342,7 +342,7 @@ impl ComposableState for MemberInfoV1 { // Update or add the member info. Conflict resolution uses the // total, deterministic `member_info_rank` order (higher version, - // else greater signature) so that two DIFFERENT records for the + // else greater signature digest) so that two DIFFERENT records for the // same member at the SAME version resolve identically regardless // of delta arrival order (#411 round 4 B). Using only // `version >` (as before) left equal-version conflicts @@ -1295,7 +1295,7 @@ mod tests { /// #411 round 7 / Codex P1 #3: when two records for one member are present, /// `deputies_of` must return the HIGHEST-rank record's deputies (higher - /// version, else greater signature) — the same winner `apply_delta` / + /// version, else greater signature digest) — the same winner `apply_delta` / /// `summarize` converge on — regardless of vector order. A bare `.find()` /// (first) could disagree with the converged state. #[test] diff --git a/common/tests/deputy_ban_test.rs b/common/tests/deputy_ban_test.rs index dcd6e6f6f..aff09ede9 100644 --- a/common/tests/deputy_ban_test.rs +++ b/common/tests/deputy_ban_test.rs @@ -115,6 +115,20 @@ fn member_ids(state: &ChatRoomStateV1) -> HashSet { .collect() } +/// The equal-version `member_info` tiebreak discriminator: higher `version` +/// wins, and at equal version the greater signature DIGEST wins +/// (freenet/river#571; before that the tiebreak compared raw signature bytes). +/// +/// Recomputed here from blake3 rather than calling into river-core, +/// deliberately: an oracle that reuses the implementation under test only +/// proves self-consistency. If production changes the digest function or its +/// byte order, this picks a different winner and the asserting test fails, +/// which is the point. +fn sig_digest(sig: &ed25519_dalek::Signature) -> u64 { + let hash = blake3::hash(&sig.to_bytes()); + u64::from_le_bytes(hash.as_bytes()[..8].try_into().unwrap()) +} + /// Deputize A->B (B may be anyone), B bans T where T is in A's subtree -> T /// (and their downstream) are removed. #[test] @@ -1560,17 +1574,8 @@ fn equal_version_member_info_resolves_deterministically_across_apply_order() { "equal-version conflict must resolve identically regardless of apply order" ); // Canonical winner: higher version (equal here), else greater signature - // DIGEST (freenet/river#571; was raw signature bytes). - // - // The digest is recomputed here from blake3 rather than calling into - // river-core, deliberately: an oracle that reuses the implementation under - // test only proves self-consistency. If production changes the digest - // function or its byte order, this picks a different winner and the - // assertion below fails, which is the point. - let sig_digest = |sig: &ed25519_dalek::Signature| -> u64 { - let hash = blake3::hash(&sig.to_bytes()); - u64::from_le_bytes(hash.as_bytes()[..8].try_into().unwrap()) - }; + // DIGEST (freenet/river#571; was raw signature bytes). See `sig_digest` + // for why the oracle recomputes the digest instead of calling river-core. let winner = if sig_digest(&ra.signature) > sig_digest(&rb.signature) { &ra } else { @@ -1592,7 +1597,8 @@ fn equal_version_member_info_resolves_deterministically_across_apply_order() { /// #411 round 4 B — a same-version content difference is DETECTED and corrected /// by anti-entropy (the `summarize` discriminator half of the fix). Each peer has /// only ONE of the two equal-version records; because the summary now carries the -/// signature, the merge transfers the canonical winner and both converge. If +/// signature DIGEST (freenet/river#571; originally the raw signature), the merge +/// transfers the canonical winner and both converge. If /// `summarize` regressed to version-only, the delta would be empty and the peers /// would disagree on ban authority forever. #[test] @@ -1649,7 +1655,10 @@ fn equal_version_member_info_diff_detected_by_anti_entropy() { peer1.member_info, peer2.member_info, "peers converge on the SAME MemberInfo record after anti-entropy" ); - let winner = if ra.signature.to_bytes() > rb.signature.to_bytes() { + // Same tiebreak as `equal_version_member_info_resolves_deterministically_across_apply_order`: + // greater signature DIGEST wins at equal version (freenet/river#571; was + // raw signature bytes). See `sig_digest`. + let winner = if sig_digest(&ra.signature) > sig_digest(&rb.signature) { &ra } else { &rb @@ -1660,7 +1669,10 @@ fn equal_version_member_info_diff_detected_by_anti_entropy() { .iter() .find(|i| i.member_info.member_id == m.id) .unwrap(); - assert_eq!(got, winner, "both converge to the greater-signature record"); + assert_eq!( + got, winner, + "both converge to the greater signature-digest record" + ); peer1.verify(&peer1, &p).expect("peer1 verifies"); peer2.verify(&peer2, &p).expect("peer2 verifies"); } diff --git a/ui/src/components/members.rs b/ui/src/components/members.rs index 494d9089f..eea425988 100644 --- a/ui/src/components/members.rs +++ b/ui/src/components/members.rs @@ -1704,7 +1704,7 @@ fn ExportIdentityModal(is_active: Signal) -> Element { // Look up member_info from cached or current state. // Routed through `canonical` (highest member_info_rank: - // version, then signature bytes), not a version-only + // version, then signature digest), not a version-only // `max_by_key`, so a same-version duplicate can't export // the losing record (freenet/river#411 round 8). let member_info = room_data.self_member_info.clone().or_else(|| { diff --git a/ui/src/components/members/member_info_modal.rs b/ui/src/components/members/member_info_modal.rs index 229d328b0..cf9c72739 100644 --- a/ui/src/components/members/member_info_modal.rs +++ b/ui/src/components/members/member_info_modal.rs @@ -108,7 +108,7 @@ pub fn MemberInfoModal() -> Element { let modal_content = if let Some(member_id) = MEMBER_INFO_MODAL.read().member { // Find the CANONICAL AuthorizedMemberInfo for the given member_id - // (highest member_info_rank: version, then signature bytes) — not a + // (highest member_info_rank: version, then signature digest) — not a // bare first-match. `verify` accepts duplicate member_info records // per member_id (migration safety), so a first-match `.find()` can // read a losing (e.g. revoked) record (freenet/river#411 round 8). diff --git a/ui/src/room_data.rs b/ui/src/room_data.rs index 8252fdc1f..5f929ef83 100644 --- a/ui/src/room_data.rs +++ b/ui/src/room_data.rs @@ -740,7 +740,7 @@ impl RoomData { // and nickname edit. A stale `self_nickname` can never override a // newer `self_member_info`. // Route through `canonical` (highest member_info_rank: version, then - // signature bytes) rather than a version-only `max_by_key` — `verify` + // signature digest) rather than a version-only `max_by_key` — `verify` // accepts duplicate member_info records per member_id (migration // safety), and a version-only tiebreak can seed this cache from a // LOSING record on a same-version collision (freenet/river#411 @@ -840,7 +840,7 @@ impl RoomData { let self_id = MemberId::from(&self.self_sk.verifying_key()); // The viewer's CANONICAL signed member_info (highest member_info_rank: - // version, then signature bytes) — NOT a bare first-match. `verify` + // version, then signature digest) — NOT a bare first-match. `verify` // accepts duplicate member_info records per member_id (migration // safety), and a client can hold such a duplicate-containing full // state before cleanup runs. A first-match `.find()` can seed this @@ -6239,7 +6239,7 @@ mod tests { // ------------------------------------------------------------------ // #411 round 8 (Fix E): `apply_deputy_change` must route through the // CANONICAL member_info record (highest member_info_rank: version, then - // signature bytes), not a first-match `.find()`, and must derive the + // signature digest), not a first-match `.find()`, and must derive the // republished version from the higher of the canonical room_state // version and the cached `self_member_info` version. `verify` accepts // duplicate member_info records per member_id (migration safety), so a @@ -6261,11 +6261,23 @@ mod tests { // "clean" (no deputies) and one "stale_grant" that already lists T // as a deputy. `verify` accepts duplicate member_info records at the // same version (a genuine concurrent-edit collision). Which one is - // CANONICAL is decided by `member_info_rank`'s signature-bytes - // tiebreak, not Vec position — retry with fresh D keys until "clean" - // outranks "stale_grant" by signature, so the test's expectations + // CANONICAL is decided by `member_info_rank`'s signature-DIGEST + // tiebreak (freenet/river#571; before that it compared raw signature + // bytes), not Vec position — retry with fresh D keys until "clean" + // outranks "stale_grant" by that digest, so the test's expectations // don't depend on how ed25519 happens to sign one particular key's // bytes. + // + // The digest is recomputed here from blake3 rather than calling into + // river-core (`member_info_rank`/`sig_digest` are private anyway): + // a fixture that picked its key via the implementation under test + // would make the `canonical` sanity assertion below tautological. + // Computed independently, a change to the digest function or its byte + // order makes this pick the wrong key and that assertion fails. + let sig_digest = |sig: &ed25519_dalek::Signature| -> u64 { + let hash = blake3::hash(&sig.to_bytes()); + u64::from_le_bytes(hash.as_bytes()[..8].try_into().unwrap()) + }; let (d_sk, clean_authorized, stale_grant_authorized) = 'retry: { for _ in 0..500 { let d_sk = SigningKey::generate(&mut rng); @@ -6285,13 +6297,15 @@ mod tests { }; let stale_grant_authorized = AuthorizedMemberInfo::new_with_member_key(stale_grant, &d_sk); - if clean_authorized.signature.to_bytes() - > stale_grant_authorized.signature.to_bytes() + if sig_digest(&clean_authorized.signature) + > sig_digest(&stale_grant_authorized.signature) { break 'retry (d_sk, clean_authorized, stale_grant_authorized); } } - panic!("failed to find a D key where 'clean' outranks 'stale_grant' by signature"); + panic!( + "failed to find a D key where 'clean' outranks 'stale_grant' by signature digest" + ); }; let d_id = MemberId::from(&d_sk.verifying_key()); From d281c70f2580bf23c7ea6611ff0753102278e85a Mon Sep 17 00:00:00 2001 From: Ian Clarke Date: Thu, 30 Jul 2026 15:52:17 -0500 Subject: [PATCH 3/6] fix(room-state): widen the member_info summary digest to 128 bits The 64-bit digest this PR introduced is inside attacker reach. A member self-signs their own MemberInfo and controls unlimited grinding entropy for it -- preferred_nickname is free-form and deputies entries are never validated for membership -- so they control BOTH sides of the equal-version tiebreak comparison. At 64 bits that is a ~2^32 birthday search, hours on commodity hardware. A collision is unrecoverable rather than merely annoying. summarize advertises an identical (version, digest) on both peers; delta filters on strict `>` so neither peer offers its record to the other; apply_delta replaces only on strict `>` so each keeps whatever arrived first; and full-state merge routes through summarize -> delta -> apply_delta, so it does not rescue either. The two halves of the network then disagree permanently and silently on that member's deputies, i.e. on ban authority. That is #411 round 4 B reinstated by construction, in a case the old raw-signature compare made impossible rather than unlikely. SigDigest is a 16-byte blake3 digest with a hand-written Serialize emitting a CBOR byte string, following direct_messages::PurgeToken, which chose 128 bits for the same reason under a weaker threat model. The two are kept as near-duplicates with a cross-reference rather than factored together: they are independent wire-format commitments. The derived Serialize would emit a 16-element CBOR array (32 bytes, measured 42.5 B/entry) instead of a byte string (17 bytes), giving back most of the saving. Measured through the real summarize() at 470 entries with realistic MemberIds: ~78 -> 28.0 CBOR bytes per entry. Also in this commit: - canonical() kept the LAST maximum (Iterator::max_by_key) while dedup_to_canonical and apply_delta keep the FIRST. Widening makes a tie between distinct records infeasible to mint, but two selectors of "the canonical record" disagreeing is a latent trap: a state holding duplicates would answer deputies_of one way on a freshly-GET'd full state and the other way after the next apply_delta ran dedup. All three now keep the first. - sig_digest_golden_vector pins one fixed signature to one fixed digest and one fixed CBOR encoding. The existing oracles compare randomly-keyed signatures, so a byte-order change leaves them agreeing about half the time: measured, with the digest reversed they passed 11 of 30 runs. An intermittent detector is a broken one. - canonical_and_dedup_break_rank_ties_identically reaches the tie branch via with_signature (two records sharing a signature, differing in deputies) -- what a collision would look like to these pure orderings. Records built normally cannot test it: ed25519 signing is deterministic over the whole MemberInfo, so rank-tied records are byte-identical and the assertion would hold under either tie direction. - member_info_summary_stays_small_per_entry now calls the real summarize() on built state with MemberIds from real VerifyingKeys (deterministically seeded). MemberId(FastHash(i)) for small i encodes in 1-3 bytes against a real key's ~9 and understated the entry by ~30%. - apply_deputy_change_uses_canonical_base_and_version's fixture flips its push order to loser-first. It relied on canonical's old last-wins tie-break to make a version-only selector return the wrong record; with canonical now first-wins, clean-first would let that regression pass by accident. Loser-first restores it and additionally catches the first-match .find() regression the test's header claims to target. - Doc corrections: the summary's per-entry cost is stated as 66 of ~78 CBOR bytes rather than "made the room summary ~29 KB", which could not be true as written (470 x 66 = 31 KB of signatures alone). The 29.1 KB is a fleet-wide mean across all rooms and is not any single room's summary size; no per-room measurement is on record and none is claimed. member_info_rank is a total order on the (version, digest) pair but only a total preorder on records. Nine stale comments describing the old (version, signature) rule are updated, and the determinism rule gains a section on summary VALUES as a wire-format commitment. Verified: cargo fmt --check clean; river-core --tests (409), --lib (208), --lib --features ecies-randomized,migration,mentions (250), riverctl --lib (314), river-ui --bins (814) and --bins --features example-data,no-sync (819) all pass. The four affected test groups were each run 40 consecutive times (1,440 executions, 0 failures), since the previous head carried a ~45% flake here and one green run proves nothing. Both new tests were verified to FAIL under the implementation they guard against (reversed byte order, last-16-instead-of-first-16, derived Serialize, canonical reverted to max_by_key, canonical reverted to .find()). Not in this commit, deliberately: the room_contract.wasm rebuild and the migration entry. This PR is held as draft for that. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01SeAw3G4bFhTT242xoEeMxN --- .claude/rules/contract-summary-determinism.md | 42 ++ common/src/room_state/member_info.rs | 374 +++++++++++++++--- common/tests/deputy_ban_test.rs | 13 +- common/tests/summary_determinism_test.rs | 112 ++++-- .../member_info_modal/nickname_field.rs | 2 +- ui/src/room_data.rs | 47 ++- 6 files changed, 491 insertions(+), 99 deletions(-) diff --git a/.claude/rules/contract-summary-determinism.md b/.claude/rules/contract-summary-determinism.md index 86f95bd2b..7753a70bc 100644 --- a/.claude/rules/contract-summary-determinism.md +++ b/.claude/rules/contract-summary-determinism.md @@ -53,6 +53,40 @@ changes → follow the room-contract + delegate migration ritual (`.claude/rules/delegate-migration.md`) before publishing, and bump the `river-core` / `riverctl` versions if a WASM changed. +## Summary VALUES are a wire-format commitment too + +Determinism is about the collection type; this section is about what goes in it. +A summary value that is only ever compared (never verified, never decoded back +into anything) should be a fixed-width digest, not the thing it fingerprints — +the summary is re-sent to every interested peer on every state change, so a +64-byte signature per entry is paid over and over. + +When a summary carries a digest, four properties become wire format, and none of +them may change without re-keying the contract: + +- which hash function (and it must be cryptographic if an attacker can choose + the input — a base-31 polynomial like `freenet_scaffold::util::fast_hash` is + fine for accidental collisions only); +- how wide, judged against who controls the colliding inputs. If a party can + grind BOTH sides of the comparison, 64 bits is a ~2^32 birthday search, i.e. + hours; use 128. +- which bytes are kept, and in what order; +- how the value serializes — a `[u8; 16]` through the serde derive emits a + 16-element CBOR array (32 bytes), not a byte string (17). Write `Serialize` + by hand with `serialize_bytes`. + +Pin all four with a **golden vector**: ONE fixed input, ONE fixed expected +digest, ONE fixed expected encoding. Oracles that compare digests of randomly +generated keys are NOT sufficient — a byte-order change leaves them agreeing +about half the time, so they detect it only intermittently (measured on this +codebase: 11 of 30 runs missed a reversed-byte-order change). See +`sig_digest_golden_vector` in `common/src/room_state/member_info.rs`. + +Also assert bytes-per-entry for the summary, built by calling the real +`summarize()` with realistic key values — `MemberId(FastHash(i))` for small `i` +encodes in 1-3 bytes against a real key's ~9 and understates the entry by ~30%. +See `member_info_summary_stays_small_per_entry`. + ## History - **freenet/river** (2026-07): `MemberInfoV1::Summary` was @@ -62,4 +96,12 @@ changes → follow the room-contract + delegate migration ritual `BTreeMap`/`BTreeSet`. `bincode` (the old wire path) doesn't care about key order, so this survived undetected until freenet-core added the summary-byte-compare staleness check. +- **freenet/river#571** (2026-07): the same summary's VALUE then shrank, + `(u32, Signature)` → `(u32, SigDigest)`, where `SigDigest` is a 128-bit BLAKE3 + digest of the signature serialized as a CBOR byte string. The raw signature was + 66 of ~78 CBOR bytes per entry; measured 78 → 28.0 bytes/entry at 470 records. + The collection type was already `BTreeMap` and did not change, so this is the + value-side rule above rather than the determinism rule. + `DirectMessagesSummary.message_signatures: BTreeSet` still + carries raw 64-byte signatures and has the same fix available. - **freenet/freenet-core#4857** — the update-drop divergence this feeds. diff --git a/common/src/room_state/member_info.rs b/common/src/room_state/member_info.rs index e6be9c6e4..c8dc90a2b 100644 --- a/common/src/room_state/member_info.rs +++ b/common/src/room_state/member_info.rs @@ -37,10 +37,34 @@ impl MemberInfoV1 { /// [`Self::dedup_to_canonical`] once cleanup runs, but reads must not depend /// on that having happened yet.) pub fn canonical(&self, member_id: MemberId) -> Option<&AuthorizedMemberInfo> { - self.member_info + // The FIRST maximum wins, matching [`Self::dedup_to_canonical`] and + // `apply_delta` (both replace only on strict `>`). `Iterator::max_by_key` + // is deliberately NOT used here: it returns the LAST maximum, so with + // three selectors of "the canonical record" a tie would resolve one way + // on a freshly-GET'd full state and the other way after the next + // `apply_delta` ran dedup — a silent flip in `deputies_of`, i.e. in ban + // authority. A tie needs two records with the same version AND the same + // 128-bit signature digest, which [`SigDigest`] makes infeasible to mint, + // so this is closing a latent trap rather than a reachable bug. + // + // The rank is computed once per candidate rather than once per + // comparison, because `member_info_rank` hashes (see [`SigDigest`]). + let mut best: Option<(&AuthorizedMemberInfo, (u32, SigDigest))> = None; + for info in self + .member_info .iter() .filter(|info| info.member_info.member_id == member_id) - .max_by_key(|info| member_info_rank(info.member_info.version, &info.signature)) + { + let rank = member_info_rank(info.member_info.version, &info.signature); + let better = match &best { + Some((_, best_rank)) => rank > *best_rank, + None => true, + }; + if better { + best = Some((info, rank)); + } + } + best.map(|(info, _)| info) } /// The deputies currently listed by `member_id`'s CANONICAL signed @@ -69,31 +93,35 @@ impl MemberInfoV1 { if self.member_info.len() < 2 { return; } - let mut best: HashMap = HashMap::new(); + // Carry each incumbent's rank in the map rather than re-deriving it: a + // rank costs a blake3 hash (see [`SigDigest`]), and recomputing the + // incumbent's on every collision doubles that cost for no benefit. + // Ties keep the INCUMBENT (strict `>`), i.e. the first record in vector + // order, matching [`Self::canonical`] and `apply_delta`. + let mut best: HashMap = HashMap::new(); for info in self.member_info.drain(..) { let id = info.member_info.member_id; + let rank = member_info_rank(info.member_info.version, &info.signature); match best.entry(id) { std::collections::hash_map::Entry::Occupied(mut e) => { - if member_info_rank(info.member_info.version, &info.signature) - > member_info_rank(e.get().member_info.version, &e.get().signature) - { - e.insert(info); + if rank > e.get().0 { + e.insert((rank, info)); } } std::collections::hash_map::Entry::Vacant(e) => { - e.insert(info); + e.insert((rank, info)); } } } - self.member_info = best.into_values().collect(); + self.member_info = best.into_values().map(|(_, info)| info).collect(); // Deterministic order (HashMap iteration order is not stable). self.member_info .sort_by_key(|info| info.member_info.member_id); } } -/// Total, deterministic ordering used to pick the canonical `MemberInfo` when -/// two signed records for the SAME member collide (#411 round 4 item B). +/// Deterministic ordering used to pick the canonical `MemberInfo` when two +/// signed records for the SAME member collide (#411 round 4 item B). /// /// Rule: **higher `version` wins; at equal version, the greater SIGNATURE DIGEST /// wins.** Two records with the same member and version but different content @@ -102,7 +130,18 @@ impl MemberInfoV1 { /// deterministically. (Before freenet/river#571 the tiebreak compared raw /// signature bytes; the winner in a tie therefore changed with that PR, which is /// safe because every peer applies the same rule and the change re-keys the -/// contract. See [`sig_digest`].) +/// contract. See [`SigDigest`].) +/// +/// This is a total ORDER on the returned `(version, digest)` pair, but only a +/// total PREORDER on records: two distinct records rank equal exactly when their +/// signatures collide under [`SigDigest`]. That tie is the dangerous case, not a +/// benign one — see [`SigDigest`] for what a tie does to anti-entropy and for the +/// 128-bit bound that is what actually keeps ties out of reach. "Records never +/// tie" is a cryptographic property here, not a structural guarantee, so the +/// three selectors that consume this order ([`MemberInfoV1::canonical`], +/// [`MemberInfoV1::dedup_to_canonical`], and `apply_delta`) are nevertheless +/// written to break a tie the SAME way (keep the first, i.e. replace only on +/// strict `>`). /// /// It is applied IDENTICALLY in [`ComposableState::apply_delta`] (conflict /// resolution), [`ComposableState::delta`], and [`ComposableState::summarize`] @@ -111,43 +150,109 @@ impl MemberInfoV1 { /// Without it, equal-version resolution was order-dependent AND the summary /// carried only the version, so anti-entropy saw "same version", sent no /// correction, and peers disagreed on ban authority permanently. -fn member_info_rank(version: u32, signature: &Signature) -> (u32, u64) { +fn member_info_rank(version: u32, signature: &Signature) -> (u32, SigDigest) { (version, sig_digest(signature)) } -/// Collision-resistant 64-bit digest of a signature, used as the equal-version -/// tiebreak discriminator in [`member_info_rank`] and stored in the summary. +/// 16-byte BLAKE3 digest of a signature: the equal-version tiebreak +/// discriminator in [`member_info_rank`], and the value [`MemberInfoV1`]'s +/// summary carries per member. /// -/// WHY A DIGEST AND NOT THE SIGNATURE (freenet/river#571): the summary carried -/// the raw 64-byte `Signature` per member, which at ~470 members was ~84% of -/// the summary's bytes and made the whole room summary ~29 KB. That summary is -/// re-sent on every state change to every interested peer, and measured as the -/// largest single consumer of outbound bytes on the Freenet network (49.8%). -/// The signature is never verified here — it is only ever compared for equality -/// and ordering — so a digest serves the identical purpose at 1/8 the size. +/// WHY A DIGEST AND NOT THE SIGNATURE (freenet/river#571, landed as PR #572; +/// every "#571" elsewhere in this file is that ISSUE, not the PR): the summary carried +/// the raw 64-byte `Signature` per member — 66 of ~78 CBOR bytes per entry, 84% +/// of it. That summary is re-sent on every state change to every interested +/// peer, and `interest_sync_summaries` was measured as the largest single +/// consumer of outbound bytes on the Freenet network (49.8%). The signature is +/// never verified here — it is only ever compared for equality and ordering — so +/// a digest serves the identical purpose. Measured through the real `summarize()` +/// on 470 entries with realistic `MemberId`s: ~78 → 28.0 CBOR bytes per entry. A +/// 64-bit digest would be exactly 8 bytes per entry cheaper; the next paragraph +/// is why those 8 bytes are bought deliberately. Pinned by +/// `member_info_summary_stays_small_per_entry`. +/// +/// The 29.1 KB mean `interest_sync_summaries` message that motivated #571 is a +/// FLEET-WIDE mean across all rooms, so it is not this room's own summary size +/// and the two figures must not be multiplied together: at the Official room's +/// ~470 records the member_info term ALONE came to ~37 KB, which is larger than +/// the fleet mean because that mean also averages in many far smaller rooms. No +/// per-room summary measurement is on record, so no claim is made about what any +/// single room's total summary weighed before this change. +/// +/// WHY 128 BITS AND NOT 64: a collision here is not cosmetic, and it is not +/// self-correcting. Two same-version records whose discriminators tie are +/// INDISTINGUISHABLE to anti-entropy — `summarize` advertises an identical +/// `(version, digest)` on both peers, `delta` filters on strict `>` so neither +/// peer ever offers its record to the other, `apply_delta` replaces only on +/// strict `>` so each keeps whichever arrived first, and full-state merge does +/// not rescue it either (freenet-scaffold implements `merge` as summarize → +/// delta → apply_delta). The two halves of the network then disagree +/// permanently and SILENTLY on that member's `deputies`, i.e. on who may ban +/// whom (#411 round 4 B is the bug that added this discriminator in the first +/// place). A member SELF-SIGNS their own record and has unlimited grinding +/// entropy for it — `preferred_nickname` is free-form and `deputies` entries +/// are never validated for membership — so the attacker controls BOTH sides of +/// the comparison: at 64 bits that is a ~2^32 birthday search, which is hours on +/// commodity hardware. 128 bits puts it at ~2^64. +/// +/// This mirrors [`crate::room_state::direct_messages::PurgeToken`], which +/// derives a 16-byte BLAKE3 value from a signature for the same reason under a +/// strictly WEAKER threat model (there the attacker cannot influence the other +/// side of the comparison, and it still chose 128 bits). The two are +/// deliberately NOT factored into a shared helper: each is an independent +/// wire-format commitment — `PurgeToken`'s bytes live in stored state, these +/// live in the summary — and they must stay free to evolve separately. /// /// WHY BLAKE3 AND NOT `freenet_scaffold::util::fast_hash`: `fast_hash` is a -/// base-31 polynomial, which is fine for the accidental collisions `MessageId` -/// and `BanId` care about but is trivially collidable by construction. A -/// collision here is not cosmetic — two same-version records whose discriminators -/// tie are indistinguishable to anti-entropy, so peers would silently and -/// permanently disagree on that member's `deputies`, i.e. on ban authority -/// (#411 round 4 B is the bug that added the discriminator in the first place). -/// A member self-signs their own record, so they could otherwise mint colliding -/// pairs at will. blake3 removes that. +/// base-31 polynomial, fine for the accidental collisions `MessageId` and +/// `BanId` care about but trivially collidable by construction, which would +/// price the attack above at roughly nothing regardless of its width. +/// +/// WIRE FORMAT, load-bearing in two ways. freenet-core byte-compares +/// `summarize_state` output for staleness, so this must be a fixed function of +/// the signature bytes; and the digest orders the records, so every peer must +/// derive the same bytes and compare them the same way. Both are pinned by +/// `sig_digest_golden_vector`: /// -/// Determinism is load-bearing: freenet-core byte-compares `summarize_state` -/// output for staleness, so this must be a fixed, endianness-explicit function -/// of the signature bytes and must never change without re-keying the contract. -/// `from_le_bytes` pins the byte order. See +/// - the digest is the FIRST 16 bytes of `blake3(signature.to_bytes())`, kept in +/// their natural order — there is no integer conversion, hence no endianness +/// decision to get wrong (the 64-bit form needed `from_le_bytes` for this); +/// - ordering is plain lexicographic over those bytes (the derived `Ord`); +/// - it serializes as a CBOR byte string (17 bytes), via the hand-written +/// `Serialize` below rather than the derive, which would emit a 16-element +/// CBOR array at 32 bytes and undo most of the saving. +/// +/// None of the three may change without re-keying the contract. See /// `.claude/rules/contract-summary-determinism.md` and freenet/freenet-core#4857. -fn sig_digest(signature: &Signature) -> u64 { - let hash = blake3::hash(&signature.to_bytes()); - u64::from_le_bytes( - hash.as_bytes()[..8] - .try_into() - .expect("blake3 digest is 32 bytes, so the first 8 always exist"), - ) +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct SigDigest(pub [u8; 16]); + +impl Serialize for SigDigest { + fn serialize(&self, serializer: S) -> Result { + serializer.serialize_bytes(&self.0) + } +} + +impl<'de> Deserialize<'de> for SigDigest { + fn deserialize>(deserializer: D) -> Result { + let bytes = >::deserialize(deserializer)?; + let arr: [u8; 16] = bytes.as_slice().try_into().map_err(|_| { + serde::de::Error::custom(format!( + "expected 16-byte SigDigest, got {} bytes", + bytes.len() + )) + })?; + Ok(SigDigest(arr)) + } +} + +/// The [`SigDigest`] of `signature`. See that type for the threat model, why the +/// width is 128 bits, and the wire-format commitments this function makes. +fn sig_digest(signature: &Signature) -> SigDigest { + let digest = blake3::hash(signature.to_bytes().as_ref()); + let mut out = [0u8; 16]; + out.copy_from_slice(&digest.as_bytes()[..16]); + SigDigest(out) } impl ComposableState for MemberInfoV1 { @@ -158,9 +263,10 @@ impl ComposableState for MemberInfoV1 { /// at the SAME version (#411 B). /// /// This was `(u32, Signature)` until freenet/river#571. The raw 64-byte - /// signature was ~84% of each entry and made the room summary ~29 KB, which - /// is re-sent to every interested peer on every state change. See - /// [`sig_digest`] for why a digest is sufficient and why it is blake3. + /// signature was 66 of ~78 CBOR bytes per entry (84%), and this summary is + /// re-sent to every interested peer on every state change. See [`SigDigest`] + /// for why a digest is sufficient, why it is 128-bit blake3 rather than 64, + /// and why it serializes as a CBOR byte string. /// /// BTreeMap (not HashMap) so the ciborium-serialized summary bytes are /// deterministic: freenet-core byte-compares `summarize_state` output for @@ -168,7 +274,7 @@ impl ComposableState for MemberInfoV1 { /// two identical member_info sets summarize to different bytes → spurious /// anti-entropy heals. See `.claude/rules/contract-summary-determinism.md` /// and freenet/freenet-core#4857. - type Summary = BTreeMap; + type Summary = BTreeMap; type Delta = Vec; type Parameters = ChatRoomParametersV1; @@ -227,13 +333,14 @@ impl ComposableState for MemberInfoV1 { _parent_state: &Self::ParentState, _parameters: &Self::Parameters, ) -> Self::Summary { - // Carry the signature alongside the version so anti-entropy can detect a - // SAME-version content difference and correct it (#411 round 4 B). + // Carry the signature DIGEST alongside the version so anti-entropy can + // detect a SAME-version content difference and correct it (#411 round + // 4 B). // // Fold keeping the HIGHEST-`member_info_rank` record per member (#411 // round 7 / Codex P1 #3), NOT a plain `.collect()` (which keeps whichever // duplicate was iterated LAST). If a state holds two records for one - // member, the advertised `(version, signature)` MUST match the record + // member, the advertised `(version, digest)` MUST match the record // `deputies_of` enforces on, or a peer with a different duplicate set // would advertise a different summary and anti-entropy would never // reconcile. Migration-safe: `verify` still accepts duplicates. @@ -508,6 +615,169 @@ mod tests { MemberInfo::new_public(member_id, 1, "TestUser".to_string()) } + /// GOLDEN VECTOR for [`SigDigest`] — ONE fixed signature, ONE fixed expected + /// digest, ONE fixed expected CBOR encoding. + /// + /// This pins the four things a peer must agree with every other peer on, and + /// which cannot change without re-keying the contract: that the hash is + /// blake3 over `signature.to_bytes()`, that the digest is the FIRST 16 bytes + /// of it, that those bytes are kept in their natural order, and that the + /// value serializes as a 17-byte CBOR byte string rather than a 32-byte CBOR + /// array. + /// + /// WHY A FIXED VECTOR AND NOT ONLY THE EXISTING ORACLES: every other check + /// on the digest — `deputy_ban_test`'s winner oracles and `room_data`'s + /// key-search fixture — compares digests of RANDOMLY-keyed signatures. A + /// change to the byte order leaves those comparisons agreeing about half the + /// time, i.e. an INTERMITTENT detector, which this project treats as a broken + /// one. Measured: with the digest bytes reversed, those oracles passed 11 of + /// 30 runs. A fixed input makes the detection deterministic. (Byte order was + /// a live risk while the digest was a `u64` built with `from_le_bytes`; the + /// `[u8; 16]` form removes the conversion, but "which 16 bytes, in what + /// order" still has to be pinned, and the encoding certainly does.) + /// + /// The expected bytes were produced with the `b3sum` 1.8.3 CLI, outside this + /// crate, rather than by running the code under test: + /// `printf '%b' "\x00\x01...\x3f" | b3sum` → + /// `4eed7141ea4a5cd4b788606bd23f46e212af9cacebacdc7d1f4c6dc7f2511b98`. + /// That is a separate binary but the same reference BLAKE3 implementation + /// the `blake3` crate wraps, so this pins OUR choices (which hash, which + /// bytes, what order, what encoding) — it is not an independent check that + /// BLAKE3 itself is correct, and is not claimed to be. + #[test] + fn sig_digest_golden_vector() { + // Bytes 0x00..=0x3f. `Signature::from_bytes` is infallible and does not + // validate the encoded point, and `to_bytes` returns these bytes back + // unchanged, so the digest input is exactly this fixed array. + let mut raw = [0u8; 64]; + for (i, b) in raw.iter_mut().enumerate() { + *b = i as u8; + } + let signature = Signature::from_bytes(&raw); + assert_eq!( + signature.to_bytes(), + raw, + "precondition: the fixture signature must round-trip to the bytes hashed" + ); + + const EXPECTED: [u8; 16] = [ + 0x4e, 0xed, 0x71, 0x41, 0xea, 0x4a, 0x5c, 0xd4, 0xb7, 0x88, 0x60, 0x6b, 0xd2, 0x3f, + 0x46, 0xe2, + ]; + + let digest = sig_digest(&signature); + assert_eq!( + digest.0, EXPECTED, + "sig_digest changed. This is a WIRE-FORMAT and ORDERING change: every \ + peer derives the tiebreak discriminator with this exact function, and \ + freenet-core byte-compares summarize_state output for staleness. If \ + the change is intended it re-keys the room contract — follow the \ + migration ritual and update this vector deliberately." + ); + + // Reversing the digest bytes must be observably different, so the vector + // genuinely constrains ORDER and not merely the multiset of bytes. + let mut reversed = EXPECTED; + reversed.reverse(); + assert_ne!( + digest.0, reversed, + "the golden vector must distinguish byte order" + ); + + // The encoding is the other half of the commitment: a CBOR byte string + // (major type 2, length 16 => header 0x50) at 17 bytes total. The derived + // Serialize would emit a 16-element CBOR array at 32 bytes, undoing most + // of the saving freenet/river#571 exists for. + let mut encoded = Vec::new(); + ciborium::ser::into_writer(&digest, &mut encoded).expect("serialize SigDigest"); + let mut want = vec![0x50u8]; + want.extend_from_slice(&EXPECTED); + assert_eq!( + encoded, want, + "SigDigest must serialize as a 17-byte CBOR byte string" + ); + + // And it must survive the round-trip the contract actually performs + // (summarize_state serializes; get_state_delta deserializes). + let decoded: SigDigest = + ciborium::de::from_reader(encoded.as_slice()).expect("deserialize SigDigest"); + assert_eq!( + decoded, digest, + "SigDigest must round-trip through ciborium" + ); + } + + /// The three selectors of "the canonical record" must break a rank TIE the + /// same way. [`SigDigest`] makes a tie between DISTINCT records infeasible to + /// mint, but two byte-identical duplicates of the SAME record tie trivially, + /// and `Iterator::max_by_key` (which `canonical` used before) returns the + /// LAST maximum while `dedup_to_canonical` and `apply_delta` keep the FIRST. + /// Left disagreeing, a state holding duplicates would answer `deputies_of` + /// one way on a freshly-GET'd full state and the other way after the next + /// `apply_delta` ran dedup. + /// The two records are built with `with_signature` so they share a signature + /// while carrying DIFFERENT `deputies`. That is exactly what a [`SigDigest`] + /// collision would look like to these two functions, which are pure + /// orderings and never verify a signature — and it is the only way to reach + /// the tie branch without actually finding a 128-bit collision. Records built + /// the normal way cannot be used here: ed25519 signing is deterministic and + /// covers the whole `MemberInfo`, so two records that tie on rank are + /// byte-identical, and the assertion would hold under either tie direction. + #[test] + fn canonical_and_dedup_break_rank_ties_identically() { + let mut csprng = OsRng; + let member_sk = SigningKey::generate(&mut csprng); + let member_id = MemberId::from(&member_sk.verifying_key()); + let other_id = MemberId::from(&SigningKey::generate(&mut csprng).verifying_key()); + + let signed = AuthorizedMemberInfo::new_with_member_key( + MemberInfo::new_public(member_id, 1, "Tie".to_string()), + &member_sk, + ); + let shared_signature = signed.signature; + + let mut with_deputy = MemberInfo::new_public(member_id, 1, "Tie".to_string()); + with_deputy.deputies = vec![other_id]; + + let first = AuthorizedMemberInfo::with_signature( + MemberInfo::new_public(member_id, 1, "Tie".to_string()), + shared_signature, + ); + let second = AuthorizedMemberInfo::with_signature(with_deputy, shared_signature); + + assert_ne!(first, second, "precondition: the records must differ"); + assert_eq!( + member_info_rank(first.member_info.version, &first.signature), + member_info_rank(second.member_info.version, &second.signature), + "precondition: the records must nevertheless tie on rank" + ); + + let mut state = MemberInfoV1 { + member_info: vec![first.clone(), second], + }; + let picked = state.canonical(member_id).cloned(); + state.dedup_to_canonical(); + + assert_eq!( + state.member_info.len(), + 1, + "dedup must collapse the tied duplicate" + ); + assert_eq!( + picked.as_ref(), + state.member_info.first(), + "canonical() and dedup_to_canonical() must keep the SAME record on a tie \ + (`max_by_key` keeps the LAST maximum, dedup keeps the FIRST — using both \ + makes deputies_of flip after an unrelated apply_delta)" + ); + // Both keep the FIRST record in vector order (replace only on strict `>`). + assert_eq!( + picked.as_ref(), + Some(&first), + "the tie must keep the first record" + ); + } + /// LOAD-BEARING regression test (issue #410). /// /// `MemberInfo` is individually signed over its ciborium bytes @@ -928,9 +1198,9 @@ mod tests { let delta = member_info_v1.delta(&parent_state, ¶meters, &BTreeMap::new()); assert_eq!(delta.unwrap().len(), 5); - // Test when all members are old with the same (version, signature) — + // Test when all members are old with the same (version, digest) — // nothing outranks the summary, so the delta is empty (#411 round 4 B). - let old_summary: BTreeMap = member_infos + let old_summary: BTreeMap = member_infos .iter() .map(|info| { ( @@ -1283,12 +1553,12 @@ mod tests { "deputies_of must return the v2 (revoke) result ({label})" ); - // Anti-entropy advertises the highest-rank (version, signature). + // Anti-entropy advertises the highest-rank (version, digest). let summary = state.summarize(&parent_state, ¶meters); assert_eq!( summary.get(&member_id).copied(), Some(revoke_summary_value), - "summarize must advertise the v2 (revoke) (version, signature) ({label})" + "summarize must advertise the v2 (revoke) (version, digest) ({label})" ); } } diff --git a/common/tests/deputy_ban_test.rs b/common/tests/deputy_ban_test.rs index aff09ede9..f3f5529fb 100644 --- a/common/tests/deputy_ban_test.rs +++ b/common/tests/deputy_ban_test.rs @@ -121,12 +121,17 @@ fn member_ids(state: &ChatRoomStateV1) -> HashSet { /// /// Recomputed here from blake3 rather than calling into river-core, /// deliberately: an oracle that reuses the implementation under test only -/// proves self-consistency. If production changes the digest function or its -/// byte order, this picks a different winner and the asserting test fails, +/// proves self-consistency. If production changes the digest function or which +/// bytes it keeps, this picks a different winner and the asserting test fails, /// which is the point. -fn sig_digest(sig: &ed25519_dalek::Signature) -> u64 { +/// +/// This is a RANDOMLY-keyed oracle, so on its own it only detects a change that +/// alters the winner for the keys a given run happened to draw. The FIXED-input +/// pin is `sig_digest_golden_vector` in `river_core::room_state::member_info`; +/// the two are complementary and neither replaces the other. +fn sig_digest(sig: &ed25519_dalek::Signature) -> [u8; 16] { let hash = blake3::hash(&sig.to_bytes()); - u64::from_le_bytes(hash.as_bytes()[..8].try_into().unwrap()) + hash.as_bytes()[..16].try_into().unwrap() } /// Deputize A->B (B may be anyone), B bans T where T is in A's subtree -> T diff --git a/common/tests/summary_determinism_test.rs b/common/tests/summary_determinism_test.rs index 17480f8f3..c5e0e9936 100644 --- a/common/tests/summary_determinism_test.rs +++ b/common/tests/summary_determinism_test.rs @@ -15,6 +15,7 @@ //! //! See `.claude/rules/contract-summary-determinism.md`. +use ed25519_dalek::SigningKey; use freenet_scaffold::util::FastHash; use freenet_scaffold::ComposableState; use river_core::room_state::ban::{BanId, BansV1}; @@ -22,12 +23,14 @@ use river_core::room_state::direct_messages::{ DirectMessagesSummary, DmOrderKey, DmPairHorizon, DmRetentionHorizon, SignatureBytes, }; use river_core::room_state::member::{MemberId, MembersV1}; -use river_core::room_state::member_info::MemberInfoV1; +use river_core::room_state::member_info::{ + AuthorizedMemberInfo, MemberInfo, MemberInfoV1, SigDigest, +}; use river_core::room_state::message::{ MessageId, MessageOrderKey, MessagesSummary, MessagesV1, RetentionHorizon, }; use river_core::room_state::secret::SecretsSummary; -use river_core::room_state::ChatRoomStateV1Summary; +use river_core::room_state::{ChatRoomParametersV1, ChatRoomStateV1, ChatRoomStateV1Summary}; use std::time::{Duration, SystemTime}; // Reference the ACTUAL associated `Summary` types (not a hard-coded `BTreeSet`), @@ -55,14 +58,21 @@ fn ban_id(i: i64) -> BanId { fn member_id(i: i64) -> MemberId { MemberId(FastHash(i)) } -/// A distinct signature-digest per index, matching the `(u32, u64)` shape the -/// member_info summary carries since freenet/river#571. The test exercises -/// ORDER-independence of the serialized summary, so only distinctness matters -/// here, not that these equal any real `blake3` digest. -fn sig_rank(i: i64) -> u64 { +/// A distinct signature digest per index, matching the `(u32, SigDigest)` shape +/// the member_info summary carries since freenet/river#571. The tests using this +/// exercise ORDER-independence of the serialized summary, so only distinctness +/// matters here, not that these equal any real `blake3` digest. (The real +/// digest's value and encoding are pinned separately by `sig_digest_golden_vector` +/// in `river_core::room_state::member_info`.) +fn sig_rank(i: i64) -> SigDigest { // Spread the bits so a byte-order bug in the summary encoding shows up as a // difference rather than cancelling out across entries. - (i as u64).wrapping_mul(0x9E37_79B9_7F4A_7C15) + let a = (i as u64).wrapping_mul(0x9E37_79B9_7F4A_7C15); + let b = (i as u64).wrapping_mul(0xBF58_476D_1CE4_E5B9); + let mut out = [0u8; 16]; + out[..8].copy_from_slice(&a.to_le_bytes()); + out[8..].copy_from_slice(&b.to_le_bytes()); + SigDigest(out) } #[test] @@ -92,12 +102,12 @@ fn members_summary_serialization_is_order_independent() { #[test] fn member_info_summary_serialization_is_order_independent() { - // MemberInfoV1::Summary = BTreeMap — the u64 is the - // signature digest (freenet/river#571; was a raw 64-byte Signature). - let fwd: Vec<(MemberId, (u32, u64))> = (0..N) + // MemberInfoV1::Summary = BTreeMap — the digest + // replaced a raw 64-byte Signature in freenet/river#571. + let fwd: Vec<(MemberId, (u32, SigDigest))> = (0..N) .map(|i| (member_id(i), (i as u32, sig_rank(i)))) .collect(); - let rev: Vec<(MemberId, (u32, u64))> = fwd.iter().rev().cloned().collect(); + let rev: Vec<(MemberId, (u32, SigDigest))> = fwd.iter().rev().cloned().collect(); let s_fwd: MemberInfoSummary = fwd.into_iter().collect(); let s_rev: MemberInfoSummary = rev.into_iter().collect(); @@ -334,27 +344,83 @@ fn top_level_summary_serialization_is_order_independent() { /// freenet/river#571 — the member_info summary must stay SMALL. /// /// This is the whole point of that change and it has no other guard: the summary -/// is re-sent to every interested peer on every state change, and was measured as -/// the largest single consumer of outbound bytes on the Freenet network. The -/// entry previously carried a raw 64-byte `Signature` (~84% of its bytes), -/// putting a 470-member room's summary around 29 KB. +/// is re-sent to every interested peer on every state change, and +/// `interest_sync_summaries` was measured as the largest single consumer of +/// outbound bytes on the Freenet network. The entry previously carried a raw +/// 64-byte `Signature`, 66 of ~78 CBOR bytes (84%). +/// +/// REALISM MATTERS HERE, because the number this test reports is quoted as the +/// production figure: +/// +/// - `MemberId`s come from REAL `VerifyingKey`s, so their `FastHash` values span +/// the `i64` range and CBOR-encode in the ~9 bytes production sees. The obvious +/// shortcut, `MemberId(FastHash(i))` for small `i`, encodes in 1-3 bytes and +/// understates the entry by ~30%. +/// - The summary is produced by calling the REAL `summarize()` on built state, +/// not by hand-constructing `MemberInfoV1::Summary`. Hand-construction can only +/// catch a change to the type's SHAPE, which would be a compile error anyway; +/// it cannot catch `summarize` starting to populate the map differently. +/// - Versions are small (1-3), matching production: a member's `version` +/// increments only when they edit their nickname or deputies, so it is a +/// single CBOR byte for nearly every real record. +/// +/// Keys are derived from fixed seeds, so the measurement is exactly reproducible +/// and the assertion cannot flake. /// /// Asserted as bytes-per-entry rather than a total, so the bound does not need -/// revising when a test constant changes. The pre-#571 encoding cannot pass: -/// a 64-byte signature alone serializes to 66 CBOR bytes. +/// revising when the member count changes. The pre-#571 encoding cannot pass: a +/// 64-byte signature alone serializes to 66 CBOR bytes. #[test] fn member_info_summary_stays_small_per_entry() { - const MEMBERS: i64 = 470; // the official room's rough membership - let summary: MemberInfoSummary = (0..MEMBERS) - .map(|i| (member_id(i), (i as u32, sig_rank(i)))) + const MEMBERS: u64 = 470; // the official room's rough membership + + // Deterministic but REAL keys: blake3 of the index seeds the signing key, so + // the derived MemberId is a full-width FastHash exactly as in production. + let signing_keys: Vec = (0..MEMBERS) + .map(|i| SigningKey::from_bytes(blake3::hash(&i.to_le_bytes()).as_bytes())) .collect(); + let member_info: Vec = signing_keys + .iter() + .enumerate() + .map(|(i, sk)| { + let info = MemberInfo::new_public( + MemberId::from(&sk.verifying_key()), + 1 + (i % 3) as u32, + format!("member{i}"), + ); + AuthorizedMemberInfo::new_with_member_key(info, sk) + }) + .collect(); + + let state = MemberInfoV1 { member_info }; + let parent = ChatRoomStateV1::default(); + let parameters = ChatRoomParametersV1 { + owner: signing_keys[0].verifying_key(), + }; + + // The REAL summarize(), so a change in how it populates the map is caught. + let summary: MemberInfoSummary = state.summarize(&parent, ¶meters); + assert_eq!( + summary.len() as u64, + MEMBERS, + "precondition: one summary entry per member" + ); + let bytes = cbor(&summary).len(); let per_entry = bytes as f64 / MEMBERS as f64; - + println!("member_info summary: {bytes} bytes for {MEMBERS} members = {per_entry:.2} B/entry"); + + // Measured at 28.01 B/entry with the 128-bit digest, against ~78 with the + // raw signature. A 64-bit digest would be exactly 8 B/entry cheaper (a CBOR + // byte string is 1 header byte either way, and a random u64 always takes the + // 8-byte form) — see `SigDigest` for why those 8 bytes are bought + // deliberately. The bound leaves headroom above 28.01 without approaching + // the 78 it exists to catch; the measurement itself is deterministic, so it + // is headroom for future entry-shape changes, not for run-to-run variance. assert!( per_entry < 32.0, - "member_info summary must stay under 32 bytes/entry (got {per_entry:.1}, \ + "member_info summary must stay under 32 bytes/entry (got {per_entry:.2}, \ {bytes} bytes for {MEMBERS} members). A raw 64-byte Signature encodes to \ 66 CBOR bytes on its own, so this failing likely means the summary \ regressed to carrying signatures rather than digests (freenet/river#571)." diff --git a/ui/src/components/members/member_info_modal/nickname_field.rs b/ui/src/components/members/member_info_modal/nickname_field.rs index 920c49a2e..7b07b03f6 100644 --- a/ui/src/components/members/member_info_modal/nickname_field.rs +++ b/ui/src/components/members/member_info_modal/nickname_field.rs @@ -190,7 +190,7 @@ pub fn NicknameField(member_info: AuthorizedMemberInfo) -> Element { // `self_member_info` version — not from the canonical // base alone. On a stale/reset client the room_state max // can collide at the SAME version as a still-propagating - // record and lose the signature tiebreak, silently + // record and lose the digest tiebreak, silently // no-op'ing the edit (freenet/river#411 round 8). let cached_version = room_data .self_member_info diff --git a/ui/src/room_data.rs b/ui/src/room_data.rs index 5f929ef83..df95f2096 100644 --- a/ui/src/room_data.rs +++ b/ui/src/room_data.rs @@ -874,7 +874,7 @@ impl RoomData { // version and the cached `self_member_info` version — not from // room_state alone. On a stale/reset client the room_state max can // collide at the SAME version as a still-propagating grant/revoke - // and lose the signature tiebreak, silently no-op'ing the change + // and lose the digest tiebreak, silently no-op'ing the change // (freenet/river#411 round 8). let cached_version = self .self_member_info @@ -6272,11 +6272,11 @@ mod tests { // river-core (`member_info_rank`/`sig_digest` are private anyway): // a fixture that picked its key via the implementation under test // would make the `canonical` sanity assertion below tautological. - // Computed independently, a change to the digest function or its byte - // order makes this pick the wrong key and that assertion fails. - let sig_digest = |sig: &ed25519_dalek::Signature| -> u64 { + // Computed independently, a change to the digest function or to which + // bytes it keeps makes this pick the wrong key and that assertion fails. + let sig_digest = |sig: &ed25519_dalek::Signature| -> [u8; 16] { let hash = blake3::hash(&sig.to_bytes()); - u64::from_le_bytes(hash.as_bytes()[..8].try_into().unwrap()) + hash.as_bytes()[..16].try_into().unwrap() }; let (d_sk, clean_authorized, stale_grant_authorized) = 'retry: { for _ in 0..500 { @@ -6332,20 +6332,28 @@ mod tests { .push(AuthorizedMember::new(member, &owner_sk)); } - // Push the CANONICAL winner (clean) FIRST and the loser (stale_grant) - // LAST. A version-only `max_by_key` ties on version=1 and — per - // `Iterator::max_by_key`'s documented "last element wins" tie-break — - // returns whichever is LAST in the Vec (stale_grant, the wrong one), - // while `canonical` (ranked by `(version, signature)`) returns the - // true winner (clean) regardless of position. + // Push the LOSER (stale_grant) FIRST and the canonical winner (clean) + // LAST, so vector position and rank disagree. Both records tie on + // version=1, so any selector that ignores the signature digest returns + // stale_grant — the wrong one — whether it is a first-match `.find()` or + // a version-only comparison that keeps the first on a tie. Only a + // selector ranking by `(version, signature-digest)` returns clean, which + // the retry loop above guaranteed outranks stale_grant. + // + // The order matters and was flipped deliberately: it used to be + // clean-first, which caught a version-only `max_by_key` (whose documented + // tie-break returns the LAST element). `canonical` now keeps the FIRST + // maximum, to agree with `dedup_to_canonical` and `apply_delta`, so + // clean-first would let a version-only selector return the right answer + // by accident and the test would prove nothing. room_state .member_info .member_info - .push(clean_authorized.clone()); + .push(stale_grant_authorized.clone()); room_state .member_info .member_info - .push(stale_grant_authorized.clone()); + .push(clean_authorized.clone()); assert_eq!( room_state .member_info @@ -6383,11 +6391,12 @@ mod tests { }; // Deputize T. Since the CANONICAL base (clean) does not yet list T, - // this is a genuine change that must publish. A version-only - // `max_by_key` would instead select `stale_grant` (last in the Vec, - // tied on version) — which ALREADY lists T — so the buggy code - // short-circuits on "already a deputy, nothing to publish" and - // returns `false` without publishing anything. + // this is a genuine change that must publish. A selector that ignores + // the signature digest — a first-match `.find()`, or a version-only + // comparison — instead selects `stale_grant` (first in the Vec, tied on + // version), which ALREADY lists T, so the buggy code short-circuits on + // "already a deputy, nothing to publish" and returns `false` without + // publishing anything. assert!( room.apply_deputy_change(t_id, true), "must publish a change: canonical base (clean) does not yet list T" @@ -6413,7 +6422,7 @@ mod tests { // a prior edit was cached locally but the client's own room_state // view has not caught up. Deriving the next version from room_state // alone would collide with a still-propagating record at the SAME - // version, risking losing the signature tiebreak and silently + // version, risking losing the digest tiebreak and silently // no-op'ing the change. The next version must be derived from the // HIGHER of the two sources. let mut rng = rand::thread_rng(); From bd6ca9611197290884dca10c58f9ae23a1d94da6 Mon Sep 17 00:00:00 2001 From: Ian Clarke Date: Thu, 30 Jul 2026 16:22:28 -0500 Subject: [PATCH 4/6] docs(room-state): correct the summary size figures and measure the baseline The "66 bytes per signature / ~78 bytes per entry" figure carried by issue #571, this PR's body, my code comments, and the first review round is wrong. 66 is the CBOR BYTE STRING encoding -- what River's own SignatureBytes newtype produces via serialize_bytes. ed25519::Signature does not do that: its Serialize calls serialize_tuple(64), ciborium maps a tuple to a CBOR ARRAY, and a uniformly random byte costs 2 bytes there whenever it is >= 24. The real figure is ~124. Measured at 470 entries with realistic MemberIds: before (u32, Signature) 63019 B = 134.08 B/entry after (u32, SigDigest) 13163 B = 28.01 B/entry 4.8x So the win is ~1.7x larger than claimed, not smaller. This is also the entire explanation for the impossible arithmetic flagged in review, where 470 x 66 = 31 KB of signatures exceeded a stated 29 KB total: 66 was the wrong number, so the sum could not close. The Official room's member_info term is ~63 KB, not ~37 KB. The fix is not a better derivation, it is a measurement. member_info_summary_stays_small_per_entry now rebuilds the pre-change (u32, Signature) shape from the SAME records it summarizes and prints both figures, so the before/after claim is produced by the test rather than asserted in prose. A second assertion pins the baseline above 100 B/entry with the explanation inline, because the failure mode is specifically measuring against the wrong encoding: swapping the baseline to SignatureBytes reproduces the old claim exactly (77.01 B/entry), and that assertion catches it. Also recorded in .claude/rules/contract-summary-determinism.md: the two encodings of the same 64 bytes, which one each type uses, and the rule that a summary size claim must measure the old shape in the same test. The deferred DirectMessagesSummary follow-up genuinely is ~66 B/entry since it does use SignatureBytes; the two must not be reasoned about with one number. No production behaviour changes here. Verified: cargo fmt --check clean; river-core --tests (409), --lib (208), --lib --features ecies-randomized,migration,mentions (250), riverctl --lib (314), river-ui --bins (814) and --bins --features example-data,no-sync (819) all pass. The new baseline assertion was verified to FAIL when pointed at SignatureBytes. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01SeAw3G4bFhTT242xoEeMxN --- .claude/rules/contract-summary-determinism.md | 28 +++++-- common/src/room_state/member_info.rs | 47 +++++++---- common/tests/summary_determinism_test.rs | 82 +++++++++++++++---- 3 files changed, 119 insertions(+), 38 deletions(-) diff --git a/.claude/rules/contract-summary-determinism.md b/.claude/rules/contract-summary-determinism.md index 7753a70bc..0a2b04175 100644 --- a/.claude/rules/contract-summary-determinism.md +++ b/.claude/rules/contract-summary-determinism.md @@ -85,7 +85,11 @@ codebase: 11 of 30 runs missed a reversed-byte-order change). See Also assert bytes-per-entry for the summary, built by calling the real `summarize()` with realistic key values — `MemberId(FastHash(i))` for small `i` encodes in 1-3 bytes against a real key's ~9 and understates the entry by ~30%. -See `member_info_summary_stays_small_per_entry`. +**Measure the OLD shape in the same test, rebuilt from the same records**, rather +than quoting a per-entry figure in prose. A size claim is the whole justification +for a summary change, and a derived byte count is exactly the kind of number that +survives review while being wrong (see the encoding trap in History below). See +`member_info_summary_stays_small_per_entry`. ## History @@ -98,10 +102,22 @@ See `member_info_summary_stays_small_per_entry`. summary-byte-compare staleness check. - **freenet/river#571** (2026-07): the same summary's VALUE then shrank, `(u32, Signature)` → `(u32, SigDigest)`, where `SigDigest` is a 128-bit BLAKE3 - digest of the signature serialized as a CBOR byte string. The raw signature was - 66 of ~78 CBOR bytes per entry; measured 78 → 28.0 bytes/entry at 470 records. - The collection type was already `BTreeMap` and did not change, so this is the - value-side rule above rather than the determinism rule. + digest of the signature serialized as a CBOR byte string. Measured 134.08 → + 28.01 bytes/entry at 470 records, a 4.8x reduction. The collection type was + already `BTreeMap` and did not change, so this is the value-side rule above + rather than the determinism rule. `DirectMessagesSummary.message_signatures: BTreeSet` still - carries raw 64-byte signatures and has the same fix available. + carries raw signatures and has the same fix available — but at 66 bytes each, + not 134, because it uses River's `SignatureBytes` newtype rather than + `ed25519::Signature` (see the next bullet). +- **The same 64 bytes have two very different CBOR encodings, and the wrong one + was quoted for months.** `ed25519::Signature::serialize` calls + `serialize_tuple(64)`; ciborium maps a tuple to a CBOR ARRAY, where each + uniformly random byte costs 2 bytes whenever it is >= 24 — so ~124 bytes. + River's own `SignatureBytes` newtype calls `serialize_bytes`, giving a CBOR + byte string at 66. The 66 figure was carried through issue #571, PR #572's + body, and a review, applied to a summary that used `ed25519::Signature`. It + produced an arithmetic that could not close (470 x 66 exceeded the stated + total) and it understated the win by nearly half. **Measure the encoding in a + test against the real type; do not derive it from the byte count.** - **freenet/freenet-core#4857** — the update-drop divergence this feeds. diff --git a/common/src/room_state/member_info.rs b/common/src/room_state/member_info.rs index c8dc90a2b..01a95742f 100644 --- a/common/src/room_state/member_info.rs +++ b/common/src/room_state/member_info.rs @@ -160,24 +160,39 @@ fn member_info_rank(version: u32, signature: &Signature) -> (u32, SigDigest) { /// /// WHY A DIGEST AND NOT THE SIGNATURE (freenet/river#571, landed as PR #572; /// every "#571" elsewhere in this file is that ISSUE, not the PR): the summary carried -/// the raw 64-byte `Signature` per member — 66 of ~78 CBOR bytes per entry, 84% -/// of it. That summary is re-sent on every state change to every interested -/// peer, and `interest_sync_summaries` was measured as the largest single -/// consumer of outbound bytes on the Freenet network (49.8%). The signature is -/// never verified here — it is only ever compared for equality and ordering — so -/// a digest serves the identical purpose. Measured through the real `summarize()` -/// on 470 entries with realistic `MemberId`s: ~78 → 28.0 CBOR bytes per entry. A -/// 64-bit digest would be exactly 8 bytes per entry cheaper; the next paragraph -/// is why those 8 bytes are bought deliberately. Pinned by -/// `member_info_summary_stays_small_per_entry`. +/// the raw ed25519 `Signature` per member — ~124 of ~134 CBOR bytes per entry, +/// about 92% of it. That summary is re-sent on every state change to every +/// interested peer, and `interest_sync_summaries` was measured as the largest +/// single consumer of outbound bytes on the Freenet network (49.8%). The +/// signature is never verified here — it is only ever compared for equality and +/// ordering — so a digest serves the identical purpose. Measured through the real +/// `summarize()` on 470 entries with realistic `MemberId`s: **134.08 → 28.01 CBOR +/// bytes per entry, a 4.8x reduction**. A 64-bit digest would be exactly 8 bytes +/// per entry cheaper; the next paragraph is why those 8 bytes are bought +/// deliberately. Both figures are measured, not derived, by +/// `member_info_summary_stays_small_per_entry`, which rebuilds the old shape from +/// the same records. +/// +/// WHY 124 AND NOT 66, since 66 is the number the issue and the first draft of +/// this change both used: `ed25519::Signature`'s `Serialize` calls +/// `serialize_tuple(64)`, which ciborium encodes as a CBOR ARRAY of 64 integers, +/// and a uniformly random byte costs 2 bytes there whenever it is >= 24. 66 is +/// the CBOR BYTE STRING encoding — what River's own +/// [`crate::room_state::direct_messages::SignatureBytes`] newtype produces via +/// `serialize_bytes`, and what the deferred `DirectMessagesSummary` follow-up +/// will actually be saving. The member_info summary never used that type. Two +/// different encodings of the same 64 bytes; do not reason about both with one +/// number. /// /// The 29.1 KB mean `interest_sync_summaries` message that motivated #571 is a /// FLEET-WIDE mean across all rooms, so it is not this room's own summary size /// and the two figures must not be multiplied together: at the Official room's -/// ~470 records the member_info term ALONE came to ~37 KB, which is larger than -/// the fleet mean because that mean also averages in many far smaller rooms. No -/// per-room summary measurement is on record, so no claim is made about what any -/// single room's total summary weighed before this change. +/// ~470 records the member_info term ALONE measures ~63 KB, well above the fleet +/// mean, because that mean also averages in many far smaller rooms. No per-room +/// summary measurement is on record, so no claim is made about what any single +/// room's total summary weighed before this change. (The issue's own arithmetic +/// did not close for the same reason this doc's did not: it used 66 rather than +/// ~124 for the signature.) /// /// WHY 128 BITS AND NOT 64: a collision here is not cosmetic, and it is not /// self-correcting. Two same-version records whose discriminators tie are @@ -263,8 +278,8 @@ impl ComposableState for MemberInfoV1 { /// at the SAME version (#411 B). /// /// This was `(u32, Signature)` until freenet/river#571. The raw 64-byte - /// signature was 66 of ~78 CBOR bytes per entry (84%), and this summary is - /// re-sent to every interested peer on every state change. See [`SigDigest`] + /// signature was ~124 of ~134 CBOR bytes per entry (~92%), and this summary + /// is re-sent to every interested peer on every state change. See [`SigDigest`] /// for why a digest is sufficient, why it is 128-bit blake3 rather than 64, /// and why it serializes as a CBOR byte string. /// diff --git a/common/tests/summary_determinism_test.rs b/common/tests/summary_determinism_test.rs index c5e0e9936..b6b4fae18 100644 --- a/common/tests/summary_determinism_test.rs +++ b/common/tests/summary_determinism_test.rs @@ -15,7 +15,7 @@ //! //! See `.claude/rules/contract-summary-determinism.md`. -use ed25519_dalek::SigningKey; +use ed25519_dalek::{Signature, SigningKey}; use freenet_scaffold::util::FastHash; use freenet_scaffold::ComposableState; use river_core::room_state::ban::{BanId, BansV1}; @@ -31,6 +31,7 @@ use river_core::room_state::message::{ }; use river_core::room_state::secret::SecretsSummary; use river_core::room_state::{ChatRoomParametersV1, ChatRoomStateV1, ChatRoomStateV1Summary}; +use std::collections::BTreeMap; use std::time::{Duration, SystemTime}; // Reference the ACTUAL associated `Summary` types (not a hard-coded `BTreeSet`), @@ -347,7 +348,17 @@ fn top_level_summary_serialization_is_order_independent() { /// is re-sent to every interested peer on every state change, and /// `interest_sync_summaries` was measured as the largest single consumer of /// outbound bytes on the Freenet network. The entry previously carried a raw -/// 64-byte `Signature`, 66 of ~78 CBOR bytes (84%). +/// ed25519 `Signature`, which is ~92% of it. +/// +/// THE BASELINE IS MEASURED HERE, NOT ASSERTED IN PROSE. Both the issue and the +/// first draft of this change quoted 66 bytes for the signature, which is the +/// encoding of River's OWN `SignatureBytes` newtype (a CBOR byte string). It is +/// NOT what `ed25519::Signature` does: `ed25519`'s `Serialize` calls +/// `serialize_tuple(64)`, ciborium maps that to a CBOR ARRAY, and a random byte +/// costs 2 bytes there whenever it is >= 24 — so the real figure is ~124. The +/// wrong number survived an issue, a PR body, a review, and a round of review +/// fixes, so the old shape is now rebuilt from the SAME records and measured +/// alongside the new one. A derived figure is not evidence. /// /// REALISM MATTERS HERE, because the number this test reports is quoted as the /// production figure: @@ -368,8 +379,7 @@ fn top_level_summary_serialization_is_order_independent() { /// and the assertion cannot flake. /// /// Asserted as bytes-per-entry rather than a total, so the bound does not need -/// revising when the member count changes. The pre-#571 encoding cannot pass: a -/// 64-byte signature alone serializes to 66 CBOR bytes. +/// revising when the member count changes. #[test] fn member_info_summary_stays_small_per_entry() { const MEMBERS: u64 = 470; // the official room's rough membership @@ -409,20 +419,60 @@ fn member_info_summary_stays_small_per_entry() { let bytes = cbor(&summary).len(); let per_entry = bytes as f64 / MEMBERS as f64; - println!("member_info summary: {bytes} bytes for {MEMBERS} members = {per_entry:.2} B/entry"); - - // Measured at 28.01 B/entry with the 128-bit digest, against ~78 with the - // raw signature. A 64-bit digest would be exactly 8 B/entry cheaper (a CBOR - // byte string is 1 header byte either way, and a random u64 always takes the - // 8-byte form) — see `SigDigest` for why those 8 bytes are bought - // deliberately. The bound leaves headroom above 28.01 without approaching - // the 78 it exists to catch; the measurement itself is deterministic, so it - // is headroom for future entry-shape changes, not for run-to-run variance. + + // The PRE-CHANGE shape, rebuilt from the same records: the summary value was + // the raw `Signature` rather than a digest of it. Everything else about the + // entry is identical, so the difference is exactly what this change bought. + let before: BTreeMap = state + .member_info + .iter() + .map(|r| { + ( + r.member_info.member_id, + (r.member_info.version, r.signature), + ) + }) + .collect(); + let before_bytes = cbor(&before).len(); + let before_per_entry = before_bytes as f64 / MEMBERS as f64; + + println!( + "member_info summary over {MEMBERS} members:\n \ + before (u32, Signature): {before_bytes} B = {before_per_entry:.2} B/entry\n \ + after (u32, SigDigest): {bytes} B = {per_entry:.2} B/entry\n \ + reduction: {:.1}x", + before_per_entry / per_entry + ); + + // Measured 134.08 → 28.01 B/entry, a 4.8x reduction. A 64-bit digest would + // be exactly 8 B/entry cheaper than the 128-bit one (a CBOR byte string + // costs 1 header byte either way, and a random u64 always takes the 8-byte + // form) — see `SigDigest` for why those 8 bytes are bought deliberately. + // + // The bound leaves headroom above 28.01 without approaching the 134 it + // exists to catch. The measurement is deterministic, so that headroom is for + // future entry-shape changes, not for run-to-run variance. assert!( per_entry < 32.0, "member_info summary must stay under 32 bytes/entry (got {per_entry:.2}, \ - {bytes} bytes for {MEMBERS} members). A raw 64-byte Signature encodes to \ - 66 CBOR bytes on its own, so this failing likely means the summary \ - regressed to carrying signatures rather than digests (freenet/river#571)." + {bytes} bytes for {MEMBERS} members). This failing likely means the \ + summary regressed to carrying signatures rather than digests \ + (freenet/river#571), or that `SigDigest` lost its hand-written \ + `Serialize` — the serde derive emits a 16-element CBOR array (32 bytes) \ + instead of a byte string (17), which measures 42.53 B/entry." + ); + + // Pin the baseline too. If this ever drops near the bound above, the + // reduction being claimed for this change has stopped being real — most + // likely because someone "fixed" the comparison to use a byte-string + // encoding that `ed25519::Signature` does not actually use. + assert!( + before_per_entry > 100.0, + "the pre-change encoding measured {before_per_entry:.2} B/entry, but \ + `ed25519::Signature` serializes as a 64-element CBOR array (~124 bytes), \ + so this should be ~134. A much lower figure means the baseline is being \ + measured against the wrong encoding — River's `SignatureBytes` newtype \ + uses `serialize_bytes` and costs 66, but the member_info summary never \ + used that type." ); } From 35a3502d3df05a13c01e2319b8b3c58c87d57dca Mon Sep 17 00:00:00 2001 From: Ian Clarke Date: Thu, 30 Jul 2026 19:50:45 -0500 Subject: [PATCH 5/6] test(room-state): pin the tie rule in one place and cover canonical's digest arm Re-review follow-ups on e8092b0e. No behaviour change: `outranks` is `candidate > incumbent`, exactly what the five call sites already spelled inline. LOW-1. The tie direction was asserted in prose at five separate `>` sites (canonical, dedup_to_canonical, summarize, delta, apply_delta) and pinned by nothing -- relaxing any single one to `>=` left all 409 tests green, because reaching the tie branch behaviourally needs a genuine SigDigest collision and `verify` checks every stored record's signature. That is the same prose-only state that let canonical (last-wins) and dedup_to_canonical (first-wins) disagree until the previous commit. All five now route through one `outranks()` with one test. Verified: `>` -> `>=` in outranks fails 4 tests including the new pin. LOW-2. canonical's digest arm had no river-core coverage: a mutation comparing only `version` while keeping the first on a tie -- i.e. matching the real tie direction -- passed all 409, caught only by a river-ui test. The new test is deterministic by construction rather than by retry loop: two `with_signature` records at the same version carrying fixed signatures [1; 64] and [2; 64], whose blake3 digests (29c04cc4... and fe969aba..., computed with b3sum) are known to differ, with the loser placed first so vector position and rank disagree. Verified: the version-only mutation now fails exactly this test (209 passed, 1 failed). INFOs: the "32 bytes" figure for the serde-derive encoding is an expectation for random content (each byte >= 24 costs two), now worded as such; the reversed-digest oracle miss rate is reported as both samples taken (11/30 and 1/12) rather than one, since the rate depends on the keys a run draws and only its being non-zero matters; and one stale comment at room_synchronizer.rs:186 ("a signature map" -> "a digest map") that the earlier sweep missed. Verified: cargo fmt --check clean; river-core --tests (411), --lib (210), --lib --features ecies-randomized,migration,mentions (252), riverctl --lib (314), river-ui --bins (814) and --bins --features example-data,no-sync (819) all pass. Clippy unchanged at 54 pre-existing sites across 17 files, none on lines this diff touches (river#573). Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01SeAw3G4bFhTT242xoEeMxN --- .claude/rules/contract-summary-determinism.md | 11 +- common/src/room_state/member_info.rs | 138 ++++++++++++++++-- .../app/freenet_api/room_synchronizer.rs | 2 +- 3 files changed, 133 insertions(+), 18 deletions(-) diff --git a/.claude/rules/contract-summary-determinism.md b/.claude/rules/contract-summary-determinism.md index 0a2b04175..d8da9879b 100644 --- a/.claude/rules/contract-summary-determinism.md +++ b/.claude/rules/contract-summary-determinism.md @@ -72,14 +72,17 @@ them may change without re-keying the contract: hours; use 128. - which bytes are kept, and in what order; - how the value serializes — a `[u8; 16]` through the serde derive emits a - 16-element CBOR array (32 bytes), not a byte string (17). Write `Serialize` - by hand with `serialize_bytes`. + 16-element CBOR array (~32 bytes for random content, since each byte >= 24 + costs two), not a byte string (17). Write `Serialize` by hand with + `serialize_bytes`. Pin all four with a **golden vector**: ONE fixed input, ONE fixed expected digest, ONE fixed expected encoding. Oracles that compare digests of randomly generated keys are NOT sufficient — a byte-order change leaves them agreeing -about half the time, so they detect it only intermittently (measured on this -codebase: 11 of 30 runs missed a reversed-byte-order change). See +some of the time, so they detect it only intermittently. Measured twice on this +codebase with the digest reversed: 11 of 30 runs missed it in one sample, 1 of 12 +in an independent reproduction. The exact rate depends on the keys drawn and is +not the point; a non-zero miss rate makes it a coin flip rather than a check. See `sig_digest_golden_vector` in `common/src/room_state/member_info.rs`. Also assert bytes-per-entry for the summary, built by calling the real diff --git a/common/src/room_state/member_info.rs b/common/src/room_state/member_info.rs index 01a95742f..d889b1912 100644 --- a/common/src/room_state/member_info.rs +++ b/common/src/room_state/member_info.rs @@ -57,7 +57,7 @@ impl MemberInfoV1 { { let rank = member_info_rank(info.member_info.version, &info.signature); let better = match &best { - Some((_, best_rank)) => rank > *best_rank, + Some((_, best_rank)) => outranks(rank, *best_rank), None => true, }; if better { @@ -104,7 +104,7 @@ impl MemberInfoV1 { let rank = member_info_rank(info.member_info.version, &info.signature); match best.entry(id) { std::collections::hash_map::Entry::Occupied(mut e) => { - if rank > e.get().0 { + if outranks(rank, e.get().0) { e.insert((rank, info)); } } @@ -154,6 +154,26 @@ fn member_info_rank(version: u32, signature: &Signature) -> (u32, SigDigest) { (version, sig_digest(signature)) } +/// Whether `candidate` beats `incumbent` under [`member_info_rank`]'s order. +/// +/// THE SINGLE IMPLEMENTATION OF THE TIE RULE. Five sites choose between two +/// ranked records — [`MemberInfoV1::canonical`], +/// [`MemberInfoV1::dedup_to_canonical`], `summarize`, `delta`, and `apply_delta` +/// — and every one of them must break a tie the SAME way, keeping the incumbent. +/// They previously each spelled `>` inline, which is one edit away from silent +/// disagreement: relaxing any one of them to `>=` flips that site to last-wins +/// while the others stay first-wins, and `deputies_of` then answers differently +/// depending on which code path last touched the record — i.e. ban authority +/// flips. That mutation left the whole suite green, because reaching the tie +/// branch behaviorally needs a genuine [`SigDigest`] collision. +/// +/// Routing all five through here means the rule has one definition and one test +/// (`outranks_keeps_the_incumbent_on_a_tie`) rather than five prose assertions. +/// Strict `>` is the rule: **ties keep the incumbent.** +fn outranks(candidate: (u32, SigDigest), incumbent: (u32, SigDigest)) -> bool { + candidate > incumbent +} + /// 16-byte BLAKE3 digest of a signature: the equal-version tiebreak /// discriminator in [`member_info_rank`], and the value [`MemberInfoV1`]'s /// summary carries per member. @@ -235,7 +255,8 @@ fn member_info_rank(version: u32, signature: &Signature) -> (u32, SigDigest) { /// - ordering is plain lexicographic over those bytes (the derived `Ord`); /// - it serializes as a CBOR byte string (17 bytes), via the hand-written /// `Serialize` below rather than the derive, which would emit a 16-element -/// CBOR array at 32 bytes and undo most of the saving. +/// CBOR array — ~32 bytes for random digest content, since each byte >= 24 +/// costs two — and undo most of the saving. /// /// None of the three may change without re-keying the contract. See /// `.claude/rules/contract-summary-determinism.md` and freenet/freenet-core#4857. @@ -367,7 +388,7 @@ impl ComposableState for MemberInfoV1 { summary .entry(info.member_info.member_id) .and_modify(|existing| { - if candidate > *existing { + if outranks(candidate, *existing) { *existing = candidate; } }) @@ -396,9 +417,10 @@ impl ComposableState for MemberInfoV1 { None => true, // The summary value IS the rank (version, signature digest), // so compare against it directly. - Some(old_rank) => { - member_info_rank(info.member_info.version, &info.signature) > *old_rank - } + Some(old_rank) => outranks( + member_info_rank(info.member_info.version, &info.signature), + *old_rank, + ), } }) .cloned() @@ -475,12 +497,13 @@ impl ComposableState for MemberInfoV1 { .iter_mut() .find(|info| info.member_info.member_id == *member_id) { - if member_info_rank(member_info.member_info.version, &member_info.signature) - > member_info_rank( + if outranks( + member_info_rank(member_info.member_info.version, &member_info.signature), + member_info_rank( existing_info.member_info.version, &existing_info.signature, - ) - { + ), + ) { *existing_info = member_info.clone(); } } else { @@ -645,8 +668,12 @@ mod tests { /// key-search fixture — compares digests of RANDOMLY-keyed signatures. A /// change to the byte order leaves those comparisons agreeing about half the /// time, i.e. an INTERMITTENT detector, which this project treats as a broken - /// one. Measured: with the digest bytes reversed, those oracles passed 11 of - /// 30 runs. A fixed input makes the detection deterministic. (Byte order was + /// one. Measured twice with the digest bytes reversed: those oracles let the + /// change through in 11 of 30 runs in one sample and 1 of 12 in an + /// independent reproduction. The rate depends on the keys a run happens to + /// draw and is not worth pinning down; what matters is that it is not 0, so + /// the detector is a coin flip rather than a check. A fixed input makes the + /// detection deterministic. (Byte order was /// a live risk while the digest was a `u64` built with `from_le_bytes`; the /// `[u8; 16]` form removes the conversion, but "which 16 bytes, in what /// order" still has to be pinned, and the encoding certainly does.) @@ -730,6 +757,91 @@ mod tests { /// Left disagreeing, a state holding duplicates would answer `deputies_of` /// one way on a freshly-GET'd full state and the other way after the next /// `apply_delta` ran dedup. + /// [`outranks`] is the single definition of the tie rule that all five rank + /// consumers share, so this is the one place it is pinned. + /// + /// Relaxing `>` to `>=` at any individual call site used to leave the entire + /// suite green: reaching the tie branch behaviorally needs a genuine + /// [`SigDigest`] collision, since `verify` checks every stored record's + /// signature. That made the tie direction prose-only, which is exactly the + /// state that let `canonical` (last-wins) and `dedup_to_canonical` + /// (first-wins) disagree for as long as they did. + #[test] + fn outranks_keeps_the_incumbent_on_a_tie() { + let lo = SigDigest([0x11; 16]); + let hi = SigDigest([0x22; 16]); + + // The load-bearing case: equal rank must NOT outrank. `>=` fails here. + assert!( + !outranks((1, lo), (1, lo)), + "a tie must keep the INCUMBENT — all five consumers depend on this" + ); + + // Version dominates the digest in both directions. + assert!(outranks((2, lo), (1, hi)), "higher version wins"); + assert!(!outranks((1, hi), (2, lo)), "lower version loses"); + + // At equal version the digest decides, lexicographically over its bytes. + assert!( + outranks((1, hi), (1, lo)), + "greater digest wins at equal version" + ); + assert!( + !outranks((1, lo), (1, hi)), + "lesser digest loses at equal version" + ); + } + + /// `canonical` must select on the DIGEST, not merely on the version. + /// + /// Without this, a mutation that compares only `version` (keeping the first + /// on a tie, matching the real tie direction) passes every river-core test; + /// only a river-ui test catches it. Deterministic by construction: two fixed + /// signatures whose digests are known to differ, so there is no retry loop + /// and no randomness. + #[test] + fn canonical_selects_by_digest_not_just_version() { + let mut csprng = OsRng; + let member_sk = SigningKey::generate(&mut csprng); + let member_id = MemberId::from(&member_sk.verifying_key()); + + // blake3([1; 64]) = 29c04cc4... blake3([2; 64]) = fe969aba... + // so the [2; 64] record has the greater digest and MUST win. (Computed + // with the `b3sum` CLI, not by calling `sig_digest`.) + let low_sig = Signature::from_bytes(&[1u8; 64]); + let high_sig = Signature::from_bytes(&[2u8; 64]); + assert!( + sig_digest(&high_sig) > sig_digest(&low_sig), + "fixture precondition: [2; 64] must digest greater than [1; 64]" + ); + + let mut winner_info = MemberInfo::new_public(member_id, 1, "Same".to_string()); + winner_info.deputies = vec![member_id]; + let winner = AuthorizedMemberInfo::with_signature(winner_info, high_sig); + let loser = AuthorizedMemberInfo::with_signature( + MemberInfo::new_public(member_id, 1, "Same".to_string()), + low_sig, + ); + + // Loser FIRST, so a version-only comparison that keeps the first (the + // real tie direction) returns the wrong record. + let state = MemberInfoV1 { + member_info: vec![loser, winner.clone()], + }; + + assert_eq!( + state.canonical(member_id), + Some(&winner), + "canonical must break the equal-version tie on the digest, not fall \ + back to vector position" + ); + assert_eq!( + state.deputies_of(member_id), + &[member_id], + "deputies_of must follow canonical's choice — this is the ban-authority path" + ); + } + /// The two records are built with `with_signature` so they share a signature /// while carrying DIFFERENT `deputies`. That is exactly what a [`SigDigest`] /// collision would look like to these two functions, which are pure diff --git a/ui/src/components/app/freenet_api/room_synchronizer.rs b/ui/src/components/app/freenet_api/room_synchronizer.rs index 79ee8f496..38b8f792a 100644 --- a/ui/src/components/app/freenet_api/room_synchronizer.rs +++ b/ui/src/components/app/freenet_api/room_synchronizer.rs @@ -183,7 +183,7 @@ fn outbound_summary( // // "Horizon-shaped" means the field makes the SENDER withhold something it // holds and the receiver lacks; every other field is a pure have-statement - // (an id set, a version, a signature map), which is safe — indeed required — + // (an id set, a version, a digest map), which is safe — indeed required — // to feed from the sender's own baseline, because that is what makes the // delta "what changed since I last synced". let MessagesSummary { From e38bf5807a53203728a6a05cc74612a6b84c2b2e Mon Sep 17 00:00:00 2001 From: Ian Clarke Date: Thu, 30 Jul 2026 20:16:36 -0500 Subject: [PATCH 6/6] build(contract): rebuild room-contract + delegate WASMs and bump river-core (V31/V30) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Registers the outgoing generations BEFORE the rebuild, so clients can probe the old keys and recover data dormant across the upgrade (freenet/river#292): * room contract V31: dd63bcc9... -> e765339b... * chat delegate V30: 6f65e45c... -> a44c6401... river-core 0.1.18 -> 0.1.19, and riverctl's `=` pin with it. This is NOT cosmetic and was the P1 in review: the V31 registry is generated by the build script and `include!`d into river-core (`migration.rs:40`), riverctl pins `river-core = { version = "=0.1.18" }` (`cli/Cargo.toml:53`), and 0.1.18 is ALREADY PUBLISHED on crates.io (verified via `cargo search`). So `release-riverctl.yml`'s publish_if_needed would have skipped river-core, and `cargo install riverctl@0.2.10` would have resolved the published 0.1.18 — a river-core with no V31 entry. Installed CLIs could then not probe dd63bcc9... to recover a dormant room, which is the exact failure the entry exists to prevent. `.claude/rules/river-publish.md` requires this bump for the same reason. WHY THE DELEGATE MOVES, since it is not the obvious reason. The summary change itself is dead-code-eliminated from the delegate: rebuilding with it, before the version bump, left chat_delegate.wasm byte-identical at 6f65e45c..., and the delegate entry was reverted on that evidence. It is the river-core VERSION BUMP that re-keys the delegate (0.1.18 -> 0.1.19 moves both WASMs), and the bump is mandatory per the above. So the entry is required after all, for a different cause than first assumed. Delegate key = BLAKE3(BLAKE3(wasm) || params); without the entry every user's stored rooms_data would be orphaned. The room-contract key therefore moved twice during this work, dd63bcc9 -> c2b77b55 -> e765339b. Only the FIRST is a registry concern: c2b77b55 was never published or registered, and the registry records generations that were live and are now superseded, so dd63bcc9 remains the correct V31 code_hash. Confirmed: the room registry pins did NOT move (len 31, fingerprint b5f02d45b6370b4d) — the bump adds no room-registry content. `legacy_set_fingerprint` 323a2f640bfd7a7f -> c43e66ee147e3739 for the new delegate entry. That fingerprint suffixes the migration localStorage keys, so every user re-probes the legacy delegates once — the intended behaviour for a real new generation. Both room-contract copies verified byte-identical after every rebuild. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01SeAw3G4bFhTT242xoEeMxN --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- cli/Cargo.toml | 4 ++-- cli/contracts/room_contract.wasm | Bin 791929 -> 792773 bytes common/legacy_room_contracts.toml | 6 ++++++ common/src/migration.rs | 9 +++++---- legacy_delegates.toml | 7 +++++++ ui/public/contracts/chat_delegate.wasm | Bin 737365 -> 737365 bytes ui/public/contracts/room_contract.wasm | Bin 791929 -> 792773 bytes ui/src/components/app/chat_delegate.rs | 18 ++++++++++++------ 10 files changed, 36 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8810c4fa5..d23fea066 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4703,7 +4703,7 @@ dependencies = [ [[package]] name = "river-core" -version = "0.1.18" +version = "0.1.19" dependencies = [ "aes-gcm", "base64 0.22.1", @@ -4730,7 +4730,7 @@ dependencies = [ [[package]] name = "river-ui" -version = "0.1.18" +version = "0.1.19" dependencies = [ "aes-gcm", "blake3", @@ -4766,7 +4766,7 @@ dependencies = [ [[package]] name = "riverctl" -version = "0.2.9" +version = "0.2.10" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index c9323d683..20eee52c6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,7 +64,7 @@ freenet-scaffold-macro = "0.2.2" freenet-stdlib = { version = "0.8.5", features = ["contract"] } [workspace.package] -version = "0.1.18" +version = "0.1.19" edition = "2021" [profile.release] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 33d249cc1..6ecd933f4 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riverctl" -version = "0.2.9" +version = "0.2.10" edition = "2021" authors = ["Freenet Project"] description = "Command-line interface for River decentralized chat on Freenet" @@ -50,7 +50,7 @@ dialoguer = "0.11" atty = "0.2" # Internal dependencies -river-core = { version = "=0.1.18", path = "../common", features = ["ecies", "ecies-randomized", "migration", "mentions"] } +river-core = { version = "=0.1.19", path = "../common", features = ["ecies", "ecies-randomized", "migration", "mentions"] } freenet-stdlib = { workspace = true, features = ["net"] } freenet-scaffold = "0.2.2" # Sans-IO backward-probe decision driver (freenet/river#398 phase 2b): drives diff --git a/cli/contracts/room_contract.wasm b/cli/contracts/room_contract.wasm index ecee7e8f730a6070392868d5e861654330537740..d1f0f5e3a2c2c354d359d94301f46a8a49991b4d 100755 GIT binary patch delta 125039 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�@Wc`DM`(jZAu3q*|YQQBqAH^v)~dY?a&q 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 delta 124614 zcmb?^2Vhji^Z)I>cXvrHg2(X&0UM3U~|M6W*<&hkZIXpfJNmi=~73GHs-|$tYAOY1c^XA3;{Z0Pzzj)wJ zK!Cr$)ru7TkAjB}aBFRq*b*X%`Qg8Kdj1QtF;*XE<} zVD8`w{yTU`9ta*tCR3=%%M>O*Lmi3|>~M$%Si^k)!5X1NM4%-8*n(_Ut1T4G^|FNq zh1o*&7_RijAkg#tPBZ0ijU2zc!500d|B9}n3M=b!KbK+|KhJ= zjjHM;3g&iz1P!oOt6(zzSWSw}VX_G_0MN@zbf+j}))twI6^K%htRT(gh>ZjHqN25P z=1>-;{b6nv9*tfAMJA?%SQT5eH5!PmNQl-tSYo)YXNXUVXP&SF_ucEQ| zCSJU(pdWNF2832H(kCif0Zo#8FXrVVWCDK~SdCPH3LjQ2${KDKfEBH_HA>4?L!+$z ziVjyi1W@@QS!y*!M{859@kJHY_>=bwzN56rkPk)CE?5isMwkkjBCHXnqCleAyyEN$ zN;b$~ODH+pjCW8Sh)o{)0RB>X9d9n|8=AqQLDSzm6Td4d^qd zf?R;d=1?95xqjE*LsQjdyRn95r zl}pMsL`oC#$0@qb*+*m}l8zeri1)Jlb)_`-b-|?>~I* z`)FQM?H}3FY!hvxZR2etZ4+!`ZKG`CY-4QMwnMh{{_Fgw+EPBY&GmZdb1v|)&l8{D zeSY&f9X!gR*?#q!ZJT5J!nVk^&bHpR%(mP%*EY}gwasn&+_u1$ZkumgZChhoY+GX6 zWZP_8X)7j?!*_-gQ#;Ag=dIDU3)b$k@^F!(`ms^hl9?fA^G$g#w+(y`8w z;mCBXa4dIxTZM`)Tg@Bq80 zwfMNH7F*yXTd6%Mus`6;$kbF*fX!)gGAFkm)lLQ#_xWTh(wrvy=&4#%fudTuV7Dyn z*5*6n*col7<7>7ub9hJ<=Eyjbm1?r5Pe*x^&6TCUX{94#wHu*P+) zm;SYAGi^vzEv9Mn3YU)qeh|Rod14IrW3Io&Qec{1(B+lvWUlR|WcwuTS!mPD&_ZJw zBMEB83xZ-Zwe`1m*TNE2l?{`T0Ga#69Tg{0K;Gr5)= z&Pp}8Dm%F=KG`)xzML1I_NAI%`L-aSTY0j7JW3+7&)4v@{cNSx;moPs{;(EXsFg`^ zYLhE_Ytt%J=7)D^2P$;rM|Wsa7UE24c>u^K-uk~>;2?GP9Pv?4@bDCW1lw|wG zH2wQ_e7|d?AHw&ajP%p^o~pOdwVNl~M;PBT@I6f{TeSh3qP<@=j!ns&TQ!!o{9}>; z$6cpQQch9%o{@4zrU=k?WeQ~eo)T?G*?TfaAbMbwoyNIDMv@$OZ zVmGygFLksYmYt<)(e-LMplG-&RRu`b}ixYiH`#geXwUqAWt| z)S$T5v7U`R(R$X~X+4>p1re}GD1Nz6?i)}}=up0>|2F$Wvo)v+$?-s`;Pcohbj7S? zH44_&G-$v^Y7ZN<=9hM8EgLpNjr4}&*gdUyqniA#NP0EZKgOI=5mW+MyOpF*Jv^EH1|L!dF@_ zmZAOj>Q45#wy{+ryR6-46_1RN)@?<8-!@gmW65h98C$Ns{rX4z(0=Xq>y--c-VX-G zSSu@&%R>W9E}!f)A|6HrvZZn&oskEQTDttNy#OP&Qvk#$`{SPsSk&<36 z8LHN0Dy|$7&?+k;5pTQqYlq%giODAAO&3&M_L~jasZ5^^RT;Ej-Hxf4Gj?=L^SeG; zhmu+@**;Zk)oE_tDYI!)l0~qv)cvh!fhhQPkXapEkA$JGwD*=j!xF*_XyIy>DN}<{7#)5nMA3~ zdfj~(gf6pXkERUDCo?@6Pbi+2Jzmnv_1X&|$$Z+&p9#tE@6(Lk*WTPui zfoBB)j|aloJH2DgyCF;<4;viCybX)6YIu3mE1osRKlw*%{)=vw1)UJH0$<-bka)sHfKf+4`b|W#v%*ZPc##&DlJss(3XWnLKLD+bEVvGws;aa;)MGNMX{;0lS%AGJww6l-|hHOR>7}0Eej21sWPB5a`_&Q+3l<~PgXO`3hv}4EQay)(X=Yb zJXD)LC0UC<5=kpvW;;7ZTU_SB9;HrqEaoqBUT)MeNAjQ2Xi6<}6nRf%zS^p6i}v>3 zV1-xW+9K^*-qD{lqe|v?QztSuU+Xx1q4h?#82tg-tr^v|dQ_D^&el??F*~a5qh#xp zts>J`W)7LrkIm7p&e+LrX&EzLwJwx-K_bsrs*Nl$+1ej!EkEmOb<0dYnJMQUPo^@f zt984~v?J4@jht11J=E6C>dKF7)e6sUjF;ruUHOk&wL|iy;GC}3+j)R_i$UuFb^w`A zWM;6$BoiK8qh~(QD$HvI&GON_=KMys_QSlc-j5|498fR~(mTTx zS(^R{T3coQEeJ&X=PkH+QHA;2wICRcvVn243FDewZnKk*_v5&VE_Yr zDt+-fyQR-WeRliMJ2zMxfN?Hr$S-GW$&1$WX_M(fE9TO=Exsg-fyPVTh7GB$UOFDd zM$8G)nt$ob4r*_F*&o0TeEAxit`%Lj76hMK);~uT9>{FH+`_ysOTxYFH?^)S2BY|? z6^8|ul`9iGB-~p0K3}~}OI}slY82Mko`Pf_YF4!^t5&deG@>=DqwUVP3RP$3)(nN z6rHoNkw9~0V`D*9#ZA$m{IyMq08A}EU=D5WCSUd=t*&7%t{vI*E*kLi=2t|$xtqI* zdX_ESM7=&+H19o*3TfVPbxMxa~l=zy(z={_Xe5sY#Unb_Nq|>6)>8s}CULPUo#uzkFU^Cd9 z)Au)IziRB$2<^fC0BEU_CCw3((a;>ERXR`uIRg)DvfYxfya4+$1u|9;9nb&Rrgb>D zj#68*m*`B2T1-nlRGEDvMDZo<(V;7X^u`@nc;?f?F%0q_{r$)Y1593$q%&auMJxMr zGW55g;_IIa1^^opka zcC;d!L z39GAZK2{9=`A^3xLfIBPUWZN6Ivy_y`*Y0k zNG(zn*<)fHzxlB?{MOGxId;39#QCZ1+LF74y?^iwVXgnYNbTC) zmh7=srP+ZuRmTYnqP zLVq^~juW1-@fCXfv7GyOI@jK~6-^8Fur_@94%%{qmC)FIr*)2WZ|xL#lf9x%ynk8H zH{d~g;e8!=I0=Kj!=qRjvuTg6;d}4Lt07QPPlkF=m({HH)0v+?smiIuB#d9RZAJBmoY6v9`F+1pM zANHZqjnv1+E?HOX6yj~B{gLbyf_c!!x<;l1(EQ3QjH3Kl6P~@3di${weE&}R%#V#T z>bu|YXLCJsL4v!eo%t{}kIDwJR6N!M%0{fXt=6VR1(?6jI31Dw_9VJ}M{PnrL98nq z=k6N>fNZTBVpsxCDURe^%(}UchOpL*Wm1VSHpAN>%E`3sak2c-PGK+CvyRy%i1!E6 zo%CinTf@@H9>F@YW$u0vu#I3|)9y&N%$8Hz6{cm4i^4o%yC}&KbH_aD9L_?hA7kG9 z+DtDbnY#o3uQJb$|mz zzOn4Mk6gMElf-U1+{qF&J&p;3Uo2O=MBU=pRCbph#j%<>=5}B#t3|_$u&F+BaZ8_G zL`^DP6jk+glxFO6N-xTK@zhb|UyQX9jzY_Z5%gg(HlL3eMbYsPDR>MbO%O|4;vrjU zlvtb@YbSMSLvgm)SU7o!7A3HrkhTIPSbw(AJ*ot&%0vsclw{WhwJS=oEATelRGI}d z@6*OuS>RqFhyi+9>9Vb`yY?yDbD28=8=E9_yI;4U0da*zU zZw&1Cq7p_N+?8E;g11*tG134E7doEXUEEUxOFFtCP1P#1PV8fvRhczmlj%xjRtg3t z`QBu&QJ*U8F8ZD9^_j!{UR8#rkA<|M8k>ajFINW(C-0;(Ni39nYOv}UxAki<=oGqN zgAqzhuF0MP;-p$^Las6Gj;)PRA~2xh<>^hh#XqmXH#d#y-%}^63$STN(Jr7paJwwy)K!G^4&C}C*?OfxCD5qrn_xf~oevNd9j+|e(y z23)|@y~rnUgYVnHy4z z7Hmo`u*`n|cGQqH0~lm62~gNwH-JSkw%!e!4(2-uThoTU#@HJ1=^uf*Vc^R7Cg~fQ(B|0Lz3;RTXZuu7bPE;<^mAx+rP4CK9K8Mg+pqz#W zV{S1lgHNSpK<{*8`;k=f9o8)TGhva&aABV*t_oPav>Vm}mFdnZE@N^laBUc^8*Zx zZ{(;nqZe|v_GY6nnFk&%MT7dVT6tRkO&^FqW{cW=*)}$Ylz!|3_7SD@V?)En>srZT ztepiKPcJ(E9ShewUiGH({h4s1bGsWdo^F zDr@7NC5xC*1ZnsAj$Jfq1Umzu?mlU(8nYVt1PQ8VlP2sEmh3{YXCvA7+K}BXwS#|{ ztyd%zi?A`GsQYLZ%Wv+Yk4M8&nzxtv`cIX1OS-SwoWefDenLh^YBq+A5uG8G@h@XA zqSnmZ9w3Cd(m#5^EK;?vS7=wl{KeD~9jg-%{TT_&-~{K+o5 zH;KiPt9_&U>1^9gbxILiIX zJm^-@$bsps3gfG!esSVMkm z8*Q#>Zcbk;V4oF`+Y@55LoA!h4GLzl6b!c4sYN-lF08NBd2B zr2!^*`!d!CMN^isMwnCgEMqQxj5k4I+vSjkx$ce2**?j*@hjOojJfIVDmD%F=(r3B z$2nS_!IneszrLEKpz6uh>`j*LuDk}lgw%7SzilhA>dfDmmHnBnWBe&50Ke)d(;bbt| zLM@Ln2Ys_0a*>lm?RH=i$&y*xCqD!_1RUvin_SqYksHe2AE$n9Hj{lyKI_;DzIg;q z>20n}EjF_6O_!CBdOm2b3A2jVns!xvj&*o%xT=4n^`zdPoowC&Cy2d zLTUU!b0Ku&q0KC&{&ERehH)tN74ikE*aFK+`65=Wi!1SUOt1QR$>dcsS#Tk5i>qv5 zg@ZF>mS6^|ua+;~?D=f(U zY9yT=Y;GF%{Pi4dB)Q%*hhWA_-O4&+QTXCkR@9bf(S{PYvEuyvZZ}q=+HFqr%_W5f@G-nTc!&p#=qo}=@ zlwhaV-OJk3>b>k2k9Kxvek;`f917jfJ{85!&xH4wy&qb70yR5;fjym;A7Ec$m^YlP z7NidkiX`{xgBa_%jsR6X%-$1<`Y?Me(5(87m4gz-*biZ<(D=c8MjAc+jwSHhyWI)j zv%cK={c)lFRqA|D38KuSEE*&8=ux)mUpb$BjP+vEsPu7+m1)%LICEKz4xqKi;om=! z7+NuRo0BY(<;OGO2UY}b!RjB_nljJt;m@Qb<*eAbYQSz4i*~c<(^ISk5MDaPn&u#^ ze45=5tUUCPhq!B;VGS5tO{31jYMxD@=h$#Ik*1x4Qc0&D&p~rOCGYc?wIDobkr4G^e>#n=di-Pnuo*5eC+5Ik!0| z;3w8cI6x^s!A06c`+kD{o=g>fW`}_fZcPL^uV9KqiPl$GM`7}PeFZkgGIyV=tP~UP zbFP7H%iQa)F;#*3-FyQ)y`1fa6Im@kV)wXPB6x5mO}NcQqh#P6))(S3;*MM^sdN{{ z{0JI#mwhEfqWZ6_eXhW`=lzP7!|ZeY#?JEd8z}mBR)Kc;@^f%B%Km}xr~LRsHkOY0 z^SbN_MF#L;>|2@Eu&L}@ZLJnn+V^zOmlvn2gIR(FYe&WTa+)%h1yi#ya|JEq zuobW@hz5e)`A%^JX|P}mxFluPH_-17<>ht);i8{i=#yp#cfk^v=^Qb z_-JqO4mX4ih=x44ghzs}Hm7wlyuN5(o+Ji`_!NJgz9N>wT+a_tIj)rCXft*r=(oWv zmaYzgJ!YX|XIX5)wb)>L%&oS=p`^4 z8;FRa;>tP}?I)fYXqw1E6D?xXLr+4Mpb@p#j7DvNB5%Q5Sio7F3s_>F_NxrT(B!mM z<|-bRZdl6zoPtIK14ac;a#g7pqY4Vdj-0ov%3~jsSeO%ax(o6v@vag0%GeBWo2JTRYFlJV=oN~sL-WiWsYi>=I8>_fQqzV621=P9-GbX8A-e? zbN^P64`tNiCD72WBA*3&Bl|TTN`94iN%yPO`OA#@Rt8m@bgBkd;f-i%Gag2T>fxl$ zk-c=`W$vK#SGbMlwLr4pL32TtFZH0gk$#6#wR{N!eMW9FdJSH8peaFxK? z+B1_Us`s84Gxnv^K{p6DHg^%jYX5`g*XP9yK+)v)GLNUi^`XZ8FVOS`Mbr5PJeS7d z-ZZzQmyqbyb95)xC zzRkEF9cad3iZsW^wPrk+Y)yGt8vhD18a0JpL`5voz$&c5M$yeCu!5wR)rM@k35KQOPtAD8-rt>8Il-WN=SOCXS zK(6!J063&{3?%eXT8RQ82@n` zMORhpQ{?M>k-7q!kmgsx&Z625Ht+Y8U0*3g-mmc@Feb~q#;4Fvt$CzKFIV`8)ARvTW7YPI1Z!VqrFqxsL{sBm3NZF0Ba6{u)y z^qii-HX@dUzs*;33ha#jaJ1*;uu9jkJ)bDTuNt-I70LDn-|c6Yt#mOLx35j3!yQq~ zh|oKJvnajaflo8u#Xf9N>ii~uhx`g-4ei34Kqiasq`jSZAX#jzw5M#%PW)p!)rrSj zm&-VdXXMkF7sujWpP$T8;KV0CnPcg_&afl*Q~O8eGW1(#zQ&p^V}~cv$}YSmzki6> zTRgmqCt%~YoOsd<-6CSnyf??vq+MO#yCf%Sug)DDV)vl1@BX99_6w{5@ zfb-U|8!rUr4DZGxv92_;8-JVaq-WiDLTIQ7Mg;;z;JXR~&SZZkJVqN$=*l~x;`Oe) zNa2lQazjvt6IKrnQaDxPLxoe3l}0V2EU&X)Xjzn{HK3k*o0o9U>dp~jd5xCz;P1JM zzrzPGib_Vj$ZSeV=4D}b4@kzzO8umTBCJ7}Q?u!-WbBoVrrXIpF<%}>UYVY}67stB z1pmLKc|G~tk#l9ZwIYm2`)Kh!8tWmhwRqb{QN4IFxIDfWAK>@3Q4VNewR`vGMS@O? zB)j|+;*KLdpOULLZxF1v-ieqJmulZ33_RN)%6J!Rp|uAqR$A8^ZrCI`)0@YzWz+k> zlbB6q`(Qkbrnmd>iaAv42I6d5+6U|(P4NSuvMhahV7>yPSw;I|&u}z#=*z3JgEXTr ze=~B0hunP4x-Oe#@5evksT!sC<30U6?FTZnE3E%>+oe$pWPr@U{UPL|X=(pFjMulZ z(98XKb)C#y#)~{b;X4Cl^JWd;O%c*?bpRN;+Mp0cfVlfW^vrCUH&Ax$;ek2uvA1q? zZ15o2d5s4F%>x=ch&S@flrUrwz&JCAN6|~~@>*22s-*#SX>56g(ibS}sdp1g0XB~M zFIEadaI>HB2IeC|Kq>ljr4Cy{WtYl~5uYnBLj*_c@G4#Hs9f?;Ff6bkZFbE#k%g{) zrYjmFZC&0p2mps@yLO+T=-En`yZjJ1*X#&&dY_BE7x(+T2Y<4MVutcj{Kg(yGL*-O z_X9)uriM560JzJZvqvcd`!FJJ9~SB1u8G22urKipUsqysoY)*U*$P1FTvvpaa0S|D zOs8R=@merIzxfQfSJ9QvAYZ%4HjDRRCu!&`{yO`C<`2VMb9)vX>P-|loF{nyFaeM- zVoy=xNDS|fiDvWC>S_h+%TtPAa!=PV;!abx#xKLXUo@51jyx+yvhIWXO8-4E2JTmJ zrHcLB^l7{@b?m1`nZ3{;iJ}Nqp2qtk%w^t}${R3O(*xCDEVnD6RAxGaVmVcu$zP|9 z)A<(cunZ%<4A!`7g(7ypI|iv`QE^I;nvBQeAT<&$bihib7F=l58jMCRpUIDef)6IU zCwl$iM}jpj##6|3%^bw-6R68@{tml9f$3O~IzJp^g65d_}kU!^wJiRCv-)LXhv!`xD{GPNkwB^C{SWKQu%sZ2R7rei4XE z1E*kV>Q}u%-%b(U+dX>lDeRcvAQ`1-sK$NhL>iA)PndM+NbvSB`U$``eKr;t3?aKQmPeCsigFmcVduy3P1rM^`w?{3 zMB4rlChYI#iJ{>Jr_BuWOXz&8jhv*;^LY>R4>>(1_p39&n2&i~ej$x+*R?nxV>LhF zpFv_yd;;I&QqBk}M#Cp@ALTs9df95PP&zl8$9VrCV1c`dbZ8_Ob)9qI6F#Lnb0C2a z=*v0045COqgRmGCn#)U&|2VWyQoW8cSMemBfrThAgI|Q)-^<{Q#D0G5)%5kxO_VK5isUSi;-zk4DnrQ9P2KE`cR}Z4rd(yho_0*hpTKeMgHI zLX-f?pT=XTfUoOEO4az&NPt^T-lG5xoPB>3z>SdLnh^gS=J(ijUw%*b9j?53=%MtnhfJL!vCT< zokDNM+s}!XH*ud{&0T7W=fu(^feY3Y3=5ZWuFtNgF`4Fxp3&2wrBTi}xo4D9WSS?U zOD~5Zk8;K#Poo?Hc#visdn#!pT4dsgomrS&5HBo=5sP%9s3!n?67Bw)kAu=`>E>bO zZ)A(I0Y+J!@R_o{w~@w-`k%{Gn|%_wf|Uw%$jzUYx@Dw@O=lw5(I3# z#+KMvF)m%}gnQ!hHC7{v>6LQ2jWWLBMaq9Ho2_{8Nw|}r%QVk<4TEVlHgbD|k&-T- ze6@`b0uRe2L`{}cjWlkw$`c|miTZ^owf@;)+VsyIK=V#3mJ0tf|D6>*{Qqc=;F(8Y zJe;0N3%2lAz3zD!{d5bDeXhLaNTwjy&m(WkB+%fz^5(O`BX1*#jj$B<_M8!zL|Iw9 zp5d_e&e>p|n9Xegi-i92<#08zlj~YWi?aC?u}M2Q+0x$Uv0Qty;hZF$Z)K@Yi9Icm z{J3013#Wi>yimSn`z&D@!<56O$>AS)Spj8r3rl4xRFa2N!CsbdY*wG!22V>y|2fFM zofoD}Kka}1r|4vRRQLU-_*l(a%IQ$}w~EZa@Pckqe=;O$o|Jz)VlcfzRN zOc$>F5bl;-a!$&fd{8w zc4I|gPa2JDZ7FBa8$<_NTZ#yxz3KFBtQ-MMi8dBN^@LyGR)5gO;=|TpOP2TIYtm>~ zTT2}pwio(1b}y#K)l_va)c-2lxflBQ99`YZ>!5VWZ+R21slpW%V=DDqJ|_3ge;*%^ z`?e)YfrYvc?TNaG3G_z{x`E3@L~K6m^K#(hnu;UeHmB zJIn`)n5_|SSP+nX2-EQC!`$ZWiQcLr~#(fXx zT88_z^qwej`63>x;St`^+dz%ij3fM$+%ra0vMXytbB^+!c_O$1kMYlfb7H>qV6k{U zEIO3R9){(S^*!44aW+K3`#5jSvvyIZ<9xHez&eDMzh_Cbe=bGd!%;olA`ZbSmU2|; zBHlQscAIlB=07=e^pmY8*2Xp_kjlQ_5;u6-y<}+pt&eDKLsme6pcT{zr`{} zo73<|wo%4u9tul;_i0`MiBC@RUU(#*;r02EqqOD>Pq1Fr*LdhmVRNFd=vKJrhp=oq zi=xi*7=G_4y>ylru`ZEL(kImSEH7qVXS~cg%ZFP}$d?-weU2Bm?lxXpo`aRW8B0Zc zHpE<;e-b0?K9;~vAE&JI7$;bf=-l1npbzi!`r+5b$o6=DQnWC1;q1+#mKXRmW9VpD zY0p!&Ic%rZ-7V$fzc6%$XJ+~vSWD>OLmo$EdRR(5U-vBj&${Qt|3}^P<^ONBvrwp= zlGN!c?`|+KjwY)x*OEFQOiL=Dx|DnkUEyiQ`TH!t3OylJXuMFN*mn-6>(_XwfCW7o zgg7B6GpU!7Y*;ZZ)L&}UzQ0I~3f)u-ie~RGydxe7*ZFJEMQPXhh@>M2b+scp{0A{! zaGa%|`^< zhFe(RlBy;a3ZNw{XPiISc$Le0^lRKIUc1dt#P#6IVCVvZZn0>#?B>duhK+br@zu z({T(&i;*=+9?S9=SUM1S{?FzACm{1>$s7aIFeR7J+9!O3*HlCN+%=!_Zhy9cv;Nrx ztEL~U`=4yE)q9n2s>+m0arecsKhOSCFfRF#??~|+E_A`_P2x)8bNO~ra>(mXO}-{m z13l)~ajy71x3(uJT<-~w@is=r?t+cFv(Q*krWOBpDyK@5k5NC1QamcZ`Rg$?jnGp7 zZmB92qtc~~45vhzj-EoxJeI#Gl;A$7DnnT8zoTD5$rhzdl;`AGewewIyhJ=(lA0qs zhD4>yRN*5D#3Y%P-@4VMY^r3BhinhijJR{1X|<#ByK$bj<)b5kp5j6@?;H=3;D&`! zQ7edQEsp7YLnn(mQ$qRI6%-6P#0;YAvpR*eRqm#H4vf#vT) zu!V|nPWO5*Wx7|&jqEH~g!$b|&*A&LR7}|_%6Z1FPQ@IV=JDTjDi+GLAP*I?1#X$< zXQb(V@phSJPcag8zxaqugh)$avC7In$}~?;;NTfpayuVDoK{Dgaq)mr*T-o7lx>1+ z4>_XwzM}auY}AHt)U<$-7PVTI%IONDZoZDJ7-huX8wgBBAy0g~AyCqP+#tc_DkDK& zRz4I=lAIr{$A8S}Z{2^CBKiUl4SGDM(&f0W9rY*KHVSzTlN)0+$4SdKMm?vtjY6K7 ze7$d;+x&`Ao+G>Y3wh4x8j$|96!Sc8Cy->MaV*!va>=wCQq$+?f0_13rg;R+!^m;+ zAe2yXaKsz^jn?oSTh;r|%|n$e7W>__)YN}g*OTeTFr`!}&n83u_CAqH#v{fMI!WYY zsvWLWE5AZgEvk5qc#(WapCrtdN_ zbBmy+#AqvZE~tdNPZU(_49?Kz(eRj_6;jesG`+BLB-hQe-QW=(=Z;oHDL%PbFtvI&}?RTuj_!Ak&>D-0uV+(Xio}4ZHKPO0b{Y zB@vo8*^U)of84qjc1v`I4L81`!l+UBj%;VLeInJ4RU)t}kR7W;h8Q;`5Sb{z)pxxA8fm*yqT$4Prg_+Pxq7y{WqHuuiPiStOG9Jf1 ziWgD(B<~n4C=^uZ>^AG_W7*jIFg56&bia!~Vpe41T;_ zu8AXE#5&!h6~&Z~;79B)s!XMQMU_B09j}zbszE?;rJ-%MaNb=(PSt*mqQ8WHH>S7} z_?Oh6WSk4q_eQnvMFq2c2AwRfG{Nz}q6x}=yC&#znQRq64tA%<(6=A?lu}P2o)JOt z*ra#vP`&7zlFD5wQby@QhYERlQDO-tf|iz1ViD!jrvz4=ek`Lb16@-R5qcb2TB#tG z_)9A%X>uZ}94w3~lggmV%Oy}{mZ-7~TRbS;+0rSR`64zVwH%btbedmI3Bgf=b>);Y z^l1epLamT&Ye07*aN=NUS;);i$|#Gh0u=%5L0Kg>>@z_m! z!ao;ZEQ@2!u~S*45dV!)`X(%*M3z^4a9*frd8JzQ36ns+2>$SuBXhf{UX0n0Yiwq3 zH_3oiG*2Xo)2Bv?i$ycqS6*=y`d;Xz2$vkVC?aBDagUuTIW84{s9#m36!wwN*Te?$ zGU{JZDI9|GILxYZK-`(a?90I#>KEq|Of_pM{?-{nO6<5;pqjFcGOH-{sd`PNmo@!} zp1iWAQWhJ|667i!B>e?s#`8fY)=(zW*;-0f`o5Y{A1h)VYAZeSLtdjp&eS18CH;xm zwaun;M%?=%)VTZxF@Gk3oe{vQm@#o7 zxB&pGQq7l@XzYr2d>N;Nf2Tt)1Nas4Zmg7t=B?RSsh=0eJI<{h@C9?g;~T&~&84*p zt*oPXBj!TFzf%W;{SG-^f{*wsee#l04U2$#UQ#OKd_1eGG|hqEx~|fNZU4KLx5Hj+ z-+D^#d<-ZLKBP3wPh)Y)st@2hX-OlcFrqU=d#QN?r6Vn90@b;tf$}w`pTP~4>VUYW zA-dr@U2mwg&Y`1WBk(e_F*0`lJu$yNkC=OZC8o0;^=D5Pe8a7VMiiiZ_MhHA_q^-( zB7mWDJt+o+g@1ZqWV}<`=1NVrgT8A9!P!AmnkkXEqn8q!D`ECjD=y}B@<^AL9&tr& znt}a0s6cbYrHUz%&No+j(`#kD2GaX2lvdQPrP4oitkgzk*KYmhRsCsyMi*Nu6@Ax9 ziPM9AXy2LW~9E~xG{j^|wveX>|hd@(Y35ymdI}B{++9=JaPHQD1Opa(2Kb0Ti85-1DX^eQ6 ztk#%C4f0C8rbGoElW=uDV^`k(l-_(zsULVmCady{l-X%P^4iywx`89|^h!?YI4adv ziLs{{dAJ5a&+6C~HI5tbh2ZGPYuhSC=)11UFvN&7e_N@`F1e?4SDG_Kv0Uh(xbS$r zGlpk}ca*9DC!}3c(KT64F=@2u9gIWXMM=RXSXvjP4~`aytA$eyvkpgRkcw-E=~;VaEbP{?Zvf3j z+V=(q|IcK36F$(-)b&khjNd7;1JL|VZ+3u!d`i>ti27$NPw7SnWhy(XH~cK2;Z@mB z#5w`$Pt>uK;)WiQTzDY4fFA4kj#A|>d|295iSma98i%_elu*Y}*%xM~Rp?xyiP6zN z(ei#u(I9Xl)FY3wjk@bNsc6fhK>IPjE(EiLa^a z2o+bQfHH|iP6{~We6?fHL3`+Q36{gq<%bRDFMN$bVY?lc>C ze-_beKQEE=R0EWDq?%L?|aId)N!y908>sR zVIN5;M&|~@^6WEMd71jWr*xnt?qyug~&hK#;b}tj^$R635XiZDgW$!So%k()KE;1^WB|>DgzjF*5kom z74h&Mh9J=!)Nq*6pG~0+!;~)SDu$ma2t-6^3MLrDtup(k!V4CTg|DVjO2ao9PZ*bCY8Q(GdXjH)ac;sPE|{J?3EYz|mheRMY&HOC`tds;5sAXv zUHfTjO&~RiWe3dv)l6dU#9hON#)}mQa53agu}kdov&&zM5CtoVBY!SDzG|+<=GhpE zo~|^eQ%t>=8^+A0>S4^gl+xsNO9_blhu~$pvs8)Wo}lHoeo>9vY<-$^%yhV1F!@0RABW`xBA>zXx==>s-m#mJwH#OMhv_2(Tz&vqWTm zfylA^%zAu3AA;<0@Ee~TRf65q9xA2($}xe9x{vxV-7)CkpD{H3`mpjoe||f@e(`pc znVhH7Yn{l4MF^C8_emw`Z_v#CAJMefoDU6qshTknQ=O_I>49h35^=T>|Dm4A0&FN1T_k^EL7CJ*Anu-!^55 zlFP?DdMsh*i+9<{U3rB2IfK-VL0TsdC-b18rZZkl?A+iResCc-L=}VIy?Kt(?D=pL z=*7v;H#VCr$j2op&RmHLpz{lrF}du@D-m=4kG+$zK`D~Ac?RBaT7FUqaF^YPmCIbj z1_QHw{>zl`>92WP=0^XQ{F|;n`Qp6Wd_PauU!0l`1N7RozY;CA@~)*X*6aGoo+6of z;gVD~tJf;p^MNO9dvWsfb$!9}`OrwUyy${*_ixY~`_E|Hi23-F3^#SR-iJkqzjUpf zC%^g67<7I$UzD#QVxDv#Sqzuu`Dng>aWwgCm+7hb(3JI3Teyp)Da)UahPo;0KO08* zI%DhOyujU{o#K=bA+AvDCSK7U%NHdiv~f7keTEqRf< z!K`A>?{#Xp;a|o^=Wo4o4al!%zdefBS~^LDU$#+PHqVhS|i z2XEpc>qi+rG_$eAkNSApRp`*hAnt2{}3(;JLL@sbYuYv8L| ziB|zS?!uiq--!c;!QtuP-5YvVTLm@so{-mVmgJ6?)6v>L0|b=1I^5ZSnaEX_uvRgm zlX#2fe$ebv4AEJx-6?QWRr@M|TCBKY3yoph6k;TsZN^b<`*jiiYM&|>5T)Sg&A28V zT!B{l#4&0mCK!1!Ct3Q%xDQe!3;MwUuga_)Iuy>dEDax;s;*M}Dj`h@l&8A|puZD3 zZg|--DkV-};VIyhxW-1f%cv!!DA(QAJ#}&0jT}{fCrSo-aZiZo2t*FR<&-~Ifjf2d zH{5^nxa6Gbm0ks9&N9zlyFWdHI<;((Fr>`9}?+NpkhnimGwDuYRtWFbFDpB-W z0o9Jp^gN(}VaqDy40ov2a8mxZL#>S4q~+r){jpkqtPqbd$_P=tQw|Bm<%$0}EMNSE zy2N~8-<$vSfP9t86sMns!yRDkOrq>3`nzW*5_?>e^%SH0H2qCMonXKh7mVP;%Zb&) z%OXpJnV9Ss^cZRTSs9gtpF>s1H3ZQGlM~g(Xx`~WoYtLRSdH|-DgWdcNF;vECcO-f z!T(%XG^mT}XFWYO8w|cn=gX)wXmYGtn;oD-v1)O8B~~ruT=OY#VYe{LWOs|N(FhL1 zi?M3x+$YZIeBM!ZScqm~e=6s<;4QgNIXJxZO6tL^MM2~g0Ll_Xm)wD52^AWtc$ zwq)a^ZA_&BSxx}B~RRm<9R z!m+@O3q9hBp(oytP&=1AFVSO%Ozhe!IERP13Y#+a3o>1<{=>Qv8TN~0iBuc%+gGSX zq?*95T%lo+>NGxGVvM#J`~27fOfbG3IY%O-$NzU9*wSec$thD4Pp`FXTK_v?AOGnh?N0s1=rp=Z7uzTNo7xV`s$gu;+-eS zyWkK*^b4hxQp%X*2tgKpt-F4S0t41(v`MzEbH?SUestr?)F-65?;w&Xr z?jB-Qy=RP~udAbpA~*!5klc1N3)>2|SWnk|Q=e$FnkX3fw}aXV5iYb3~8{aa(n3wyjtwPiy|bYLD>w!8b(g<0iT=aQfl?^|39gF<3`9~HFtA-=L`?xC z>?_!)IRR3Ldc(~a9)3uZ5Nr|rP@HOG@zJO!t~O@koE;9MC);(AtAS=a>Ge=GEb@S8 zq5YxwjDQ3noG)6aCbWjp?80hen$ZPH?O9>f$2!W8bD?WkFFO1Tzfn`9j9SjJO9&Hw zy`-~Rm_8_@M$*Q@Y6(QvNe#8z7{aJEi5`Zk&V;K1nbTx{>_Ix2=OPs>w0*%9oag%x zH|I9SjZNFbAZ3&3W*GF{6@!M5aCIHRehiJ2<^;a0w9*L;dm#z}b%qK%Ay7ZaSU{nG z6X|KV8UO+Fk3g9Rv1$dJ?<*arhJ+lJR3L;8cB9=bZW{rovMBP5cdTL`IfkB}puR-qE2|B0lk2d`YAc)>J6supJ(2EKRtNE)#*n=ge~->p zQA7F9V`zC>UJToJ&Z_E{RH(P=@`@LN#t>>AR84JDOzh)lwj^u#q7VxL?yOTr+&LL8o}d_&RZGC*xws_{KvJ#poL% zZo$M`6AU>^Q$HrGYP`N7UK{(tsP+|u3pZr?%HiN8G6z9*HTHv`Nl=Qe!km5>fi3+^ z<#qhn!2MJzB1sK?4)qt&88Pyg!~|7PapGPnp#<$3m9D8Kye2GrsgcER<;iNsD~@sN zQ1Huac1?#G&l|$=mMuV=z$kNZ-bDKR!t9rxuK|LV)l>_n_)Get1EhMDRH&|TxKUJf z`nyixT2eneG2UbB(RxW|0Cb6DMR%0J7h@Dd8HpV}yBJQOA9+4bd)~Z;lIaHh(*&{N z$2qDS4X{s_ex)Z#7-2`Lxl66e z?@gt{L$Gi8JuPvmHB-Je!hr0C(PjJG0+qu*wB}4VO3xS;Cq&1Dksz$Z81BLyRYE!9 zw|!mtrcv=re|aZP%&RjvR6CyOxX1)7fbzgBA_`p*vuld5Q_wS&6(=4_WhG2nqtUQg zM9~^Z#G?Wp`0cxrc;JU_s)#ozp!=p?F&vytG$_H~5R;t{7V#g8KRSgN(E=rY5?2gv zZ!rnVp@`psG12}ys<+KYz(z!6uNWI$sG~-vpgMZyx?!nE!ZH}p+A86iARR0|MbIr8 z#_YFsfx)5-7nI||TpnW+a*DsWA{R7I6~`V>d$M>+Zd6vr$?sT7LH;Q59ZgK-Jjr!G zMGAtX9%w{+a)j8G%0<75Usb*%uttc3yv$V+KS`w%A+jWG_OnKUXpCOtSDAueLe`&X zK#X9tK;V_L=m+vJks<&Vf;2KEQTGIBx!8a_ zRI&di6QCLeTUfNsiNj(7qoD;PS2l`>l73P{*u))vDMH!AnDZ8y0mh&rIuW0u^-@^? z_5UO8J>aVjM?2G2o1WFvf?;WO)(7vH zLvPgAO5tS9xi6t2%&xC}318QVxAgMVw1E~Fni&d93bPNft%+$w^EZo-P;ee;&G9fB zECV#7f!4v_Wb_6sX_{*>X$|285l@90YHf35a2z%^ziDo!QcdQW-cTzNA-M;mSz{R= zZbP2c;Z#Gcs!0^sNUIIO{EbFhz2-|y{)ANQLSo>3Id%@5)fy3k0=J5L`?V~ClVne)+f7l9hX zH-Koo7(f%iEa>E%&(wi|V*K;)un@_Nn%zyTjIb9w7szbxWF#!4o{hBv_BgkP36(7B zQ$yW@I0;34#s?&+ig3f5s8IhVTFIec9Zb#!_$wSy++v_9Z2B-{>_^3(`aR*&ge4t3 z!^eeK=A6~wRo$XS1evU$HpQ@5v1~cqxwUX*vxHTH4}AcGnbIm)nZFtmEp2Rm_)(}` zQ>}I>kAF;&Y^V_PECeW%ViWUO2@6+cN=?o~w7V(9yTu5vp%ph+nNnbNE!qsq_)1z` zK(8aO({4s}W@y25r@0nuKYt2CjB_H3ab=KJ9F_#kV&^i(C1{*ZKGzD-uol`XoG2*O zQmbp#jPRcr0q1fvo9=QZH`mUoE8>%ePi%pP{90)rTNk#Tl=cA&54f=PiYYXD&Qv>3 zrun>~X^PU8=I1kVt4>7B@1(tngX;@BL5-hGYwW&ZG_*CO(tT~T>=A3YO^^)-3T6)A z!z6?i(V0w7+Gu&y6oukGg&>m6 z0aGW_0m#8Ux@<O_d()>;lRRnrYaE15m4if_4c7AW7hyh}vjRw)miZ*1Tj#*-&Ie02Z4>i|rx7Ye! zc8_yqYv8+yI&ZW^Quuq?=V9jg}o3yV9qh5WUNzHF;?QfDT>#TDAoUv1IJ`&9T{?HhbjRv|*fq7GW~ zO42;Scr(C;&=E!*gN|XBLEW(yn5kR6x+k3JbgH$M$D@9?>ZoO7f zw73z7D--)BKL1RgzNzgEy3D-tm2szz?`xGIf88c{@3z()DTPwN$6DE3X5Df^;?^jLhR`E;eL_<= z>AjD&@&OaP>fJwzKJKO!4)KQQhHR^xLc=!LLIRofO<)9~tE%%@a(AsaY=?ciYgO#S zWU`9rhVPXY#r&sx)%%FMP(eL2iq?FjjYWaf9$4czornxQ0FCD(p!sk_>xQm+g(RQd; z#wN8p*$oGD2KUuo@J~N&g}nN@D^2)Ri+aud*JCbmWd&WS{A=BRjSCk0Yd_e>4g(D$ z2jZ_xw5%zvXM1GFY;TmnrWpfwA-z>rC?05-oC zQWVyl*XYRrEw>?i60K3jNVOm@V!NpEXIeqy{Bv&qIt~0x%Y~Cm(>~KGYNsK2P+W68 zbZ9iTz_G2%+*^aKSuT*Q0c4Zn3=1|kJmper$wsk?D8Lho6|7NV`G)p^`462{hd!dQ z{Y#NLD@0e^v5n&3wo(o;&0#Dpbj9+cT2`!j$iZ?8=gYKa$wI2>OpA}syCxZ4~Jg;vGqV;_ZXb;GU3?{3f>bo~nrF%$q9E5kfJ!IW8aa*J75`JAU&3q;>lSEh_) z;=^|w)#`1lM*Y6j3WiJ3*~AMDgR$rgSD`vTjP9v&&bqZwDXwyegu=!=YzFi`z@Jjg9wAP>~u3(Gi+#t6`m(% z(l3LxAT)Y>u+|mgNsS@eNK=rhK#zuCR!VWHg1RK0&b3y$S+8kT;~;1UtuUt#Ur=wZ zk~DUh){JdU{%vrZ=)GauXm!~z8ZunFf;n2XlwOrC)E9Z^#}Qf)r<|xfykl4=aqgx4 zr7(v>N5WXO?>Hrl)S9cm9Z%}`B$RHA)P}2Pj#K|p*p@g>w?}DB)mz8;7Qt9d(D&nU zYwm0kqqR0%u)}DrCkoP@(b_r`N*gvtgZO=fI*o(v8JBE^D+pIKPRkDjulZ0f#+On$ z9!eznIv2+$-Totzw)~;lFiJpJ#FR9RNA3l`ge65M__H9_>S1B(pP=QnAC}z6Zpw!h zU{3ojL2HDIoMOhqLVb~XkJsjN|AQxhgHE{fQ+9Yi)I)!`0zO=icdq%qxwHKL<-lRj5wf+h%Z8!zDTpd0}jgzn>62&EH z9YgQ)$bh(DPx#>^W{WGgE8{F(>!OE8UE-Aslr1UGR91X2Da`?lrm9n+qnX6#H{t{r z<=gIeW^+@Y{}h=RibNo!fxul{g?CQZ|d zse4b*X8t{Kg0AxKl@pXR8NW|XPy_t>#!I;U(GGT4lC`|PNirb>3D-CwoC)0DSGbnS z^z2?F&Q}P4o{La3(z541bB22XAQ&f77f@XrWST&k!323n(n4v!&1X3$5BOt~64IY& zx_z5W1$8hHAf%u_-vl&WYiW@}Qb1}!Yg#1F(55-u_&#=$=FQM@1-S9eYzD0Q*BRO* z`|Jm32vWq?)On`%zA`24r8NB|oC^e8Rf+k4j&Jtqv zLp+k!L8P;&qLsx@@KUX4?xif;vjT+m5oD%(7AvBKYvpYol_&J>Qmurs$$FWz zRI3A#`Os3WP|i~_%{^?ql76~`bJdFp8#$J1CBmhI4Lbvj1DPgrpa)ZGx%Nfq6<%;7*p$#R#t+LkBlHrT zS+0!;lLf7vLVOv?o^UX_e7*wChrf}1rS>i;pzBJlJkf3~$d50*aN9EJyOmlw!!m5r z?UmZlV5=dy)IxY@2&rfIH`rgfLR-Jl#$oHP@hYh1tLU>;+BW5fv`VYNM4M6%Snz;dcqoe821_;#O(Z0)iX)sB1$BCEIINCNyD@dCP8-+li z5H&)RH)^4NcRc+$%9K)vn(ozXA;%!uxv4Tc#t=14rnrq-*&uWG7IPHRw6r!;i6V}c zzEYv&4MFD!%CiYJyq{_2Canj0AvQxvy+GABYwc-uM?Hv^Z^mYQ`FDWovzxU=z~9I% zT8}^}*+OB(cI4h{ps43twD7{FDFp6@Y{BMlQlrJ8ZR-Q4__(5RV!!5Auk7&T^3IME z{nDf&E8ugyCn;{L)+v(||JU+q6D~vW_ey(|nM6Y23!8cr$l$Zw**c4%d2UUpI2 zZ<(U#L*6#_~;?fX?* zICS=1CiW}r>H-O!6<8k^3~H{M;2-0d&|q41t-QmTQmm85OgEckip3~hdtUi|%KJO2 zgGyo6eNBFNAiDzQN4IuqxuTzX64hF~zn2ddEdFo2gzh>525UWX|N3&5d1n>8cV{** zUrPA_Vz(DV^&juS+_AANmDh%~?TbBHTYA15D)*&52n17jk5-b3?FFB0S_oXD^&J~V+fOs_+XfnxJrhtD~C9eOf=<$dy;>B0!uDxR zZRUD0Ql&oowcIp%pO#om$``E1z;=OU6{ZH*i1AVq>Ku%9uJMyG40wn1VeT~xh6R$y zd;7IDe%_@i;()Y#@P@QIQ|kj-Ek$mqh0xarG+$5vK6eP+&)aPn^;ZSVOo7J~Fsb=L z?2%gnR;EDde8>V;G+gk`9n^{iOqPaL)}8?6!nE8pdS`jO<0|h;m!i!wntfWUj^HRKPGh;fOOrFSJQ3KLeu7NSt8$L(JoO#0&HCbCZ|Mv) zWPPRdv+(O#eg+bzRS=5%KQCD4tfwG0K>umMitff>0r{t8a?yYccVjW(|3$HYbM9hM zkr>dwE18?(&S{!AZo+8(Ijw`TEBSXVCyXC40gebJ#x_TaJ zprvQmz5qkvMM}7!rLZc!|GHL}`d)b5Zg@98-G`gsPa!w8G3tmDe5Z6ceRmVO#Ui?L6SfTWtI91f@)T-& z3tKp|>6=?x3&j3nN2Of&f#I2-m4P3M`4K9|hx z($0^dMZa?&(L^OD;JcfUh5Fpr3g$OARvj<{dX;O4>KB`fOjmxSP4~58SQ0MZ*M^#^ zMn#{8T=x?1OmPpil9{~blH@g;9%!HcZGpVh>!IfNQmN4owe$$d6M5I(3ocK8@`cE* zu#(B9c@rJiXvQP0TG;O_3h;8kP8fXDM2XIZAmLXZX~VqTIKv&H1zmoOwf8isPatb& zP}L_MBZ0^I=Il=A2v&|XIc%1JAc8JE(ekO=;UV@klZ1>#1|wFmeRujK zbs7`xBXE}|Oi{15_3e>$2Vk0%^4R*+6Q`)eGp(4{1|{ZSE*knw)8WC6=Llcjby*gT zH0>6VwBwnUH(=yxFj*J7b6}zPn}xQFF!wO!B%lk=wLLJYV3RY74!ppkl7*K{8?5_g zT0JZ)(@R3YwD0vI&|KujR6&YfGD`&?|A)f#SkcSEkFA8Ne*pu3zt z`c$5ZRrEyW4z1SO5GcN?{t?n*YUzU!x~6V_Q7)<07SwQAiMqv z-drnf5wvQc%}MQi^OAhn}E5h@;;fdd2XI(yoF-GftPIzCUlU z!uh}lUc9A!^>jf$NbG=y8z7C)%0F8^>(7 z$ma6wDg+1U8`VS4X@7v8Bl0Nk4Zu$C3WA;5#%>R=+OueS>nSOLdJgsE^Q7y)=TV*~ z`TtQ4!F_sj+E34u+WnCSEB>-Ty*?P%%|M;^TF~EW)JMaugL78ed})L(sNRcAU${J4TehYCdhuOSktkZ_X*O^sVApWtKoVXpglfVf77gUJYb;xD{Z9_ zjZFE*mJcGv*6jK^=&(12>7B8}90}3O=bd0VRzjTH#T<`&%{vI@8$V}IbP=@$8=?Ca zQ75S@hEdQiT;^(mRw0KsROt{ERaZWMHI`bHfVWAp-TM0wwd0DZRRXU{B+KfhxO_B+ z-UN`whI`T4@8SBTkkKCOXATgZ$*I?27$%3}hVx$QZL!oV0y{s2y9#)&@@cP>2oUu} zIvk-VhM6M|2H|`x?-t;ZLe}v13{I{h44h_FVbmpE`7e497)Y{>kfQt zn;TfXLEq%ob3jztksDPnq(`~+9{BknO0VZge1Y-D)q7Xs>4(#5tdYX+*ek;A8C7$n z%9jjDoQUTRu^xLw@B}THM=zm*Ksx5p$7J5NyOK?puA&hA`I6$DycOe0KhL$j_LAbD z7yzF_E#Q=tc{B0rs!07ORpg*%F?s{^ePfz!A4XK(&yn)It-296oHu(jDCnpy46<&_ zcI@3=jn&H*Jts#|b%*gtl=-X+8zoD|cGRt>+zFkO<{~?_&#O0;12@~Js!8RgK7-4| zH;>d7v^-Y#H&S`uE=yA-smKOfkiQCLh+QYJ=sFoH(q`07+AWb zUr~JnxMs0pdIR;qX&O*W@8mcjR}lwprlii}pcS|H)@G;Y#q=1o6J1hyU@{YSKjy`hn4@x};PuKp~g4`asMy|mr}Z2O1O z`f~NeX`0^|=Ng8V)=SdzGJ0+G>S?-BMrNo{R$rq&J59IC%2!u8o%e$-l+%ZEEgzTH zS90+j74+F$Xnh6!2F3MS1&#mqnl{9&AXj-$% z;8TF`->os89UW8g+(oNu0kK(^o1ae8mg-n;@Y@^f44S}l)9t^gb-jys!&bWD{8u7v9fioP-`CfB!AGuO1B}{STG>E<11tKA26_}? zQ${t^KQ{>`f>ImmrIGLVhI%LDtJ6rIj(n#Y>F-$Br6!H_Sl`S=7Ax$)#(Fi-^!mnd z$68E}8tYBMcDg z=f91DOi__qDYwMvl-n@e2;6kR!4qh|1Gd_bHacrwCEMr=VE+488~tMiuhrhs>*8nF zJNkzKvNcl*0~f6VZT?es2+YFY(b z(AD-BfZwUcdwL28@9cY+dLZHsdVT~9tl2?-+sY`-hju#CL7!&-UFz8!Xzr_ySS_|w zYDZMOi}H8Ux8sb&rB3?u91=p{&b_+g5li?kde&M09%l0I-q%~=$LOLDM8UW&`uqP$ zkPGgrH@92cap1T6y6U-TR98K_-&RSX)Z=br z(+9er?+GbHJ3#wZd8GOpvNd=h$Qn7HpGQuQw!o#6o@jZY^#I8=w0~ucV$iLy_I|3RwVc z-%ZcM$Q#^EuM(Ibbq;n8WhBJYdwxn0I78?`IZfc8^krfJncxW{`^Cz*SFgfluX1r> zqO1^(1~|ITqY>`4FP>E7ShNj(+Hg6-M#Pnm^?KkarMm00z})wAhbRn@XxMj3XS{Cg zp(hwmG6sF0Wux@1QX{XrSub#G-QL~piaHOq!vX9qf{2vgwnYt+WP|_PbUybdS8|?Vng| z1HaHMi%)6aOpC4Qf0EB`slTRHnTvLRp~u?yNQwyY(ljGHG=cDDU+OJGPRN}ZC7S(@ z_z(1{)3oPHJ<>OYH%q<4w}%bVFJV1so}2F%)o33&ZIeh@}cnmwq!`l75a6pf4yf>qlU%O`s|xp`j$u z9Ql(xO1^X%rGJRDUFJ{ec=ae9sqy)!si7i9(4 z%)q2+mbCK+_C$R71C&z8;IH|B<5{@!C-Va}OMpJ>-IfeZ0@pS-FhgI?01lVU<;cvC zwkARUQs<5rpZro)5^S%2b$mI4gwoS5nv4utI*z-dU*8Q0rKcMnjKEP5-YJ>Tc|J(6 zz4{d}MbA;iyW>*f_w*~XB&!LP-1;#LWgKG!%XY^pdSO~R1@i7is*(iewSYP#>0RtA zBoEdhkt<8}%H%Uue_u_Ar_w&S=V|CvFslUGJr#0Q0+pJkcjHgBR_pcX>@+==U%uv- zhRJ#?GW19`GYm>aS_H|o>SU%hTZ6P~W?JBMGcC_rq-~il^PRKOZgX1V472ig*Wu+6 zUQl_inP#D4-y&`IOqq7WN_);}b7sl3^jT)U1M892d$w6otGHu>mGi~+vNNYY%ruCg?rVZPGwCEJG@+zE1KlOTUw$hV-uGjNT^I7=@g6&9h?a=F{C4ZxT9^i%x zh_>5b8VDfVZfBN}iOPm{b^$V9F#uc@kG}`;%>FWS*9?wu4@lO5qOw~&P>%F^K9cz? z2Pd2gZ}nuvNZ9Sn6FdzNM#K)jnZja1N!^k$Y^Wkf=*BIf<(UFEeo@h~-pV6BdIT&v^25VUxvvAXJYWXwd&iJ48 z`Yd;Pn;YTFQM#pwpqi0t?tg4@Y?#K5UZzEpbwajpa`W)BG`%z3kxeeKDCZj_C53Nl zzfeXvhp`RP{rL(F`&n=D3P`E{1CX5SUjm6*=272%xoV2qt5^ER-K1Z4>j7b}>7AA> z8k^aA1m&)$Mk)x?c1Vw*c`dOF$%I5R;n^{`2_wOusTZExsw+=-mt``$zF#kvS&*Nt zGF1%Pla{FVy;395Ba|KxvFyX>k} z`;6my0NrSyI@!ZkI;L~?r0jJR!%i^`)yi&g2LDUf_|pW^7nQN59xah`5ARddldzv*SwTh@!Do!-sWa2y*r zyH77c{w+ai7LiCwlL;2-A$KXDNoGtxrh8{BYXVj|7*{aD$>vo`Y}5*{T3B%dUx0eI zQmp~8x>U4~!{qHSd{ipfa!|;kHwV#yxt)oMZN|>b;LP{ zM>P4oUdJJ=A#4jNMQ2jAvV0OJ`vpCJ?&C6VsB=0yvYGdX-N;O$z(=r=kG~2+!A)E2 zE$8g4=Edz3y)MF%e26Aq)brBYmvro)D7|pT;r5$2oDvsLjqZW?242wpY2-aU9(DzJ z4!YKTXqjuN*L@vPZD{6A-9@#p>3IScn>%UfBDSszQQsRF#o^cV0r1v=`)7GVIR{m| zE{%ZW_-8SlzK%NJlX*k0L2WMpmLKWKO+7ayUx1l!nbq7y6l;7REN$~eY#jYaw{M}) zae96c4JTjGqiMlibZj|ytiFCMTQBE6*#T;I72ci4?(3~F8gQv@sqCh+=)3VJuUH5> zwc--!caKcNsV?I(H18j%;$=MKt0Bi>3}(F;%e9oCi}SM;Kcp}chKOdp+Qbc>sXITo?H#w&U^Br zigVbj9>8FPLpmoPfNdPZMelmWh;>}2{OksxC;*7gh7)I3qt(no zT0~OI!5U@1gNAlc!#im95Pfn71n_xr+`q8Z?rTtDXI0qPXrefW$5WR-k@YZ5|5N{n zzPkcAwwiEcV5oP?p$`7-#mDqdxg;U2OzpsI`KfyPaod_6^1|5i<9w4Z%-$7;%IfiRZN>iOdAsv`|-@; z)ouW@-%{5b`q#LjD&Qt?{w?*r>6ta-p6K;MOph2`;bBS%GI#);e}ZlK#dJ^+A%WRk zV>hK^v~?FdrNmR?r@A!jfAv%^m&-Ei!?Q$w2EnO_N^=Rv+npz9&r=u!cTs_7*fm;9 z!=LFTFa_2;)0cqi-+2y3zL&mut`{%7kEtobU4wb7SgpmIgtk~XZDX&H1LCmX(EjIo zr@&p3_&AsY19X6DywIcb9+Zh@&=dDFj58ZXGofBY6f<43_K;Z258S24 zwcDKknl@f^RWhdC7P)K40B6Xg!@z?-EZH9729VKwGtXb}XDc2K%n&99?6~NusRFlT z?<_P^5m7l8T})^599(}gBe>kl&`Fc8%WitqeGPY zce^Un%w3fiDm=c=CnQZDT%LORh!2%3X@`77O%+?d*@fs}+ruP+<_t{YK(!9L*@>-Yg#ZT?KJphETzeR;v4-gp zjdU1>m&v(epkdCpmoxao9w%S%7e`N{9ekqI4}WlG;7)*O4sWH}f#S{l%S_6?#Hd?t z0&$+7Er3qRXPO@*V(4U`h^S=3tove$!8Ipa?Q9$*E;GA?A7KY1>?ZRuVTz~XPEj?F zRclZ561lqJ0N7d!V}KDI9PJcms%6Cm2F6{Vl~v+GjvPD5y$Wew|0$cjv34*>M1fXs z1&JIOCtI*6TGs3ZL^_Eai&CvIGAUTn&9za$B=Sfe^kJ}QU>;#efq@Z+S6X6M1?N_9 zrrC3NLGC_gr}`nHHa0uQhKSPGqTCoFa^noo@eoldID@O_)fz{ZTN8Z7nQH(Ciqa2o7Jm@?$IMRE!Z~A7%RT<2>yC zFp*Ok1&<1mp8|5AyGzoF=MasRmXc@sHpUV!B}nkha3&nZc}$-F1s7#L8jdh_aF>G2 zAdf|}crdg(-uS?<+`$E5uwc>OmnPlQBItZhH7BhO7d3&_o8h8>5}y{9Q&d+9nRt~J z?YVzq3|!l@Ib~osTxSnze#XS+ih=QeP=qMtH;D&PYJtu_X?29CZ%>sON+ZMb2+^ow z<}hV*os(a3nYA&4Npv5YHZSZwVloKHcW6kY$Y)IC+I_oGP-iuSHb;sO0BeOl-~#|8 za*55hOE&7d2-k_lfsJR)U?wtrH$N1j50GTw`u>>Q3gk7)W^{ zQ|-1`ENqXtZ&AZ1P8H;fNf(9%d_^4OvnUDfvtt4<2YBl4)IqGTRfMaw+mUDUK9k9Z45({OcHQ7ZhA+D^HcmM5+)l%NX+SrcR{t`9yBoRzT#X=7mMk;QMYO2K|7Dec<33Q&8li)rCa>?&;f7ShQ8| zj;HIzMIrUxcp6#~rda$=%#S={i-;!lMIlu6popjhp}bU45G^+Vp-#?$$7AIj2!8T% zD^IzVGP$0aGt>uTosS7KoBOz-6JAT5ilXLMX3FraGiA7ErqF@>e8i=Y$d7|wJ&TDv zG^3Dcfj}DoD-uU%ML~pyWw6Yizjzs@f8TQi85vSi#Nek=2~iRueq}8K@&Vb;Lq!ET znok5!?JyBc_w!+@;tulsg2OlV$PZq7DNGcgwfQlVQ|VxSQB3)Xp63^FK+(_wBEJmQ z;^Ht_W{;aGV@ZWLa>xwJXQ={ z{NAgJV>2yc|8a1k!*dsX(>GLxFIKm1h)1mlkEI z_+48tJ-=fssm#LF(4rPJK_q-tM)=Ve-4Hr!EDEYmtjvj}P}K*eMZSP3URCXk=c=%i zQAXqsnCkW653?9Hu6vXL&2A|vat0)OeLrhed+mA zM(#Pgy~{8oJY!trFQ(XOC)!d_L&4j4X4sRdYF8AEX(Z-S>DrvG}>E7)CiU*)hxGM986Q-v6Q}@U?bA?fw#ey*acbYl5&Zu0gb zwbD*`r$w^~0mO6-d#Yz`h)nabnC)%s8nO)n!i|qbfWu=kqt)BgE-X2<5W`>yJlH~X zMDy51sQ4PoI^3U4pXG3B_ahACt6PfErsHxbIe${4oN<|qnEjh!8?Et^%Ff%Uy$C&R z1th`Sy7wod8pvew8=|0kXDkib0dwJvH^e9EUt=leXSEbfcoTZki%~SJ7-R(0Yommp z)tr$DTseA}4xv=iIty&lk$M+Bc~eM>V&pF%;?G;76D!zTC!B7!1{aqdilB^#O71Xk zPi&3>qMAMjqu&x+(UpX&0A^4d;lKhB-$qP~y2dj+276=>INg_0a4{XrJJ|f?U21Kd zc^mMyXlgrfJ>8tcal7HVd**G?*OL^m2QjF6y(9dPdC)szpJ8RDmTg6-C)?IM2!)@r zN7Xzo8<4cUdn@eanh4^KU+lf(p zZev(`5o^E5w2cl|qM+vZ_H%nN3Nx#}4+3u@4eKDrD6^A-j+CHE9l-}s zczj2(TRo5H)}6$B&iS;H_y9TI?=1es$(?>f_^qbzi$KiP_U}WJGJRMnSE`SLX1y(W*PclAV?dt9x-na&(n z^P8EXz7TJK@AUlwhb1CD5N*-vvtNj97~}b0ik4B9OSa_8a-#-r6EJx2ANG&#)D5f1 zkcVo;BF`8Z9w+IST(sF(CFc^nw1Hswsh0W(;u9cg@yG;sYLw-Y{Wndu1XOFfi86&H z>3SM_$s;?nu>*22!?-Q~*UsMXNpgZg!{VjGbL=Aib<_CD|8yEt_f{f+cQ*bH&R%-b zOZWx8JZ-~zi+3=9aC$39gIkMeO4L-GrRkv9z2V5_LC9*r_B+kN`*w@XR#AB0H zFr{l(Fx7VVk(>$BxdvwPl)fU)HlDQsUScslLm0(c_Sem=di{8AF-SwK$+Z}-*14Vn z)%0>n8!iS@`hK-E?xe*sb&*f_xF~Xf=m7s?9P^2wQh$M1Hw+Lp4a*CXeWkP0S9jF5 z)Z;VJOiegzPMQOsiBL=$c?hWEU9~v1?5|a!1Al;h^nRiip_QMDQnV|l?(2`i{zvnt zuKI5$O%Bg_kB5@>dGEw|e+*^Zmpod|qAUO1ETZ;2aCXne>7ue4i+a~ zVKXy_yqXyEel{%Tyq3Eo@>t8hl?w0Hl*S@NU38Yt{h;==J(VjxNC$D$LaAmGkvB$4 z9lK?E4ojXWXi5z~nTOqI>sai>9~mmnXMZ@A`K~!1E$d4bapZ)|9pn~AB>Y!pTCkO-TJYnbLEdHwboKSk(%xK|Cfw~=buW^s22yEGnp#C&fwK~0p`g_oCY<%GxM5kUal3As zC{`rcR@5*npBro|Y8dq$D{2ju2%ak;&Sya^leWvGNbjW6GAYD6>9$NNY$d&k;kLkc zhqcN&;O>xGZs{+Zi>{3j1?tSa#u$t8uK9bJ6z!dKOeW>^PI@AfVv$4z#z4E9O3lW+ zmIqPlan(+3M?%w`N<&AA4PYphM~Tk@Kg97$u&_pg1=+CkW|oF7*L$^;wd0e zA6_6ea{*KCNBXtN2bHc1p4>L~$s?=ArV&@+s(cip>W z-Rw$-GXz<2z`jC&g2O8E$%b1pCr9Ksz)xmJO}M9d;6^xuXXyqyCbb!fwrvwd@xr$m zZ8CV7;(X@y{P-nwJ}3V~kuT)D)WX<#6xd8OyKG`JB~j!-B&>A)ktbdAR*)7*xAV{% z*0}ja!Qfn$Shrp_xL~h$%?o1Yi4KqyFM9Mow#8_dvCQ_3rVvu3Q z=c2t+M0gG>G#8`IG>ln=a1oa%Dpj-AjW*C z+m*_20$D1y1?SIkgki(`ZW8QSQz+k5F(Ptu0t%+PvNe<>kIwI!hy)HG+%1#xbSgF3 zq0@n>kcfkF*+SuN$4e83(&q5hbbFErEr6o?-9;l9IBDLJ78ZnY&ej<3*&6mpo&j6f z9M~>Iahfs>HjsJz96~h-+Q4`5w2c7Td`>G%I|!z>A_Qys*6FYzB}{{;+i3>2K9`e8T0&GelABp33YC@eLnT`Cu zg+N;_7>VQ7ZpX+d>_KpA4IUwr-DTp8@Wne-nk|awHsgJAtWbnmm)^NnG@*yAf)1Yz z652&;X2XnXr9xRs#G{BUA-(6H>j?C9~j)?R#GlZHS;^v6@>fQvJU)GUR z-IqX{$~uzii@Cy?V+T{DukQo}xAgGX1L^8#pxTtVVkGMawetJ4915!8NL8kH0Z7vi zgl!el`Akoi3rD1- zXUi#rP))}exvf$}Os)xXz#=hVX8vKk?_yf^kI=*vY(QnC9ZiAFk2-C%<&wdA%+$B1^p>ADS*Z4{DYr;w;^ElP@P=iIBhm^p=bp&<Df$RDXOAl5FK0!@#YVD zxKw;czb+F+qZXMPGj$kUukuccS&of`=#?<<*Zf-ey?hKOf0R#uUO#o94RCXK`Imv!w8u&GCPw$9dwbYDk%# zC4~=3t~68V(i)h&M^g2*;uGu~uUIP@)H)?UxsUI|O{W>IS^(=}hn;I#zG3US32wK- zrml3jfNu@rkjGP*bt1Oo_$)#0aA#5@e*}O-6|~Jv0u4=Ng_C_`PtbL$BTC z^6nU@jL4^1QaI$y_3th=e0tK&Ss4X?zA=$XZx=aAPL!j?HzPBA z&Pft3A3Uq(GrNVcYXfEpCsEKZ;+tPsn>o5WP`WEggEDCSmk9Jz<9!~@@~T{+O<`*ft!j18V+}KFzB|`TQx%;#T*$ z^V28~kf@(!Wrgyj1IKf=1L`3=M5Qto)XBX3!qb4!C!e!IEt5Wtn7y7MdyTghJH?xH>_-g3 zmS056(pg)X#Xwjf`bL5+$eo+ZQp+(fle$d3e-hQ{%bgg&^FN6$s8O~h2Rr0fq^{j5 ziX)(!#Jjc~D#f?IirVzV zOmgIqhy`LF9)jkTObrf;f@xb1iWCK#|D6trX82ik2uAsV$3zRdxL^E8y$*}*bm)k< z20W$g6?uiEt9o=`FKU=h&5xnoRcFO7fln004sC&>euHVvqVzLROlHxkGon&}B#Br9 z5e5+^cNTTL042(CN;s(QS<#*1Phs2P;wXB4UPQ26{gh}@F$<2(k_cUuWiV`!v377m z+?*P1i;OlRV;#U_@}54Xiho{ zzT^bzbOG!wnW8U=Pcr)jpEy)DDfv9QHHlJApj#%Zvx-fU-NL6AC&Z^|S1-U1G3}RQ z{CC(n@u@-+E{UfvRhA?xOEN1n*_BmUl37`jS=oRLY#;_sQB4Fhr^*IaGVCNEnMQL? zikiWa+oXfpxRE@KZk!ak@Y(m27*y0fHoRw&&730=A!Ae*ZpwqTjmHd+-JL{v{t%S{ z&1qx-Ll#1ahWsHurO{W!kC`3eJyCX7f5vE;PB||CEhZPT3QsqCG9Bj+PP+XkhK9LEQc=oGgMmw~7QfJt8)7*)aN(O`t*79o*Az6<+y#H7^lM@<-MTF< zip9xjCL5i&DK?^}}12oBMtMz)W%1vzPi`70D>(dreHqyYV&cnrZI* z`_s^Ff`S6S{RLN^gY@Dr@uB|)Sq>MML1ErN{qBH9;qq|@e$wAio4d$&nugpJ-(iNA zzb6W)N#jXTj8N)#5Br>psr^&23^Pf8hEKDsPqm-PPZyu#(?y!}LU5$G^cP}~vN$d3 z0Tf7->!uhBm;zLz7=9|LMju_Gf)ekFMIcn!)}*X$p=@~C`FjveP{G%#u?)QB4IiU` zLdl8|Mw5IDhUnBIG&`L}JqAS6tqQh3W{A@IJQO`pHf{DZfuQP(r&TlND#_DM8u^rD z)bNo7K}iG&Csl(C_ATYrjJoh5>82U=5R-kCX4KEVPT~tkkv;LkX`9WcKxO@m7|QTB zBB{5Z(ceU3Ny_eTRKmt#Q-7l{wF(8|nmdeU;nvV1roK=ASOm<3e8KVW*3&u%8r(w< z9Y!wv+=wu8QVCz9GHP>0qK3)7MmxCF9~Q;{f0II4V)ns3R)Zppw`iYk^f9ycgzaio zq*0I#2?H)vzD9X!5(xOJ=K_4A13mB+bppP1v@Oag3{T&Vxs68jz=n*QLXoko-IMV* zJ2I{!rvqSIi9$yl5k^;klfq0OHcB86vG-sEpx?*Pzu|^vt%OF|Pit&OeVP@D7J5Y( z!Z7LX2l_SC7>>N4yOK003@t69TH$DEf)gzb2?zLF{ZXb=2%vi6?}2Jw0P?P;V*$up z+2PL1_4{x2BJ8cNHn7xe;9gGS3x9Kdn!VV>z1ZP~dkw=~nOX${yFCNZ__koR>4!|X$6#N`v%IKuZS{} zTOw1HN`T-Ht*#3Q806%V?))vNKn+xtR1W$5Ya;*n^2i@h8g1+>j}Ogb@Vcpr@s1lG zvV$Y)yE{0q0KRhv=~Mw^f47n`#+_4QF0B@FCNwhgD@RPcAEDiij2OI4eiOhXmIeOm z#~N|&LPr~;7Wm5_rp--^{M508QOaNI-#t3J93CA3Uaz}QZb*#LFpGEiNFGNp5z{-I zDwcpycf70zY+3K;Ro(Rll{JP^$;Mf~!=4;e(Kuwb+_&yaE&oEN3!r6hT*%=$UlNtd z;Yn=-T=4LO?0c1}E>hooMoDx0U%Jh~e~bw{wz!-}6R3A}<0CgZB-uJEqJ`Fql8moDxQ7`d3Y3ggft|T0q^!BFLNI0_x6`Lf#A)$ThMwK9p{X*G|Q-Vp%hy zOC8WjJ|q%Nv{9*yslN?;(X#vuC(?u#VW!0N`E>ck0@unxZPL#n$`W)V)lLa0Cz z&U;Lal5l1;M+K5_FuZvvt|{iT)o80`_>|TVWhylXj2T5yWq%U6!g@*T zYfL^=^-Tky@n5vD0XJLQsBc}u;-Bm(za#5lNQ`|@+<1(8N>BkK3x36YYraGkGFx~V zG$s){xPg_IerSNsmndzNQtr{gkw!G7e~Ka4Gu^P|lfo&sD%2Q#Y+xaX@ zEba()%Fnc>GqU^5!0f@T=QE6omTm4Sy_js|rm-^&w{7n!Eu4YH{x7;b!zl97g*JQx zx7)y%*cS`+4C*`6=mZlb;b=LQTL+l%lINt7}a z%SjTY&N6aDCGf6Rtc{Od81g6%n^SDA+0r)ilp4hu1-ZpIFofCEc{&!mm2pO>u~L3V z;PKCmLU!&onuaMO&k!RDg4DLpjc{r+1RbA5rQbG6sBz<|^V>!>xZ#0bZx2B)$OPZC zm1F_mR3c39<#Sf>p=u0;;5BQsVW+J_jn-&_J3_0zF#Ln0PU6*pzswHIGCPp?`VN$W zED6BF=tdjEhG#%u89xj-Eg53epsF2>09x_3QHOr$0*cr@5Y*jxw2?0`D`c}IWLRnY zykoRS1q>EEy;px>gc&A2Z_=JGjH1{fEYa3zm5IY@9gJ=2FcU-AF|5|nXie?gLxOs* zmyyptK@PCp&xbm81@_N(G-kn*E3Q*!rO#+iC#<%v5AbzsPeZ_awdQy{Kj`E&PA$JQ zj#}h*om_K_!j@_HI`y4neDNPh4uSTJu6#t|o4H0AP(#LCV-mE%KJ(Ck*|F=iCeg@8 zsq+j$8QqLXn8GBj{5j7E$?WH@k%kL$x8Ep8&(o;vD5E-l`i?ScT7cc6v{9LW-J(B7 zflOe>jyDRw1Rr0`<(?9~;*GkLy$2TQ1Mx;3WgLZ!HY$`i?NC|BN@|4GtdP&9Ey|o3 zJTIov(9sYfuhHz$M!U)~OS)@lV}EuJ14*&8VdtGP=UDG4Bb84tin~Rn#y|pI-V?a7 zyA)(!V4`Bo7!NAa`iwVfD^|B}(1r<_-M&GWCm6F|>aT#v?(Xm0iNFf(LYryiPM(CW zANdG`(yP5uj>b(gro+$j+*csc3W-JsnC5tdFm0nhHHy=)-hjv^AtDo^A>d{~)?PflYDeMDGmZfz2Jz&nnN`KugQU84c8@bm_YCw90^j0VHNjX2jp1xU=1jatPZPi{zm^coxk$5ngRiv4bPUXb=sbvR}9RztXQ)mW>sXX6V## zqmCLsfnr7&6$+WQy)4rt3nt>!V5@L{nQ zwf_~fgks2(lO}y+)CZ$pITs4oe_)yHq46FN{2Hd27T*>V$wJO^Mvj|vKPRQ#-*O5$ z1=sKt?5qx-Kpol}<>9P8wY{-~Mi2y(=I?<=%<<;p&lxWTVS13z%=K`I|1+4Owec7v ziI=#4hL?5!7B7TZf67A3BcAYX2K9*Qcb9WweD_!8#4A)YZX5tA-NUG-j+sCMdtk0l ze%)NZK-+s53!|n>Ze=$`C22VX-?v+$(jyu;6?{MMc#zXVa{)fdYk-@kvMlmxa*;=L zl*t{9^8a{+KbH7+EBxf?Mpf!K84?U^;FFCgU79RSW-@OwmU(C0mjSQ?!Khz3nE97UobgG%AkG?bdsn|#hH zBf)e!e<&8E+jKF>Xs_aR%`77V;G8vK}y&K{ry)&mkjC^6<_~GWzf2ZNx&kFvMsHSxxE+ z|4)Q%@|z9V|A(SBLZHlj+h|GO4>T(MuSD#vSw-x9y)(t%hqR(kCKG)~C;R*@6O|g* zHj|_O)fZO8CcR8~%SrF{!z`Me1bzMLT*I!M=Vhig?dT`vGcVcrp~+RZF)s`EF>v{W zToPIO^7UF0sqcKO8o>)-Us;-hKV|vpGCw8bN!dmR=R*T+Iv>w#%;y1|VM_G(Cf6Bgk^ zk7ck|lw6FJ;>(rLjW49)sof&uQyQ@pA95@KGLUZpeYg@I>MS|LUmeS_+MhU28*VY^F z(T%mne9H3!4jucYu`!>@rXh938Y7L0t}){1U*99|MN&2x-Kp&N#ym4`<@LxrojR>I zKA`SvhMwK%F zqVF{$HSOZ>U{Zv}5ojjEIAAtc_@og?WgZy4Fgo)e7^%t`n){p4FYVM0< z;Cp~w!kA>jSmC_U*(YtzZ$=*j1id@d&JnQ0MJ`UQN=I!B<9-R zH&&#f$BJ>#;vN3r$*Vrr%buma^BMAXETfDT*E7~>zd5*gg$&~#28Plmx)iYkG7OH zJ~eV0;~%8Qaaf^~PmRM^Zc?8axy?p7WQPuek^}Ctr=J-)wP`Bw)VBewf5jAANnB`U zWGKn&*Vu+A6#T;YjIt}XP1y1|pxE-~TE&fXjESDOH%Vnj7y}xa7 z;AnZjs)CJFh@#H1)HA@gbLdFx(p9#v|H+tP2e$ObTs+csihtcvLtNKnYFSr`yjanS zCE`luH&;Q|u`H<>e{yOe*Cp>%Z--vreTw2UG%uBN*yhp{|JT6$&|$-UlwL4vfO)mA z?Watb`Ko4seewT3*zQ^4y9-cL83%}Qw_*E)nmJzscn6zpLEtD0a5%4F){Uh=yKT|S zfS>#S1@MeO+b0kanmcV_IbWg^x!3P|&`0s5H51^Vgkv^g^tIFWWuQqWChhp4J7t1w z^Iq;w#{a|aL~tA+=TmAEW?KuD*`C8z7RNcN=YZ$KE$WcN))M!mtj=L8iW9IWbJ!{) zQ3%Bg9sUJ_<(CQc4Q8HHGaeBiPmg`+%jg+ulT+ zl9AbMMT0Igf}(v~Kf!usz?o+$rDsR+M|3$mU|VLv_5+260Jg5-;6w{)Rv5hFQvod2 zoWtR^>UobzEVIX;Pc5}pGZ?Z@7oU`It(AO=!fTTp_h};5_<1KHYkFK zfFc$|!7d<**gF#4pnVQ6LNjjfHm^=cW{(1W#&JE^di zafSAoQ}yKPh#ghSxYHQw)ONMpD8b=iytr|uwvnuFi=ZlXjP6yx5OU!TDj`YSojPCe z`Sx%fH1U6Ec^#u;Ty~_U0{$wCG`iH?lbAk-IiZ8E{Lc@cKUT7b=kU?EQJ4hA;R(Ma zo#PXd3_T6^ey&P3C7Bl_y$G|PDR{(6(H~F3qqr&h=p+d}mK4LGs!142Q}miivHUYK zDNdRYw_9&cj%P6GTurN7X|zASoj!rHd75hla1Aw0iipF9OfH4zdZO(KQdG#0;@Ki z>ccpip5`xyouxR((&h)U;51(y#8;|kbbDRA6J(sj;1hh#9NSz@ju@sg!jCs^xQXnd zpxdn)P$t%VV0LFjGRD=;+76gfHk{bq?2qt0i+enf1&B~YGTv6+5uF@m`*699yBdg< z%>0Qv7~C!q!Peu*z{N1`^p0#$MzT>gE#7BmF_O05&J|?c(e%FX%HGttvfkJ`ERmb; zsB5Irg}TPgT}q@lD*Uz(IB1^RlOxLpqt!Lq(UQ7G)%X%%XgjAoP|rx#2GYazjaqtP zG-cH{s_6yM^BNe{BXPgULrVvFs!;!ihM%_AGZLU2_t!JJY1c~uYM)}XrS0{Nf#G@E zIN9pcs)hhFB^=BvDMlrvznx-SK`R5-o(P_;YpFMcN~bf4uQjK zy1<}5aHLrc@N!!9`o?M+n`+!%KVP`r!afzs?I2e({$PO_N0E(;G5;{@Q>jLMs*-AS z`-l05HZ~q<@{h1^T5uKJ*Vw3?4sk=%^@Cx|-utk873D}L0xWQNwZ2&3I7d+6^nk#j zApA`uFBC%|I;$TL3iy}h8*+GAoZ@YlH4ajv=Por9;;f%p2P8x9GQ@e!;jHH*)oErl zs*@#rbT2+guUf?YJnM2gc)ogfo_+!?^}ZT{e@90YiV=TwP?FHw{P=nw!cySnMEjKt0*$~e^}xz+J? z%rZ0he%Cxv^i1{0Dmb=dB(hLP4Ns01Nyd#3oKxf}iAXf2If0QC4D;|Dj-7#uSi2e& zBt_dXtbw@0Bxj235*f(vity>zqZCVkdSy7?AQ5B^GFK2H!ElbHY#K2c7qE@Q(** zJY5g=VAI-~?bMfwfgN@ZtcYn^k_HA9v1d034?kIsfWsYdkUgJ5Xxn>+@)CptO$&h} zqo@>QP>r1IkqjP1xB$!>2Y=r;x)v3n3m(5SZ}l`}Rk8k7&p>_dO!5x)r15X>!Jy-5 zFb7^&AIA@9^BMVhOoX7!^3H~ci!wVCIwxJJt(_Y>wS_2z6-I+WJBpQn zo4785-)cI1(>+@kE+C>FGb%I?6N`DB#C{c|fgQydWla$_It}sQC{OJMd+_8vP#XbN zjA08C!oai}5{DaD@UxVxVVijUC=gfZ@R}hqScqVN-H=-L6M!WR2PKh7FD?%s4VB3U zv`9!CV~711F<3;-yc}oX?2YEiS(L~buMFv~oC$L2;Fvxfms_y^&qsAUR)#~3AA8Vj z7)gO|Sd@KrAl!PIb%Zk{!vh>{02kr<^jrkNykPndA?bzDrPGfG)8V)_9p?Z`0yrAX zVAvbAko4LP0>^^sk#?JqWEa0f!DIshS33Rsko1h<-qINkhh#Wf27n)f>F7#j;Qv!d z`k`V5(SR<-z46QW<~lF@IIT)wb;i`{r7MgI)a?r6Zk!s}*u@xA_m%Km5x!X(ZawSI zh8U)FtgA7WJdb*2=Z)-UBx>;s_&yJ$)5Dhpk~~!Oh^H>4Jm!g`fnAM>k%w?j9_MIP zWjeV&vJqCete(cb__41t?!?KYuX-AFJ@C+-mvN0zK`WX2H7ECLoVydP?}>S=6uB46 zS%Z5U4R9uQYY(GG{01hSbv2(y$Bp{+-HpEV!nH>II?i=5Xb($#uP5P)@pMER7qrgy zGVYJ3;fT5p$? zHS;b#4yP22>Nwec%{4~t>f(PIEJ%WK9;*-x$sJa=T+w zYS?w);uacty>Szv@+hj;4~qkg0ajf?S+lh)9G)Ct)K4yE%}#a#P?9z5HoZ$P<1MGg zZBpaB{)R!1UT-`nHN|Xa*u0*q*;!;=Z&Z%9*{8q`>fINdtUbU`QBHV4Ut_$3Tmjiv zqum^4#}@>V>8b%dFSf{gT!JqPCfV^9h{TU3g@7UD9ix(>H^Rj*(h;L}$G?z2i+rM{l9{)p?zsxXE}9XLz-nv4HgaJCPOW zEjzMtgAbTP=!yX;@->Rk)BHNdRja_^6EyQSqMMDDs64|9&(WuDG1^5!VYy$>Jnk3B za=)NX-7n}x`Dzm_Iw<%JeIwu1sK>2F9r!K;RL)Zn6^K7|D_%MYp=Gd9!#K&<`nqbA zQ9Uw&Mh`YrtHX{z3XlLV5gS++LNj}5w5}p4>o&Yp{>5M;4Yxij-{zE!p=v+j z9i^SOBWc<&L(vyQ(F^mb$}r=Gya#TB4x$aW8>8S}q%La98$Qg4*Qmo?#=Pc^uX`P) zi1WU5K0G*Jv4HzEsK6QveDz2J@vYj6GwGWLAmZbx@o?i3rUH#e7>%&XIB0~?i$1@{ zXkwKFM_=A&+-1UxKU)%(l)Hwq?>64R;vNcDr@QYlEPdZx>U19_J#+7YMUR<0|TMKNj3v zv}WFKoT0@djMU!ZSDdvjY(P!?jQsBKz}_V>>}}+X8^dcrn)n>~#f>>6G3kK-xn_CF=H&@u+u+Gf+~|Xro!;pHf|< zIE&<|FIpPUL%cg0D*j`tG8)1Y40V0jXq$N9a``34Uw@n9+~4J(m7}p(5>_$AJscYK z;3Gzhgj{hNXQF+=-E2JxPdrT?H6Fp?xfcDgHMZeVBPEWcQdYLyIq9cIjhpHnnFJ|d z9n&*F?8*EwqdmV|``%;5ZCIlXzK0j)_!V6p;Nhb7 z42}Gk(LzVz_5E=ZWBtF38*43PuJgMg@N6?MIqE8$BG-968k>lCrXhYU927rL6D}mL z9b;68Un7}iOqB=KM~=ao&Au$UuA8b7*^5V;wPUbA(D)&^6gxD=sDkD83uBD7_-XZT zqeHEQOe<_(_Z?+t5^86-uPQ(HZ-cM%yzX27mn%=APW2ew zBW}PKN53c0{OB&||2< zFWViVmcFP)K_cR4_>;y}AR_lkV;kJ3|LZBkpS)e5;e`yY{6h(#5%64&ycAo3-<;kR z6V-seehLHc4BDnw`s-3Q=6HfUbVpm+&n|Ef7hk&YnAB9XN>~LBs|LYq{59xtk-obOBMD8+&NdK zW63zWFykED6MvU()Ja__l7ML$rk3cPqF1OyY-E z#*H;v)o`ByN&_62ESRNW%Nw^8Mh>?=qff>f_o2tPA7?bP932;h_ry2{-tPI=IOE#% z)Db*8Q;b005FhOt{?{~c=-SXv`q{H3T6Ws>|iw+3gtOU zn`|^0@|k#TLTNaP4t_&31-}zQzQM#`JaldF8$){V8+X0jZ^+(9sNx<83Wk9?Ty&j` z5(v~Hfj~792-G8iKt&P=)Pw-4x^)VUIn1V&Q;eH&h+dy+^fP}H+tRRpq+6#N|Hd5c zv#G`++?pCa&1eu4kZFM2K`%}-Y_GiX6ca^POgE}l=EVuS5Cd`~_b5w1S#MF*>0s{L z)M2_Yq_y*|jO22hkwMI5JqxQH@VSHX^LaqGW;?wH%H&5Xm~LDNMG-s0=v;9;U&!K4 z5R1-=)hX*+x^;$;#+`cM45L+|+o}1n62aySq+maNKf}1GTA=D}i274(Q>hHTC~ugF z&M}>4%!J{YNe5>d6G8BOSw{WX0Kw>xp!oSL%p+#g$5}8Lm(vxqjD{sLJUq+DN*1!Y zQ^x=a6vSWuaOHnw(fm2aJ+1bgB4UfLn36)q;y; zcyedpT%%LP*(KwPC}*xQ1QVBwbFp3fIUfBs-e#Ugkgyu5*jC^lGd-oZ{9VM^Ip9vK%aIA3DS_IQ^58biI zXz%@zLF#FA-D0De$x4wIQkPNwVxyJ5%|n|O8yywn&(Vva^A;N|@oYKl@z*4e2}4=Z zUgsc>YUdXl?c#PbjSwBI!A2%~=-?s@-8U|QEwq6iTw+X&6{*CLFW&v0O_!D!O{+_k zKN`<}3cORZ00AoiI=WoX9OK_Lr-?bz*=VaD@5&}43sWA(^r1FbsL#G?b!%{ow+>1s78vY`7P?pn8J))4Aqul_wX3qvdricBaU@=n;V*+a+is?6)rQXqUZd$%&4gZ z1qZYEmyLec}-lVG2o_VZFFK?Vd9u?sP=Mnu1varIgTD=OrdGZvGwx@tz3?deKBwE za$}W-dGFX2Mh|{hYx@dgrgtvOitk0rt%)ZW(xzkmt+|D#6^{_?&@MDOQim(1)rODO zT6hpOhZ?UkuG1IceDsc}YSgttRIS9&ml$9q>Z}~j(C7+L2lf5gbj4buZK%I^j3_(k z#H%=gA~j6omn1$}ZL~xe*VbSu9W>nSE~HjwT3(s5&CGh zi&VQXr}Ft=m@`3`Oaq$f&r*|}c*LgJy-_!`2C@I|UvCTohFjJf zSvuZk81S0$6oR{7GvcLS6i6(&g-z=Ltbq8ZG+L54bfSNdMb^217Za4 z5^vy4&=LCX4P&-1;KrRnq`zrwZcuC=qe0kwi?DHoLDW@5@e=_wEYIM_65h@;KGqhI z_B0N_EZJyuEzh)VOkFk^@ij}BvC>L59z}rEN0D|N=1fm+GOiVT7kWB7&E8@RmP*$A zq4%Rz$x*Rh_nm|g+qpS4+GJFS)nUcSnlEG=7x?N$)otux9yFr!$D(@$4jcM;9^%I) z0!P{&r*?SUoK`EG1L))q2QZ<*U{CwMH*RAD@i@!QlJBzE+l-!c|6ya2_wOEK`BKb# zPr$tYuODOib+0k-vRFL6&v@{SP_NAQ#(T z<+sC)l=+1*?r*X9_J4%MC|6QHDk%t`78=*&y;x*)*UP|wUyvF5p{H4+BB?y;9|!>r z+iBF(126IX4e9?Wqt5WBfKL98sIE%0KQZKiqFD<)B}vZ%>Gdv4_1piP>gHLVVyd<6 ziQ^Oo#4 zp1Q0s{rt}v8`h+^{e)G;h4k=GSeJf86@1 zY;v#f&cz-Ma=r z!s&RDM^D2J6rUo%+j{A2C}e2!hD0S&)JaU@-<;vRr*}U;UdQk0(GGrh@5!HyCn&X5 zv|V8;8?*c_Uts%$UO!|=g6ll8siX+H4zVg8w+8)R{h0j zM5(8ZILbL?7~a#I*Y_k2!QsJ#!KY!heS8WVrO#2(DWf;7OjEz<<7UxPTMg64&Z0%X zfi!D|;7z^fzMxHV-%<>i*%@&Z&8Tbgjk)=*;uR zhR9E_)ImG0RITaB3&y*Q;5%30cq9-!dzHd0^CFHu?WWX=Mxz?v$wUnYEUP9fOe5q# zC#JSoGW(E5U4%q!rylQaCSUoq#tfytp9bopOS02Z9bI~QN z08XagFTtA1ocn=!r#@j8S(=#;mGYo9VOHL!spi9)S|si#<5{5W7&DcAPBaJC%W~Id zV9M^|Po9oo@`hHkPsu#OvM$lAR5MZAo~P9}7iemEF&M3uS&w!!Fb7@^Oy&eOjZ#X2 z+4Nt6$teMbY{P7pcU^+{;D1lqMuAmK+5ZGqVVSUYD8_4bF^%AO_T{*ARKQdXa*4K9 zFjtUP)BH^>DTV@uKVAPaO_ni{d5!JMK$|&~IoRYC!}&XG<_nw^I!=&n)y!-3jInS@X!fC@iDooB-X-aBU^s>!`^L%$kAGTY(^jjBD`g6joRLc5 zNPqgH7{1&YR~(OIex2Wwp64;!UXH|lf>nkVhE}t@|GM=~37r2kf}Z&tw_XWBr|+JR zZop4?)TO~q%&OGCiP?-kY+_!82f|~Un#&CLq+?(D^je(XENp7VVu|jXrsnlnFKF4! zY!U5bpevf2SJFdQn|FAkF+jvNH%C$L7Um#N6hax-n9a%4!t5Efn#XZk+S?o;*@pK< z!ly{UVq4Xg=DoNnlit$2-J3fZsA3UqXlt_z+yE!FGOt9^9aos0;7n|3E3>{gOLDwS zyIYyHYvo8_Im5=F9^=QVDVqWK6KQ=yT353XEo);o3w%9NaHm1RUDbPn)}%)#xu|0kMs3Gn1xv0}9)1vj%PIW~Kx=Xmv;H z1zMtOcgSh8G_x`u&o%MZUl%hbyoSfR25JaO&5qJiQ=yd9(5NiT1*@ z08l}@CouMO1IDl0z<6;tV0_TN493mq$~3b}IG)=;l_TAyIe|M?8*K1p4O!q<`HVov zX`W^#GAl|zKXGLk^dQ0qI|mSs?{XQ0tI~unU~%@9<`rRB!|WT@&TJ6qIj%qq31V2X z(dy%(?)@8o1g=V?=ta|z=4(xh`yIj485wX*U$3<(pCo(D;FHdAn<;vphLjDb0sKxlhC*!OyIKM9E zGz`p-bh{15?xO+Mn*O9OIdP;P=QksG4^_iicYI;bG?=YZU$e%wP+&s7hLip%?3U8F zl-GyDO@UN|vG6a8h+!35B`U5=@qN)2UsCnHW*u!Gp^{qH1b~#PBHCx`p;cfnR!)C} zRZ%sxilu!aLSIrrU$Z`-gVIVgq@Nkn>NBPS=N&Ok#Q#W_5GDgKHOozwgCtOr~jLJ0PIzf8ObpfPnTnhm$k2ARGT%3w3u-UHj(}7`Vr-Y)tzMoms7d0vwt(2m- zvA)FF&Ts;HeOfL7fUa3?GOsx6e99xNsum@xVh-&qQ31tXXIiOF`!ZVqNV5u^N-;OG z=ZU1H+WC&8(V+h3P2PMF&zEUKfAeZ@p#&C^KEP~(yO7NXn1i}pMr2QgiEM;uh=oWPc8(-FgFWhdoQL_R*=MDlD=7t3 zG}ug`Iyabc-a^+(Xmf+v+FK-nmuS=tW|e^fxZ;DI&ji?~LW~H2#2rTb#id4uoZ&#` z(|Ak}h!eD6LdtOh0T$z@S$CQVmm|+R(7dvrOP&Dm;Z`MfRB-{6|J-H;u;Q~;Wm4Op z^9?LTZJjy+USdly%07kSyttv;0R|i#Xto^TGQh2w@7%;Qxcm9fNNc^z=^`my21jtL zB}Kox6hG?t^fbOK@GzwJpSSero6Jr(p#wNnmdTSATwfb&gNqkBW|=HW;cQJxu_VzC zYzj&-V)7ufWl$2f4l)yO3&6+zHEW$xf`EPU6r2kxDF!eyONxO&imCJ82t3%(qfeRC zy-Ek%0maB1+D6oxBrHd_oXM;NMdwKc8RU8ZAktW2g@oGqagQ$Ra+ ze0!*wSh+TT7i$aN=4Ng2=gnsGHf3lFsgPyT=~8(d7E8W7<>8Jvj`Bc&7TjW9c|)1J zT%j|%t95ImOI8k$DN~qoB6kht6-X%(dk-#;#0)`vLNSTwpq;iby}T8E+-txF69r3fv&-Rv}k&m3Py zKj3aUTJ-?7^W9c04CXH}MiffUJ*7xaq3uILT6O;rvr~F_zrYoIuH>iyI9^;;5s!Uk zX^SGsd8qWT;dBkbG$7-GcMSSTP;Ji2pdNRd$suD%S)3_H%JCWrP~A|Bf5x`-Z5+bnn4zqO$_5{a}e1W)4v)*vqVq+9)|Umu8UY3ujy{Rs#YqrdCju z#5m&{PHeC)89DSH>5_Gf(`EHCW(Axl*%+0CU2^D>*kNYxpdm73m|3N5u1i<}>MpZi z72te%ioOe;e@mDmiFMGxM;T?-Zowh>$S|{G33j^DRwR%Pd8|O4`=oFgW79s#dBCYN zRL7JdZ30ZBEk%cGCdJs&;yX=mh_sdB!34_F{K?&*`CYf|&q39NwLM+BJDld!1Ry%U6rDHUQ(jwV3GUe*D^N$K6fT3x zOvyQ|G?gJ8C!kpb7B2lODOe6}u(8xEIJ^g_wGr;I_g zgg~5tI4WR|>()DNa}=R?nF3KHIS+-6JYu_xBH2$h|7}*S6l$Ez zk8%{sPxt*Jg|dke2vgi82Q+tH=@=)xMl$vO@<#4+IQfnq8EL)cl64A)t;^)=Dam;z zvZRJdr9KasvBAmC9S?*UCpiy5eglv*n9R@~M1>EOFiy%4CMg|LtE6#Kio}k?%OkN+ z5Z_ZwVnKN%7D&!r;UpFgH$z9JqbMA%N~??rF-``IfN>%%1nJ)=dCTZc`=p`+PDKIZ zWC@CvHcmph5)in3|VWA!Tu<9OEQIs-94ccMGNt^S=(!8w z<7f#Hm@gEDDvrgY$~R83r0#4yvF)}+W_b+Cl$_H_GYEVL%=U_n69E@fql9sij|={6 zoZR+MIm;qj?!&T3sBSK)Jlu6l#~R`NlfNDc8Ik&qhBdO;rDQ%TE0c@!#co{~T~b%1 zB-TQ=*vL4BStEN#mp4M?3ZxCuR-n!mQn-vhwL)^PcIphZMjW*pCSC$e#H)O3q!b_4 zJsiS^OAkY{1#mhA%@)Q7YW_(0$ec2742%(H{SA29S*2Jo_mT3AkxU_NTD0}H%lHfw zFLUh4kem}rGogm>9~dL0NPg(i5R$h%3X#_2h zx(J8jQ}jboR-lf3B?kGCYLcr%A&g)J@v2hjFA;m z|LS5)b4qd}fN758T;^aJYMqvlhx}4}N*-f2En%P+8>a$wbCk8!ZH-(MFH;_JCFh3H zoD#iJa=s(rVyc%=DMw}b^b7iGOgSoL-598pP+eV8rC?8%5p`4wZ_qyVZ?kvVc3y#3 z<}qF?-z6;{wTJbs0BiFl=QbP(3Yqb++)>)&A@<0?$IXtnhud`SL}#A>I8a0NiWfy@AGr%n;X;w z{kvK8&;oT$qizw5LeLKh0v_In#J1u#zB`(v@sUdoen`8=nPa-{o6bD^K}c{=^25_8 zt~g>tz&G5{bbdb1_5&GQzsB_(zg^&@ z(r1&*In@`=20UA1;Xp-t(};Dtt--yX^=4lBb7rKbWzd97vwr+xAq%%sF_+Ttw&})9 z^CtK)v?iO~;3BdAWSk#aN6$_+lj2t~L_crP6~V>(8d^KqtnPChjr$CS`}t(^PR*Ms zSo}a;rkXc4m>-7lYAooQ)=92W1j2SBC~vCSq}qy7d3AXb`y`&ZGW+7%@io)TIo_i# zk%y+4N#0Difnuhc?c;uBxV{)hQL~QIfazxET25Sjaq-1n$x7DXVl02AbYWUK-Q2GI zk~eyWIY@&e$PZ_l{qeK)6|-Y}#qR5V+wk4RKi(~RBmHSyj~kkW17>H)o@dsgZCU0J zd=Fb~cBH|x%(y_A`0fjq96q;WPtlUufifNGn3F*YR+$|r*qL%?n?AQ-TzvOwhiCtO zDDU9>dTw1EsmmMzEamQ>W8UFb7+Rd-t;Q zyVhRVZ8I;OcLw>us6z2ohM+n%nN|&NLN#U7oB7G{QlfeJKtWl??42@Y_Ztv zOka{21DFAXngB?P`2ytQ6=sjvSGO$qb?vI`CG&+WFt;cd@+;aSK%zeSsJ?rR$QGI&6@Zgy~^xCeP0kpb8E#_?*8(}tLFc);?U8TYP9j zu{bVVUM!A4vjTm&+^pfqWL1iNMZVEtdeF#M1QN?+eC6&xo}Y5&oka^)EDJOgH?#2c z)#V>8SiAU}jXi_ZqbG-VoM0z@Zo>E(zsz6z{(vAS7p)BCGoKr}E5td0*$6hdkOJdGBp7hibSB zQ}<2tJZ{O<$ukFQf8`;|vl@bbZZvye_nQop9zNQIV|>;HH^_%z_I8?}Rilg1EZVd0Mdid;=6^M80EsnoH z`demlZwD=brU7KK2WS9ja-@q|gaCx^(O_6^tmDR#l=Kbc6PIxIIh!7Q%N!e%Rak8L zQq9dU7f<9>ecMdp*Kay)Hj{iSToXaJ{>Zy`v)R{^9^e~}>4frapYTa+(E#f*gec?- zV;%252Uy4a3FPK|dZC4PLqp>E$O0G__**%^Aw)WLq8hyUkbc;#3|~-p#dTfNEJUz43^j34DTnXcfbsL31=c29VUAVTVy=P9x z&&>DC84&2&@592MNB!S7yC+bf#Y7Su*3G7*q}#y1hpb;P`VA@32(2k4t`}y7>cq$cE_&w;z&`Jp+{ zJCmc}q~fy=%@**&?I|#u=!JNMsla>`?-;#YV73EY2MWxVZiC3A0$qe*24#jroZzzC zBQCN^o@S?9l^lsFkB6pxgy&j_)_i1ENe@5>N*XmlMCOBSRk)M0wWCJf5dXyW4ts}pl5ORxlTJtd<3s_MjU ztJX9EbDW1!#gUz6>vqAehlNz>L4gR-Dp-gPb~Gjjgh-oGzg=eK5e}i{cSyv2gZnKK333Zzn@G%pM zDh9-j=)?*P+PWL#`9v~4#sp&`HT~FpR?nDCYd$s?R4-tOvzwv-W~m20;lMc&!j*Y< zeqx@D@@9O@BDs`q|H2%m&CkpK0w=MxNqKwsnyJwVZlWVjfPpdfIjZ!v**<08)_fFO z#3@M_fFV2!+*}yr(B~I(hy~-3ug&}7L|g+?!|c2t5T|=HXK~HX(~U*Ar*UAn6PR3N zwusLORyYm4^*JgiG9PTSOb{K%Nw^q<1zR{bw>N}GdeLj(pA63CC4K@ua1fVj0wgXz zXkOoD0`tHs0VX>d5Sln`q?cQlj1{r{M~6gpCR>;gwIqK$u}*AJQP z|K3^&MVyBU8AAdr5#=649CQT<5*6-_u>V7A<$`0a{6^akn<>^V5!(|^>+O!LNdEP> zaAO@YWAgk*%uag1`~lw5NiNXvqh@3829c|CwD73epu!6x?U8Z_6LM$0K%XCl)$l5{ z{}BpWhITvUf`WMHX|k>tY43~UF`S>T;^EUM{ZD zi43ig5%ZK=^djTMsAk47G%h%qq3LPW{o;Q>!_^#F)Wjy6lMNRQD;|ScwUVwphKq)) zY4S1in);c78~PcPf^HYZ21v$0;o}&@TPx|@F>^`W6v^rgkGS#q@^Q0G&uMOPHZGAn zXp=zua&MDH4UJ`ql(fJ|%H!Kys&m4ens9-e+^&FhxPm<{?VnBSA2AZDxGQG4T$%3% zxnl)&`X~K(!n`s;%nV;e=ma~5t$(`;UOu*eHamLvaS(n#$Np?q@*Z^q3w}0V^ll7I zDR2X~pERFLcwOocXy-WIjt8{kC(ZkDAM}Oa%n#t1Yv}K0>)7l)oVf5)uHgg9`Q5ya z-aBn}D-j>}3)bykqI-TZ3sA7xuPAt+WWm}r?N_rSlDGeACY4A=`KnZS)=VJ(88fRy zA}X!MzARv_T7S_uXUwhuQtK>khrdiy&H`5U=b<nmD)&P>z)oJ}W3MmE!b zm_v0QjO<23{xB=Y|H=G!*7K3`3mW%_*#jcG{SOS>+vwOIX6u-(uFSzWc%2&kX+DO8 zC4ZV}6~E-_MGEl;l7=0I(}>qrQLFP<#oI{to;L@Ay0_1p9q{77ne%2VT<~jn!Q2o# z!!63CX426M<`~>wz2h%)l2O1Z>_|4vuM$jLkK4yheu~sZvz9kY0tM9UA{M?rq%jxG zTeR1y@S@o=YBOU=)2piL5l3_585TT zz|>u1?VmedjjrHikR6Ih?o7KVQd2kMrt1(*J>~pVr(ZSIqw+qH-UJ>Wh1>W82k&&P zu3E#}e}=Alz)j*dU0tgcQU#Cd>_pb%!U-{&eFszq?@NR4vplLr{O1fVS;wq_7p&(| zp+_b8zUD}@5c`I^;8FL+d=+FnoO6zfRJH4VC1|+4woIH3(7H&K++aT!m1&7c2n)w@ z<_4rXvQq>LH^}{revbtHUs2;I)x5%+!Y$WBMuhe0Y-({Fu1V6PR2>%+IC0@ZtD;l~ z>=F%)RtdIsP%ui0(9=MQ$C@Jb@(xh6Kf=o7P!evgd3@#Mc!4@ZtA-A=sEj)d$g+M#@9Z4xk^5zGtr8@GuQX3ckuJQSEXq`%rjM@mmPO&)=!jXsOGp)JlY6W zRr~nmKoWgysFnhx>X4r$X9IU1fo(j^`VYrR`#~P8PdJpsck+By(VpBTF%@$e9>ENc z@HyLLeh(fVviE(#qFM>!@DnAif&=a6O;x`_SSN#fOX*{^=(wqxR3vFT_=>iY;7JnK z4lhw7r8;?Y+&(ixsVls{3Zm`l(@T*Fl~}MC3+yl1n?K{8^&9O~s_8$Kj8va$=*<)@ ze2H%IscW!s_M%S>!jk46KGiq&ELVmqSg1ds8)DQ@?+R{hc(SZeUsa>eW7O?%qB`nG zR2}q;8Aqb((!XL=SN+^<-hS*(zsIV?#J>b%9%3S_8A4(N{N*IYsp?pg=@O?>Is5t^ z;Ly}K<%|D9go}HPh5{ea%W&&R0@yrS`RylPS>pn`b% zJ(F|G<9{-v$U=|~u8HhSHz%qXinG)ZetW}$=xw1X_^Gf(=tLs|JpNc)XrrYbMrxx9 z>L&b*tDpu1GqG$yK#=KB1=X7To_nUHHB-SaTQexHmzQ*sG_v=$qb#<1$H>4+sU`v1?4-kI3D7F3(fo&zaT>j zJE~E`tK=krD?tW^XpjuaQl#0$W&d(SD@@Mp~1oWNL^hyF`;t&tY zctR~MQPssb(JE102ZxAb6V>3#yBUAXrBIF?XM+qlAwEjKB&vGe0+H(<^J-OA4{DXp zJ7U88K)WC2a+L9BR5kxr{`9$TM}Q5_OE`{c)a)cY7_zsD>TJxF*u#2oBRxvXrFKLsBquEcszU6%jq*ZUvjh-Gj@o` z$M-nuR1n3j^uNs&SRoE+;w+NAKWALZw6J(AH!%G}h5q;5anNU(~EF z7_*iJ)K%TFPtM$^UKTe*hpwa+sVWtl>q!k%M|jx!s3C@|3pBKz8f0GJ2J`u{@K*Ui zPhu1=Xe_5M>tSTxL9zAK9aLCTrPAE`7>5OcQ2v)y<1~l=QX`$It2&{+?9@PgE$N*G zs+I%O)9|0dTo?iqX9JiDO9V|%L(|KuUJ-Szr;;3^TGEM6@Y2fEInl8(V;xuaF~~Qc z`lYBuypC{B3RFZM%Tx+&Nl|sHNEZj;vx5T0x}1+9-q(NFE6rj68KJtLd^ngPFY~gO&M-&rtVGA;0tJEQ`Ml#I3Wv- zjESpe}L<_n>7oJRp3A$$75|FGh#=m46=fnb$*PeZfUN_ur`zKaJtbFd2}(hNqj zF9!QliL4xql*3badzH~WCu#h^2M9aL0k;;4?5x^U{z=#v{#wn>IkaW8Q4MWze`gqP z1+=9zl(wrdoq-}1?@II7jYV3#<;O>{@F&3z%)q=|)Qxzcbx0T0u|mjbkI};V%$1zC zx~PWwq1lcYHNQgDql3t;e;X2`A9DkrcSSoMo!3ouqzC!)MDUY#U!m^Renj|Mm-ZcJXJqwyse$$16V682>=2tjMFZn76c(a#*;28aSjWJNs%8Q-2>X(wqFySw zjWZH!ZE;QyrV(51%<*K8ybc)>5$Qzu#nfxp8v{fRjqa_kb48oG@;16=01n-qokN8K z)XntDHEN^wD-G?VYNN*VKB@{r)JILMR_?JqYJ06p_OAYtrREj7{aV#B4Ezh%s$tp^ zx^S)XTL*-uzhHw%?w_bhUv$ayG_^qHN zZ*|hqZ=7js%^A_kJ6CRt5;jr_7=njl{rop`5;Yz|;%&dX$UZGY9E zak-oohPZYP%sfEU6;R%dD+hVEN+mh8~utr9&>WGNhSk`S#Xo8pY)vY9ZND1_5p4z3;|dHlSqX~3mx(%l^E>|g0yC7^s8}_ zIR$G@D0Aj3dgEqQCw>`Y8L$fUh4lT+s!xx(LK(&sURmR{p5fLKiNfga*D-n+c7#tX zRjyR1K!i&fqK0E&c=#682piOHgTH+XCZw-&Q{F;zZ-t$-it=t%we-c=H2QkA9zki) z7cSeNFE|bQf;4E2;y$=os4fn}sn-xy+3PUlWopsgn@GckpwhE6eu(O;eLI^72OvGWg5Fprm-E+V0xP6l;Bg9Qi3|&u2Owj2f$D0yQ?K~VSEJHMWHhkB*@I>sIjjbwypQ=^^U1~L|b*UYxwp{|C3ZVttWvVrOkRaaLE z<$gcc;2eKl%+lcBe|J_!4h%0)T(GmCJ-#>*T4d9d2}{atF5D+gVv!Z5uGJ#;tp&_;UZZgmBD@4>|4 z`@5l5-ln(jhArOW9yJOoX30IOw|B#L;Is8EoxDd?_il3o*1ZVqaRV(maL5hZ@dN^A z+&~5gCVcMzSc*VOwiA#}kf`u(bgciXoN@GV+;KMaR$^zr?wt9OsY83|yq`2oxd zClpE1yzvjHFJfT^-STg>)BC=#_C0F+IQr)QRjLV8Urmjk#LDGIG~!7$Jz+QFmaN-R zk0opNp@WS57K(XF)owLGcq|9cVTbUHg6Hk_9?9djKO%XWamINkvaXxOb89jCuvHlIA|6mL+eM zR`klWj}c@Q?B_G}(e@rGwUNd=iy><_oqkqT?RfkfU~gBlvnA~()>ZIn7hz`@D0fIA zL($H_Ln}@sbx&7gDra&#+Kv6Zy>6dlSWvku>Em=X+GgsPfv1f2(5wtqzxFl}p^bta z9zKMs=4a5oe#MLRpVF-HswSPvP$NO&kg+g^wh4Parb%N}<8GgDF+I%>`y_>@P|*SM zus{`MPmru{3+QOu&$$f#6Juvf$|gEBR#o#ZlRyDk|_6p#++bvmGz z_okuSE!*wMVLANhqD~IWPOt;ryW>Pa4|MOr9B{igJ;MRFE7OvR>iKFP2s{=RNU5LY za)UI}TQp#j+WY?+!qw?$CYCFXGYPN)K+XHp^SLcSpY;wUPgYlX&j@`BY1Cxp$4cYO z$ttyyW2|&!2C(6i%zJfMvg?TVZK9^A<|CY^gTpL{eatvtH58Er;*c@JF~Ki0+m~BH zMN&Rsq(DUWO2k+?cst&T*)T;7*1jfds;UDwfi0%0YVMVlJEp23RS!#}LBcvknC{Dy zc&E}joVRDHQkr&{zMX~zoFi0Wy7Kop;%4@6W(=GTH+XQwt|WK8Kn5%lo9uhBbOw5C zI`-Xu$lE<##pv4Mysu_rjlEI!VU}{&=AXcUaGU?HLy{h}`Podbb9pnp99eEB-##G_rIbP72Tm zvaX~T=BT+ie%m5jHNekJ&d;;istsniuV+Ko|4c>BPwZR?b(*WXVu$RBx#}pU^mopK z-EcDRjd@tVgk>0N-glm_>SLklznZLUp05h^U$SXfAMBpUq_lDrR1{+7_ffY~{TEz9{w^4E)`TR3~$r!1E$#Emj@Ooe~6IG+?o+6Z?)lC&of#jh#!+ELQzu zzkJ8h7f#fdi&ec=VY$%hlh8+WjHu3p$sY*^vM&qVIC}&CVimIa64j-Ckpu#Q7YTg? zub5bA!=4<5tU^h>L|IGJ)3Fm>M4+XBNVOc*F!pyB5hto|>8P zs#W?}<{qqXyj-iF6YqeC81NrF%^g^EX#S$QMF)eYyr??V%wVR(M(AmL1&>b%Yxeg7hsEQY7ggt$ z)1BV#EYMn+9I77StHVV!+wARbbWY`XUO>f*hu6G>RqAOpIwX8UZ!r> zx2>m|FRLqg#`&_^py#irD$7;J*p2J3a623(n#ayxM?;pYl;i?l*zFq&>kH3;0sn0r zPL8;WWA29oV|xX?vRv%}q^Dm|Z!o0RE7UasNI2Qckfy9q%{b|;6{=MoftbuI&kV0n z7LGl7nx4i%Wb&<4HJavgGzvfdu9=vISQ2-w(HA;$K^-I=F}!SH)_@h=7|xM9fvHMy!K~;UGdSSE))aZAm5^ zk)rMatJDp#fx59dS+JhgufjIU3Oc?D8VkXDUsdlSSbw#eSTTSL+fyzsn^!Bl;@jM8 zn4yMLAHPP`Xdd9hIW2?{(GDXJSIh}s=mj>ntWo#0cQ}kz#Q6b-nq5w-`8|C^vT%I& zxG>mbufub@c1Fh24_jO5>>5?K*FH($p*Y!uD74ch0(=!-9uPp7?fUgTHQMPCWSpI9 z_Bg5Bv@2-nTGcZBki}ND zk$Z*n>9jf;&<*DEZ##Wgc&fw#asi^#k-R57H%FreyO4iDfg6rcx6cV4a#P*R5{uL#C-u0S>SivY zv|J$3As6-E!+!?h&kg6Cyb~PJvQIfdi3Ow#jt1l0R5!E4A~n-V&304W%$f9Iu3DIk zxgJi*KnX?Ij}K2qhZmtosa&VjM)d#JR5g9qdfN4x^6N$G>F3u}%Q|jP;BMfL?v1`9 z5eS;Ylf39IU0;W?UO~^ku6hC_!>Ak;3E^H(2VZxS7=W>`= zB=MpaYi@<_f6$fupgwmUjoF}XadnRos(TJ@2eraI;19)hYsTlC7v;lB}c=rGmzK)(T}vl zP=G`vgjDZw4xvaKc1GOld6N#+Klr9G{jZY8crU~qCP1M0{P zQbsT;f)yG%8J9QEN+^$JeLGM22NiKuyikeE#iA4}g37R+=M-mNXy8jETENL3#52Vi z@t9O(2hJ@wsz$A(STeYS$FUvMF_m^YLVbD3BD_& z`R(*}tco%=tGlotbZE1BtfJdG8hGG!+J}a}BaJub9USJFP2awwT61$GysIV$O&ka> zqE@}Ddc@5ZqlL{Z7I8ZNuDWSZ3GrZK8S8idNR%#~r>c5PKQ z3v>K?jxaZRPo>(km`u@GqAsu&jaRa5ZYanx3J0ZJLP05KsfUz%Am!Qbg-bca6FmIz zJ=MB`NO^pSMkL?+LEVd8{9@g!1y10x-3MH~-7SbaFMT-@ha%1a8obRxu;5?%))kpKC8b#3cx<_r$1fc;jE^W8T>m{f8`;_Nl@ zq~yVEs;xmz=H|TFiie)IMMm8Ro08YabY2@<>Le!tE`mJFWgdkN3U0h*xFMW34Ca_0 zmLn^WgD2^Hh7y0Uz=R!?rXQ$g*i*gj11trJeG=e!_rqm^6)}xt+DlACYQzLOzg^X7dqBYROe+DK-NoRo839Ca zLL(X1QJ_=sz#`-YhkdBuhpJlr?;XsnnJz&Id@TeFcaWUQv1qaBAF8V9KSwc-gV@Ssv}W_GbPKlBg6 zr@(L%x59^b%k7ihILYu6{k&V%O*nFfOZkGLgbqK0>VJ$i;#G9h$Et1Jg=HR0Zk}WO&fh6o8~@~yFD5=!slqP zNR})}A}*sac`J1-ntr}nb)hPsVg+>p741{IN&gH7rx(zuuT)Dj1^|$K(OeqVS5@kK zNQ%`Hk>ShGI(Fhx^v%CB68Ome4Ij=j7FP(l3Mfr1Kdt=?o4)hubB6vE{r;J{$y%`% zBo3FCc99b+Dz|^Gn#XJtlRXln3}T-DTy4_NoS}hxRI{M08#vgsO=R6U31Hx4{-Qmq z3TJ$Cj~Y_hVGBHK;ph{ifIpGoQ0f<|gE4`Th4NJ+K%3YXVK#tENO9+n(YB(gz- zo+elR>^B8OM|%(dTJ8pBpe^eLvhju^(0Knps&j*7P9Niy89#Oo7+x8zF3nikX+{yC z<6HrX1OzD2l^h}DkYIt8YZ|)`cPk26K7PYM_n$AZQND+KUx@~7_!UkQ6tcVw#gUy) zzEW)i$Gli2QT%?@4#_?D;~ZQe&EKzTCtkRKN|U{vBY6D7YzE!n;sx5dA40yG&hE!S zxk74sKn=vtxC0nrSJSow>h9XE_Ny5IF3DmLv-2Z|Qfn{u{2H5E+bQGgVvWQIe;~#Ds z;l@>xI3p~sqQu37#Z{0v%Z;N2M^!&4&SOWh$omq#^rNa9sH9pMmDDPulA2{yf~T~B zV6c)ZKS?F`{iMcMT;hmp@ovbsbm1p8F#agFLo&99l|N#H^*!Bj3|r}|Cei6*s=of# zB+5OeD&tK1haA1RRCM#>Dp?(55Wd%R%|p$%<62j(W2#tGS^iiddvy6M4O#g`Dc}*VXB&UQr&`|3a4;r zVHRyVr5a<;^6)8j1M+k{tsc^o^SLGAy@AyND+A5`Kw=`D7-(b4Ws&F~>x-ttzp8Tp z0D=iemSe!*9On3f{gKl$Z z`tK@VFI<$@@0?nzYwPLapXhh%srq?Uqvd)QFmNLalxy81y6-);JM;X@Uw+oHJB~KF zX*o!P4nZm(ce?kynvK$boL5~dyVTW%7O2+~?9mQL zlJt+p)7lHF2LJ9vUj99MK{evvq`#c_uI}&Pzf>z!H{&l=y_$I{wo)q`aX5Te_d4d>j)j4F@XS*VCbQUkt6I&mpl)Hwap`dlzquT z>UQ_{Dff5&B~`0m_QVjuvY8jVLPgE4hkpmcVwfk#!(tlP4eSeUOr&pQu^30O7<*WZ zoiF=nXl;mu7{k{~Sfq$?9GE@#O<#xy~z_wu9Du!WR$NBGrd!kuaQ5% zK~{zQj}>$*O5-_HQOqoF*V>gpM^&Zi_bMbI{DD*wLROMW2oRP4AwtBQPV$0?0;W+m z8;NW!OAu)o5C}^Jqy-TfY=NJ>1B1;LKu6>Sj2dunnI3HIJ{$%Wm+rv`$N=pMWWN7a z-O8&9oMz6MI_InVzW=W8-v9saz3;txr6L{EX7eiQZnuhCmGV&=nkz4!jlt_(8hEWQ z_#}pk68)=Kwd~xm9H#)K!?M%v?S{d`>|QA+)zLaBAs#n47)wbB&xuW0d*pmQ;ibl~ zEK0SW<1?`|2*3I797pL`8r~B}z45H={5b0C`uC^#r8tUD_T__Xkv!3>@pp zPpQcwJ%Q4a&xy2RT2_=*Jad0ms};L4p~^kYhLt=lf$&S>&Ad2)_Lo(!le0*(>Ld(Y z0zaXo+18~X>7l13ZKhSV-jNpe@u6X@QKAbxza80;)rxH4f<#ognIB4|#cel>^2*ar zFdyqhf9i%r%J#>|a|MX0_r=&*Nf@HUO_C`^IWc+vEtJWeb_|czFG;4%q;0{GSRgbu z;ssdS?4!x(M%T5?_RlFa1dG%a(%MG5ERANEUVXkNHagD1IxE#$?X5FG(lsp7H0ykj zbeS-#uXSdVvxK@0A}z2^1WD0g{QSe;0I`emj1#s2?FmU9bEij+A4iGKwZ zoXTF2P6teL6Bl@>3xe?;8ewj-Z4YgajI2=&xxiy{sK3|Of~G=Z0tGicYU*hwTQ5Cl zr8H}3)@`Tsm+6%O@cC%#R)sci((R{g)=!=cPa?FbPW3_KI=i|HO>(7PQ{&jw3o>o4 z@+INS?ld|zw3{3w!t1-!FCw@2Q=jfm+r%0xbLkhj2w$5^SqT0smnIi#BRM6;5-_N9 z%5*ZU6+RCls*CacM0IeMwZSK~7xkd2X2x=f^*e=|xry*zbldV^X5LMQIL*z?$(X4g7nz=xWojdbM%f4Nry|pPD~rsyZHLh2wo~4uOz$oHk;6>=PR8)0 zH>;?blL&UEzMN`$s@W`>p#4NsK5ui;ttB_{=N?>#uNl%G|$|VXc_rok>psZ@zxRxd`Q7CRTSB|1Nt|QC&e@0OUSMBm$?H;0V*Q?9zq;gtd;(*sZg4)+`kFoI8&++)N zl!sEEA4?W8|79#z*K4`gI7;Th6DSJJ!|^g-@}3c{5>HF4JCP@zuaBc7WNbHHozjHy zlpo$?V2SG}IgxTu)OTU2=ebv-a zzC(XU@yKa3MV6}d)2KwPSzXgH+QmVh7_ADlE8yQE0y5n*j#T!%$7#Ch-MK}Yfgfaw zW~zTUGA++cbyvu$QE_2GarK5jvQ|Zg2Srwy{>T$5vQ==T%O81FMaHYh-l)?9Z=4zqm0 zY&`u^&6#s3MTZH&X>mhIB^f%0(%Pt~icH+MRkF%CG!_j!J%_HuKD!&u$_lT@jDTsH zxyCB~^a(0WIVIu>-%|qcM0i=WwL!E3I&;@tdMxg5+k>-xwVi9{l9f`wBRJp3rZZnL zKR6FAXe}?CM>*;1c1l`Y+nj}#VdN|D3_2dA+O6uT=Hv6I$aQruyXI5p^ndIPq?JE- zLE3O<+JW9`G=iui)dovNm+PVi!0iM8K$eX>=45% ztW(GMg+-L=05Nfmt` z{ptZ1G@+`h-k@r`{}QTm+u6UP`=V{$MjgXrW3t>v3&Swt5w<~?Y5(cpDA5&VWxI_C z@PT~s1#G^b=B|IB1+6YX>W1`sHXr;0jgBo%avNj8mxde02!y4avWuSKb-SpfZ4$Wt zm^erVc>61qlUbPRHXa6>2t)zh<9+;j9A^mUhF2&xtiF@``B=RDMlz>x#cr(V+w$t& zRG84Mv)j2jw?`NaNKxs4w8I1Fk2E5ayY8hz*V#CpyqCI`{n*xR+zavhKpZfA>aRUT zp2r@29LG1%G4~_99EMsQ{7MM_9^9ki`Ln%PUiRVieUuSf-pj_;J^WQmz1PICf!(4q9um0f{)kG z;6OR|qAQD3IqCbUe?UAdAU<%MQuB1J-)phI6+eLEX&FPuf2-s9_5HNYe)IsQXLF}L z>mVlIsD3?tO8f}l^Ae`AEW7e0=yt>J)}O8 zwtzbwq9@He?Y)PfZvFnLO8ZrOEwYNLHTpl}IN~sMNSJqr+lW zYJOC6?(sSm1dF>kWAs5lbDI?U zk>gYx5dVKDbSfvjNmJm;7r#jpdE=WHO7->mo79WDyoIlsZ$W0s*VAv&z5KPvaFi7F zE1ceF0bhI@dQ$#29@4q~Hm<+VlrMF(F+lgfO*!5x-F!LZTou=cj zAzn;T^K1;PjDqI5;NoSRe6WM}KzvLSzsnGT%n~{SmN0UABEY)@XTSr4{`CCmJ8)Y& zx!t=o(5rLzf;NfXX`UCt$As|m5bgqR<;Z^nO5-f=GPt-pU48>NPA4uPh(iJ0B>`W2 zmkPXB6WqoW(1k!Ya1pa$xkLjpnK`+~!4KfLZ3s_s@U1v@<`*urmo86uM>w{CAQ$77 zeWp zGxLT(g+?Kw2t~mN4b6)~_yo=Q#@AFFE|YQ#E^WY?rfv#PYoH$Yotfe`I*B;Zt$OYo z93xYJe;vZV^m7F2BWV`^E%=KD8i?gV*KgFipaOyG%v9d@4c(KFR^c{^kw}I{d*&$| zah?XoeGbPx4B`Y7B%}XBqCNIJwvd_sY%V>-hcD1G@U5j69iB>iIc3qQ{K7>VXL`8u zTk6Jn-{K}!jXmjGx?*}6$}tkv6+y+NS2T|Wm$7hinUtMerZLUqkzU49^K`5?L^(7s z1Q#WCa;#Up0YNDe$l^vPcnbxJRcQWVNCSnpbHrZ;cUB-gCnWw32mb=`X-5C13Pd2T zTUR&<4a#)zDd5f?5pGF5Z@Nr9z3;^ORxh&9ll83TW(aqM@URfxB7}#B@Q4r|>Em%m zDa`(1R4g;UoJT2-z5@OJcqTu2h4zluYhPJ{wE>*GFocVd>iBUumW8F0qt}ACIG^sk z`YP7%rS>1M(()FrAKUVSP5(d_5pRk zd%%al=fHX3JK$a*Y(Dk{KpKz>6a)7I6M-2(C9o8D23QYl2Mz#7fp>sYz}flkPR2zX z`~*Z*qA;K{&>JWQ1_8r?U-5U>X`h#8yNz8yE$~O+G|&KC2V&+RJJ1y<1_lEofoVV$ z@UOsD;6>oCK$|B}6;K2W0)_$Qz;s|4@H?Oy*bf{7-hTpZ{R#({0oPpYMu1%4PM{2U z7?=dijr6KHk%%ifR z*Rm6Sndbiy!aoV&vdEG$boy6AcwGp8%?0aF8Tdep==?mLuLRa4ZclS7go}Gn@f;T( z{j%AO-wBW2bwGNEKvHW?0n+jvLfc&u0G%x>3Jt diff --git a/common/legacy_room_contracts.toml b/common/legacy_room_contracts.toml index 05c7168a0..7b393be8d 100644 --- a/common/legacy_room_contracts.toml +++ b/common/legacy_room_contracts.toml @@ -217,3 +217,9 @@ version = "V30" description = "Before the global direct-message retention cap (freenet/river#519): last generation whose DirectMessagesV1 had no whole-set bound, so every DM participant was pinned as a room member forever" date = "2026-07-27" code_hash = "f8cca7600a63dac16de1974e08211e3eb6e530713a8cfe78caed3a66372a3e50" + +[[entry]] +version = "V31" +description = "Before the member_info summary digest (freenet/river#571): last generation whose MemberInfoV1::Summary carried a raw ed25519 Signature per member and broke equal-version ties on raw signature bytes" +date = "2026-07-30" +code_hash = "dd63bcc974a6e4ab9aed2fa05e8a1085713ff69d0a160f4a487551c51c1a9d0f" diff --git a/common/src/migration.rs b/common/src/migration.rs index fae75924d..bcf9c555e 100644 --- a/common/src/migration.rs +++ b/common/src/migration.rs @@ -106,10 +106,11 @@ mod tests { for hash in LEGACY_ROOM_CONTRACT_CODE_HASHES { hasher.update(hash); } - // V30 registers the pre-global-DM-cap generation (freenet/river#519, - // the whole-set bound on `direct_messages`), which re-keys the contract. - assert_eq!(LEGACY_ROOM_CONTRACT_CODE_HASHES.len(), 30); - assert_eq!(&hasher.finalize().to_hex()[..16], "fc9e2622d9fa7d6f"); + // V31 registers the pre-summary-digest generation (freenet/river#571, + // `MemberInfoV1::Summary` carrying a raw `Signature` per member), which + // re-keys the contract. + assert_eq!(LEGACY_ROOM_CONTRACT_CODE_HASHES.len(), 31); + assert_eq!(&hasher.finalize().to_hex()[..16], "b5f02d45b6370b4d"); } #[test] diff --git a/legacy_delegates.toml b/legacy_delegates.toml index 86a1a0a3d..ec9412fad 100644 --- a/legacy_delegates.toml +++ b/legacy_delegates.toml @@ -216,3 +216,10 @@ description = "Before the global direct-message retention cap (freenet/river#519 date = "2026-07-27" delegate_key = "d46b5363858c82ed91f0709d179c620c74c1ab84483b114181594c08a3d4b915" code_hash = "2f8c5f1d5c517e57208538fb2a7ec819e882eafa29bc43047eb6c025b37eba8e" + +[[entry]] +version = "V30" +description = "Before the member_info summary digest (freenet/river#571): last chat-delegate generation built against river-core 0.1.18 and the raw-signature member_info summary" +date = "2026-07-30" +delegate_key = "c3624f29fdfdb1ca3473a3d4b11c83b635cb98bf6d89e1b5114c003e1d1c485a" +code_hash = "6f65e45cd8b903374b4ac7c9c916e4fe9f9403660e7391c9192ea8378933a1b4" diff --git a/ui/public/contracts/chat_delegate.wasm b/ui/public/contracts/chat_delegate.wasm index ab74b909c955c275034cbb13699a8fb6c1390ae8..f1d5f2749d7bf6d5ac75db1c3cc582d4a72853d5 100755 GIT binary patch delta 24460 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 Y-g@ZZK3J~T;x)VApB5iyIJW2i0Za+UWdHyG delta 24868 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 z zqtuJl7^O^Y#UF0fP#n}BYAcZxJc5wj$GS=hyJHL)A6o|jGJ_OvXcVXnhG7O2a3WB_ z>8t8kPjM39ab3(`F-R#5MFSNbew$TUK`y}OAZ0Xp0K*MRA8@FrxI%_O3B>cOVhyoA z*P(txr6~+)q^t$sMv4I<8!Bs6$HvMds@k?tmJ`*ktuju)!CU!NebZS~X zojsKypzotJfskHknq&GXAMo2;L;EV_3q`_C+~1Ru2d|rz{KXgiOpV!>5aCr7!LGSO5sN> zGI}fJRj&}mL2&uXs$YUMal}^$_~+B~-)5`*1}dx3Z4Xe^x@EC+8pK|nanUll4AqCt z0snz0x_p0Z$i4%WeeidGWvVI+Rwl8x)53;ew~m37A<9#-L)|b`i6$^_q|yb7jZiwl z_Yukh7(GIn$7sdj(Qq_wq}7G7!!fm9r~>MPkxCDuvM&zf<-9S9JCHF-b1;lmx{>*? zX|z&}EP;EYl@joY(OZl``W#p~R!Q_sVl^*;{-G}Ey znsu;!f|BmMibIVrM0v~D!mHJ&pOrEKUhYhqs2B>G+8+~%FU3OyJ%BJtnQAH|VH4xz zUcVY*CMg~z;yEWI)+KnU(*~1>K8n%o@uQzpX^{RDyqctVVGnhhta!nQ$%+HqoTRuw z#mU&!GACj5m&uAFG-c6mla&GRal`wb~rqqNXVM>^q5UxBX zP%Toa1D_-CXGR19F)~s~B#Two=}I{PKLTl(g^u*tETt5*iBb%t7c7WUd?0F;(ie6j z0p>?x($iUrLH#pI=}!rMDsQgxoRCLq!}*Fmr8}cy!-P^WHd=|r&#mBEpb@l=QS7kq zbcs>?F&V-i;mc{uVw95FOypz?8tP7X8>4g~2NRnwRCG!tcbuys?F%VkY!I(Na7Wo* zjaaT!C&*{t3S}xUsv1@**YjK1s+CtM=`8ENEpUpfpVufld$ml8az<2Bb}Ic8Rot!| z5Y#tEmFa@&y3*1eTss;$|*PSMbkPU6^jy za5V&u))leMsIIpOvazuNL%7ZtQp0o-=t6aFw!Ss=XrMXhWk%{eq;W`Z0(VF1%0atO zosaD?j5p2B_byCV5XO$u6_i|R>TO!WtI@hs+DuC|w~b12eVJ*qolGD+Ck9=nC4_ zs;#$aVG>sXZjR8o+s;LjMFXs)4!(ry3ep?3HI50aCZ+0F*JMP5P7lXN>GaY#q&HXR zkI{L^1@y?bS8=^fAAAPlck=Dj{XgqEill<-G+8%AfLal{TJTqxu7*~V4G}v0xIwtC z2-KRU)lLU@!*yk0ZkVnb3<=j&2dqqekf-UY0!-5lXKkW`QPZ#~P=T5ZVrSSIj%AOB z>HI;7KvqGKIwzc}>ty&dLRSpZBQUdTr0!?wryqt7=?^hubY<23k-BB*B4_CIKAllj z^M3>bUGT3f{yE^Eh=1K+{ybd(WG>R#s%bNH2WVj=YDp})7yfk|HDaI|6Qw)0=l=n` Cs=!$Q diff --git a/ui/public/contracts/room_contract.wasm b/ui/public/contracts/room_contract.wasm index ecee7e8f730a6070392868d5e861654330537740..d1f0f5e3a2c2c354d359d94301f46a8a49991b4d 100755 GIT binary patch delta 125039 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�@Wc`DM`(jZAu3q*|YQQBqAH^v)~dY?a&q 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 delta 124614 zcmb?^2Vhji^Z)I>cXvrHg2(X&0UM3U~|M6W*<&hkZIXpfJNmi=~73GHs-|$tYAOY1c^XA3;{Z0Pzzj)wJ zK!Cr$)ru7TkAjB}aBFRq*b*X%`Qg8Kdj1QtF;*XE<} zVD8`w{yTU`9ta*tCR3=%%M>O*Lmi3|>~M$%Si^k)!5X1NM4%-8*n(_Ut1T4G^|FNq zh1o*&7_RijAkg#tPBZ0ijU2zc!500d|B9}n3M=b!KbK+|KhJ= zjjHM;3g&iz1P!oOt6(zzSWSw}VX_G_0MN@zbf+j}))twI6^K%htRT(gh>ZjHqN25P z=1>-;{b6nv9*tfAMJA?%SQT5eH5!PmNQl-tSYo)YXNXUVXP&SF_ucEQ| zCSJU(pdWNF2832H(kCif0Zo#8FXrVVWCDK~SdCPH3LjQ2${KDKfEBH_HA>4?L!+$z ziVjyi1W@@QS!y*!M{859@kJHY_>=bwzN56rkPk)CE?5isMwkkjBCHXnqCleAyyEN$ zN;b$~ODH+pjCW8Sh)o{)0RB>X9d9n|8=AqQLDSzm6Td4d^qd zf?R;d=1?95xqjE*LsQjdyRn95r zl}pMsL`oC#$0@qb*+*m}l8zeri1)Jlb)_`-b-|?>~I* z`)FQM?H}3FY!hvxZR2etZ4+!`ZKG`CY-4QMwnMh{{_Fgw+EPBY&GmZdb1v|)&l8{D zeSY&f9X!gR*?#q!ZJT5J!nVk^&bHpR%(mP%*EY}gwasn&+_u1$ZkumgZChhoY+GX6 zWZP_8X)7j?!*_-gQ#;Ag=dIDU3)b$k@^F!(`ms^hl9?fA^G$g#w+(y`8w z;mCBXa4dIxTZM`)Tg@Bq80 zwfMNH7F*yXTd6%Mus`6;$kbF*fX!)gGAFkm)lLQ#_xWTh(wrvy=&4#%fudTuV7Dyn z*5*6n*col7<7>7ub9hJ<=Eyjbm1?r5Pe*x^&6TCUX{94#wHu*P+) zm;SYAGi^vzEv9Mn3YU)qeh|Rod14IrW3Io&Qec{1(B+lvWUlR|WcwuTS!mPD&_ZJw zBMEB83xZ-Zwe`1m*TNE2l?{`T0Ga#69Tg{0K;Gr5)= z&Pp}8Dm%F=KG`)xzML1I_NAI%`L-aSTY0j7JW3+7&)4v@{cNSx;moPs{;(EXsFg`^ zYLhE_Ytt%J=7)D^2P$;rM|Wsa7UE24c>u^K-uk~>;2?GP9Pv?4@bDCW1lw|wG zH2wQ_e7|d?AHw&ajP%p^o~pOdwVNl~M;PBT@I6f{TeSh3qP<@=j!ns&TQ!!o{9}>; z$6cpQQch9%o{@4zrU=k?WeQ~eo)T?G*?TfaAbMbwoyNIDMv@$OZ zVmGygFLksYmYt<)(e-LMplG-&RRu`b}ixYiH`#geXwUqAWt| z)S$T5v7U`R(R$X~X+4>p1re}GD1Nz6?i)}}=up0>|2F$Wvo)v+$?-s`;Pcohbj7S? zH44_&G-$v^Y7ZN<=9hM8EgLpNjr4}&*gdUyqniA#NP0EZKgOI=5mW+MyOpF*Jv^EH1|L!dF@_ zmZAOj>Q45#wy{+ryR6-46_1RN)@?<8-!@gmW65h98C$Ns{rX4z(0=Xq>y--c-VX-G zSSu@&%R>W9E}!f)A|6HrvZZn&oskEQTDttNy#OP&Qvk#$`{SPsSk&<36 z8LHN0Dy|$7&?+k;5pTQqYlq%giODAAO&3&M_L~jasZ5^^RT;Ej-Hxf4Gj?=L^SeG; zhmu+@**;Zk)oE_tDYI!)l0~qv)cvh!fhhQPkXapEkA$JGwD*=j!xF*_XyIy>DN}<{7#)5nMA3~ zdfj~(gf6pXkERUDCo?@6Pbi+2Jzmnv_1X&|$$Z+&p9#tE@6(Lk*WTPui zfoBB)j|aloJH2DgyCF;<4;viCybX)6YIu3mE1osRKlw*%{)=vw1)UJH0$<-bka)sHfKf+4`b|W#v%*ZPc##&DlJss(3XWnLKLD+bEVvGws;aa;)MGNMX{;0lS%AGJww6l-|hHOR>7}0Eej21sWPB5a`_&Q+3l<~PgXO`3hv}4EQay)(X=Yb zJXD)LC0UC<5=kpvW;;7ZTU_SB9;HrqEaoqBUT)MeNAjQ2Xi6<}6nRf%zS^p6i}v>3 zV1-xW+9K^*-qD{lqe|v?QztSuU+Xx1q4h?#82tg-tr^v|dQ_D^&el??F*~a5qh#xp zts>J`W)7LrkIm7p&e+LrX&EzLwJwx-K_bsrs*Nl$+1ej!EkEmOb<0dYnJMQUPo^@f zt984~v?J4@jht11J=E6C>dKF7)e6sUjF;ruUHOk&wL|iy;GC}3+j)R_i$UuFb^w`A zWM;6$BoiK8qh~(QD$HvI&GON_=KMys_QSlc-j5|498fR~(mTTx zS(^R{T3coQEeJ&X=PkH+QHA;2wICRcvVn243FDewZnKk*_v5&VE_Yr zDt+-fyQR-WeRliMJ2zMxfN?Hr$S-GW$&1$WX_M(fE9TO=Exsg-fyPVTh7GB$UOFDd zM$8G)nt$ob4r*_F*&o0TeEAxit`%Lj76hMK);~uT9>{FH+`_ysOTxYFH?^)S2BY|? z6^8|ul`9iGB-~p0K3}~}OI}slY82Mko`Pf_YF4!^t5&deG@>=DqwUVP3RP$3)(nN z6rHoNkw9~0V`D*9#ZA$m{IyMq08A}EU=D5WCSUd=t*&7%t{vI*E*kLi=2t|$xtqI* zdX_ESM7=&+H19o*3TfVPbxMxa~l=zy(z={_Xe5sY#Unb_Nq|>6)>8s}CULPUo#uzkFU^Cd9 z)Au)IziRB$2<^fC0BEU_CCw3((a;>ERXR`uIRg)DvfYxfya4+$1u|9;9nb&Rrgb>D zj#68*m*`B2T1-nlRGEDvMDZo<(V;7X^u`@nc;?f?F%0q_{r$)Y1593$q%&auMJxMr zGW55g;_IIa1^^opka zcC;d!L z39GAZK2{9=`A^3xLfIBPUWZN6Ivy_y`*Y0k zNG(zn*<)fHzxlB?{MOGxId;39#QCZ1+LF74y?^iwVXgnYNbTC) zmh7=srP+ZuRmTYnqP zLVq^~juW1-@fCXfv7GyOI@jK~6-^8Fur_@94%%{qmC)FIr*)2WZ|xL#lf9x%ynk8H zH{d~g;e8!=I0=Kj!=qRjvuTg6;d}4Lt07QPPlkF=m({HH)0v+?smiIuB#d9RZAJBmoY6v9`F+1pM zANHZqjnv1+E?HOX6yj~B{gLbyf_c!!x<;l1(EQ3QjH3Kl6P~@3di${weE&}R%#V#T z>bu|YXLCJsL4v!eo%t{}kIDwJR6N!M%0{fXt=6VR1(?6jI31Dw_9VJ}M{PnrL98nq z=k6N>fNZTBVpsxCDURe^%(}UchOpL*Wm1VSHpAN>%E`3sak2c-PGK+CvyRy%i1!E6 zo%CinTf@@H9>F@YW$u0vu#I3|)9y&N%$8Hz6{cm4i^4o%yC}&KbH_aD9L_?hA7kG9 z+DtDbnY#o3uQJb$|mz zzOn4Mk6gMElf-U1+{qF&J&p;3Uo2O=MBU=pRCbph#j%<>=5}B#t3|_$u&F+BaZ8_G zL`^DP6jk+glxFO6N-xTK@zhb|UyQX9jzY_Z5%gg(HlL3eMbYsPDR>MbO%O|4;vrjU zlvtb@YbSMSLvgm)SU7o!7A3HrkhTIPSbw(AJ*ot&%0vsclw{WhwJS=oEATelRGI}d z@6*OuS>RqFhyi+9>9Vb`yY?yDbD28=8=E9_yI;4U0da*zU zZw&1Cq7p_N+?8E;g11*tG134E7doEXUEEUxOFFtCP1P#1PV8fvRhczmlj%xjRtg3t z`QBu&QJ*U8F8ZD9^_j!{UR8#rkA<|M8k>ajFINW(C-0;(Ni39nYOv}UxAki<=oGqN zgAqzhuF0MP;-p$^Las6Gj;)PRA~2xh<>^hh#XqmXH#d#y-%}^63$STN(Jr7paJwwy)K!G^4&C}C*?OfxCD5qrn_xf~oevNd9j+|e(y z23)|@y~rnUgYVnHy4z z7Hmo`u*`n|cGQqH0~lm62~gNwH-JSkw%!e!4(2-uThoTU#@HJ1=^uf*Vc^R7Cg~fQ(B|0Lz3;RTXZuu7bPE;<^mAx+rP4CK9K8Mg+pqz#W zV{S1lgHNSpK<{*8`;k=f9o8)TGhva&aABV*t_oPav>Vm}mFdnZE@N^laBUc^8*Zx zZ{(;nqZe|v_GY6nnFk&%MT7dVT6tRkO&^FqW{cW=*)}$Ylz!|3_7SD@V?)En>srZT ztepiKPcJ(E9ShewUiGH({h4s1bGsWdo^F zDr@7NC5xC*1ZnsAj$Jfq1Umzu?mlU(8nYVt1PQ8VlP2sEmh3{YXCvA7+K}BXwS#|{ ztyd%zi?A`GsQYLZ%Wv+Yk4M8&nzxtv`cIX1OS-SwoWefDenLh^YBq+A5uG8G@h@XA zqSnmZ9w3Cd(m#5^EK;?vS7=wl{KeD~9jg-%{TT_&-~{K+o5 zH;KiPt9_&U>1^9gbxILiIX zJm^-@$bsps3gfG!esSVMkm z8*Q#>Zcbk;V4oF`+Y@55LoA!h4GLzl6b!c4sYN-lF08NBd2B zr2!^*`!d!CMN^isMwnCgEMqQxj5k4I+vSjkx$ce2**?j*@hjOojJfIVDmD%F=(r3B z$2nS_!IneszrLEKpz6uh>`j*LuDk}lgw%7SzilhA>dfDmmHnBnWBe&50Ke)d(;bbt| zLM@Ln2Ys_0a*>lm?RH=i$&y*xCqD!_1RUvin_SqYksHe2AE$n9Hj{lyKI_;DzIg;q z>20n}EjF_6O_!CBdOm2b3A2jVns!xvj&*o%xT=4n^`zdPoowC&Cy2d zLTUU!b0Ku&q0KC&{&ERehH)tN74ikE*aFK+`65=Wi!1SUOt1QR$>dcsS#Tk5i>qv5 zg@ZF>mS6^|ua+;~?D=f(U zY9yT=Y;GF%{Pi4dB)Q%*hhWA_-O4&+QTXCkR@9bf(S{PYvEuyvZZ}q=+HFqr%_W5f@G-nTc!&p#=qo}=@ zlwhaV-OJk3>b>k2k9Kxvek;`f917jfJ{85!&xH4wy&qb70yR5;fjym;A7Ec$m^YlP z7NidkiX`{xgBa_%jsR6X%-$1<`Y?Me(5(87m4gz-*biZ<(D=c8MjAc+jwSHhyWI)j zv%cK={c)lFRqA|D38KuSEE*&8=ux)mUpb$BjP+vEsPu7+m1)%LICEKz4xqKi;om=! z7+NuRo0BY(<;OGO2UY}b!RjB_nljJt;m@Qb<*eAbYQSz4i*~c<(^ISk5MDaPn&u#^ ze45=5tUUCPhq!B;VGS5tO{31jYMxD@=h$#Ik*1x4Qc0&D&p~rOCGYc?wIDobkr4G^e>#n=di-Pnuo*5eC+5Ik!0| z;3w8cI6x^s!A06c`+kD{o=g>fW`}_fZcPL^uV9KqiPl$GM`7}PeFZkgGIyV=tP~UP zbFP7H%iQa)F;#*3-FyQ)y`1fa6Im@kV)wXPB6x5mO}NcQqh#P6))(S3;*MM^sdN{{ z{0JI#mwhEfqWZ6_eXhW`=lzP7!|ZeY#?JEd8z}mBR)Kc;@^f%B%Km}xr~LRsHkOY0 z^SbN_MF#L;>|2@Eu&L}@ZLJnn+V^zOmlvn2gIR(FYe&WTa+)%h1yi#ya|JEq zuobW@hz5e)`A%^JX|P}mxFluPH_-17<>ht);i8{i=#yp#cfk^v=^Qb z_-JqO4mX4ih=x44ghzs}Hm7wlyuN5(o+Ji`_!NJgz9N>wT+a_tIj)rCXft*r=(oWv zmaYzgJ!YX|XIX5)wb)>L%&oS=p`^4 z8;FRa;>tP}?I)fYXqw1E6D?xXLr+4Mpb@p#j7DvNB5%Q5Sio7F3s_>F_NxrT(B!mM z<|-bRZdl6zoPtIK14ac;a#g7pqY4Vdj-0ov%3~jsSeO%ax(o6v@vag0%GeBWo2JTRYFlJV=oN~sL-WiWsYi>=I8>_fQqzV621=P9-GbX8A-e? zbN^P64`tNiCD72WBA*3&Bl|TTN`94iN%yPO`OA#@Rt8m@bgBkd;f-i%Gag2T>fxl$ zk-c=`W$vK#SGbMlwLr4pL32TtFZH0gk$#6#wR{N!eMW9FdJSH8peaFxK? z+B1_Us`s84Gxnv^K{p6DHg^%jYX5`g*XP9yK+)v)GLNUi^`XZ8FVOS`Mbr5PJeS7d z-ZZzQmyqbyb95)xC zzRkEF9cad3iZsW^wPrk+Y)yGt8vhD18a0JpL`5voz$&c5M$yeCu!5wR)rM@k35KQOPtAD8-rt>8Il-WN=SOCXS zK(6!J063&{3?%eXT8RQ82@n` zMORhpQ{?M>k-7q!kmgsx&Z625Ht+Y8U0*3g-mmc@Feb~q#;4Fvt$CzKFIV`8)ARvTW7YPI1Z!VqrFqxsL{sBm3NZF0Ba6{u)y z^qii-HX@dUzs*;33ha#jaJ1*;uu9jkJ)bDTuNt-I70LDn-|c6Yt#mOLx35j3!yQq~ zh|oKJvnajaflo8u#Xf9N>ii~uhx`g-4ei34Kqiasq`jSZAX#jzw5M#%PW)p!)rrSj zm&-VdXXMkF7sujWpP$T8;KV0CnPcg_&afl*Q~O8eGW1(#zQ&p^V}~cv$}YSmzki6> zTRgmqCt%~YoOsd<-6CSnyf??vq+MO#yCf%Sug)DDV)vl1@BX99_6w{5@ zfb-U|8!rUr4DZGxv92_;8-JVaq-WiDLTIQ7Mg;;z;JXR~&SZZkJVqN$=*l~x;`Oe) zNa2lQazjvt6IKrnQaDxPLxoe3l}0V2EU&X)Xjzn{HK3k*o0o9U>dp~jd5xCz;P1JM zzrzPGib_Vj$ZSeV=4D}b4@kzzO8umTBCJ7}Q?u!-WbBoVrrXIpF<%}>UYVY}67stB z1pmLKc|G~tk#l9ZwIYm2`)Kh!8tWmhwRqb{QN4IFxIDfWAK>@3Q4VNewR`vGMS@O? zB)j|+;*KLdpOULLZxF1v-ieqJmulZ33_RN)%6J!Rp|uAqR$A8^ZrCI`)0@YzWz+k> zlbB6q`(Qkbrnmd>iaAv42I6d5+6U|(P4NSuvMhahV7>yPSw;I|&u}z#=*z3JgEXTr ze=~B0hunP4x-Oe#@5evksT!sC<30U6?FTZnE3E%>+oe$pWPr@U{UPL|X=(pFjMulZ z(98XKb)C#y#)~{b;X4Cl^JWd;O%c*?bpRN;+Mp0cfVlfW^vrCUH&Ax$;ek2uvA1q? zZ15o2d5s4F%>x=ch&S@flrUrwz&JCAN6|~~@>*22s-*#SX>56g(ibS}sdp1g0XB~M zFIEadaI>HB2IeC|Kq>ljr4Cy{WtYl~5uYnBLj*_c@G4#Hs9f?;Ff6bkZFbE#k%g{) zrYjmFZC&0p2mps@yLO+T=-En`yZjJ1*X#&&dY_BE7x(+T2Y<4MVutcj{Kg(yGL*-O z_X9)uriM560JzJZvqvcd`!FJJ9~SB1u8G22urKipUsqysoY)*U*$P1FTvvpaa0S|D zOs8R=@merIzxfQfSJ9QvAYZ%4HjDRRCu!&`{yO`C<`2VMb9)vX>P-|loF{nyFaeM- zVoy=xNDS|fiDvWC>S_h+%TtPAa!=PV;!abx#xKLXUo@51jyx+yvhIWXO8-4E2JTmJ zrHcLB^l7{@b?m1`nZ3{;iJ}Nqp2qtk%w^t}${R3O(*xCDEVnD6RAxGaVmVcu$zP|9 z)A<(cunZ%<4A!`7g(7ypI|iv`QE^I;nvBQeAT<&$bihib7F=l58jMCRpUIDef)6IU zCwl$iM}jpj##6|3%^bw-6R68@{tml9f$3O~IzJp^g65d_}kU!^wJiRCv-)LXhv!`xD{GPNkwB^C{SWKQu%sZ2R7rei4XE z1E*kV>Q}u%-%b(U+dX>lDeRcvAQ`1-sK$NhL>iA)PndM+NbvSB`U$``eKr;t3?aKQmPeCsigFmcVduy3P1rM^`w?{3 zMB4rlChYI#iJ{>Jr_BuWOXz&8jhv*;^LY>R4>>(1_p39&n2&i~ej$x+*R?nxV>LhF zpFv_yd;;I&QqBk}M#Cp@ALTs9df95PP&zl8$9VrCV1c`dbZ8_Ob)9qI6F#Lnb0C2a z=*v0045COqgRmGCn#)U&|2VWyQoW8cSMemBfrThAgI|Q)-^<{Q#D0G5)%5kxO_VK5isUSi;-zk4DnrQ9P2KE`cR}Z4rd(yho_0*hpTKeMgHI zLX-f?pT=XTfUoOEO4az&NPt^T-lG5xoPB>3z>SdLnh^gS=J(ijUw%*b9j?53=%MtnhfJL!vCT< zokDNM+s}!XH*ud{&0T7W=fu(^feY3Y3=5ZWuFtNgF`4Fxp3&2wrBTi}xo4D9WSS?U zOD~5Zk8;K#Poo?Hc#visdn#!pT4dsgomrS&5HBo=5sP%9s3!n?67Bw)kAu=`>E>bO zZ)A(I0Y+J!@R_o{w~@w-`k%{Gn|%_wf|Uw%$jzUYx@Dw@O=lw5(I3# z#+KMvF)m%}gnQ!hHC7{v>6LQ2jWWLBMaq9Ho2_{8Nw|}r%QVk<4TEVlHgbD|k&-T- ze6@`b0uRe2L`{}cjWlkw$`c|miTZ^owf@;)+VsyIK=V#3mJ0tf|D6>*{Qqc=;F(8Y zJe;0N3%2lAz3zD!{d5bDeXhLaNTwjy&m(WkB+%fz^5(O`BX1*#jj$B<_M8!zL|Iw9 zp5d_e&e>p|n9Xegi-i92<#08zlj~YWi?aC?u}M2Q+0x$Uv0Qty;hZF$Z)K@Yi9Icm z{J3013#Wi>yimSn`z&D@!<56O$>AS)Spj8r3rl4xRFa2N!CsbdY*wG!22V>y|2fFM zofoD}Kka}1r|4vRRQLU-_*l(a%IQ$}w~EZa@Pckqe=;O$o|Jz)VlcfzRN zOc$>F5bl;-a!$&fd{8w zc4I|gPa2JDZ7FBa8$<_NTZ#yxz3KFBtQ-MMi8dBN^@LyGR)5gO;=|TpOP2TIYtm>~ zTT2}pwio(1b}y#K)l_va)c-2lxflBQ99`YZ>!5VWZ+R21slpW%V=DDqJ|_3ge;*%^ z`?e)YfrYvc?TNaG3G_z{x`E3@L~K6m^K#(hnu;UeHmB zJIn`)n5_|SSP+nX2-EQC!`$ZWiQcLr~#(fXx zT88_z^qwej`63>x;St`^+dz%ij3fM$+%ra0vMXytbB^+!c_O$1kMYlfb7H>qV6k{U zEIO3R9){(S^*!44aW+K3`#5jSvvyIZ<9xHez&eDMzh_Cbe=bGd!%;olA`ZbSmU2|; zBHlQscAIlB=07=e^pmY8*2Xp_kjlQ_5;u6-y<}+pt&eDKLsme6pcT{zr`{} zo73<|wo%4u9tul;_i0`MiBC@RUU(#*;r02EqqOD>Pq1Fr*LdhmVRNFd=vKJrhp=oq zi=xi*7=G_4y>ylru`ZEL(kImSEH7qVXS~cg%ZFP}$d?-weU2Bm?lxXpo`aRW8B0Zc zHpE<;e-b0?K9;~vAE&JI7$;bf=-l1npbzi!`r+5b$o6=DQnWC1;q1+#mKXRmW9VpD zY0p!&Ic%rZ-7V$fzc6%$XJ+~vSWD>OLmo$EdRR(5U-vBj&${Qt|3}^P<^ONBvrwp= zlGN!c?`|+KjwY)x*OEFQOiL=Dx|DnkUEyiQ`TH!t3OylJXuMFN*mn-6>(_XwfCW7o zgg7B6GpU!7Y*;ZZ)L&}UzQ0I~3f)u-ie~RGydxe7*ZFJEMQPXhh@>M2b+scp{0A{! zaGa%|`^< zhFe(RlBy;a3ZNw{XPiISc$Le0^lRKIUc1dt#P#6IVCVvZZn0>#?B>duhK+br@zu z({T(&i;*=+9?S9=SUM1S{?FzACm{1>$s7aIFeR7J+9!O3*HlCN+%=!_Zhy9cv;Nrx ztEL~U`=4yE)q9n2s>+m0arecsKhOSCFfRF#??~|+E_A`_P2x)8bNO~ra>(mXO}-{m z13l)~ajy71x3(uJT<-~w@is=r?t+cFv(Q*krWOBpDyK@5k5NC1QamcZ`Rg$?jnGp7 zZmB92qtc~~45vhzj-EoxJeI#Gl;A$7DnnT8zoTD5$rhzdl;`AGewewIyhJ=(lA0qs zhD4>yRN*5D#3Y%P-@4VMY^r3BhinhijJR{1X|<#ByK$bj<)b5kp5j6@?;H=3;D&`! zQ7edQEsp7YLnn(mQ$qRI6%-6P#0;YAvpR*eRqm#H4vf#vT) zu!V|nPWO5*Wx7|&jqEH~g!$b|&*A&LR7}|_%6Z1FPQ@IV=JDTjDi+GLAP*I?1#X$< zXQb(V@phSJPcag8zxaqugh)$avC7In$}~?;;NTfpayuVDoK{Dgaq)mr*T-o7lx>1+ z4>_XwzM}auY}AHt)U<$-7PVTI%IONDZoZDJ7-huX8wgBBAy0g~AyCqP+#tc_DkDK& zRz4I=lAIr{$A8S}Z{2^CBKiUl4SGDM(&f0W9rY*KHVSzTlN)0+$4SdKMm?vtjY6K7 ze7$d;+x&`Ao+G>Y3wh4x8j$|96!Sc8Cy->MaV*!va>=wCQq$+?f0_13rg;R+!^m;+ zAe2yXaKsz^jn?oSTh;r|%|n$e7W>__)YN}g*OTeTFr`!}&n83u_CAqH#v{fMI!WYY zsvWLWE5AZgEvk5qc#(WapCrtdN_ zbBmy+#AqvZE~tdNPZU(_49?Kz(eRj_6;jesG`+BLB-hQe-QW=(=Z;oHDL%PbFtvI&}?RTuj_!Ak&>D-0uV+(Xio}4ZHKPO0b{Y zB@vo8*^U)of84qjc1v`I4L81`!l+UBj%;VLeInJ4RU)t}kR7W;h8Q;`5Sb{z)pxxA8fm*yqT$4Prg_+Pxq7y{WqHuuiPiStOG9Jf1 ziWgD(B<~n4C=^uZ>^AG_W7*jIFg56&bia!~Vpe41T;_ zu8AXE#5&!h6~&Z~;79B)s!XMQMU_B09j}zbszE?;rJ-%MaNb=(PSt*mqQ8WHH>S7} z_?Oh6WSk4q_eQnvMFq2c2AwRfG{Nz}q6x}=yC&#znQRq64tA%<(6=A?lu}P2o)JOt z*ra#vP`&7zlFD5wQby@QhYERlQDO-tf|iz1ViD!jrvz4=ek`Lb16@-R5qcb2TB#tG z_)9A%X>uZ}94w3~lggmV%Oy}{mZ-7~TRbS;+0rSR`64zVwH%btbedmI3Bgf=b>);Y z^l1epLamT&Ye07*aN=NUS;);i$|#Gh0u=%5L0Kg>>@z_m! z!ao;ZEQ@2!u~S*45dV!)`X(%*M3z^4a9*frd8JzQ36ns+2>$SuBXhf{UX0n0Yiwq3 zH_3oiG*2Xo)2Bv?i$ycqS6*=y`d;Xz2$vkVC?aBDagUuTIW84{s9#m36!wwN*Te?$ zGU{JZDI9|GILxYZK-`(a?90I#>KEq|Of_pM{?-{nO6<5;pqjFcGOH-{sd`PNmo@!} zp1iWAQWhJ|667i!B>e?s#`8fY)=(zW*;-0f`o5Y{A1h)VYAZeSLtdjp&eS18CH;xm zwaun;M%?=%)VTZxF@Gk3oe{vQm@#o7 zxB&pGQq7l@XzYr2d>N;Nf2Tt)1Nas4Zmg7t=B?RSsh=0eJI<{h@C9?g;~T&~&84*p zt*oPXBj!TFzf%W;{SG-^f{*wsee#l04U2$#UQ#OKd_1eGG|hqEx~|fNZU4KLx5Hj+ z-+D^#d<-ZLKBP3wPh)Y)st@2hX-OlcFrqU=d#QN?r6Vn90@b;tf$}w`pTP~4>VUYW zA-dr@U2mwg&Y`1WBk(e_F*0`lJu$yNkC=OZC8o0;^=D5Pe8a7VMiiiZ_MhHA_q^-( zB7mWDJt+o+g@1ZqWV}<`=1NVrgT8A9!P!AmnkkXEqn8q!D`ECjD=y}B@<^AL9&tr& znt}a0s6cbYrHUz%&No+j(`#kD2GaX2lvdQPrP4oitkgzk*KYmhRsCsyMi*Nu6@Ax9 ziPM9AXy2LW~9E~xG{j^|wveX>|hd@(Y35ymdI}B{++9=JaPHQD1Opa(2Kb0Ti85-1DX^eQ6 ztk#%C4f0C8rbGoElW=uDV^`k(l-_(zsULVmCady{l-X%P^4iywx`89|^h!?YI4adv ziLs{{dAJ5a&+6C~HI5tbh2ZGPYuhSC=)11UFvN&7e_N@`F1e?4SDG_Kv0Uh(xbS$r zGlpk}ca*9DC!}3c(KT64F=@2u9gIWXMM=RXSXvjP4~`aytA$eyvkpgRkcw-E=~;VaEbP{?Zvf3j z+V=(q|IcK36F$(-)b&khjNd7;1JL|VZ+3u!d`i>ti27$NPw7SnWhy(XH~cK2;Z@mB z#5w`$Pt>uK;)WiQTzDY4fFA4kj#A|>d|295iSma98i%_elu*Y}*%xM~Rp?xyiP6zN z(ei#u(I9Xl)FY3wjk@bNsc6fhK>IPjE(EiLa^a z2o+bQfHH|iP6{~We6?fHL3`+Q36{gq<%bRDFMN$bVY?lc>C ze-_beKQEE=R0EWDq?%L?|aId)N!y908>sR zVIN5;M&|~@^6WEMd71jWr*xnt?qyug~&hK#;b}tj^$R635XiZDgW$!So%k()KE;1^WB|>DgzjF*5kom z74h&Mh9J=!)Nq*6pG~0+!;~)SDu$ma2t-6^3MLrDtup(k!V4CTg|DVjO2ao9PZ*bCY8Q(GdXjH)ac;sPE|{J?3EYz|mheRMY&HOC`tds;5sAXv zUHfTjO&~RiWe3dv)l6dU#9hON#)}mQa53agu}kdov&&zM5CtoVBY!SDzG|+<=GhpE zo~|^eQ%t>=8^+A0>S4^gl+xsNO9_blhu~$pvs8)Wo}lHoeo>9vY<-$^%yhV1F!@0RABW`xBA>zXx==>s-m#mJwH#OMhv_2(Tz&vqWTm zfylA^%zAu3AA;<0@Ee~TRf65q9xA2($}xe9x{vxV-7)CkpD{H3`mpjoe||f@e(`pc znVhH7Yn{l4MF^C8_emw`Z_v#CAJMefoDU6qshTknQ=O_I>49h35^=T>|Dm4A0&FN1T_k^EL7CJ*Anu-!^55 zlFP?DdMsh*i+9<{U3rB2IfK-VL0TsdC-b18rZZkl?A+iResCc-L=}VIy?Kt(?D=pL z=*7v;H#VCr$j2op&RmHLpz{lrF}du@D-m=4kG+$zK`D~Ac?RBaT7FUqaF^YPmCIbj z1_QHw{>zl`>92WP=0^XQ{F|;n`Qp6Wd_PauU!0l`1N7RozY;CA@~)*X*6aGoo+6of z;gVD~tJf;p^MNO9dvWsfb$!9}`OrwUyy${*_ixY~`_E|Hi23-F3^#SR-iJkqzjUpf zC%^g67<7I$UzD#QVxDv#Sqzuu`Dng>aWwgCm+7hb(3JI3Teyp)Da)UahPo;0KO08* zI%DhOyujU{o#K=bA+AvDCSK7U%NHdiv~f7keTEqRf< z!K`A>?{#Xp;a|o^=Wo4o4al!%zdefBS~^LDU$#+PHqVhS|i z2XEpc>qi+rG_$eAkNSApRp`*hAnt2{}3(;JLL@sbYuYv8L| ziB|zS?!uiq--!c;!QtuP-5YvVTLm@so{-mVmgJ6?)6v>L0|b=1I^5ZSnaEX_uvRgm zlX#2fe$ebv4AEJx-6?QWRr@M|TCBKY3yoph6k;TsZN^b<`*jiiYM&|>5T)Sg&A28V zT!B{l#4&0mCK!1!Ct3Q%xDQe!3;MwUuga_)Iuy>dEDax;s;*M}Dj`h@l&8A|puZD3 zZg|--DkV-};VIyhxW-1f%cv!!DA(QAJ#}&0jT}{fCrSo-aZiZo2t*FR<&-~Ifjf2d zH{5^nxa6Gbm0ks9&N9zlyFWdHI<;((Fr>`9}?+NpkhnimGwDuYRtWFbFDpB-W z0o9Jp^gN(}VaqDy40ov2a8mxZL#>S4q~+r){jpkqtPqbd$_P=tQw|Bm<%$0}EMNSE zy2N~8-<$vSfP9t86sMns!yRDkOrq>3`nzW*5_?>e^%SH0H2qCMonXKh7mVP;%Zb&) z%OXpJnV9Ss^cZRTSs9gtpF>s1H3ZQGlM~g(Xx`~WoYtLRSdH|-DgWdcNF;vECcO-f z!T(%XG^mT}XFWYO8w|cn=gX)wXmYGtn;oD-v1)O8B~~ruT=OY#VYe{LWOs|N(FhL1 zi?M3x+$YZIeBM!ZScqm~e=6s<;4QgNIXJxZO6tL^MM2~g0Ll_Xm)wD52^AWtc$ zwq)a^ZA_&BSxx}B~RRm<9R z!m+@O3q9hBp(oytP&=1AFVSO%Ozhe!IERP13Y#+a3o>1<{=>Qv8TN~0iBuc%+gGSX zq?*95T%lo+>NGxGVvM#J`~27fOfbG3IY%O-$NzU9*wSec$thD4Pp`FXTK_v?AOGnh?N0s1=rp=Z7uzTNo7xV`s$gu;+-eS zyWkK*^b4hxQp%X*2tgKpt-F4S0t41(v`MzEbH?SUestr?)F-65?;w&Xr z?jB-Qy=RP~udAbpA~*!5klc1N3)>2|SWnk|Q=e$FnkX3fw}aXV5iYb3~8{aa(n3wyjtwPiy|bYLD>w!8b(g<0iT=aQfl?^|39gF<3`9~HFtA-=L`?xC z>?_!)IRR3Ldc(~a9)3uZ5Nr|rP@HOG@zJO!t~O@koE;9MC);(AtAS=a>Ge=GEb@S8 zq5YxwjDQ3noG)6aCbWjp?80hen$ZPH?O9>f$2!W8bD?WkFFO1Tzfn`9j9SjJO9&Hw zy`-~Rm_8_@M$*Q@Y6(QvNe#8z7{aJEi5`Zk&V;K1nbTx{>_Ix2=OPs>w0*%9oag%x zH|I9SjZNFbAZ3&3W*GF{6@!M5aCIHRehiJ2<^;a0w9*L;dm#z}b%qK%Ay7ZaSU{nG z6X|KV8UO+Fk3g9Rv1$dJ?<*arhJ+lJR3L;8cB9=bZW{rovMBP5cdTL`IfkB}puR-qE2|B0lk2d`YAc)>J6supJ(2EKRtNE)#*n=ge~->p zQA7F9V`zC>UJToJ&Z_E{RH(P=@`@LN#t>>AR84JDOzh)lwj^u#q7VxL?yOTr+&LL8o}d_&RZGC*xws_{KvJ#poL% zZo$M`6AU>^Q$HrGYP`N7UK{(tsP+|u3pZr?%HiN8G6z9*HTHv`Nl=Qe!km5>fi3+^ z<#qhn!2MJzB1sK?4)qt&88Pyg!~|7PapGPnp#<$3m9D8Kye2GrsgcER<;iNsD~@sN zQ1Huac1?#G&l|$=mMuV=z$kNZ-bDKR!t9rxuK|LV)l>_n_)Get1EhMDRH&|TxKUJf z`nyixT2eneG2UbB(RxW|0Cb6DMR%0J7h@Dd8HpV}yBJQOA9+4bd)~Z;lIaHh(*&{N z$2qDS4X{s_ex)Z#7-2`Lxl66e z?@gt{L$Gi8JuPvmHB-Je!hr0C(PjJG0+qu*wB}4VO3xS;Cq&1Dksz$Z81BLyRYE!9 zw|!mtrcv=re|aZP%&RjvR6CyOxX1)7fbzgBA_`p*vuld5Q_wS&6(=4_WhG2nqtUQg zM9~^Z#G?Wp`0cxrc;JU_s)#ozp!=p?F&vytG$_H~5R;t{7V#g8KRSgN(E=rY5?2gv zZ!rnVp@`psG12}ys<+KYz(z!6uNWI$sG~-vpgMZyx?!nE!ZH}p+A86iARR0|MbIr8 z#_YFsfx)5-7nI||TpnW+a*DsWA{R7I6~`V>d$M>+Zd6vr$?sT7LH;Q59ZgK-Jjr!G zMGAtX9%w{+a)j8G%0<75Usb*%uttc3yv$V+KS`w%A+jWG_OnKUXpCOtSDAueLe`&X zK#X9tK;V_L=m+vJks<&Vf;2KEQTGIBx!8a_ zRI&di6QCLeTUfNsiNj(7qoD;PS2l`>l73P{*u))vDMH!AnDZ8y0mh&rIuW0u^-@^? z_5UO8J>aVjM?2G2o1WFvf?;WO)(7vH zLvPgAO5tS9xi6t2%&xC}318QVxAgMVw1E~Fni&d93bPNft%+$w^EZo-P;ee;&G9fB zECV#7f!4v_Wb_6sX_{*>X$|285l@90YHf35a2z%^ziDo!QcdQW-cTzNA-M;mSz{R= zZbP2c;Z#Gcs!0^sNUIIO{EbFhz2-|y{)ANQLSo>3Id%@5)fy3k0=J5L`?V~ClVne)+f7l9hX zH-Koo7(f%iEa>E%&(wi|V*K;)un@_Nn%zyTjIb9w7szbxWF#!4o{hBv_BgkP36(7B zQ$yW@I0;34#s?&+ig3f5s8IhVTFIec9Zb#!_$wSy++v_9Z2B-{>_^3(`aR*&ge4t3 z!^eeK=A6~wRo$XS1evU$HpQ@5v1~cqxwUX*vxHTH4}AcGnbIm)nZFtmEp2Rm_)(}` zQ>}I>kAF;&Y^V_PECeW%ViWUO2@6+cN=?o~w7V(9yTu5vp%ph+nNnbNE!qsq_)1z` zK(8aO({4s}W@y25r@0nuKYt2CjB_H3ab=KJ9F_#kV&^i(C1{*ZKGzD-uol`XoG2*O zQmbp#jPRcr0q1fvo9=QZH`mUoE8>%ePi%pP{90)rTNk#Tl=cA&54f=PiYYXD&Qv>3 zrun>~X^PU8=I1kVt4>7B@1(tngX;@BL5-hGYwW&ZG_*CO(tT~T>=A3YO^^)-3T6)A z!z6?i(V0w7+Gu&y6oukGg&>m6 z0aGW_0m#8Ux@<O_d()>;lRRnrYaE15m4if_4c7AW7hyh}vjRw)miZ*1Tj#*-&Ie02Z4>i|rx7Ye! zc8_yqYv8+yI&ZW^Quuq?=V9jg}o3yV9qh5WUNzHF;?QfDT>#TDAoUv1IJ`&9T{?HhbjRv|*fq7GW~ zO42;Scr(C;&=E!*gN|XBLEW(yn5kR6x+k3JbgH$M$D@9?>ZoO7f zw73z7D--)BKL1RgzNzgEy3D-tm2szz?`xGIf88c{@3z()DTPwN$6DE3X5Df^;?^jLhR`E;eL_<= z>AjD&@&OaP>fJwzKJKO!4)KQQhHR^xLc=!LLIRofO<)9~tE%%@a(AsaY=?ciYgO#S zWU`9rhVPXY#r&sx)%%FMP(eL2iq?FjjYWaf9$4czornxQ0FCD(p!sk_>xQm+g(RQd; z#wN8p*$oGD2KUuo@J~N&g}nN@D^2)Ri+aud*JCbmWd&WS{A=BRjSCk0Yd_e>4g(D$ z2jZ_xw5%zvXM1GFY;TmnrWpfwA-z>rC?05-oC zQWVyl*XYRrEw>?i60K3jNVOm@V!NpEXIeqy{Bv&qIt~0x%Y~Cm(>~KGYNsK2P+W68 zbZ9iTz_G2%+*^aKSuT*Q0c4Zn3=1|kJmper$wsk?D8Lho6|7NV`G)p^`462{hd!dQ z{Y#NLD@0e^v5n&3wo(o;&0#Dpbj9+cT2`!j$iZ?8=gYKa$wI2>OpA}syCxZ4~Jg;vGqV;_ZXb;GU3?{3f>bo~nrF%$q9E5kfJ!IW8aa*J75`JAU&3q;>lSEh_) z;=^|w)#`1lM*Y6j3WiJ3*~AMDgR$rgSD`vTjP9v&&bqZwDXwyegu=!=YzFi`z@Jjg9wAP>~u3(Gi+#t6`m(% z(l3LxAT)Y>u+|mgNsS@eNK=rhK#zuCR!VWHg1RK0&b3y$S+8kT;~;1UtuUt#Ur=wZ zk~DUh){JdU{%vrZ=)GauXm!~z8ZunFf;n2XlwOrC)E9Z^#}Qf)r<|xfykl4=aqgx4 zr7(v>N5WXO?>Hrl)S9cm9Z%}`B$RHA)P}2Pj#K|p*p@g>w?}DB)mz8;7Qt9d(D&nU zYwm0kqqR0%u)}DrCkoP@(b_r`N*gvtgZO=fI*o(v8JBE^D+pIKPRkDjulZ0f#+On$ z9!eznIv2+$-Totzw)~;lFiJpJ#FR9RNA3l`ge65M__H9_>S1B(pP=QnAC}z6Zpw!h zU{3ojL2HDIoMOhqLVb~XkJsjN|AQxhgHE{fQ+9Yi)I)!`0zO=icdq%qxwHKL<-lRj5wf+h%Z8!zDTpd0}jgzn>62&EH z9YgQ)$bh(DPx#>^W{WGgE8{F(>!OE8UE-Aslr1UGR91X2Da`?lrm9n+qnX6#H{t{r z<=gIeW^+@Y{}h=RibNo!fxul{g?CQZ|d zse4b*X8t{Kg0AxKl@pXR8NW|XPy_t>#!I;U(GGT4lC`|PNirb>3D-CwoC)0DSGbnS z^z2?F&Q}P4o{La3(z541bB22XAQ&f77f@XrWST&k!323n(n4v!&1X3$5BOt~64IY& zx_z5W1$8hHAf%u_-vl&WYiW@}Qb1}!Yg#1F(55-u_&#=$=FQM@1-S9eYzD0Q*BRO* z`|Jm32vWq?)On`%zA`24r8NB|oC^e8Rf+k4j&Jtqv zLp+k!L8P;&qLsx@@KUX4?xif;vjT+m5oD%(7AvBKYvpYol_&J>Qmurs$$FWz zRI3A#`Os3WP|i~_%{^?ql76~`bJdFp8#$J1CBmhI4Lbvj1DPgrpa)ZGx%Nfq6<%;7*p$#R#t+LkBlHrT zS+0!;lLf7vLVOv?o^UX_e7*wChrf}1rS>i;pzBJlJkf3~$d50*aN9EJyOmlw!!m5r z?UmZlV5=dy)IxY@2&rfIH`rgfLR-Jl#$oHP@hYh1tLU>;+BW5fv`VYNM4M6%Snz;dcqoe821_;#O(Z0)iX)sB1$BCEIINCNyD@dCP8-+li z5H&)RH)^4NcRc+$%9K)vn(ozXA;%!uxv4Tc#t=14rnrq-*&uWG7IPHRw6r!;i6V}c zzEYv&4MFD!%CiYJyq{_2Canj0AvQxvy+GABYwc-uM?Hv^Z^mYQ`FDWovzxU=z~9I% zT8}^}*+OB(cI4h{ps43twD7{FDFp6@Y{BMlQlrJ8ZR-Q4__(5RV!!5Auk7&T^3IME z{nDf&E8ugyCn;{L)+v(||JU+q6D~vW_ey(|nM6Y23!8cr$l$Zw**c4%d2UUpI2 zZ<(U#L*6#_~;?fX?* zICS=1CiW}r>H-O!6<8k^3~H{M;2-0d&|q41t-QmTQmm85OgEckip3~hdtUi|%KJO2 zgGyo6eNBFNAiDzQN4IuqxuTzX64hF~zn2ddEdFo2gzh>525UWX|N3&5d1n>8cV{** zUrPA_Vz(DV^&juS+_AANmDh%~?TbBHTYA15D)*&52n17jk5-b3?FFB0S_oXD^&J~V+fOs_+XfnxJrhtD~C9eOf=<$dy;>B0!uDxR zZRUD0Ql&oowcIp%pO#om$``E1z;=OU6{ZH*i1AVq>Ku%9uJMyG40wn1VeT~xh6R$y zd;7IDe%_@i;()Y#@P@QIQ|kj-Ek$mqh0xarG+$5vK6eP+&)aPn^;ZSVOo7J~Fsb=L z?2%gnR;EDde8>V;G+gk`9n^{iOqPaL)}8?6!nE8pdS`jO<0|h;m!i!wntfWUj^HRKPGh;fOOrFSJQ3KLeu7NSt8$L(JoO#0&HCbCZ|Mv) zWPPRdv+(O#eg+bzRS=5%KQCD4tfwG0K>umMitff>0r{t8a?yYccVjW(|3$HYbM9hM zkr>dwE18?(&S{!AZo+8(Ijw`TEBSXVCyXC40gebJ#x_TaJ zprvQmz5qkvMM}7!rLZc!|GHL}`d)b5Zg@98-G`gsPa!w8G3tmDe5Z6ceRmVO#Ui?L6SfTWtI91f@)T-& z3tKp|>6=?x3&j3nN2Of&f#I2-m4P3M`4K9|hx z($0^dMZa?&(L^OD;JcfUh5Fpr3g$OARvj<{dX;O4>KB`fOjmxSP4~58SQ0MZ*M^#^ zMn#{8T=x?1OmPpil9{~blH@g;9%!HcZGpVh>!IfNQmN4owe$$d6M5I(3ocK8@`cE* zu#(B9c@rJiXvQP0TG;O_3h;8kP8fXDM2XIZAmLXZX~VqTIKv&H1zmoOwf8isPatb& zP}L_MBZ0^I=Il=A2v&|XIc%1JAc8JE(ekO=;UV@klZ1>#1|wFmeRujK zbs7`xBXE}|Oi{15_3e>$2Vk0%^4R*+6Q`)eGp(4{1|{ZSE*knw)8WC6=Llcjby*gT zH0>6VwBwnUH(=yxFj*J7b6}zPn}xQFF!wO!B%lk=wLLJYV3RY74!ppkl7*K{8?5_g zT0JZ)(@R3YwD0vI&|KujR6&YfGD`&?|A)f#SkcSEkFA8Ne*pu3zt z`c$5ZRrEyW4z1SO5GcN?{t?n*YUzU!x~6V_Q7)<07SwQAiMqv z-drnf5wvQc%}MQi^OAhn}E5h@;;fdd2XI(yoF-GftPIzCUlU z!uh}lUc9A!^>jf$NbG=y8z7C)%0F8^>(7 z$ma6wDg+1U8`VS4X@7v8Bl0Nk4Zu$C3WA;5#%>R=+OueS>nSOLdJgsE^Q7y)=TV*~ z`TtQ4!F_sj+E34u+WnCSEB>-Ty*?P%%|M;^TF~EW)JMaugL78ed})L(sNRcAU${J4TehYCdhuOSktkZ_X*O^sVApWtKoVXpglfVf77gUJYb;xD{Z9_ zjZFE*mJcGv*6jK^=&(12>7B8}90}3O=bd0VRzjTH#T<`&%{vI@8$V}IbP=@$8=?Ca zQ75S@hEdQiT;^(mRw0KsROt{ERaZWMHI`bHfVWAp-TM0wwd0DZRRXU{B+KfhxO_B+ z-UN`whI`T4@8SBTkkKCOXATgZ$*I?27$%3}hVx$QZL!oV0y{s2y9#)&@@cP>2oUu} zIvk-VhM6M|2H|`x?-t;ZLe}v13{I{h44h_FVbmpE`7e497)Y{>kfQt zn;TfXLEq%ob3jztksDPnq(`~+9{BknO0VZge1Y-D)q7Xs>4(#5tdYX+*ek;A8C7$n z%9jjDoQUTRu^xLw@B}THM=zm*Ksx5p$7J5NyOK?puA&hA`I6$DycOe0KhL$j_LAbD z7yzF_E#Q=tc{B0rs!07ORpg*%F?s{^ePfz!A4XK(&yn)It-296oHu(jDCnpy46<&_ zcI@3=jn&H*Jts#|b%*gtl=-X+8zoD|cGRt>+zFkO<{~?_&#O0;12@~Js!8RgK7-4| zH;>d7v^-Y#H&S`uE=yA-smKOfkiQCLh+QYJ=sFoH(q`07+AWb zUr~JnxMs0pdIR;qX&O*W@8mcjR}lwprlii}pcS|H)@G;Y#q=1o6J1hyU@{YSKjy`hn4@x};PuKp~g4`asMy|mr}Z2O1O z`f~NeX`0^|=Ng8V)=SdzGJ0+G>S?-BMrNo{R$rq&J59IC%2!u8o%e$-l+%ZEEgzTH zS90+j74+F$Xnh6!2F3MS1&#mqnl{9&AXj-$% z;8TF`->os89UW8g+(oNu0kK(^o1ae8mg-n;@Y@^f44S}l)9t^gb-jys!&bWD{8u7v9fioP-`CfB!AGuO1B}{STG>E<11tKA26_}? zQ${t^KQ{>`f>ImmrIGLVhI%LDtJ6rIj(n#Y>F-$Br6!H_Sl`S=7Ax$)#(Fi-^!mnd z$68E}8tYBMcDg z=f91DOi__qDYwMvl-n@e2;6kR!4qh|1Gd_bHacrwCEMr=VE+488~tMiuhrhs>*8nF zJNkzKvNcl*0~f6VZT?es2+YFY(b z(AD-BfZwUcdwL28@9cY+dLZHsdVT~9tl2?-+sY`-hju#CL7!&-UFz8!Xzr_ySS_|w zYDZMOi}H8Ux8sb&rB3?u91=p{&b_+g5li?kde&M09%l0I-q%~=$LOLDM8UW&`uqP$ zkPGgrH@92cap1T6y6U-TR98K_-&RSX)Z=br z(+9er?+GbHJ3#wZd8GOpvNd=h$Qn7HpGQuQw!o#6o@jZY^#I8=w0~ucV$iLy_I|3RwVc z-%ZcM$Q#^EuM(Ibbq;n8WhBJYdwxn0I78?`IZfc8^krfJncxW{`^Cz*SFgfluX1r> zqO1^(1~|ITqY>`4FP>E7ShNj(+Hg6-M#Pnm^?KkarMm00z})wAhbRn@XxMj3XS{Cg zp(hwmG6sF0Wux@1QX{XrSub#G-QL~piaHOq!vX9qf{2vgwnYt+WP|_PbUybdS8|?Vng| z1HaHMi%)6aOpC4Qf0EB`slTRHnTvLRp~u?yNQwyY(ljGHG=cDDU+OJGPRN}ZC7S(@ z_z(1{)3oPHJ<>OYH%q<4w}%bVFJV1so}2F%)o33&ZIeh@}cnmwq!`l75a6pf4yf>qlU%O`s|xp`j$u z9Ql(xO1^X%rGJRDUFJ{ec=ae9sqy)!si7i9(4 z%)q2+mbCK+_C$R71C&z8;IH|B<5{@!C-Va}OMpJ>-IfeZ0@pS-FhgI?01lVU<;cvC zwkARUQs<5rpZro)5^S%2b$mI4gwoS5nv4utI*z-dU*8Q0rKcMnjKEP5-YJ>Tc|J(6 zz4{d}MbA;iyW>*f_w*~XB&!LP-1;#LWgKG!%XY^pdSO~R1@i7is*(iewSYP#>0RtA zBoEdhkt<8}%H%Uue_u_Ar_w&S=V|CvFslUGJr#0Q0+pJkcjHgBR_pcX>@+==U%uv- zhRJ#?GW19`GYm>aS_H|o>SU%hTZ6P~W?JBMGcC_rq-~il^PRKOZgX1V472ig*Wu+6 zUQl_inP#D4-y&`IOqq7WN_);}b7sl3^jT)U1M892d$w6otGHu>mGi~+vNNYY%ruCg?rVZPGwCEJG@+zE1KlOTUw$hV-uGjNT^I7=@g6&9h?a=F{C4ZxT9^i%x zh_>5b8VDfVZfBN}iOPm{b^$V9F#uc@kG}`;%>FWS*9?wu4@lO5qOw~&P>%F^K9cz? z2Pd2gZ}nuvNZ9Sn6FdzNM#K)jnZja1N!^k$Y^Wkf=*BIf<(UFEeo@h~-pV6BdIT&v^25VUxvvAXJYWXwd&iJ48 z`Yd;Pn;YTFQM#pwpqi0t?tg4@Y?#K5UZzEpbwajpa`W)BG`%z3kxeeKDCZj_C53Nl zzfeXvhp`RP{rL(F`&n=D3P`E{1CX5SUjm6*=272%xoV2qt5^ER-K1Z4>j7b}>7AA> z8k^aA1m&)$Mk)x?c1Vw*c`dOF$%I5R;n^{`2_wOusTZExsw+=-mt``$zF#kvS&*Nt zGF1%Pla{FVy;395Ba|KxvFyX>k} z`;6my0NrSyI@!ZkI;L~?r0jJR!%i^`)yi&g2LDUf_|pW^7nQN59xah`5ARddldzv*SwTh@!Do!-sWa2y*r zyH77c{w+ai7LiCwlL;2-A$KXDNoGtxrh8{BYXVj|7*{aD$>vo`Y}5*{T3B%dUx0eI zQmp~8x>U4~!{qHSd{ipfa!|;kHwV#yxt)oMZN|>b;LP{ zM>P4oUdJJ=A#4jNMQ2jAvV0OJ`vpCJ?&C6VsB=0yvYGdX-N;O$z(=r=kG~2+!A)E2 zE$8g4=Edz3y)MF%e26Aq)brBYmvro)D7|pT;r5$2oDvsLjqZW?242wpY2-aU9(DzJ z4!YKTXqjuN*L@vPZD{6A-9@#p>3IScn>%UfBDSszQQsRF#o^cV0r1v=`)7GVIR{m| zE{%ZW_-8SlzK%NJlX*k0L2WMpmLKWKO+7ayUx1l!nbq7y6l;7REN$~eY#jYaw{M}) zae96c4JTjGqiMlibZj|ytiFCMTQBE6*#T;I72ci4?(3~F8gQv@sqCh+=)3VJuUH5> zwc--!caKcNsV?I(H18j%;$=MKt0Bi>3}(F;%e9oCi}SM;Kcp}chKOdp+Qbc>sXITo?H#w&U^Br zigVbj9>8FPLpmoPfNdPZMelmWh;>}2{OksxC;*7gh7)I3qt(no zT0~OI!5U@1gNAlc!#im95Pfn71n_xr+`q8Z?rTtDXI0qPXrefW$5WR-k@YZ5|5N{n zzPkcAwwiEcV5oP?p$`7-#mDqdxg;U2OzpsI`KfyPaod_6^1|5i<9w4Z%-$7;%IfiRZN>iOdAsv`|-@; z)ouW@-%{5b`q#LjD&Qt?{w?*r>6ta-p6K;MOph2`;bBS%GI#);e}ZlK#dJ^+A%WRk zV>hK^v~?FdrNmR?r@A!jfAv%^m&-Ei!?Q$w2EnO_N^=Rv+npz9&r=u!cTs_7*fm;9 z!=LFTFa_2;)0cqi-+2y3zL&mut`{%7kEtobU4wb7SgpmIgtk~XZDX&H1LCmX(EjIo zr@&p3_&AsY19X6DywIcb9+Zh@&=dDFj58ZXGofBY6f<43_K;Z258S24 zwcDKknl@f^RWhdC7P)K40B6Xg!@z?-EZH9729VKwGtXb}XDc2K%n&99?6~NusRFlT z?<_P^5m7l8T})^599(}gBe>kl&`Fc8%WitqeGPY zce^Un%w3fiDm=c=CnQZDT%LORh!2%3X@`77O%+?d*@fs}+ruP+<_t{YK(!9L*@>-Yg#ZT?KJphETzeR;v4-gp zjdU1>m&v(epkdCpmoxao9w%S%7e`N{9ekqI4}WlG;7)*O4sWH}f#S{l%S_6?#Hd?t z0&$+7Er3qRXPO@*V(4U`h^S=3tove$!8Ipa?Q9$*E;GA?A7KY1>?ZRuVTz~XPEj?F zRclZ561lqJ0N7d!V}KDI9PJcms%6Cm2F6{Vl~v+GjvPD5y$Wew|0$cjv34*>M1fXs z1&JIOCtI*6TGs3ZL^_Eai&CvIGAUTn&9za$B=Sfe^kJ}QU>;#efq@Z+S6X6M1?N_9 zrrC3NLGC_gr}`nHHa0uQhKSPGqTCoFa^noo@eoldID@O_)fz{ZTN8Z7nQH(Ciqa2o7Jm@?$IMRE!Z~A7%RT<2>yC zFp*Ok1&<1mp8|5AyGzoF=MasRmXc@sHpUV!B}nkha3&nZc}$-F1s7#L8jdh_aF>G2 zAdf|}crdg(-uS?<+`$E5uwc>OmnPlQBItZhH7BhO7d3&_o8h8>5}y{9Q&d+9nRt~J z?YVzq3|!l@Ib~osTxSnze#XS+ih=QeP=qMtH;D&PYJtu_X?29CZ%>sON+ZMb2+^ow z<}hV*os(a3nYA&4Npv5YHZSZwVloKHcW6kY$Y)IC+I_oGP-iuSHb;sO0BeOl-~#|8 za*55hOE&7d2-k_lfsJR)U?wtrH$N1j50GTw`u>>Q3gk7)W^{ zQ|-1`ENqXtZ&AZ1P8H;fNf(9%d_^4OvnUDfvtt4<2YBl4)IqGTRfMaw+mUDUK9k9Z45({OcHQ7ZhA+D^HcmM5+)l%NX+SrcR{t`9yBoRzT#X=7mMk;QMYO2K|7Dec<33Q&8li)rCa>?&;f7ShQ8| zj;HIzMIrUxcp6#~rda$=%#S={i-;!lMIlu6popjhp}bU45G^+Vp-#?$$7AIj2!8T% zD^IzVGP$0aGt>uTosS7KoBOz-6JAT5ilXLMX3FraGiA7ErqF@>e8i=Y$d7|wJ&TDv zG^3Dcfj}DoD-uU%ML~pyWw6Yizjzs@f8TQi85vSi#Nek=2~iRueq}8K@&Vb;Lq!ET znok5!?JyBc_w!+@;tulsg2OlV$PZq7DNGcgwfQlVQ|VxSQB3)Xp63^FK+(_wBEJmQ z;^Ht_W{;aGV@ZWLa>xwJXQ={ z{NAgJV>2yc|8a1k!*dsX(>GLxFIKm1h)1mlkEI z_+48tJ-=fssm#LF(4rPJK_q-tM)=Ve-4Hr!EDEYmtjvj}P}K*eMZSP3URCXk=c=%i zQAXqsnCkW653?9Hu6vXL&2A|vat0)OeLrhed+mA zM(#Pgy~{8oJY!trFQ(XOC)!d_L&4j4X4sRdYF8AEX(Z-S>DrvG}>E7)CiU*)hxGM986Q-v6Q}@U?bA?fw#ey*acbYl5&Zu0gb zwbD*`r$w^~0mO6-d#Yz`h)nabnC)%s8nO)n!i|qbfWu=kqt)BgE-X2<5W`>yJlH~X zMDy51sQ4PoI^3U4pXG3B_ahACt6PfErsHxbIe${4oN<|qnEjh!8?Et^%Ff%Uy$C&R z1th`Sy7wod8pvew8=|0kXDkib0dwJvH^e9EUt=leXSEbfcoTZki%~SJ7-R(0Yommp z)tr$DTseA}4xv=iIty&lk$M+Bc~eM>V&pF%;?G;76D!zTC!B7!1{aqdilB^#O71Xk zPi&3>qMAMjqu&x+(UpX&0A^4d;lKhB-$qP~y2dj+276=>INg_0a4{XrJJ|f?U21Kd zc^mMyXlgrfJ>8tcal7HVd**G?*OL^m2QjF6y(9dPdC)szpJ8RDmTg6-C)?IM2!)@r zN7Xzo8<4cUdn@eanh4^KU+lf(p zZev(`5o^E5w2cl|qM+vZ_H%nN3Nx#}4+3u@4eKDrD6^A-j+CHE9l-}s zczj2(TRo5H)}6$B&iS;H_y9TI?=1es$(?>f_^qbzi$KiP_U}WJGJRMnSE`SLX1y(W*PclAV?dt9x-na&(n z^P8EXz7TJK@AUlwhb1CD5N*-vvtNj97~}b0ik4B9OSa_8a-#-r6EJx2ANG&#)D5f1 zkcVo;BF`8Z9w+IST(sF(CFc^nw1Hswsh0W(;u9cg@yG;sYLw-Y{Wndu1XOFfi86&H z>3SM_$s;?nu>*22!?-Q~*UsMXNpgZg!{VjGbL=Aib<_CD|8yEt_f{f+cQ*bH&R%-b zOZWx8JZ-~zi+3=9aC$39gIkMeO4L-GrRkv9z2V5_LC9*r_B+kN`*w@XR#AB0H zFr{l(Fx7VVk(>$BxdvwPl)fU)HlDQsUScslLm0(c_Sem=di{8AF-SwK$+Z}-*14Vn z)%0>n8!iS@`hK-E?xe*sb&*f_xF~Xf=m7s?9P^2wQh$M1Hw+Lp4a*CXeWkP0S9jF5 z)Z;VJOiegzPMQOsiBL=$c?hWEU9~v1?5|a!1Al;h^nRiip_QMDQnV|l?(2`i{zvnt zuKI5$O%Bg_kB5@>dGEw|e+*^Zmpod|qAUO1ETZ;2aCXne>7ue4i+a~ zVKXy_yqXyEel{%Tyq3Eo@>t8hl?w0Hl*S@NU38Yt{h;==J(VjxNC$D$LaAmGkvB$4 z9lK?E4ojXWXi5z~nTOqI>sai>9~mmnXMZ@A`K~!1E$d4bapZ)|9pn~AB>Y!pTCkO-TJYnbLEdHwboKSk(%xK|Cfw~=buW^s22yEGnp#C&fwK~0p`g_oCY<%GxM5kUal3As zC{`rcR@5*npBro|Y8dq$D{2ju2%ak;&Sya^leWvGNbjW6GAYD6>9$NNY$d&k;kLkc zhqcN&;O>xGZs{+Zi>{3j1?tSa#u$t8uK9bJ6z!dKOeW>^PI@AfVv$4z#z4E9O3lW+ zmIqPlan(+3M?%w`N<&AA4PYphM~Tk@Kg97$u&_pg1=+CkW|oF7*L$^;wd0e zA6_6ea{*KCNBXtN2bHc1p4>L~$s?=ArV&@+s(cip>W z-Rw$-GXz<2z`jC&g2O8E$%b1pCr9Ksz)xmJO}M9d;6^xuXXyqyCbb!fwrvwd@xr$m zZ8CV7;(X@y{P-nwJ}3V~kuT)D)WX<#6xd8OyKG`JB~j!-B&>A)ktbdAR*)7*xAV{% z*0}ja!Qfn$Shrp_xL~h$%?o1Yi4KqyFM9Mow#8_dvCQ_3rVvu3Q z=c2t+M0gG>G#8`IG>ln=a1oa%Dpj-AjW*C z+m*_20$D1y1?SIkgki(`ZW8QSQz+k5F(Ptu0t%+PvNe<>kIwI!hy)HG+%1#xbSgF3 zq0@n>kcfkF*+SuN$4e83(&q5hbbFErEr6o?-9;l9IBDLJ78ZnY&ej<3*&6mpo&j6f z9M~>Iahfs>HjsJz96~h-+Q4`5w2c7Td`>G%I|!z>A_Qys*6FYzB}{{;+i3>2K9`e8T0&GelABp33YC@eLnT`Cu zg+N;_7>VQ7ZpX+d>_KpA4IUwr-DTp8@Wne-nk|awHsgJAtWbnmm)^NnG@*yAf)1Yz z652&;X2XnXr9xRs#G{BUA-(6H>j?C9~j)?R#GlZHS;^v6@>fQvJU)GUR z-IqX{$~uzii@Cy?V+T{DukQo}xAgGX1L^8#pxTtVVkGMawetJ4915!8NL8kH0Z7vi zgl!el`Akoi3rD1- zXUi#rP))}exvf$}Os)xXz#=hVX8vKk?_yf^kI=*vY(QnC9ZiAFk2-C%<&wdA%+$B1^p>ADS*Z4{DYr;w;^ElP@P=iIBhm^p=bp&<Df$RDXOAl5FK0!@#YVD zxKw;czb+F+qZXMPGj$kUukuccS&of`=#?<<*Zf-ey?hKOf0R#uUO#o94RCXK`Imv!w8u&GCPw$9dwbYDk%# zC4~=3t~68V(i)h&M^g2*;uGu~uUIP@)H)?UxsUI|O{W>IS^(=}hn;I#zG3US32wK- zrml3jfNu@rkjGP*bt1Oo_$)#0aA#5@e*}O-6|~Jv0u4=Ng_C_`PtbL$BTC z^6nU@jL4^1QaI$y_3th=e0tK&Ss4X?zA=$XZx=aAPL!j?HzPBA z&Pft3A3Uq(GrNVcYXfEpCsEKZ;+tPsn>o5WP`WEggEDCSmk9Jz<9!~@@~T{+O<`*ft!j18V+}KFzB|`TQx%;#T*$ z^V28~kf@(!Wrgyj1IKf=1L`3=M5Qto)XBX3!qb4!C!e!IEt5Wtn7y7MdyTghJH?xH>_-g3 zmS056(pg)X#Xwjf`bL5+$eo+ZQp+(fle$d3e-hQ{%bgg&^FN6$s8O~h2Rr0fq^{j5 ziX)(!#Jjc~D#f?IirVzV zOmgIqhy`LF9)jkTObrf;f@xb1iWCK#|D6trX82ik2uAsV$3zRdxL^E8y$*}*bm)k< z20W$g6?uiEt9o=`FKU=h&5xnoRcFO7fln004sC&>euHVvqVzLROlHxkGon&}B#Br9 z5e5+^cNTTL042(CN;s(QS<#*1Phs2P;wXB4UPQ26{gh}@F$<2(k_cUuWiV`!v377m z+?*P1i;OlRV;#U_@}54Xiho{ zzT^bzbOG!wnW8U=Pcr)jpEy)DDfv9QHHlJApj#%Zvx-fU-NL6AC&Z^|S1-U1G3}RQ z{CC(n@u@-+E{UfvRhA?xOEN1n*_BmUl37`jS=oRLY#;_sQB4Fhr^*IaGVCNEnMQL? zikiWa+oXfpxRE@KZk!ak@Y(m27*y0fHoRw&&730=A!Ae*ZpwqTjmHd+-JL{v{t%S{ z&1qx-Ll#1ahWsHurO{W!kC`3eJyCX7f5vE;PB||CEhZPT3QsqCG9Bj+PP+XkhK9LEQc=oGgMmw~7QfJt8)7*)aN(O`t*79o*Az6<+y#H7^lM@<-MTF< zip9xjCL5i&DK?^}}12oBMtMz)W%1vzPi`70D>(dreHqyYV&cnrZI* z`_s^Ff`S6S{RLN^gY@Dr@uB|)Sq>MML1ErN{qBH9;qq|@e$wAio4d$&nugpJ-(iNA zzb6W)N#jXTj8N)#5Br>psr^&23^Pf8hEKDsPqm-PPZyu#(?y!}LU5$G^cP}~vN$d3 z0Tf7->!uhBm;zLz7=9|LMju_Gf)ekFMIcn!)}*X$p=@~C`FjveP{G%#u?)QB4IiU` zLdl8|Mw5IDhUnBIG&`L}JqAS6tqQh3W{A@IJQO`pHf{DZfuQP(r&TlND#_DM8u^rD z)bNo7K}iG&Csl(C_ATYrjJoh5>82U=5R-kCX4KEVPT~tkkv;LkX`9WcKxO@m7|QTB zBB{5Z(ceU3Ny_eTRKmt#Q-7l{wF(8|nmdeU;nvV1roK=ASOm<3e8KVW*3&u%8r(w< z9Y!wv+=wu8QVCz9GHP>0qK3)7MmxCF9~Q;{f0II4V)ns3R)Zppw`iYk^f9ycgzaio zq*0I#2?H)vzD9X!5(xOJ=K_4A13mB+bppP1v@Oag3{T&Vxs68jz=n*QLXoko-IMV* zJ2I{!rvqSIi9$yl5k^;klfq0OHcB86vG-sEpx?*Pzu|^vt%OF|Pit&OeVP@D7J5Y( z!Z7LX2l_SC7>>N4yOK003@t69TH$DEf)gzb2?zLF{ZXb=2%vi6?}2Jw0P?P;V*$up z+2PL1_4{x2BJ8cNHn7xe;9gGS3x9Kdn!VV>z1ZP~dkw=~nOX${yFCNZ__koR>4!|X$6#N`v%IKuZS{} zTOw1HN`T-Ht*#3Q806%V?))vNKn+xtR1W$5Ya;*n^2i@h8g1+>j}Ogb@Vcpr@s1lG zvV$Y)yE{0q0KRhv=~Mw^f47n`#+_4QF0B@FCNwhgD@RPcAEDiij2OI4eiOhXmIeOm z#~N|&LPr~;7Wm5_rp--^{M508QOaNI-#t3J93CA3Uaz}QZb*#LFpGEiNFGNp5z{-I zDwcpycf70zY+3K;Ro(Rll{JP^$;Mf~!=4;e(Kuwb+_&yaE&oEN3!r6hT*%=$UlNtd z;Yn=-T=4LO?0c1}E>hooMoDx0U%Jh~e~bw{wz!-}6R3A}<0CgZB-uJEqJ`Fql8moDxQ7`d3Y3ggft|T0q^!BFLNI0_x6`Lf#A)$ThMwK9p{X*G|Q-Vp%hy zOC8WjJ|q%Nv{9*yslN?;(X#vuC(?u#VW!0N`E>ck0@unxZPL#n$`W)V)lLa0Cz z&U;Lal5l1;M+K5_FuZvvt|{iT)o80`_>|TVWhylXj2T5yWq%U6!g@*T zYfL^=^-Tky@n5vD0XJLQsBc}u;-Bm(za#5lNQ`|@+<1(8N>BkK3x36YYraGkGFx~V zG$s){xPg_IerSNsmndzNQtr{gkw!G7e~Ka4Gu^P|lfo&sD%2Q#Y+xaX@ zEba()%Fnc>GqU^5!0f@T=QE6omTm4Sy_js|rm-^&w{7n!Eu4YH{x7;b!zl97g*JQx zx7)y%*cS`+4C*`6=mZlb;b=LQTL+l%lINt7}a z%SjTY&N6aDCGf6Rtc{Od81g6%n^SDA+0r)ilp4hu1-ZpIFofCEc{&!mm2pO>u~L3V z;PKCmLU!&onuaMO&k!RDg4DLpjc{r+1RbA5rQbG6sBz<|^V>!>xZ#0bZx2B)$OPZC zm1F_mR3c39<#Sf>p=u0;;5BQsVW+J_jn-&_J3_0zF#Ln0PU6*pzswHIGCPp?`VN$W zED6BF=tdjEhG#%u89xj-Eg53epsF2>09x_3QHOr$0*cr@5Y*jxw2?0`D`c}IWLRnY zykoRS1q>EEy;px>gc&A2Z_=JGjH1{fEYa3zm5IY@9gJ=2FcU-AF|5|nXie?gLxOs* zmyyptK@PCp&xbm81@_N(G-kn*E3Q*!rO#+iC#<%v5AbzsPeZ_awdQy{Kj`E&PA$JQ zj#}h*om_K_!j@_HI`y4neDNPh4uSTJu6#t|o4H0AP(#LCV-mE%KJ(Ck*|F=iCeg@8 zsq+j$8QqLXn8GBj{5j7E$?WH@k%kL$x8Ep8&(o;vD5E-l`i?ScT7cc6v{9LW-J(B7 zflOe>jyDRw1Rr0`<(?9~;*GkLy$2TQ1Mx;3WgLZ!HY$`i?NC|BN@|4GtdP&9Ey|o3 zJTIov(9sYfuhHz$M!U)~OS)@lV}EuJ14*&8VdtGP=UDG4Bb84tin~Rn#y|pI-V?a7 zyA)(!V4`Bo7!NAa`iwVfD^|B}(1r<_-M&GWCm6F|>aT#v?(Xm0iNFf(LYryiPM(CW zANdG`(yP5uj>b(gro+$j+*csc3W-JsnC5tdFm0nhHHy=)-hjv^AtDo^A>d{~)?PflYDeMDGmZfz2Jz&nnN`KugQU84c8@bm_YCw90^j0VHNjX2jp1xU=1jatPZPi{zm^coxk$5ngRiv4bPUXb=sbvR}9RztXQ)mW>sXX6V## zqmCLsfnr7&6$+WQy)4rt3nt>!V5@L{nQ zwf_~fgks2(lO}y+)CZ$pITs4oe_)yHq46FN{2Hd27T*>V$wJO^Mvj|vKPRQ#-*O5$ z1=sKt?5qx-Kpol}<>9P8wY{-~Mi2y(=I?<=%<<;p&lxWTVS13z%=K`I|1+4Owec7v ziI=#4hL?5!7B7TZf67A3BcAYX2K9*Qcb9WweD_!8#4A)YZX5tA-NUG-j+sCMdtk0l ze%)NZK-+s53!|n>Ze=$`C22VX-?v+$(jyu;6?{MMc#zXVa{)fdYk-@kvMlmxa*;=L zl*t{9^8a{+KbH7+EBxf?Mpf!K84?U^;FFCgU79RSW-@OwmU(C0mjSQ?!Khz3nE97UobgG%AkG?bdsn|#hH zBf)e!e<&8E+jKF>Xs_aR%`77V;G8vK}y&K{ry)&mkjC^6<_~GWzf2ZNx&kFvMsHSxxE+ z|4)Q%@|z9V|A(SBLZHlj+h|GO4>T(MuSD#vSw-x9y)(t%hqR(kCKG)~C;R*@6O|g* zHj|_O)fZO8CcR8~%SrF{!z`Me1bzMLT*I!M=Vhig?dT`vGcVcrp~+RZF)s`EF>v{W zToPIO^7UF0sqcKO8o>)-Us;-hKV|vpGCw8bN!dmR=R*T+Iv>w#%;y1|VM_G(Cf6Bgk^ zk7ck|lw6FJ;>(rLjW49)sof&uQyQ@pA95@KGLUZpeYg@I>MS|LUmeS_+MhU28*VY^F z(T%mne9H3!4jucYu`!>@rXh938Y7L0t}){1U*99|MN&2x-Kp&N#ym4`<@LxrojR>I zKA`SvhMwK%F zqVF{$HSOZ>U{Zv}5ojjEIAAtc_@og?WgZy4Fgo)e7^%t`n){p4FYVM0< z;Cp~w!kA>jSmC_U*(YtzZ$=*j1id@d&JnQ0MJ`UQN=I!B<9-R zH&&#f$BJ>#;vN3r$*Vrr%buma^BMAXETfDT*E7~>zd5*gg$&~#28Plmx)iYkG7OH zJ~eV0;~%8Qaaf^~PmRM^Zc?8axy?p7WQPuek^}Ctr=J-)wP`Bw)VBewf5jAANnB`U zWGKn&*Vu+A6#T;YjIt}XP1y1|pxE-~TE&fXjESDOH%Vnj7y}xa7 z;AnZjs)CJFh@#H1)HA@gbLdFx(p9#v|H+tP2e$ObTs+csihtcvLtNKnYFSr`yjanS zCE`luH&;Q|u`H<>e{yOe*Cp>%Z--vreTw2UG%uBN*yhp{|JT6$&|$-UlwL4vfO)mA z?Watb`Ko4seewT3*zQ^4y9-cL83%}Qw_*E)nmJzscn6zpLEtD0a5%4F){Uh=yKT|S zfS>#S1@MeO+b0kanmcV_IbWg^x!3P|&`0s5H51^Vgkv^g^tIFWWuQqWChhp4J7t1w z^Iq;w#{a|aL~tA+=TmAEW?KuD*`C8z7RNcN=YZ$KE$WcN))M!mtj=L8iW9IWbJ!{) zQ3%Bg9sUJ_<(CQc4Q8HHGaeBiPmg`+%jg+ulT+ zl9AbMMT0Igf}(v~Kf!usz?o+$rDsR+M|3$mU|VLv_5+260Jg5-;6w{)Rv5hFQvod2 zoWtR^>UobzEVIX;Pc5}pGZ?Z@7oU`It(AO=!fTTp_h};5_<1KHYkFK zfFc$|!7d<**gF#4pnVQ6LNjjfHm^=cW{(1W#&JE^di zafSAoQ}yKPh#ghSxYHQw)ONMpD8b=iytr|uwvnuFi=ZlXjP6yx5OU!TDj`YSojPCe z`Sx%fH1U6Ec^#u;Ty~_U0{$wCG`iH?lbAk-IiZ8E{Lc@cKUT7b=kU?EQJ4hA;R(Ma zo#PXd3_T6^ey&P3C7Bl_y$G|PDR{(6(H~F3qqr&h=p+d}mK4LGs!142Q}miivHUYK zDNdRYw_9&cj%P6GTurN7X|zASoj!rHd75hla1Aw0iipF9OfH4zdZO(KQdG#0;@Ki z>ccpip5`xyouxR((&h)U;51(y#8;|kbbDRA6J(sj;1hh#9NSz@ju@sg!jCs^xQXnd zpxdn)P$t%VV0LFjGRD=;+76gfHk{bq?2qt0i+enf1&B~YGTv6+5uF@m`*699yBdg< z%>0Qv7~C!q!Peu*z{N1`^p0#$MzT>gE#7BmF_O05&J|?c(e%FX%HGttvfkJ`ERmb; zsB5Irg}TPgT}q@lD*Uz(IB1^RlOxLpqt!Lq(UQ7G)%X%%XgjAoP|rx#2GYazjaqtP zG-cH{s_6yM^BNe{BXPgULrVvFs!;!ihM%_AGZLU2_t!JJY1c~uYM)}XrS0{Nf#G@E zIN9pcs)hhFB^=BvDMlrvznx-SK`R5-o(P_;YpFMcN~bf4uQjK zy1<}5aHLrc@N!!9`o?M+n`+!%KVP`r!afzs?I2e({$PO_N0E(;G5;{@Q>jLMs*-AS z`-l05HZ~q<@{h1^T5uKJ*Vw3?4sk=%^@Cx|-utk873D}L0xWQNwZ2&3I7d+6^nk#j zApA`uFBC%|I;$TL3iy}h8*+GAoZ@YlH4ajv=Por9;;f%p2P8x9GQ@e!;jHH*)oErl zs*@#rbT2+guUf?YJnM2gc)ogfo_+!?^}ZT{e@90YiV=TwP?FHw{P=nw!cySnMEjKt0*$~e^}xz+J? z%rZ0he%Cxv^i1{0Dmb=dB(hLP4Ns01Nyd#3oKxf}iAXf2If0QC4D;|Dj-7#uSi2e& zBt_dXtbw@0Bxj235*f(vity>zqZCVkdSy7?AQ5B^GFK2H!ElbHY#K2c7qE@Q(** zJY5g=VAI-~?bMfwfgN@ZtcYn^k_HA9v1d034?kIsfWsYdkUgJ5Xxn>+@)CptO$&h} zqo@>QP>r1IkqjP1xB$!>2Y=r;x)v3n3m(5SZ}l`}Rk8k7&p>_dO!5x)r15X>!Jy-5 zFb7^&AIA@9^BMVhOoX7!^3H~ci!wVCIwxJJt(_Y>wS_2z6-I+WJBpQn zo4785-)cI1(>+@kE+C>FGb%I?6N`DB#C{c|fgQydWla$_It}sQC{OJMd+_8vP#XbN zjA08C!oai}5{DaD@UxVxVVijUC=gfZ@R}hqScqVN-H=-L6M!WR2PKh7FD?%s4VB3U zv`9!CV~711F<3;-yc}oX?2YEiS(L~buMFv~oC$L2;Fvxfms_y^&qsAUR)#~3AA8Vj z7)gO|Sd@KrAl!PIb%Zk{!vh>{02kr<^jrkNykPndA?bzDrPGfG)8V)_9p?Z`0yrAX zVAvbAko4LP0>^^sk#?JqWEa0f!DIshS33Rsko1h<-qINkhh#Wf27n)f>F7#j;Qv!d z`k`V5(SR<-z46QW<~lF@IIT)wb;i`{r7MgI)a?r6Zk!s}*u@xA_m%Km5x!X(ZawSI zh8U)FtgA7WJdb*2=Z)-UBx>;s_&yJ$)5Dhpk~~!Oh^H>4Jm!g`fnAM>k%w?j9_MIP zWjeV&vJqCete(cb__41t?!?KYuX-AFJ@C+-mvN0zK`WX2H7ECLoVydP?}>S=6uB46 zS%Z5U4R9uQYY(GG{01hSbv2(y$Bp{+-HpEV!nH>II?i=5Xb($#uP5P)@pMER7qrgy zGVYJ3;fT5p$? zHS;b#4yP22>Nwec%{4~t>f(PIEJ%WK9;*-x$sJa=T+w zYS?w);uacty>Szv@+hj;4~qkg0ajf?S+lh)9G)Ct)K4yE%}#a#P?9z5HoZ$P<1MGg zZBpaB{)R!1UT-`nHN|Xa*u0*q*;!;=Z&Z%9*{8q`>fINdtUbU`QBHV4Ut_$3Tmjiv zqum^4#}@>V>8b%dFSf{gT!JqPCfV^9h{TU3g@7UD9ix(>H^Rj*(h;L}$G?z2i+rM{l9{)p?zsxXE}9XLz-nv4HgaJCPOW zEjzMtgAbTP=!yX;@->Rk)BHNdRja_^6EyQSqMMDDs64|9&(WuDG1^5!VYy$>Jnk3B za=)NX-7n}x`Dzm_Iw<%JeIwu1sK>2F9r!K;RL)Zn6^K7|D_%MYp=Gd9!#K&<`nqbA zQ9Uw&Mh`YrtHX{z3XlLV5gS++LNj}5w5}p4>o&Yp{>5M;4Yxij-{zE!p=v+j z9i^SOBWc<&L(vyQ(F^mb$}r=Gya#TB4x$aW8>8S}q%La98$Qg4*Qmo?#=Pc^uX`P) zi1WU5K0G*Jv4HzEsK6QveDz2J@vYj6GwGWLAmZbx@o?i3rUH#e7>%&XIB0~?i$1@{ zXkwKFM_=A&+-1UxKU)%(l)Hwq?>64R;vNcDr@QYlEPdZx>U19_J#+7YMUR<0|TMKNj3v zv}WFKoT0@djMU!ZSDdvjY(P!?jQsBKz}_V>>}}+X8^dcrn)n>~#f>>6G3kK-xn_CF=H&@u+u+Gf+~|Xro!;pHf|< zIE&<|FIpPUL%cg0D*j`tG8)1Y40V0jXq$N9a``34Uw@n9+~4J(m7}p(5>_$AJscYK z;3Gzhgj{hNXQF+=-E2JxPdrT?H6Fp?xfcDgHMZeVBPEWcQdYLyIq9cIjhpHnnFJ|d z9n&*F?8*EwqdmV|``%;5ZCIlXzK0j)_!V6p;Nhb7 z42}Gk(LzVz_5E=ZWBtF38*43PuJgMg@N6?MIqE8$BG-968k>lCrXhYU927rL6D}mL z9b;68Un7}iOqB=KM~=ao&Au$UuA8b7*^5V;wPUbA(D)&^6gxD=sDkD83uBD7_-XZT zqeHEQOe<_(_Z?+t5^86-uPQ(HZ-cM%yzX27mn%=APW2ew zBW}PKN53c0{OB&||2< zFWViVmcFP)K_cR4_>;y}AR_lkV;kJ3|LZBkpS)e5;e`yY{6h(#5%64&ycAo3-<;kR z6V-seehLHc4BDnw`s-3Q=6HfUbVpm+&n|Ef7hk&YnAB9XN>~LBs|LYq{59xtk-obOBMD8+&NdK zW63zWFykED6MvU()Ja__l7ML$rk3cPqF1OyY-E z#*H;v)o`ByN&_62ESRNW%Nw^8Mh>?=qff>f_o2tPA7?bP932;h_ry2{-tPI=IOE#% z)Db*8Q;b005FhOt{?{~c=-SXv`q{H3T6Ws>|iw+3gtOU zn`|^0@|k#TLTNaP4t_&31-}zQzQM#`JaldF8$){V8+X0jZ^+(9sNx<83Wk9?Ty&j` z5(v~Hfj~792-G8iKt&P=)Pw-4x^)VUIn1V&Q;eH&h+dy+^fP}H+tRRpq+6#N|Hd5c zv#G`++?pCa&1eu4kZFM2K`%}-Y_GiX6ca^POgE}l=EVuS5Cd`~_b5w1S#MF*>0s{L z)M2_Yq_y*|jO22hkwMI5JqxQH@VSHX^LaqGW;?wH%H&5Xm~LDNMG-s0=v;9;U&!K4 z5R1-=)hX*+x^;$;#+`cM45L+|+o}1n62aySq+maNKf}1GTA=D}i274(Q>hHTC~ugF z&M}>4%!J{YNe5>d6G8BOSw{WX0Kw>xp!oSL%p+#g$5}8Lm(vxqjD{sLJUq+DN*1!Y zQ^x=a6vSWuaOHnw(fm2aJ+1bgB4UfLn36)q;y; zcyedpT%%LP*(KwPC}*xQ1QVBwbFp3fIUfBs-e#Ugkgyu5*jC^lGd-oZ{9VM^Ip9vK%aIA3DS_IQ^58biI zXz%@zLF#FA-D0De$x4wIQkPNwVxyJ5%|n|O8yywn&(Vva^A;N|@oYKl@z*4e2}4=Z zUgsc>YUdXl?c#PbjSwBI!A2%~=-?s@-8U|QEwq6iTw+X&6{*CLFW&v0O_!D!O{+_k zKN`<}3cORZ00AoiI=WoX9OK_Lr-?bz*=VaD@5&}43sWA(^r1FbsL#G?b!%{ow+>1s78vY`7P?pn8J))4Aqul_wX3qvdricBaU@=n;V*+a+is?6)rQXqUZd$%&4gZ z1qZYEmyLec}-lVG2o_VZFFK?Vd9u?sP=Mnu1varIgTD=OrdGZvGwx@tz3?deKBwE za$}W-dGFX2Mh|{hYx@dgrgtvOitk0rt%)ZW(xzkmt+|D#6^{_?&@MDOQim(1)rODO zT6hpOhZ?UkuG1IceDsc}YSgttRIS9&ml$9q>Z}~j(C7+L2lf5gbj4buZK%I^j3_(k z#H%=gA~j6omn1$}ZL~xe*VbSu9W>nSE~HjwT3(s5&CGh zi&VQXr}Ft=m@`3`Oaq$f&r*|}c*LgJy-_!`2C@I|UvCTohFjJf zSvuZk81S0$6oR{7GvcLS6i6(&g-z=Ltbq8ZG+L54bfSNdMb^217Za4 z5^vy4&=LCX4P&-1;KrRnq`zrwZcuC=qe0kwi?DHoLDW@5@e=_wEYIM_65h@;KGqhI z_B0N_EZJyuEzh)VOkFk^@ij}BvC>L59z}rEN0D|N=1fm+GOiVT7kWB7&E8@RmP*$A zq4%Rz$x*Rh_nm|g+qpS4+GJFS)nUcSnlEG=7x?N$)otux9yFr!$D(@$4jcM;9^%I) z0!P{&r*?SUoK`EG1L))q2QZ<*U{CwMH*RAD@i@!QlJBzE+l-!c|6ya2_wOEK`BKb# zPr$tYuODOib+0k-vRFL6&v@{SP_NAQ#(T z<+sC)l=+1*?r*X9_J4%MC|6QHDk%t`78=*&y;x*)*UP|wUyvF5p{H4+BB?y;9|!>r z+iBF(126IX4e9?Wqt5WBfKL98sIE%0KQZKiqFD<)B}vZ%>Gdv4_1piP>gHLVVyd<6 ziQ^Oo#4 zp1Q0s{rt}v8`h+^{e)G;h4k=GSeJf86@1 zY;v#f&cz-Ma=r z!s&RDM^D2J6rUo%+j{A2C}e2!hD0S&)JaU@-<;vRr*}U;UdQk0(GGrh@5!HyCn&X5 zv|V8;8?*c_Uts%$UO!|=g6ll8siX+H4zVg8w+8)R{h0j zM5(8ZILbL?7~a#I*Y_k2!QsJ#!KY!heS8WVrO#2(DWf;7OjEz<<7UxPTMg64&Z0%X zfi!D|;7z^fzMxHV-%<>i*%@&Z&8Tbgjk)=*;uR zhR9E_)ImG0RITaB3&y*Q;5%30cq9-!dzHd0^CFHu?WWX=Mxz?v$wUnYEUP9fOe5q# zC#JSoGW(E5U4%q!rylQaCSUoq#tfytp9bopOS02Z9bI~QN z08XagFTtA1ocn=!r#@j8S(=#;mGYo9VOHL!spi9)S|si#<5{5W7&DcAPBaJC%W~Id zV9M^|Po9oo@`hHkPsu#OvM$lAR5MZAo~P9}7iemEF&M3uS&w!!Fb7@^Oy&eOjZ#X2 z+4Nt6$teMbY{P7pcU^+{;D1lqMuAmK+5ZGqVVSUYD8_4bF^%AO_T{*ARKQdXa*4K9 zFjtUP)BH^>DTV@uKVAPaO_ni{d5!JMK$|&~IoRYC!}&XG<_nw^I!=&n)y!-3jInS@X!fC@iDooB-X-aBU^s>!`^L%$kAGTY(^jjBD`g6joRLc5 zNPqgH7{1&YR~(OIex2Wwp64;!UXH|lf>nkVhE}t@|GM=~37r2kf}Z&tw_XWBr|+JR zZop4?)TO~q%&OGCiP?-kY+_!82f|~Un#&CLq+?(D^je(XENp7VVu|jXrsnlnFKF4! zY!U5bpevf2SJFdQn|FAkF+jvNH%C$L7Um#N6hax-n9a%4!t5Efn#XZk+S?o;*@pK< z!ly{UVq4Xg=DoNnlit$2-J3fZsA3UqXlt_z+yE!FGOt9^9aos0;7n|3E3>{gOLDwS zyIYyHYvo8_Im5=F9^=QVDVqWK6KQ=yT353XEo);o3w%9NaHm1RUDbPn)}%)#xu|0kMs3Gn1xv0}9)1vj%PIW~Kx=Xmv;H z1zMtOcgSh8G_x`u&o%MZUl%hbyoSfR25JaO&5qJiQ=yd9(5NiT1*@ z08l}@CouMO1IDl0z<6;tV0_TN493mq$~3b}IG)=;l_TAyIe|M?8*K1p4O!q<`HVov zX`W^#GAl|zKXGLk^dQ0qI|mSs?{XQ0tI~unU~%@9<`rRB!|WT@&TJ6qIj%qq31V2X z(dy%(?)@8o1g=V?=ta|z=4(xh`yIj485wX*U$3<(pCo(D;FHdAn<;vphLjDb0sKxlhC*!OyIKM9E zGz`p-bh{15?xO+Mn*O9OIdP;P=QksG4^_iicYI;bG?=YZU$e%wP+&s7hLip%?3U8F zl-GyDO@UN|vG6a8h+!35B`U5=@qN)2UsCnHW*u!Gp^{qH1b~#PBHCx`p;cfnR!)C} zRZ%sxilu!aLSIrrU$Z`-gVIVgq@Nkn>NBPS=N&Ok#Q#W_5GDgKHOozwgCtOr~jLJ0PIzf8ObpfPnTnhm$k2ARGT%3w3u-UHj(}7`Vr-Y)tzMoms7d0vwt(2m- zvA)FF&Ts;HeOfL7fUa3?GOsx6e99xNsum@xVh-&qQ31tXXIiOF`!ZVqNV5u^N-;OG z=ZU1H+WC&8(V+h3P2PMF&zEUKfAeZ@p#&C^KEP~(yO7NXn1i}pMr2QgiEM;uh=oWPc8(-FgFWhdoQL_R*=MDlD=7t3 zG}ug`Iyabc-a^+(Xmf+v+FK-nmuS=tW|e^fxZ;DI&ji?~LW~H2#2rTb#id4uoZ&#` z(|Ak}h!eD6LdtOh0T$z@S$CQVmm|+R(7dvrOP&Dm;Z`MfRB-{6|J-H;u;Q~;Wm4Op z^9?LTZJjy+USdly%07kSyttv;0R|i#Xto^TGQh2w@7%;Qxcm9fNNc^z=^`my21jtL zB}Kox6hG?t^fbOK@GzwJpSSero6Jr(p#wNnmdTSATwfb&gNqkBW|=HW;cQJxu_VzC zYzj&-V)7ufWl$2f4l)yO3&6+zHEW$xf`EPU6r2kxDF!eyONxO&imCJ82t3%(qfeRC zy-Ek%0maB1+D6oxBrHd_oXM;NMdwKc8RU8ZAktW2g@oGqagQ$Ra+ ze0!*wSh+TT7i$aN=4Ng2=gnsGHf3lFsgPyT=~8(d7E8W7<>8Jvj`Bc&7TjW9c|)1J zT%j|%t95ImOI8k$DN~qoB6kht6-X%(dk-#;#0)`vLNSTwpq;iby}T8E+-txF69r3fv&-Rv}k&m3Py zKj3aUTJ-?7^W9c04CXH}MiffUJ*7xaq3uILT6O;rvr~F_zrYoIuH>iyI9^;;5s!Uk zX^SGsd8qWT;dBkbG$7-GcMSSTP;Ji2pdNRd$suD%S)3_H%JCWrP~A|Bf5x`-Z5+bnn4zqO$_5{a}e1W)4v)*vqVq+9)|Umu8UY3ujy{Rs#YqrdCju z#5m&{PHeC)89DSH>5_Gf(`EHCW(Axl*%+0CU2^D>*kNYxpdm73m|3N5u1i<}>MpZi z72te%ioOe;e@mDmiFMGxM;T?-Zowh>$S|{G33j^DRwR%Pd8|O4`=oFgW79s#dBCYN zRL7JdZ30ZBEk%cGCdJs&;yX=mh_sdB!34_F{K?&*`CYf|&q39NwLM+BJDld!1Ry%U6rDHUQ(jwV3GUe*D^N$K6fT3x zOvyQ|G?gJ8C!kpb7B2lODOe6}u(8xEIJ^g_wGr;I_g zgg~5tI4WR|>()DNa}=R?nF3KHIS+-6JYu_xBH2$h|7}*S6l$Ez zk8%{sPxt*Jg|dke2vgi82Q+tH=@=)xMl$vO@<#4+IQfnq8EL)cl64A)t;^)=Dam;z zvZRJdr9KasvBAmC9S?*UCpiy5eglv*n9R@~M1>EOFiy%4CMg|LtE6#Kio}k?%OkN+ z5Z_ZwVnKN%7D&!r;UpFgH$z9JqbMA%N~??rF-``IfN>%%1nJ)=dCTZc`=p`+PDKIZ zWC@CvHcmph5)in3|VWA!Tu<9OEQIs-94ccMGNt^S=(!8w z<7f#Hm@gEDDvrgY$~R83r0#4yvF)}+W_b+Cl$_H_GYEVL%=U_n69E@fql9sij|={6 zoZR+MIm;qj?!&T3sBSK)Jlu6l#~R`NlfNDc8Ik&qhBdO;rDQ%TE0c@!#co{~T~b%1 zB-TQ=*vL4BStEN#mp4M?3ZxCuR-n!mQn-vhwL)^PcIphZMjW*pCSC$e#H)O3q!b_4 zJsiS^OAkY{1#mhA%@)Q7YW_(0$ec2742%(H{SA29S*2Jo_mT3AkxU_NTD0}H%lHfw zFLUh4kem}rGogm>9~dL0NPg(i5R$h%3X#_2h zx(J8jQ}jboR-lf3B?kGCYLcr%A&g)J@v2hjFA;m z|LS5)b4qd}fN758T;^aJYMqvlhx}4}N*-f2En%P+8>a$wbCk8!ZH-(MFH;_JCFh3H zoD#iJa=s(rVyc%=DMw}b^b7iGOgSoL-598pP+eV8rC?8%5p`4wZ_qyVZ?kvVc3y#3 z<}qF?-z6;{wTJbs0BiFl=QbP(3Yqb++)>)&A@<0?$IXtnhud`SL}#A>I8a0NiWfy@AGr%n;X;w z{kvK8&;oT$qizw5LeLKh0v_In#J1u#zB`(v@sUdoen`8=nPa-{o6bD^K}c{=^25_8 zt~g>tz&G5{bbdb1_5&GQzsB_(zg^&@ z(r1&*In@`=20UA1;Xp-t(};Dtt--yX^=4lBb7rKbWzd97vwr+xAq%%sF_+Ttw&})9 z^CtK)v?iO~;3BdAWSk#aN6$_+lj2t~L_crP6~V>(8d^KqtnPChjr$CS`}t(^PR*Ms zSo}a;rkXc4m>-7lYAooQ)=92W1j2SBC~vCSq}qy7d3AXb`y`&ZGW+7%@io)TIo_i# zk%y+4N#0Difnuhc?c;uBxV{)hQL~QIfazxET25Sjaq-1n$x7DXVl02AbYWUK-Q2GI zk~eyWIY@&e$PZ_l{qeK)6|-Y}#qR5V+wk4RKi(~RBmHSyj~kkW17>H)o@dsgZCU0J zd=Fb~cBH|x%(y_A`0fjq96q;WPtlUufifNGn3F*YR+$|r*qL%?n?AQ-TzvOwhiCtO zDDU9>dTw1EsmmMzEamQ>W8UFb7+Rd-t;Q zyVhRVZ8I;OcLw>us6z2ohM+n%nN|&NLN#U7oB7G{QlfeJKtWl??42@Y_Ztv zOka{21DFAXngB?P`2ytQ6=sjvSGO$qb?vI`CG&+WFt;cd@+;aSK%zeSsJ?rR$QGI&6@Zgy~^xCeP0kpb8E#_?*8(}tLFc);?U8TYP9j zu{bVVUM!A4vjTm&+^pfqWL1iNMZVEtdeF#M1QN?+eC6&xo}Y5&oka^)EDJOgH?#2c z)#V>8SiAU}jXi_ZqbG-VoM0z@Zo>E(zsz6z{(vAS7p)BCGoKr}E5td0*$6hdkOJdGBp7hibSB zQ}<2tJZ{O<$ukFQf8`;|vl@bbZZvye_nQop9zNQIV|>;HH^_%z_I8?}Rilg1EZVd0Mdid;=6^M80EsnoH z`demlZwD=brU7KK2WS9ja-@q|gaCx^(O_6^tmDR#l=Kbc6PIxIIh!7Q%N!e%Rak8L zQq9dU7f<9>ecMdp*Kay)Hj{iSToXaJ{>Zy`v)R{^9^e~}>4frapYTa+(E#f*gec?- zV;%252Uy4a3FPK|dZC4PLqp>E$O0G__**%^Aw)WLq8hyUkbc;#3|~-p#dTfNEJUz43^j34DTnXcfbsL31=c29VUAVTVy=P9x z&&>DC84&2&@592MNB!S7yC+bf#Y7Su*3G7*q}#y1hpb;P`VA@32(2k4t`}y7>cq$cE_&w;z&`Jp+{ zJCmc}q~fy=%@**&?I|#u=!JNMsla>`?-;#YV73EY2MWxVZiC3A0$qe*24#jroZzzC zBQCN^o@S?9l^lsFkB6pxgy&j_)_i1ENe@5>N*XmlMCOBSRk)M0wWCJf5dXyW4ts}pl5ORxlTJtd<3s_MjU ztJX9EbDW1!#gUz6>vqAehlNz>L4gR-Dp-gPb~Gjjgh-oGzg=eK5e}i{cSyv2gZnKK333Zzn@G%pM zDh9-j=)?*P+PWL#`9v~4#sp&`HT~FpR?nDCYd$s?R4-tOvzwv-W~m20;lMc&!j*Y< zeqx@D@@9O@BDs`q|H2%m&CkpK0w=MxNqKwsnyJwVZlWVjfPpdfIjZ!v**<08)_fFO z#3@M_fFV2!+*}yr(B~I(hy~-3ug&}7L|g+?!|c2t5T|=HXK~HX(~U*Ar*UAn6PR3N zwusLORyYm4^*JgiG9PTSOb{K%Nw^q<1zR{bw>N}GdeLj(pA63CC4K@ua1fVj0wgXz zXkOoD0`tHs0VX>d5Sln`q?cQlj1{r{M~6gpCR>;gwIqK$u}*AJQP z|K3^&MVyBU8AAdr5#=649CQT<5*6-_u>V7A<$`0a{6^akn<>^V5!(|^>+O!LNdEP> zaAO@YWAgk*%uag1`~lw5NiNXvqh@3829c|CwD73epu!6x?U8Z_6LM$0K%XCl)$l5{ z{}BpWhITvUf`WMHX|k>tY43~UF`S>T;^EUM{ZD zi43ig5%ZK=^djTMsAk47G%h%qq3LPW{o;Q>!_^#F)Wjy6lMNRQD;|ScwUVwphKq)) zY4S1in);c78~PcPf^HYZ21v$0;o}&@TPx|@F>^`W6v^rgkGS#q@^Q0G&uMOPHZGAn zXp=zua&MDH4UJ`ql(fJ|%H!Kys&m4ens9-e+^&FhxPm<{?VnBSA2AZDxGQG4T$%3% zxnl)&`X~K(!n`s;%nV;e=ma~5t$(`;UOu*eHamLvaS(n#$Np?q@*Z^q3w}0V^ll7I zDR2X~pERFLcwOocXy-WIjt8{kC(ZkDAM}Oa%n#t1Yv}K0>)7l)oVf5)uHgg9`Q5ya z-aBn}D-j>}3)bykqI-TZ3sA7xuPAt+WWm}r?N_rSlDGeACY4A=`KnZS)=VJ(88fRy zA}X!MzARv_T7S_uXUwhuQtK>khrdiy&H`5U=b<nmD)&P>z)oJ}W3MmE!b zm_v0QjO<23{xB=Y|H=G!*7K3`3mW%_*#jcG{SOS>+vwOIX6u-(uFSzWc%2&kX+DO8 zC4ZV}6~E-_MGEl;l7=0I(}>qrQLFP<#oI{to;L@Ay0_1p9q{77ne%2VT<~jn!Q2o# z!!63CX426M<`~>wz2h%)l2O1Z>_|4vuM$jLkK4yheu~sZvz9kY0tM9UA{M?rq%jxG zTeR1y@S@o=YBOU=)2piL5l3_585TT zz|>u1?VmedjjrHikR6Ih?o7KVQd2kMrt1(*J>~pVr(ZSIqw+qH-UJ>Wh1>W82k&&P zu3E#}e}=Alz)j*dU0tgcQU#Cd>_pb%!U-{&eFszq?@NR4vplLr{O1fVS;wq_7p&(| zp+_b8zUD}@5c`I^;8FL+d=+FnoO6zfRJH4VC1|+4woIH3(7H&K++aT!m1&7c2n)w@ z<_4rXvQq>LH^}{revbtHUs2;I)x5%+!Y$WBMuhe0Y-({Fu1V6PR2>%+IC0@ZtD;l~ z>=F%)RtdIsP%ui0(9=MQ$C@Jb@(xh6Kf=o7P!evgd3@#Mc!4@ZtA-A=sEj)d$g+M#@9Z4xk^5zGtr8@GuQX3ckuJQSEXq`%rjM@mmPO&)=!jXsOGp)JlY6W zRr~nmKoWgysFnhx>X4r$X9IU1fo(j^`VYrR`#~P8PdJpsck+By(VpBTF%@$e9>ENc z@HyLLeh(fVviE(#qFM>!@DnAif&=a6O;x`_SSN#fOX*{^=(wqxR3vFT_=>iY;7JnK z4lhw7r8;?Y+&(ixsVls{3Zm`l(@T*Fl~}MC3+yl1n?K{8^&9O~s_8$Kj8va$=*<)@ ze2H%IscW!s_M%S>!jk46KGiq&ELVmqSg1ds8)DQ@?+R{hc(SZeUsa>eW7O?%qB`nG zR2}q;8Aqb((!XL=SN+^<-hS*(zsIV?#J>b%9%3S_8A4(N{N*IYsp?pg=@O?>Is5t^ z;Ly}K<%|D9go}HPh5{ea%W&&R0@yrS`RylPS>pn`b% zJ(F|G<9{-v$U=|~u8HhSHz%qXinG)ZetW}$=xw1X_^Gf(=tLs|JpNc)XrrYbMrxx9 z>L&b*tDpu1GqG$yK#=KB1=X7To_nUHHB-SaTQexHmzQ*sG_v=$qb#<1$H>4+sU`v1?4-kI3D7F3(fo&zaT>j zJE~E`tK=krD?tW^XpjuaQl#0$W&d(SD@@Mp~1oWNL^hyF`;t&tY zctR~MQPssb(JE102ZxAb6V>3#yBUAXrBIF?XM+qlAwEjKB&vGe0+H(<^J-OA4{DXp zJ7U88K)WC2a+L9BR5kxr{`9$TM}Q5_OE`{c)a)cY7_zsD>TJxF*u#2oBRxvXrFKLsBquEcszU6%jq*ZUvjh-Gj@o` z$M-nuR1n3j^uNs&SRoE+;w+NAKWALZw6J(AH!%G}h5q;5anNU(~EF z7_*iJ)K%TFPtM$^UKTe*hpwa+sVWtl>q!k%M|jx!s3C@|3pBKz8f0GJ2J`u{@K*Ui zPhu1=Xe_5M>tSTxL9zAK9aLCTrPAE`7>5OcQ2v)y<1~l=QX`$It2&{+?9@PgE$N*G zs+I%O)9|0dTo?iqX9JiDO9V|%L(|KuUJ-Szr;;3^TGEM6@Y2fEInl8(V;xuaF~~Qc z`lYBuypC{B3RFZM%Tx+&Nl|sHNEZj;vx5T0x}1+9-q(NFE6rj68KJtLd^ngPFY~gO&M-&rtVGA;0tJEQ`Ml#I3Wv- zjESpe}L<_n>7oJRp3A$$75|FGh#=m46=fnb$*PeZfUN_ur`zKaJtbFd2}(hNqj zF9!QliL4xql*3badzH~WCu#h^2M9aL0k;;4?5x^U{z=#v{#wn>IkaW8Q4MWze`gqP z1+=9zl(wrdoq-}1?@II7jYV3#<;O>{@F&3z%)q=|)Qxzcbx0T0u|mjbkI};V%$1zC zx~PWwq1lcYHNQgDql3t;e;X2`A9DkrcSSoMo!3ouqzC!)MDUY#U!m^Renj|Mm-ZcJXJqwyse$$16V682>=2tjMFZn76c(a#*;28aSjWJNs%8Q-2>X(wqFySw zjWZH!ZE;QyrV(51%<*K8ybc)>5$Qzu#nfxp8v{fRjqa_kb48oG@;16=01n-qokN8K z)XntDHEN^wD-G?VYNN*VKB@{r)JILMR_?JqYJ06p_OAYtrREj7{aV#B4Ezh%s$tp^ zx^S)XTL*-uzhHw%?w_bhUv$ayG_^qHN zZ*|hqZ=7js%^A_kJ6CRt5;jr_7=njl{rop`5;Yz|;%&dX$UZGY9E zak-oohPZYP%sfEU6;R%dD+hVEN+mh8~utr9&>WGNhSk`S#Xo8pY)vY9ZND1_5p4z3;|dHlSqX~3mx(%l^E>|g0yC7^s8}_ zIR$G@D0Aj3dgEqQCw>`Y8L$fUh4lT+s!xx(LK(&sURmR{p5fLKiNfga*D-n+c7#tX zRjyR1K!i&fqK0E&c=#682piOHgTH+XCZw-&Q{F;zZ-t$-it=t%we-c=H2QkA9zki) z7cSeNFE|bQf;4E2;y$=os4fn}sn-xy+3PUlWopsgn@GckpwhE6eu(O;eLI^72OvGWg5Fprm-E+V0xP6l;Bg9Qi3|&u2Owj2f$D0yQ?K~VSEJHMWHhkB*@I>sIjjbwypQ=^^U1~L|b*UYxwp{|C3ZVttWvVrOkRaaLE z<$gcc;2eKl%+lcBe|J_!4h%0)T(GmCJ-#>*T4d9d2}{atF5D+gVv!Z5uGJ#;tp&_;UZZgmBD@4>|4 z`@5l5-ln(jhArOW9yJOoX30IOw|B#L;Is8EoxDd?_il3o*1ZVqaRV(maL5hZ@dN^A z+&~5gCVcMzSc*VOwiA#}kf`u(bgciXoN@GV+;KMaR$^zr?wt9OsY83|yq`2oxd zClpE1yzvjHFJfT^-STg>)BC=#_C0F+IQr)QRjLV8Urmjk#LDGIG~!7$Jz+QFmaN-R zk0opNp@WS57K(XF)owLGcq|9cVTbUHg6Hk_9?9djKO%XWamINkvaXxOb89jCuvHlIA|6mL+eM zR`klWj}c@Q?B_G}(e@rGwUNd=iy><_oqkqT?RfkfU~gBlvnA~()>ZIn7hz`@D0fIA zL($H_Ln}@sbx&7gDra&#+Kv6Zy>6dlSWvku>Em=X+GgsPfv1f2(5wtqzxFl}p^bta z9zKMs=4a5oe#MLRpVF-HswSPvP$NO&kg+g^wh4Parb%N}<8GgDF+I%>`y_>@P|*SM zus{`MPmru{3+QOu&$$f#6Juvf$|gEBR#o#ZlRyDk|_6p#++bvmGz z_okuSE!*wMVLANhqD~IWPOt;ryW>Pa4|MOr9B{igJ;MRFE7OvR>iKFP2s{=RNU5LY za)UI}TQp#j+WY?+!qw?$CYCFXGYPN)K+XHp^SLcSpY;wUPgYlX&j@`BY1Cxp$4cYO z$ttyyW2|&!2C(6i%zJfMvg?TVZK9^A<|CY^gTpL{eatvtH58Er;*c@JF~Ki0+m~BH zMN&Rsq(DUWO2k+?cst&T*)T;7*1jfds;UDwfi0%0YVMVlJEp23RS!#}LBcvknC{Dy zc&E}joVRDHQkr&{zMX~zoFi0Wy7Kop;%4@6W(=GTH+XQwt|WK8Kn5%lo9uhBbOw5C zI`-Xu$lE<##pv4Mysu_rjlEI!VU}{&=AXcUaGU?HLy{h}`Podbb9pnp99eEB-##G_rIbP72Tm zvaX~T=BT+ie%m5jHNekJ&d;;istsniuV+Ko|4c>BPwZR?b(*WXVu$RBx#}pU^mopK z-EcDRjd@tVgk>0N-glm_>SLklznZLUp05h^U$SXfAMBpUq_lDrR1{+7_ffY~{TEz9{w^4E)`TR3~$r!1E$#Emj@Ooe~6IG+?o+6Z?)lC&of#jh#!+ELQzu zzkJ8h7f#fdi&ec=VY$%hlh8+WjHu3p$sY*^vM&qVIC}&CVimIa64j-Ckpu#Q7YTg? zub5bA!=4<5tU^h>L|IGJ)3Fm>M4+XBNVOc*F!pyB5hto|>8P zs#W?}<{qqXyj-iF6YqeC81NrF%^g^EX#S$QMF)eYyr??V%wVR(M(AmL1&>b%Yxeg7hsEQY7ggt$ z)1BV#EYMn+9I77StHVV!+wARbbWY`XUO>f*hu6G>RqAOpIwX8UZ!r> zx2>m|FRLqg#`&_^py#irD$7;J*p2J3a623(n#ayxM?;pYl;i?l*zFq&>kH3;0sn0r zPL8;WWA29oV|xX?vRv%}q^Dm|Z!o0RE7UasNI2Qckfy9q%{b|;6{=MoftbuI&kV0n z7LGl7nx4i%Wb&<4HJavgGzvfdu9=vISQ2-w(HA;$K^-I=F}!SH)_@h=7|xM9fvHMy!K~;UGdSSE))aZAm5^ zk)rMatJDp#fx59dS+JhgufjIU3Oc?D8VkXDUsdlSSbw#eSTTSL+fyzsn^!Bl;@jM8 zn4yMLAHPP`Xdd9hIW2?{(GDXJSIh}s=mj>ntWo#0cQ}kz#Q6b-nq5w-`8|C^vT%I& zxG>mbufub@c1Fh24_jO5>>5?K*FH($p*Y!uD74ch0(=!-9uPp7?fUgTHQMPCWSpI9 z_Bg5Bv@2-nTGcZBki}ND zk$Z*n>9jf;&<*DEZ##Wgc&fw#asi^#k-R57H%FreyO4iDfg6rcx6cV4a#P*R5{uL#C-u0S>SivY zv|J$3As6-E!+!?h&kg6Cyb~PJvQIfdi3Ow#jt1l0R5!E4A~n-V&304W%$f9Iu3DIk zxgJi*KnX?Ij}K2qhZmtosa&VjM)d#JR5g9qdfN4x^6N$G>F3u}%Q|jP;BMfL?v1`9 z5eS;Ylf39IU0;W?UO~^ku6hC_!>Ak;3E^H(2VZxS7=W>`= zB=MpaYi@<_f6$fupgwmUjoF}XadnRos(TJ@2eraI;19)hYsTlC7v;lB}c=rGmzK)(T}vl zP=G`vgjDZw4xvaKc1GOld6N#+Klr9G{jZY8crU~qCP1M0{P zQbsT;f)yG%8J9QEN+^$JeLGM22NiKuyikeE#iA4}g37R+=M-mNXy8jETENL3#52Vi z@t9O(2hJ@wsz$A(STeYS$FUvMF_m^YLVbD3BD_& z`R(*}tco%=tGlotbZE1BtfJdG8hGG!+J}a}BaJub9USJFP2awwT61$GysIV$O&ka> zqE@}Ddc@5ZqlL{Z7I8ZNuDWSZ3GrZK8S8idNR%#~r>c5PKQ z3v>K?jxaZRPo>(km`u@GqAsu&jaRa5ZYanx3J0ZJLP05KsfUz%Am!Qbg-bca6FmIz zJ=MB`NO^pSMkL?+LEVd8{9@g!1y10x-3MH~-7SbaFMT-@ha%1a8obRxu;5?%))kpKC8b#3cx<_r$1fc;jE^W8T>m{f8`;_Nl@ zq~yVEs;xmz=H|TFiie)IMMm8Ro08YabY2@<>Le!tE`mJFWgdkN3U0h*xFMW34Ca_0 zmLn^WgD2^Hh7y0Uz=R!?rXQ$g*i*gj11trJeG=e!_rqm^6)}xt+DlACYQzLOzg^X7dqBYROe+DK-NoRo839Ca zLL(X1QJ_=sz#`-YhkdBuhpJlr?;XsnnJz&Id@TeFcaWUQv1qaBAF8V9KSwc-gV@Ssv}W_GbPKlBg6 zr@(L%x59^b%k7ihILYu6{k&V%O*nFfOZkGLgbqK0>VJ$i;#G9h$Et1Jg=HR0Zk}WO&fh6o8~@~yFD5=!slqP zNR})}A}*sac`J1-ntr}nb)hPsVg+>p741{IN&gH7rx(zuuT)Dj1^|$K(OeqVS5@kK zNQ%`Hk>ShGI(Fhx^v%CB68Ome4Ij=j7FP(l3Mfr1Kdt=?o4)hubB6vE{r;J{$y%`% zBo3FCc99b+Dz|^Gn#XJtlRXln3}T-DTy4_NoS}hxRI{M08#vgsO=R6U31Hx4{-Qmq z3TJ$Cj~Y_hVGBHK;ph{ifIpGoQ0f<|gE4`Th4NJ+K%3YXVK#tENO9+n(YB(gz- zo+elR>^B8OM|%(dTJ8pBpe^eLvhju^(0Knps&j*7P9Niy89#Oo7+x8zF3nikX+{yC z<6HrX1OzD2l^h}DkYIt8YZ|)`cPk26K7PYM_n$AZQND+KUx@~7_!UkQ6tcVw#gUy) zzEW)i$Gli2QT%?@4#_?D;~ZQe&EKzTCtkRKN|U{vBY6D7YzE!n;sx5dA40yG&hE!S zxk74sKn=vtxC0nrSJSow>h9XE_Ny5IF3DmLv-2Z|Qfn{u{2H5E+bQGgVvWQIe;~#Ds z;l@>xI3p~sqQu37#Z{0v%Z;N2M^!&4&SOWh$omq#^rNa9sH9pMmDDPulA2{yf~T~B zV6c)ZKS?F`{iMcMT;hmp@ovbsbm1p8F#agFLo&99l|N#H^*!Bj3|r}|Cei6*s=of# zB+5OeD&tK1haA1RRCM#>Dp?(55Wd%R%|p$%<62j(W2#tGS^iiddvy6M4O#g`Dc}*VXB&UQr&`|3a4;r zVHRyVr5a<;^6)8j1M+k{tsc^o^SLGAy@AyND+A5`Kw=`D7-(b4Ws&F~>x-ttzp8Tp z0D=iemSe!*9On3f{gKl$Z z`tK@VFI<$@@0?nzYwPLapXhh%srq?Uqvd)QFmNLalxy81y6-);JM;X@Uw+oHJB~KF zX*o!P4nZm(ce?kynvK$boL5~dyVTW%7O2+~?9mQL zlJt+p)7lHF2LJ9vUj99MK{evvq`#c_uI}&Pzf>z!H{&l=y_$I{wo)q`aX5Te_d4d>j)j4F@XS*VCbQUkt6I&mpl)Hwap`dlzquT z>UQ_{Dff5&B~`0m_QVjuvY8jVLPgE4hkpmcVwfk#!(tlP4eSeUOr&pQu^30O7<*WZ zoiF=nXl;mu7{k{~Sfq$?9GE@#O<#xy~z_wu9Du!WR$NBGrd!kuaQ5% zK~{zQj}>$*O5-_HQOqoF*V>gpM^&Zi_bMbI{DD*wLROMW2oRP4AwtBQPV$0?0;W+m z8;NW!OAu)o5C}^Jqy-TfY=NJ>1B1;LKu6>Sj2dunnI3HIJ{$%Wm+rv`$N=pMWWN7a z-O8&9oMz6MI_InVzW=W8-v9saz3;txr6L{EX7eiQZnuhCmGV&=nkz4!jlt_(8hEWQ z_#}pk68)=Kwd~xm9H#)K!?M%v?S{d`>|QA+)zLaBAs#n47)wbB&xuW0d*pmQ;ibl~ zEK0SW<1?`|2*3I797pL`8r~B}z45H={5b0C`uC^#r8tUD_T__Xkv!3>@pp zPpQcwJ%Q4a&xy2RT2_=*Jad0ms};L4p~^kYhLt=lf$&S>&Ad2)_Lo(!le0*(>Ld(Y z0zaXo+18~X>7l13ZKhSV-jNpe@u6X@QKAbxza80;)rxH4f<#ognIB4|#cel>^2*ar zFdyqhf9i%r%J#>|a|MX0_r=&*Nf@HUO_C`^IWc+vEtJWeb_|czFG;4%q;0{GSRgbu z;ssdS?4!x(M%T5?_RlFa1dG%a(%MG5ERANEUVXkNHagD1IxE#$?X5FG(lsp7H0ykj zbeS-#uXSdVvxK@0A}z2^1WD0g{QSe;0I`emj1#s2?FmU9bEij+A4iGKwZ zoXTF2P6teL6Bl@>3xe?;8ewj-Z4YgajI2=&xxiy{sK3|Of~G=Z0tGicYU*hwTQ5Cl zr8H}3)@`Tsm+6%O@cC%#R)sci((R{g)=!=cPa?FbPW3_KI=i|HO>(7PQ{&jw3o>o4 z@+INS?ld|zw3{3w!t1-!FCw@2Q=jfm+r%0xbLkhj2w$5^SqT0smnIi#BRM6;5-_N9 z%5*ZU6+RCls*CacM0IeMwZSK~7xkd2X2x=f^*e=|xry*zbldV^X5LMQIL*z?$(X4g7nz=xWojdbM%f4Nry|pPD~rsyZHLh2wo~4uOz$oHk;6>=PR8)0 zH>;?blL&UEzMN`$s@W`>p#4NsK5ui;ttB_{=N?>#uNl%G|$|VXc_rok>psZ@zxRxd`Q7CRTSB|1Nt|QC&e@0OUSMBm$?H;0V*Q?9zq;gtd;(*sZg4)+`kFoI8&++)N zl!sEEA4?W8|79#z*K4`gI7;Th6DSJJ!|^g-@}3c{5>HF4JCP@zuaBc7WNbHHozjHy zlpo$?V2SG}IgxTu)OTU2=ebv-a zzC(XU@yKa3MV6}d)2KwPSzXgH+QmVh7_ADlE8yQE0y5n*j#T!%$7#Ch-MK}Yfgfaw zW~zTUGA++cbyvu$QE_2GarK5jvQ|Zg2Srwy{>T$5vQ==T%O81FMaHYh-l)?9Z=4zqm0 zY&`u^&6#s3MTZH&X>mhIB^f%0(%Pt~icH+MRkF%CG!_j!J%_HuKD!&u$_lT@jDTsH zxyCB~^a(0WIVIu>-%|qcM0i=WwL!E3I&;@tdMxg5+k>-xwVi9{l9f`wBRJp3rZZnL zKR6FAXe}?CM>*;1c1l`Y+nj}#VdN|D3_2dA+O6uT=Hv6I$aQruyXI5p^ndIPq?JE- zLE3O<+JW9`G=iui)dovNm+PVi!0iM8K$eX>=45% ztW(GMg+-L=05Nfmt` z{ptZ1G@+`h-k@r`{}QTm+u6UP`=V{$MjgXrW3t>v3&Swt5w<~?Y5(cpDA5&VWxI_C z@PT~s1#G^b=B|IB1+6YX>W1`sHXr;0jgBo%avNj8mxde02!y4avWuSKb-SpfZ4$Wt zm^erVc>61qlUbPRHXa6>2t)zh<9+;j9A^mUhF2&xtiF@``B=RDMlz>x#cr(V+w$t& zRG84Mv)j2jw?`NaNKxs4w8I1Fk2E5ayY8hz*V#CpyqCI`{n*xR+zavhKpZfA>aRUT zp2r@29LG1%G4~_99EMsQ{7MM_9^9ki`Ln%PUiRVieUuSf-pj_;J^WQmz1PICf!(4q9um0f{)kG z;6OR|qAQD3IqCbUe?UAdAU<%MQuB1J-)phI6+eLEX&FPuf2-s9_5HNYe)IsQXLF}L z>mVlIsD3?tO8f}l^Ae`AEW7e0=yt>J)}O8 zwtzbwq9@He?Y)PfZvFnLO8ZrOEwYNLHTpl}IN~sMNSJqr+lW zYJOC6?(sSm1dF>kWAs5lbDI?U zk>gYx5dVKDbSfvjNmJm;7r#jpdE=WHO7->mo79WDyoIlsZ$W0s*VAv&z5KPvaFi7F zE1ceF0bhI@dQ$#29@4q~Hm<+VlrMF(F+lgfO*!5x-F!LZTou=cj zAzn;T^K1;PjDqI5;NoSRe6WM}KzvLSzsnGT%n~{SmN0UABEY)@XTSr4{`CCmJ8)Y& zx!t=o(5rLzf;NfXX`UCt$As|m5bgqR<;Z^nO5-f=GPt-pU48>NPA4uPh(iJ0B>`W2 zmkPXB6WqoW(1k!Ya1pa$xkLjpnK`+~!4KfLZ3s_s@U1v@<`*urmo86uM>w{CAQ$77 zeWp zGxLT(g+?Kw2t~mN4b6)~_yo=Q#@AFFE|YQ#E^WY?rfv#PYoH$Yotfe`I*B;Zt$OYo z93xYJe;vZV^m7F2BWV`^E%=KD8i?gV*KgFipaOyG%v9d@4c(KFR^c{^kw}I{d*&$| zah?XoeGbPx4B`Y7B%}XBqCNIJwvd_sY%V>-hcD1G@U5j69iB>iIc3qQ{K7>VXL`8u zTk6Jn-{K}!jXmjGx?*}6$}tkv6+y+NS2T|Wm$7hinUtMerZLUqkzU49^K`5?L^(7s z1Q#WCa;#Up0YNDe$l^vPcnbxJRcQWVNCSnpbHrZ;cUB-gCnWw32mb=`X-5C13Pd2T zTUR&<4a#)zDd5f?5pGF5Z@Nr9z3;^ORxh&9ll83TW(aqM@URfxB7}#B@Q4r|>Em%m zDa`(1R4g;UoJT2-z5@OJcqTu2h4zluYhPJ{wE>*GFocVd>iBUumW8F0qt}ACIG^sk z`YP7%rS>1M(()FrAKUVSP5(d_5pRk zd%%al=fHX3JK$a*Y(Dk{KpKz>6a)7I6M-2(C9o8D23QYl2Mz#7fp>sYz}flkPR2zX z`~*Z*qA;K{&>JWQ1_8r?U-5U>X`h#8yNz8yE$~O+G|&KC2V&+RJJ1y<1_lEofoVV$ z@UOsD;6>oCK$|B}6;K2W0)_$Qz;s|4@H?Oy*bf{7-hTpZ{R#({0oPpYMu1%4PM{2U z7?=dijr6KHk%%ifR z*Rm6Sndbiy!aoV&vdEG$boy6AcwGp8%?0aF8Tdep==?mLuLRa4ZclS7go}Gn@f;T( z{j%AO-wBW2bwGNEKvHW?0n+jvLfc&u0G%x>3Jt diff --git a/ui/src/components/app/chat_delegate.rs b/ui/src/components/app/chat_delegate.rs index 2bb689f3f..dc2f6702e 100644 --- a/ui/src/components/app/chat_delegate.rs +++ b/ui/src/components/app/chat_delegate.rs @@ -2468,18 +2468,24 @@ mod tests { /// (freenet/river#398 moved codegen to `freenet-migrate-build`) must /// reproduce it byte-identically, or every user silently re-runs legacy /// migration once. Pinned to the value computed from the current - /// `legacy_delegates.toml` (26 entries spanning V1..V29 — V4–V6 removed — + /// `legacy_delegates.toml` (27 entries spanning V1..V30 — V4–V6 removed — /// in file order). This value /// SHOULD change when a genuinely new legacy entry is added — update the /// constant then — but must NEVER change from a codegen/tooling swap. /// - /// Updated for V29 (freenet/river#519, the global DM cap): the change moves - /// the delegate WASM, so the added entry legitimately re-fingerprints the - /// set and every user re-probes the legacy delegates once. That is the - /// intended behaviour for a real new generation, not a codegen artefact. + /// Updated for V30 (freenet/river#571, the member_info summary digest). + /// Note WHY the delegate moves here, because it is not the obvious reason: + /// the summary change itself is dead-code-eliminated from the delegate + /// (verified — rebuilding with it left chat_delegate.wasm byte-identical). + /// What moves the delegate is the river-core version bump 0.1.18 -> 0.1.19, + /// which is itself mandatory: the V31 room-contract registry is compiled + /// into river-core, riverctl pins it as `=`, and 0.1.18 is already + /// published, so without the bump `cargo install riverctl` would resolve a + /// river-core WITHOUT the new entry. So a version bump alone re-keys the + /// delegate, and that is enough to require an entry. #[test] fn legacy_set_fingerprint_is_stable_across_codegen_changes() { - assert_eq!(legacy_set_fingerprint(), "323a2f640bfd7a7f"); + assert_eq!(legacy_set_fingerprint(), "c43e66ee147e3739"); } /// The "migration in progress" and "migration done" localStorage keys MUST