From 621d98231ddea9e53b655b21a92f0b8261172fa7 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Thu, 12 Dec 2024 11:48:47 -0800 Subject: [PATCH] add t-addr fetching to view service --- .../src/gen/proto_descriptor.bin.no_lfs | Bin 102050 -> 99489 bytes crates/proto/src/gen/penumbra.view.v1.rs | 112 +++++++++++ .../proto/src/gen/penumbra.view.v1.serde.rs | 184 ++++++++++++++++++ .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 647724 -> 645953 bytes crates/view/src/service.rs | 19 ++ proto/penumbra/penumbra/view/v1/view.proto | 15 ++ 6 files changed, 330 insertions(+) diff --git a/crates/cnidarium/src/gen/proto_descriptor.bin.no_lfs b/crates/cnidarium/src/gen/proto_descriptor.bin.no_lfs index 383649ad97d9ab3daa8efd3942653231e8e3d5a5..6e23fc5c3fa90b2ae6af49ab1a84a133ac4ac9bb 100644 GIT binary patch delta 21566 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 UIf`;FK&!WgUwt^&==kve0jcZ`p8x;= delta 24007 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 ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.view.v1.{}", Self::NAME) + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TransparentAddressResponse { + /// The raw (binary) transparent address + #[prost(message, optional, tag = "1")] + pub address: ::core::option::Option, + /// The t-address encoding of the transparent address + #[prost(string, tag = "2")] + pub encoding: ::prost::alloc::string::String, +} +impl ::prost::Name for TransparentAddressResponse { + const NAME: &'static str = "TransparentAddressResponse"; + const PACKAGE: &'static str = "penumbra.view.v1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.view.v1.{}", Self::NAME) + } +} /// Filters in an `AuctionsRequest` will be combined using `AND` logic -- that /// is, the more filters you add, the fewer responses you're likely to get. #[allow(clippy::derive_partial_eq_without_eq)] @@ -2117,6 +2146,34 @@ pub mod view_service_client { ); self.inner.unary(req, path, codec).await } + /// Returns the transparent address for the user's wallet. + pub async fn transparent_address( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/penumbra.view.v1.ViewService/TransparentAddress", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new("penumbra.view.v1.ViewService", "TransparentAddress"), + ); + self.inner.unary(req, path, codec).await + } /// Query for wallet id pub async fn wallet_id( &mut self, @@ -2800,6 +2857,14 @@ pub mod view_service_server { tonic::Response, tonic::Status, >; + /// Returns the transparent address for the user's wallet. + async fn transparent_address( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Query for wallet id async fn wallet_id( &self, @@ -3596,6 +3661,53 @@ pub mod view_service_server { }; Box::pin(fut) } + "/penumbra.view.v1.ViewService/TransparentAddress" => { + #[allow(non_camel_case_types)] + struct TransparentAddressSvc(pub Arc); + impl< + T: ViewService, + > tonic::server::UnaryService + for TransparentAddressSvc { + type Response = super::TransparentAddressResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::transparent_address(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = TransparentAddressSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } "/penumbra.view.v1.ViewService/WalletId" => { #[allow(non_camel_case_types)] struct WalletIdSvc(pub Arc); diff --git a/crates/proto/src/gen/penumbra.view.v1.serde.rs b/crates/proto/src/gen/penumbra.view.v1.serde.rs index 140a24f431..d5b11ff8db 100644 --- a/crates/proto/src/gen/penumbra.view.v1.serde.rs +++ b/crates/proto/src/gen/penumbra.view.v1.serde.rs @@ -8305,6 +8305,190 @@ impl<'de> serde::Deserialize<'de> for TransactionPlannerResponse { deserializer.deserialize_struct("penumbra.view.v1.TransactionPlannerResponse", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for TransparentAddressRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let len = 0; + let struct_ser = serializer.serialize_struct("penumbra.view.v1.TransparentAddressRequest", len)?; + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for TransparentAddressRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + __SkipField__, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + Ok(GeneratedField::__SkipField__) + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TransparentAddressRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.view.v1.TransparentAddressRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; + } + Ok(TransparentAddressRequest { + }) + } + } + deserializer.deserialize_struct("penumbra.view.v1.TransparentAddressRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for TransparentAddressResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.address.is_some() { + len += 1; + } + if !self.encoding.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.view.v1.TransparentAddressResponse", len)?; + if let Some(v) = self.address.as_ref() { + struct_ser.serialize_field("address", v)?; + } + if !self.encoding.is_empty() { + struct_ser.serialize_field("encoding", &self.encoding)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for TransparentAddressResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "address", + "encoding", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Address, + Encoding, + __SkipField__, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "address" => Ok(GeneratedField::Address), + "encoding" => Ok(GeneratedField::Encoding), + _ => Ok(GeneratedField::__SkipField__), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TransparentAddressResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.view.v1.TransparentAddressResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut address__ = None; + let mut encoding__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Address => { + if address__.is_some() { + return Err(serde::de::Error::duplicate_field("address")); + } + address__ = map_.next_value()?; + } + GeneratedField::Encoding => { + if encoding__.is_some() { + return Err(serde::de::Error::duplicate_field("encoding")); + } + encoding__ = Some(map_.next_value()?); + } + GeneratedField::__SkipField__ => { + let _ = map_.next_value::()?; + } + } + } + Ok(TransparentAddressResponse { + address: address__, + encoding: encoding__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.view.v1.TransparentAddressResponse", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for UnbondingTokensByAddressIndexRequest { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index 06cd62581e2a92f59a733d3ad4273a2ce50b030a..4b21669be53bc86cbc38b925723733625b448b6c 100644 GIT binary patch delta 37171 zcmZvlcYsty*7oPt4c*g2nCT%7!6xS%1OWvJiUCl}xVw%p=)8-A%M6RIyS9i(5Kw90 zDkc;aMKFzs7%_li4!kNNg0iAu7R9XJ?^M<8JG<}q2ii~7si#hzI+g3ztb4B0(+_v@ zQ$H{9QsHH56Kx*oI4E$Qul-AqaGdkQHkUi4xql>%sok3Bn{-~R{i)#*s>|W2Mi-uc z;a|?HsH&JzIr%Tu6*K-`Ik}>`S=WryIeCOXwR~E2#mQ+zYTKnNl-semQ|+2YKRRlC zs`l0fi1&8eSGjy_|;31df&J*C;cTv>-UB`4RPT3In|%7hse)fH8f zE7DVQCwCasyPZxG=rl#?VB`toCypM~Y+vFwr!eh}pD=n{vriHyCo8IEUU16A7gnT~ z<~DaYrBkQ>lhKHAqiixrCX5()Jm{0$h>p#ji*l1Xjv8pPF{(j4Zv42>IuoQ%8-4QF zF=t9P4QAF%9dugxw8|;vHI>t=(ii1+b{x|`Qzx@V>4qna9(T+s$Npu)$)m@NJwxYt za>ENMs;kS-s~BB1dHR&fs`JwS%$?n7sM9ZZeW&&fq$sJhKjMTF#-EN#Z*=<28JT;n zbI-=flvbnINvBd)iDH#&*5!^?`x9M*VT6Q+p}wKe$T$SS9&hVUD#`O(b9+9R3hznEO@%G_SatX z3!RC%xq}xJU9M7|U!a_{J8JbCM>xkh@=Fz`>ZN=MR-n=*sUj@|7_FMxC`mFpFQ_CA z!TTI7>89P|axI3g&$vh(ryAHaE>g#pG*10X3wddGT&`r;C0P%lajLNu@(>!=thvq8 zPrKt)nT_%h9G@5T5geZv4ASld)z%6I2u@JVBZT0DmTfF!BJG}(7fc{H`lP&M0?Cu| zlF77ta$YitrdNnvL*&;PK<#~=ONV})!Dvla5=ya75 zH6)0#oL*ECA^1*DH;E7yJH2^Xs;f>+)ET*VkLo_?jC^8;#AoCaOD&y|*5!lPA@Lb4 zTc!Hz#Ar4tH+1;GL6h={6^SS16HCoaO1HE*D-usSER#A(CkFf}w|4l%L4V38c1irF zBJC06B^COo5^ZNeBHy7?>K{5W6?#r?z=(eiIwzmlBk?);#8T1clw@qq9*NIs*C91f zCq{5`ZvTiu*~$6DK6N^|NLN02N###&(a9$ENj$l0H>p$N5S*fV*r)(KrsPQii7RRy z#X&OVu+9;JWJY=l)mv(36{x!P8(Z=`dQG{7}ntCWPt0-*~ z)`MnNX;jVipqbU`uvBMSmP-4V6x@*8KRT05rCd)O_mX5&ZD=Je?4PQI<^aI|PsYcpx~1yVSrFxEn6fbI27+k}HkwXn zw$q|x1a;yrQV=N>X)kwZ4@TBAFrxBcy4;~f*jSh@cW4q8!gRUQt$V70Fu4Wk;0i}A zaI&t6cQK}Sg_CNQYMBZoo@(&sI$o=`^)h3tCQqALUHSKlo~cyBRKmoPH_`Rt0AB*? zr{e$!=Q^d$;s7+5>$GT@&jEoevyRt-EJk1Sf3u+0yesQwL03sYoh+z20vMelt*AW$ zaDoQ55Gw7>cf4MC0kI$fvD#Vck&yarV-ZN_JMFs00g%pjXg;P6P-3BjQy8=Q5CWq* zpl1Wp3~el23!Snq5rk=>lXnbc7iAsQ%f`~Zd5dBy`ZpjRW~dnXfSIllglbW&R3hyy zaa80rba4VBrRd{;d8HT{fn{wpQ*)&fP%UxVcSx<1?m-5EAm^wRxqHUmQ<8I1O>KS2 z(C017op)U8QOjZr>e0_z7S{>^@Gpxio&Yjf7FRsuTH0Hl+jd;*?DD!qQoYOT5=r$g zkE>UYhXhc)rY4eUFLYFQYZ1C+fl;C9lYvFeqFA^>r+KFcqEhHIV4Rtw3$2(cuFTaO zKlk*NF-0K?t#s&aObyT@1JhB3&?N)gwnrJoh!@=C6uj;@bR4dS3B8+~WUG|)`L5XQ zmfVCBPWsa=5jSC|cT3b*fuy*_Ijo<~3JCWt&cMOCvAWV&Z*|loj%ll4q;GXnjZ??t z=0M3|b?)~QP8_v5GN=wk|J9K}bpYvBJEhIFYwG~=S?w^x_=hDzU`_7o6aP7SOT_*8`bxtGGONdJJ zodnQJyc#hP@IY?R_}522P?w3>i}!$2za+1M82te!T^0vOLZ?;h)WV1f5804Aal)dJ z8|pGKmGL&zWs-^ChPq5tF99&Mrwd0(oMmIK_K%us0!XpdDM_am z8M~1C%Z?hI`(ol%XY#|eU{}e=__9;f(&{Yr`?Ax@^rgh=RP?3Ba4x2K+37hdf^>*4 zJA+52&XVRx1;3X2@RYNAzUI_79fIpiZ2?W=2BOnzPUB{&ezayU9lYffJeK?GseOCD z3FdiYcp@Bh{sq}bz>Hp;6*{e4(Bg$!W? z#3=$&e3(y>r36&lM~wSNAS8`Ubwg>8# zBZb%jr?hdZofRuedtcl1&)qz%&E*N)dTZ@~s6A;5H;;uH-?^0m{bNnWjnY44l5 zDH@W3fH*}%QhXyRI@$6Tr@e1;f1A{$?YDKcFGlQJ(LNHRyE=$ihcP8E9;_=`g6Kh0 zP&}CqI5^~}-}5a^x{yOoq8`g=sRun3`O(RBI=kCxKgRAtFf>0pjiaLInZ{3XQNR!p z5IGnDr1(ivyexx+P!sT*le_EeSF*p=6*S=p%G|?~rhb`Xl_I?lh;{@tJr|I+a+$Id z2OybVrdX(0VVdb>%FbeB?c>c>%Jgy|n1I5R6=oTFXDb%kCavf{Ta`48AXKwenJkt> zDOA5aR!XlHVx?pVxIAW(d@oleky6rkTrNu8D19=sz_jOFnXCEp&BLyYDWpffQWZ6{ zxl50Hr7CU|LDF2Qnl?*qWa|kEO0u|i{9gt;Ll?&sGT1JTO(R3?VwH~UCMNmeNbzph}`TlnM0>imjKQ4Fg@& zt+{2Bf6d++GbCZSHP%6Tty^O|uxS8nEgLGL0v*YRbRO1!5&qrL)q=QmKArm%A8vx^qEw{U3R3c@9b6uy7NTxCuR9tXw#f)6_)X@MfU!B`r2h`R-?{PJZ3?l7Pl=IQp zW!RSh7Dw8#F#%)_-Ih_;PX|w`f~RxA|Fp?IsTg&o@V>OPry{2YQFx%C2SWc;WJVzL zPem;a2>nx0OY_C!H%Dd!!32z$WFodXGGhm#wY0S(5UR~$$4+P(q=V;F!3VjQ{->3jU6EI>DO`lgq?X){& ziPqBX&BO=@)$__OG6U%owkdX;q=uC* zA&a-f(rcx02GY^($o>0*bwhW=W|4kwhq5zIM9^Y~YGrnCfRaS@?3J3P3D99z?&Yeg zVY^}i>E(9Cl`Xy8uBe9zWVHyym-^sKiFELxD%h8sHNAKCLzOg5J|PzTDDou`nE*|- z0ipjWq6b3%QRGWN=s${lDIq4@8;vg@n1B(J3@>}5jx0;GmbT*y5URb=_>vG``dBHm zqXdEq7*UBYeXNR1S57QUAFGze@qjRWtU7jL38lPbI@qrYzEnd7-I&#kD= zl;`faur#}0C1umo^O9nN1Cb3tWCt|a0nz+GWCI}C9f)iIB)bEV4U(eEXUgsrfM5bf zOwyh{Q$-omo`}}cZOm2y5US4ofcwY`a;>A79dPt zC^lMpV}rtU@Qo_?0~@sc4;wuEx5FlVqu4u;>7FBD}Csa)?F*JTgI6ygAfVhSnyA;lSj^Z+D*;*gAFMj6WfgW}-CL`wYw zBV}Z1|3l0q+5Mo>ts-HVeo$->z;rUqz@Hd~Y^-dG0wXGEe?KX^cY`ccKdI)Xf`B@0 zyY{Kkx>zLrRpqX)9y96Jm_ZuguhFnmsE=}fRmBm5G{9dK45lFXBe2832r}aTs(KHw z{4jAAcSOyYvwx5IWft;#%rCQ$-(!B6h5R1#`|$rB^ZW4sF8ud3zzElbJoK#h1B%JuAK&^ zw3k2Z7Mqq1gyLbhqv<7p6#iki%MseRKnnk`+kbGXi{?jmQ|^z;x@9-T^s-#v6w^!X zZ*q&xLO-Qzf0Nt0ujP|<|0cKJD7|GD#-M2GvyrI zOtPwLW^izv(I@0RQ<)RZfpTU>#nkMyipeIU%4yRwQ>JV6s>?56+dXsa^jVU1ccW2F zMOC$Eq)9T>H6mX=S@f)qbN|oGt06h%eAJz83UhwBh-NCLP9;-ja+EHMMP^o4Ov%iu ztT|t2K8;mzX2#5_no3c^T3k*YFlioATTjQeB}3iQZgJ#K($b!GyO^O<_x!-_!y+o2 z;c55qp{WzZ8IrQW@|>%-EZMV2ypVr<*zUArU}FTljVu|z=r%L`36Mg+=yr-)fHeOX;}#&z|3zs5AEk_o z!u3Y&hPhLmVQ<7a$QtF1xS7ft&lL0Kqw)t)x*G?m>IQ^+D^ zS6nl)NZA!PQ(2_!ikoQyC3nS2CWKLxG{zwE16M`WCOhrG$QZJe`M~CrMHyMkeBc(F zz8y$LAGn>nT1zH1SGS=NB%=@9fkSLYtaNtAR+p6yFv>{w<9Ejel9kTxxInVf*`19` zR7gg<;}R8;(eAiJEQ9vAD$*iFM!+Z|S+wklGm=Hi9=ABEURkv4aXXp$Hg!lod)%(Z zQ<{LuXpcMKh}1zDc2kPIpnbXHulnZCMP#xs&V(aZV7?dS%oSK{7P6!wlYK77r7}bT z$z-3K=@UWn*yncZoyzJg*he~$Te;|8f8jLNI}m44k1P(vS;+R%0oRU#DaC;-kaK#I zMLn`O;C3{lAhBd|!0j_2wbT@You@Bze_wpfi2CI5Wt>NS^7t}#RN0XF(oIK$L4ET0 zQtD)^R+PP{Z`|B5OU4}C0G4lJmIknV6SK%3)i-Y1%rsJ}0W9CRTu0EW`jldW>Ib*> zwIvOl5e?z_A?9fa&kr$=>|Fg250DMv`N3tMTecTcie0N;++6ExE*Vh_%P%oYF)Y8t zEL_|H=Cvt?Tg=JyPQVPpLFF%7Qg=L|Kf#g6Tr5dptlY8K{!N>3un#D0qBRZ|c zo;^<>7MjJLJx>5avsh^Usc9OsC*!Fj%BpgGRu9N6Up9PnW7r6aiq;smYdw2%ol=cq zyVkRZVL;ff^*9Wh=dhVCZF9NDwDuplCsvQhOY^_K>GCM9=rN- zDwm>j2|ayhiNX~!ri5NmeN$Qb@TM*#p@wp}$JMcwUcmv+9PUX&UFjv8q~7%@U6G!3 zt*_0jcu!4Q9~FsE)Lie`)(s@ldau~5DQp^#HH9=iAWd(*XNN@~O>e!&u=ttOWs%I| z9?YG3{TGuSjQM36_h8H~)3^t{Vsn&C3QYE(*Vh~;0^xtq>p$9N=fMA<=5FqVtyI_9*OxyhetfyI~D0U-Xk8{Y({^X<2~XX);ogmKjL-mrLA6s)gSd# zsqWy5#OjZFMfHrNwt5V+g;HM{%dk@<9sHwS1GC)-`Y)(ui8ZnsaTcOA(uA5{lAakj@kOUg; zlDT=2EWh^D&RVtGnY1TXQWidYVkL!Qk5_Cub&{au9&fN2tANzo9&hM)J$V+Wqlb;t z&A&)oU@y)8s9}3!ewq2~jT$~8@b8TpJ`jSv((vWryGT~U`@GyqCmeS)zfpHz%p2c|v_dM(US2S__Q=yfz#cIwIO_&ZO{_Fe7cV937nI21XI=`T`MHC+L!M7UuW0?KW_x-s}}gSFRZ8cR~Goi=Hvm05f=Cu zVWsq^^(4;~wY%2dsIn_!3UQ?sz8y=EA)ggKH`I*XWXZY0XWP(1%(%jDWtNBtW5yMJ z=RTAQep*Bj`f63)jMA-yexklUr6O9)cs=v|vfPjBJGAAOIb72*=ytu&N}`Llk3L?y zF?ZCx-P+z*S4_-!V_h-uEr>PF-Fk16PPfz*mD1iKqJPxag{L5!ebue(>-x1H+`G+n zDszW!YIEx3^D8F*l_lceW>(H%eWsUv)q0s$S(U;Urn9$vrcy^~z;+ z+C4M5eA+ZwaE`4WTUA+8$(`qaR7~mIg`L|G_pvR?^7Uev@nx37tc)`(GplmP)ppI= zY@&4|OUJ4TE|pi8(=yJjm|V_M(X@(LmHd*WbY&Iy&p9H{SEMturq7%6r^FW=x$v;{u&rm$G|iO2t&Jn^$J#R07fqXU@2Ax@0v~ z7t^p%Aj&wRDpPsEh0`i7sHm#Z_qbWaR!%-YGx_}Kq(I;4toEk^|3B8F;4`ahC`e}V zbQaUqEU9ZU<>yYHiPdVve%Z)?=*O!2V$r^)a`Mb+aJFgO4jKARg>MZN2aUZTj-jK#7h2;TsUri&^(K%E*GYWEX`V;t%eGg@5aI` z)iWbl=}*m^NagnJ-M4Rd<05ocl{ineG57Q;DYTXoLz}&dni&=47i6Z)lue5NwsqCt z%co^4r~HTHEZKW7&LAYy$pVMdiip=?{;B1a)9mI!J$?HT2amc(8B#aLJ%fypn|*tr zh_G%A94MM*En7XCTl>wsMwoWJ+2`Ct?xxdm(DQD|jeF>UNn7F!WH{UsXCTAj7T+E} zk%A1i_{_mg1~MFO@$Eh!vG8y4*{A!|@I&=d?yL<5&Uz{4mwmvOVtyG8U-IoVsh%DV zU-IoV2?+m7zMUok;eW|znsk&_pC0bj+|3VX(^GB@p^o{SIBt_HRAu1>ejavGMvpzZvt(7Qve_zibh_=@&=+sB96u>9fmV z%p+R_Z~AS`q!KwzGp7B)$_7!=8%LCa~DQ3k)HNF zA7_&3Vm+C$?((@HY>Fm38oeZ7Oq`>i^xr6mbA-f{l8xJZ|dPh!Cqf| z>APh&a-l@_*lG`MYU5=0`iZ8tNcs-ozkRQz9cs;mKLX6P3^X z;v#`fKvW_ENb#|hC`tj|=X>pK9$8l#fsn)Uxr!0?`J6mONhr!Eb=8sUv>~s zM=dP%X?XR0eS_uJh5}%g1m;tGpuYGn- z^sGhBUcdF#_tC7ymC4_?KG(H%Y0Q!9LEmd*bQ63Gxe;OxN9#!l`5pA@TO&#U90&cz z)+r@`JP-OD_q3Jy4FL#zmwWq(_Sx_163Kk-JKtUh)nX#&H?qx7(n0i{&tk|lHa6Q1 z`N}L0>(OX5jLg7?3&h$pGh*R7OwcF1qgqnBQj)RWz`pM1IFn0xBUVAxNw zHH)D6$+tTa$U*ayZ+9es(EQ}vg-JcdhS{&aUYPJ3b$*R`_=Evy_acae=U3nEMF8RX z)wc^1*xf7pj-F8bxi(wRK6Y_njaFY94QPx8q)3YcyPRu~4z39b?zKgd{lRMj z&dSa~qXtr>Ww|X|&mFcbQid>cSQgkt2apuYf?{(z4Mdq`0T+!vmcgrmlxbyd%JZL` zwK8T9H(wbuNO4vMc5EjF3@ZaWwgc%+Rt9!#2hty{3>e#Gao>OnzcI*lS=A!9`31lK zjZv*P(6wF{Qeq8XkddW<^wzfrYJAxymHXGKeYxG+{yYh68V<4OcYCa#l;QTkF7=5; zzuSYs=G+a4ezylh#_9e-ppG7TqIQY~BFtgqmcb+WNqblm=OSmZYa-VmmR#0Et^t&U zk!v)NDcD-$8h?H%7_v5Ik#AGhMy`PzENcVn8bDaqMy?@S!Rv92)5kTCMzucj4-lz< z#y^0VXMN-!4b#E>LBVs@KV;wc{vg>b^@CJzLvfG|xlu3wbk>GQCBn#OLu5W6Nj5~) z3q++2QS|~b--f7qfmH7Xsa|PP4aM@0i1l)>zY+|4B+fz_#3PaI5EHq`c0jUtL~M7j zQIg_3kt==m{z*^73{uBW#7as|PXu;?)=<~+69N6T^p!xAd?ILL*1bTKd?M)HM>pGs zQpKBf-HhNj6}36eMe2BSR6E3y%jT$dfI6jZxU#|itgfAgQajH^wF4p*(9{l);yfGG zPH{Te8WilbwIloKTLX4b#d^h3Ioks1(nsF}@tbT8#o34h9E$vuSh6`3`6-ZW4vC+N8ar^tnXF#Hs`ken<1DlXK&L|o|C$b~?p0vZHt(( zl&~{F9e@Ul686I&9f0PG65RWdd8z~;usGqh)ALk~;UvIvW<>(h#R*CwU-fAborXiI zd;p}26ZD)iy-bUmS0|LYX#|20XgmN&)m)t@D%E`?5U#5ed~YOOCJ?5p6YL!7YtLyt zFy(TqKe#!Yiz!5*T*7WXrnM90681O{2t_WzH#$ZcY`!dEr~GN{C%{M<>CTtMOk#{> ziL_Z*A`H{A1osB?>LD#~dBR?|15qwuL?v4%%M*5InOLZnCrZq@D^RE9x}8yqq$?8k z5-5cj(=Frt#}kT6zC7J6Z#B&r!X z9SFr2j8at0bqRZuF0Ic8fDu!F+4{IH)=E}@*Coob2svROnSxsq|ZSB-Gl3*)j*iaz`RzzNY|+>)e^J3uKKEAi%5|bpZ8wXTq); zB>;gn3HvRC#wNh{uLST#r-(Ex)-Eq0;JfN35e@?4Bu1i63QBi(!ZRPm34_!w0p^=3 z9RTOu33^Le9hOpz;GTqfFyZ0Wd^SJ;^+JfTCJW31EhSrRFUw%VeHDCk?Fxv>FvT+aLhD6rxBS;7m z4=3yfzQ!iNoOtK}l02NSCms?2-k7jo;Al(=0?cWO4$u;urWnhk^`?Y+N?Trx=XmTp z5E5Bl2B1w*_d_&vo1}k~?gxnFH%W^ymS+Hht?g5J%j+-v9*r&UXv;rl3@vsh0LI7b z24uzZPl#QmyA%;Qoqsanjj)DhqweX1+LAZ4Sn26RLcVgNw#|m!GYPM=NiP@y0!*K+ z1+c+033`_(1p?1TR?CWnl#`IiYy^gBwlWdtT5va^i9TN84LH>)ixh1!~EGsqfR`qHh5Aw#X9nJL3I?B%?nmALrxv7wbV z^b4_z69D73*w9LQ_=~Ya6M)1^iEQ4Z-E{D3LcN(cw6x+^6N$#wY|dMjbSa0j~SEYW;@U_6>Vd)RvJ$Q#-fLvN1_ z&4pLo^?zeS6M%wm$A)&bq2CezH4aSx67R-62cK*1OsL(~&iJ1UVLKCc3mPch{QLPl z1tUO!+4<4}*x>yHD=A}W{Z-bkxCaK4f`F(8CV&*XOb;v$jn8wDjrmF{tF@E>k`Q8! z54D6A(cdnLN2B(hg!(vdXc?9Xhzu=D<~<3!35_&tdlD_o?miHQ-jm=X1Y>8pQokqB z`(td7)kWYiA47kbFEm&T{ZVXa0-)R*8=B*BB>tW7PQVH%$h;uzb=pCl3` z)<}F`!zv-RqWS#hQ~G~1`-ebx$)6_d_OS#&u|Hv_^BS7~bE#7YV5I#CE_Irk@WrkN z;x+*$1p#K$RZddkJec=iU(EVNY*t^J^~*W|S#8&^V!I+j8NRL?Acp=X;f=Q*?Q4(zHsKwu zugsLPU-W%KnVT)8a%JZGL{S6Nlj$v^x)5p&Wur+hcm2Ru9O<^{j2v4|m@&O(`nfZw zW=3}FCXW?Ssj_1DK_=IF0MaXlx)3%EGnVZ~AuIh)GPyAwu~8R4#%$6^e$3Xv(CO%Q zmhR_-Dr?&$GX~u%IenbLM`oFt3NA2n*l6`5$DxUh0sMeVdNS~{h(lgYBw{j$JmBnzA?lWIZj4PW+hvR5YA z-4@>>TpV~_(#~r%##IO~gOCouS>`3}p1BU7i1U(m&s+!KF!PeO=a2vd<|jRIpoGpt zR-^=2PQAc^bbhkFX(c*|PSeZ`1UdlH`AI%dkUDE5YA#HwKDy385CV-q17Ta3w4Z|k z;aZq%Z(hX!!n82it9R;hS;;rj-N=$$|8K7twj`#INy?HW@AimOG}3+Dl4Plw;{%~s zl4OB%rJmgc_ycK(q|V+I+1m&OcYgrzZqjJ`{S;XQ|HYn%>NCVBnmv4cBGRwmg7 zy1WF{8cQj+CTs8bZccLY)`*!tFb;5Qq#{T)yhIM-v=Z8 ze3BLIf&?`VmP~dhz3yc{=C1nf9dG*N$un!u`~4nONua4AEkrxoowOgS=>T|kCreF@ z=>YQGouprrTGj#V9qdlF?3OC#9=i#^PP>z>x~ATg@6II%l6}dImpINuC%dn1ezL&a zS2sUtNc-yMCv~u|Zho>?v9E4^j+|EQll<@g?(14=1IZoeftNCYz@&!Uda%cdQOa7dij<^Xfv| zzzDDvoajZ#-T*bFRrtO;Ay zbFR&vKAQlxqsD&*=biT2p9!P6yxvYYMH;nE9SqGrR+Col{!}mMbZ;SBFFPa45KvnfRyJ_nKeo0mmpD;vT`qB= z+CuwLr*O%3M{OZffd4UC$-;kQq4#8AxVWKnexr?rg(aymG)!b!O;ZD#3d6!;=a^2L z3WHRtBvly2P?}AJOofN$g~{r%!f;lxGpy5Ng+XB*VVMCwR>(|cP+pjjCkn%z#m?Z$ zCklh2I>KV7CknZ(Dqb!sRmiEFc)1Rs)K3-8 z`&Ws>KgBY8R7pXw6a<2Ie1O4mtm z$*%RHyC&+Y1E+BC$ZAPc+%q%V;Rn&0ph*#<) z9dEo15A=g}f_T<#c=Ntd9FMgPA9gyk0?C25@kWN;uprY@9>E(K=oc;}oHQdF>gV_b zk!ECyA#79M+H-QawOwU%qzje z9qz=u5`6FAPDBZ#cuCqlEqvvupxaQ6A>7mQh2;eg_q2RrOHksp0rFLk7=mvd+|!1h zoH|$MnohfChW&>J=k!d&aAu(22Sq9k!f zi+gq;pWF*`DQV7bIVeJ;IeX+e@(d|)jneKpVW$znB|}*+y65EcX+)ZH^7-&3gL}^5 z!z=?|F1Y6$d1~rB&Cr;qD8mm%1QkR1B*C4Ww@+gjCg<(L*9-3C!ADsJzE*H24?iPy zfo5oucBh8fql3TpY68R5ybCsgVQSt5n~-KIF8Dq3RTOWUcB?iv9~o3Ty_%A$DyVO{ zo06)kfqvjq#7I@uX<+IBPJw{U((bH{kBtiMbA~k|)vSDZn~`c(zP!!Qc2>T;&ES|t zc^B~=863@d190P-F+oa=Xijf)g%jv!B_xLa>k6ltzQZAq&glwg$OxG+3Zy5x!Z~_U z>T#xs;4-fChTk3=JUXHbngvdvKWmZ*Xcjmv^nG-J&@6C99Ajz9pjqG?J0*3CF+>YC z=Qn;aHfZIHXaUdFPN2VsB4G=7u68oRZNe7tTO z3~vcd&I$B3xkNydbJ`zk)3t;q=S(~^g3#ogv$Cn9b)j0Z4<0r=AsBu}D_B-Iv_Dh& zRNvcjPSS_sPur}uDqeN)N6bc0iHqvMpVaJVd1F{6UsYI@bQi{&*9-IZmz z6Kngg?%YW?^ESCLN`K9DTDjIL*DK2}s9*tAJw(1$jjw`MT*OsYy2a_4YHq|WSMz44V6|f|&&zD| zW+&O!zC+9Kxyn)P$~ubvnHlA?GM&$@tm0a57tz1b*=AwFb}V*4(A@Jj+qJ74`?v%U zv#fGB!x_Q6N$=F&hHP0sOBG1XyB3CtQ1t|FeJ)BrYodMilv1EJ$X&qEEa*} zaGTSpaq4z4Jo|@hoPztqYflJnVNJt4$>GJ(^T}M_P`uj-J6{w`?gv2ayB+(qkJ3y~!b<-m_RA zo;EHxo`f=2S|2AA<<>h1vjirVgzM#vzB6<}(0$?dalt8Ea+K-zebIwyKs3M4DT`R~<%@ET&do(W0CrTG0^3iwQdNGgd~ z<7?*H;|si8Zp$VMju+$^DKRb^doMW!uUg~E;^ZZVhdqXpiQbBQ#Zg1bdWIKX5i}1! zo*0y!L?|UB*cjRDPrl;VZ!v+ezv6J0N7&ikdfh45ZP{f{?saLmhr{m6^5acM{ckwo zl%RK0AhB=C6Q1%RHBhF$+r#jb;K-pGQKs#V{i0e2AiteQ%=Hvg2axl2Dc2B9PrvYv zquvWkP7V4)FE#p(hX*;tl^RwD!?>lx2Meif+ zayZu$R|Jt3Xg)&&lFu%OskV(pt6dJqNMdf@`uWf)*k{cx$B-X7$#yas;_(>DyVp^D z%MLTWmQ1tDC)e;jP?%+A)DHnNLc;7W0!hBtX>0Bu0Lf^t!!q?u%|_(M;nvfFQ%~X* zAFAf#s829&{Cw=Nqb(YmH-0`g524C6_25&d;1{c*+~NMzNw$|MjF%9HIN+!+!fB@m z=QITpd%#JR(dz~hD<$|mEIKn7GE5`X{oJu95;_3+&*f!EsWBaZ%AY$N{j8E!o1jGn z-#F?}IO&YwdiceX-#DpK%db7+pynS!q&5fdzL||K9f177m>&uF4+{SjtsuQP`pSaWyj{4cU6d3s*BA4Q=9CDI1_&s^X#xEBW5${EEu+!d+(tUHhAdZ;&t@ zk$L#$52w(0hI#nr5AlpynhowbDjYH?m_bTWagMUr0L(i#b5#4zx&Y>#n>ngmcm3=M zkJWH#RD~Z-3WjF^q?{W)Lu1~xnX6iw4MOv-&0NLyUPk9hQRgdlSXr7?nwhomiH-i$ z#EjcXJ#HbAhp^9&UXCFarROUi!56~X5a;xl~dOp4FN*6MD^)smEtb=)k+;_ndB}w zFk+Is;8&|6bAypRV3@8}SzdQB<&(?cSF2;jS}N{>U!#i0?$KQN0>Tu=MrWS^h|%RK zjiihhE0wy1H}0lqCSF)EnH|%xX?ZZMF;OI3sglL|I$)A53Gc@6y7FLfKYo+Njf#UL zQ&n=XdZTLFHG*Vuqw3K+^%q@kURAg`^v(??kx<@IxLJ8-P7EaB&8l_e5b}<~&8k~Z zy+%qZ-ch(MTzYOW>|}n^dELg1Uz>$InQ)sbjJgVkOjsU_HN{;YQtFAkro#7-qUKK2{CctaaQIV2a108X)#}5sf@Zz? zaIBzNu|6yc9%l(4d?dVNYA{L@h$$aY_R~3G6a^nqWgV@8X65>bV%lS>Rj*wi4S${* zjL`%#_B|>tYzjm)1dpoL=2IkLlqK1t^6uRjs{#1&@RIX_;gcjUpp;^N|quTa~ z1IXYR)qjA^fCb!hNTzj>!ufDEzQb_fJjTTc6u?^k^m@PjI`{Y zq;`XsmD-V4Q>H&Jt5oyU1YKEr5%sF_`j-t4KUnT|3@6;=wm8bvlvzI!X)fx(r49S4 zY9;qxq@kNN)T@f8PE1Q?ZN!2&{N#UvT_T=kF=9KTLRFf3zL}^WW zk+eIUb3yQLdNi|0+8uk9StjjP?V{2WfUdixv?c?VJ0B|b?|cR_)%;MgDbZQ;>m|?L z@ad|cE&L#Cu{ZWGv%=Y{I`p=-Fl(H>s$YN0&r6ygEA@GvU*?}5E7rKOE0J`02$O3| z;jrmJ2l^`z{GY`9=Gn|oVt(^*<|o46+Y&&yKfGyr(3Q&KX&DIi#|9uk;$s7tXEXPU z0s2`2{N*#{9bVQhJaUg}6P{BQBq(d4_8cP2X}Au6>NC~R9DeHnZ26fQFwmBj*CM}E z>YIF7WrqBv;@gU0Iw$>V9hp=Un_P6Oe|IaZ$0m%Ox^AiC7&%$pMEs_uEp(%af=to>5NGYF71WJit3<|CJ?8ZT1FG1o1M2Il&D9G>ek1j*UGP{KIR z4PU7aF4PQi&OWa$gAAPK-Gy9HO?Koh(}tIbwS<;dbFEvDv$WD?u66ATySl|Jb?w^0v>2fIPSmuQrEbgUtv~U$ zrLKNkTR#i7+${(#YgU@da@RgytQ*P-*Y35Lh5|IZG^UxXaP3)$X(TJ;;noz&vKGDG zEs(!sh9Tj+-sPM^N`Y(M;1=9u^ApFs!L@t#xEHIm8(q5t0mPkvX31*2@kY0qS)UkR zywPO@5L&*hy~QoK)zZp3@|MUr`peo?Q7J&M0!=B*H?^yxQuH<-)vl6a2rVCEu67IV zw6wCQTrI{qovP&fNtO}edw&lmX88^29g)R>NZt`y9Eip5h%C-$gm<|GYb~d&F7I-a z@@Mz#XM}f0^=Q5v1e$s@Uk=_Kv6?Rj?-tgqsLI!M>)e8SEv>9H*SYo~Za#(M^d+(Y z2xWoB0zhQfM-~90?E1(6d~bEXTd={h%Bu5zsYy9;;=3aj0r+xR*zKa=oPOpjB?64P z<}0NKU3=(czEXNnoOz;74An#7lNSZ!$MN+M3Oy86G*IH)X6BtaAPPO?GHZ}x@|Da+ zx8OOekgQQRivMtjfy>A!v?-i)aWL>?e#6Ooyha%ylAB!nFaZ$GO)fjM($Ij+mNvPa zhtPkTZ$)%8@BPYw1YaL;M<(2RanNrfzu|q%wdX-ViF56F5RinAN$+HM<$~K|Zd;j> z3$G({u*ckX{Zn_##&fCcPd*)1{v)`fAHN~yNm{eq1w#C^+ro4OKvF&})*GM`f}RaW zToUx@!*z8MKI`(wKTV#}-#zQH^s!JxU6vh(V?9>w&xflo2?jKhMf&qDpI`o!U@kMh z=oY*Yettel=qQw>(w}onCexxFuL_9rh3(7%6fuMgDGAQ=lv@( zFvnCt629(ooHH5KS@v&VacNNANEZ3qT|NlxNodn_@Qz#XK{)f$pi3#&54?9={uF~8 zcQh3z*%3ZKL_dC`;f_c{Ad)-WLbD|dB%>WJTf$?+RCCgR=+ln}j@XYqmUqB-|C*1W3YNVw3yjw6|G0__tf|ZP@3s;GR;h zLwNt@s{u~IJg=FQVqf^xWx?=){DzY^S&g}XNbYm_K1>_{2258*{~g5Lf3jV*Xe)z}w^_-K%RN10dR`0RoZ~5TR1AU@X!;l+ zvU9w)X5SD9>l}~uwH_5(rh_ZJf(4dVE{YV~6w^8AX$JzBlF=-GR5_LtU?6rPW9-pbv3lx>F_QLB<35E^TklMbQX_cOc=>QU3%~UB4 zAn&U^d-mH34-1xhYI%6|l|g^_Mbo7sE~_k{@GtYiKb;!1&uU1)mU;H@R|k+_nP(4w zbpZU!JbU=tN_JjXcJ?6*KxP65b_GTgvpJwP?3C+|2VYB$SVY*TxBD+iI=H=ZD5taO~Q3?LfJ@K=Os*^M=S}~dGvWwafdPa@(Lc*6?ej62;MI*_KG(g zCiV7!Xa5)oh#Y|CbO4C#1D^df76|DB@=))wkY@P2G|Vgt#+;WyYJ;c$L=pRn>0qN* zu*o*dHbiao?CPS8WX7wy=71SQWTyrc^x0%$@6#)I)@Ig@s3$$HuOCav+DT@c!(oeqQT_N$R-2=)4v6GtudUh02a?rh zkIzEn1fZRG%QN9ai-W_5^P5V3Ch|xiJkNMVW-zn~$Zw4-)qx#Lui!wScF z5+K=b^M)O%yTy)dFnR^ATh@+9zAW9MRCdSVLi>tmPcA!ZTA*=nAi}SB8IubT+E?V+ z0rKJu+ZAB50dkJ+lTfM+wq#S z@dpsBK;wfzWEc4Mwhj>11@iKro{x*V3}VKTH5|dF7xe#zrWBf7g{kp2v(qB1tPmVVgDLDnNhtoj%C{34APHCbcAFGP!c{&C*A6-%=(h0t>w`9f255J_Eoulr65i(9P82Aj zk|SSzkR#rFyRTYu{LdLz^YFZtK~wUUi6_BkoeG5FcE8YUbpoNdT^{X}d)5PF;(2HI zz)J2}^IJfiP$r&t`nD4ymV|f8BcyG0LJD|S*z1O%H3?TN283t+l>=!UssgwZ8c>0Nv!e)>^5UfjS`@UhBgDy&>qE9iVS# zt&5xlNWyh~3$qOkB;h)-uXK9@)4_dy!A9%01ChLsuhw;I7${zHzi($hAk+bxc>xgF z`y)RA!g{}`L(}!Vfl{Xr_;v;cA}!D?z<@f|b|yg5K43Z%Ns6mH=-crhg!zD`!hj@w zFft#Iqz{VuOs=48ZS+{^K(HIps;A%QD3p6-VSzKj9hmYMF9Ca$c;e0#l7J*2< z9d(O9INz3LD`%}koo2{2pm7Z$=pq@NxLz>fq(9#EawbY^lY^bAi;0) zY&Fl#nFIvP4!kyHSA`d@2|9&y?h5{Aibx6*5$2kT4$zY9i%4Az6CJMzY+Zn`4bapD zki=I6wl09!=8Ay27_O5NIWGuLx;q#$V3@8&9s)Ky5d%5AvDC2oki|1rc3lHT4&~%p$pxD1;y&(D6IIicy~y4op|j;pVoSvzfFZEi~OmM%jE@2@2zEm@I^Mjw6b ziDSpKotL@YE6)YT9yfME+s`sqK3h9&_SBOuo>7~-p%`{OsZXE(E7MUE##mvfjvF=l zD3BE|Ue>jpcWLpau49IqERC{cGU3<>V|9keoHF)=@#B8&WHKi-n>}mtkW*@=)J>|9 zO3z(dY}sv`*S&apw|zRyb9yzOT03)Q%{jGWr%jwbi3-cj^@>+_8}1D){-s;jmQs{B z7mhmm=wnZH#KoVw{p5`={@A^5`#83lR;pY!*2+}+orA1b=@k#@aaYGh6M9D3MH4EQ z$^S2#P`P}6|yy%)DF9=%`N;`(-j+D(XC;sy2f=zI2*+B2xd6kO)Rh53jto^T4YPBl< z+^c8#(PIxEHTu_;^D@N_y$@;8B5pEv%=nYWA3Nd91N$F1u=0!IuX-2zx(=+?uy1m4bKi3;(Na- z{xo=D;YKeG!ZPLM{KHh6>P23DRDQ;knu)dNPM`N?(lGiT+~cHK9hKk3}M znR)(OJ9%>Ln2EFME~uSyalU3+zH{BQ$#v7}X4U3r)XbdKxo;ddi9^v%D_7}|Le;9) z@m!@92OV+8@`Jo1r3gnTmr6-EsVa0LKj)8EZ7hLL!tteqJ_*N@@P1>5Am>jgzB^>y z_<&RsR5L3RkZMAUR+cWz`Nyi(HYz0Hv899|36CY=f9rgsoPT2Ro}vF$h)8szYGp+t z5}nw#on_19{F79*jmnVlq*B5R2~R2|%;x-)RcD(pOTv>?JBLVka)(Zqu{`IWQc74( z!on$~l;xy6rIa$x`KOjr#-u#8lrSdYsU&>F7^WiUpP|}U-|OX%YvdmP!!2e{JA3-< zX_IOvmHfthCJM7$wa+|v`s^u_^3$hHxj4?((yDNw{Op-XoP9BlH~XBrX*2V)&aIi1 zpNL1)UWCid%FmjfpQh8+*ZyvHU41Ria&dm*xi!G^;?8I1bj=~`A$)d+j`2V( zjB2&TABPPdQd<&M2-lW`#mj4R9jqP-;o5!k@$p(1a89vq_=!W#DGB=spHrb51$l|* zpVLBnkRVCltw(%`7RK?SLoK^q5v6i6pLK9~TG7w0-w; z2$E^NdRr12(R9_fVB<2dOfRuyV3}Ug$;H7kz4QJK!7{yfAIm}uo1yyJs4OHiN+elG zW>oC!;vkukcO+RzW(di#x{xn5M=)8-Q+eNmsj@m)rm=6Y%IjFGE{URsi_pq4Hz zIZ_4Em*(19=?bJTZQn8OtFvyB3+8ymVWYYgnre4%5=a0<7DfUqat?X|tEwIJ1$Nvw z-k@Lr%Zl51hJ9A=v-PttRn!NqE=VvkSpq*C4et>5O^S!L}(m|kTgTWPE zLABScKvcNGsQ?TGQW(()i0l;}4bnnXxWc1F8Y&_g>Grgd9!x+}7^OT4bEQYc8c`Z2 zFyGC(5v{IXnhwWo@nZ=(HHV%V!03&kDcNaCehmKH0=wLOxbWVF-^n#9fHjESRCmNHUJ z1CUU;KtakzZ%PPl$e0x+u1)JYgb?V=O7{k&EgC!0 zzX7XVUDLqpj)arlpG$=$Po^g6j*Z+b~ohI^WZ!hU)rMsZ5R`wsMX@KPS*p z(a`}*N->rIR(G;Y8JKSHx^|1#N*5s?gXk7d-RAk#E4<>ox~k%ovBeg*cySwBJMtY2 zR#Msfj9HmlQhy4Am1*thuOR`YYSte_0!r1)M=lrKN;S7F@Dr79ZA>SXeQRSnsq9GquJQIAptS^&#Tsw$P~9kfX_SBP)YG<6f=T@cFK!hdh3^9; zqjkmAM;tSLowKVBr5Nj+U3CC*>%6LV+TnEo`KQQe6*tEjy+G&_3YhJH@L!%S+>YxVUHh9b+GE%*4PZ zc(^f>xXHs_OVeFQUeX{R7C(B`F%j@s@uMSOANyEiCPq2IV_wr1B^9J59`kb5X@CfN z9ruZ^a!gdnlf~UfEgt=3V1EU0H&^dc~BA$+E{$<=8GtNE)wAX9vmn1+SZF`oz)< zUhsO1)jgoV7J~O16OYjRWVgvHe*5B(vA+I5Y)Z3{o^X>_(aQ3QDx194<^w@uvf1Qy z>JpC>o&e{2#Zzw-*GxFH#VcN>Z9H1)G|*1>T5->Wv8TP}10CH#Oq#*T+C-i3`3K8(^Ff#Vbzxw*G<^B_@`sfJC6X{^XNBcGlCOP=D;KCjp54!&y&b6JV^T1CaQKSnonh z4Bl33dcwsgZS#UOnT%VuNiwMxk;6`(c|l8EZyG~PfT>6wfW&8_iX*1IdP$>pBG&0hN{O5(P4nks_SA0UT9C`njgz(@>CdL{xHA27G)Jk0 z$_!b-q@SZQO_+^~tLs6`<*N9^sl86QoI#;2FTv1Uu3EX`=`qSYRWb+|A_7tg>8a+4 z#LMyx5o!XiRK-Jo^-AH&#tBV031u7^NLyc|>_i4cLjs!q3`k>Hr0hfnNT!RFoyY)b zr;C&w`REzaVx>&q2Z9MGOofnq(-a$_GEqu;FfkS{knpz!StZGThcjkrCfh@iMVrI3EwPrAE!?r*Ocad*m)f#L4dmeNh#ty;J`lrj0;iWQt633oUR*OK zV?yKNvo)i#Oz)?jU0WX)o1Q&3Ya(XG#nT#rhSg{PS&e|*sTNbn=Td)RZ39^8RAX@i z$e_D3-`p@4y`;)sF5Xt#sqm8Gn=2&`rI~GV9u1=8Ktm6Nev`8y5c*B7nE|2Svl6YpU#vV(sMah1V3zi=t^Hn!fHd z1;GzA{6I8)-DwJh{&lA*5c=1hrjcm+S7nzYKrjIvlW6)^RnbNJLV;+Vx~my00ipV< zvUAi(`mD{0RV!&6AgF+jN;-ti%8pElg=w>5;mRh4X|rPG>V9cSkxW?LQ|bfdSFcq0 z6J(V(KfPh$Ii0-Rdn#_PXO|=rGi+7G7UNnStr0nHRd%AG12Du^Wmgk)0J&~ecABXJ z$akx<(@Y5Yi|;ok5<|SN>}rCRgXn#+>b=qmBk9pTDPCH)cK9c$ z38X{&MA?BSN#OWIbu{ZYKoL=W`^8f<0cH8TIQhJ3BR)?Fq&xdOtyt;KK6hP7q`R}v z#cvM4Z!)>)YgP7bvBmlQ3ty|OY1{u}2vK=k{@`AtR) zwcUM4KrjIvlh|v!>#+(%>(ur`0)%S2`;cVBZ+0kU){{U`0Uee2%??#z`fOrh+Mzla zCj-K?Lv`=LR7wTeT(nb_?NMHJ>&7dE#Y3l56?UquERqInlwpHi&ITZ|1DfoBXuiwY z07!PboDG0vx69ceE4u7fb{PQ#6VNe9+u5xu@}}(&ty6b0>j*%ob}N<$8PqBBlO;P8pfv&rO*mySaX@qe~3aT%Uykm`;EhIL}vR z=@kSO&{0YIo9Ekw9b%!H=eIKz1k|!!y2fL5u@GJ07Y9rqclv^qK^ou!-wsL2W$y=A z=@?`@vA~DH6a;?+b{p&(LizrPuN5a*(`e%U>Nci@ELvUkQcJT>E!sB*2JtulK9v3S6P#fL83J>o%^ zJz-@3ptCiQ>>u=VrjG`a{ewPz^taMS$5Im;8a}&drZ-|kN+A`$A*GOt-{9xWiUT50 zZ17oizT4Ln)cnSV5(>A6QQsWz)5n}D_8~sYt;(<_X^t+qh0*Dbd`um&tIS?ak z^al=Q=Ri~>?X$%jf8VR{Y)UV)^k-9g@q%alN;BU_LPY%j2kJ@#LjSBkV2qx@2-ML7 zN5`+30^lXD`|6PDr+nG;uAe?@`hjd$PpQ>gk27o8ca)9lS%vBOS@pAPWxz9ihHPca zuai$2*JlWOkhK%fm;G?r2R*Xpf|}lJdY@Z2@!b4{byKDwUqAgq+1akWXkzUQIqQ(G zn+(APa`wSeki(3cdf5P-Tt9s(BDKh}#W}q`&ezP85mtdXJ?@%0t6t|N2R_&|$)9xW zm}3vlPn=Ry&#pXq)J&YkM*4-ad5Th#X66~C>C+*4n}w1{aVP?Mz&&HelsdhA+8Yfg zk76waA)v1E6gSZIK@5Rp^rYilO4Wm{WM*|pxt zX?x7f62xI%PaQ@Y{p)_Eb7^VxulxI(uekmQ z0eg?I{=;_|cu@1<@zLUtva0hpU%gfQ^wOhR{LRl)#bcNU5-iPeb8%E*T<6VxP_Ac~ zI+O;o*>BP`KHMfF?>CEU3gbJ!>D#HfB$H|7n?CClE*W@BvE^ms3tN1<0wT%eL%YRi z1w^{tSen_}z8YpVmCXsDE3|A*yzSd@K55DLZNIJQ+JF@LZNG7k%jO+bQ0Rc~BP0uNxN3Jw+A1 zPAOz!^mSS@GBNr(?I~np^mW=(WKiC-nhp90Fr z{OKFN(tKusWb}={Ur%evtmf)9+(9z>#veS)X2k4jdunx=T>)K2vTv|GEs)Hvwx

z+12);X^G0oXnR_sax&U3CF;dmWK2H)^i{LY`{eBjw0!Y^T+5T>Faq{0$KU?xS2Q&` z>b2&^5J%BaHdSNha69DltOa8Pclhjt|4Y99)Gwo$;*2Z4{cTK1cBdtg$=L3+Br+M> z?Q>#6K8;9GlHEQVycSZB-G2T62Pw#IzgPdbptE4f>xbf#3;z4e3bObi&4SHnp#2!f zirr|S{TKtu;s>AO1tyCMviQO8Za&7ulEn}H0fXXeOfgt5`?a_9A>{Z^QN%O3G8SnR2tT$|7rUi&AZx!?H-UdBRwR1-NC!Ul#p&R3$9SQkF_smZdC} zuq+GgvPP^bVObV1+umeYSc|)^xOef3<66LSUCPn|mg`a$S*g1&$hm%{1uWMEz52vY z8Nk&s>%ho1hT(z z7{B4UCFQB2$GRo3`y0fJT2J|EMB(slCdozS(TEsgk)7fwsrhgNTDk9VDIsU zvCH34r$6qBL?~)L9@r)aMCkFL(oAWrOu&>znjDZO_jq7Gg+Q9ztw;jRoWA&I_ppG6fK{xvf zae;s7W?yW+G8+D`G!q%}{L3|Z(viu(T%!lV@-J!hvNK;HGxFWV<5wO(YbxTSq#hj#tm2AI?5~bb#sKNHRm%p*R)I$X4gz%6yAv3xD%S- zU8qumm}FjPHx!6P?|Gr!1^{A`c_B*);+a4yZeG}ajDs||!n|Tbyac#cg!&OVX6A8(dNMx|RG^DZ1UYoFjmxp$*Qe!v>FguSrK&N2b{Wnuv z#NX8L)E$5KM%5=-4A-E$Mkb9KXC@48tPR;Lu= zl&eEK%peW-FaQ(q+-f- zjgx}^NYY+C{@6H~l=hF3?8aCZo`Sp-s$SJs#SMR3^O9efQgg}0rQ?8lwmLIk!~A#V zESW*qas!|qXXT)99g%t>tS6aqp6EU@^(0Ux%<_|oFZ1xJbxfO?eA>gpOsr+X%&c@Y zelHQ@XO8ETc^#AROKO8job4;NxUW@3{z82+d2&tNl;ZIFdKQ?YTDfrqk&DrR+a@xP zH;K7*A*bM35|BB(o}81G>oNKL%#@$mcrBCd*<3ksIZkq=HRWWM&C-BeEZ84sH`Ob> z{OMS!gmJHzQumTx`=!usrZv&s{7WI5X;v8Dcqwex(?NXWrI1yBIpB`-LH%lR{|6p8 z{neCTdgxbEe(9lK4ejO&5>(l%A;Uq#FFo|DpAC4 zvNEPqQG}L|W3j#a0j9_}h0=ewnGhoAS#{ z_1&=2wMCh!z8f;xHRh3->bqfQGtPle2*W-H#?NW<$br}oL-k3q$)BDrd>CfT_Hz?9 zRq6je3IlUuNn>&$z?`Dc0W_qKLM{WCu1oh2A2*heW==pVAuaUd#uDIvgn>B#)+8vf zrho_`<{XG*BCYiw;!84uX(EHDZJ|9m3&MAR&MW1p-L{Y;-lpI(uih56cWxpd?rmX@ z{o{2?sBog_>rnkW^s8@H<_1W^s}Fbb3SWnrHnvEdd}Fp91|4j7Z4Sl}U`{E(p?B@S z3E9OqM&R5N)8@2DU=!dZVZ21Sk8hv52%10#XsKmJm>K0AIcs z|7u)zaeM;OvdgKNe>E;U&bYI2Ni$wShd8(M6*o>uLSuAg#|3sZF1u7S0cqLg)Xc8N zWoMwdI}F;F%qe4L0?grEsYE$Gvs=E0I9UNNLtsy+%)TTD+X0=I$)5F|&~70S3)!B~ zZXp4wnmr+tcs7$ZAh8$nkr7?Ssd&8iU(M|B-Dj$~vV4kmufz4Uo?AjU<2sKNTN%v}@s~#zZnE_$jmpC3P}M7q+y`Pvju_ zDP(+Z8XK!Izl6%nSenpiG<0U*=s&S`7l~N7ehE4JZ`z(L$@~&F?bA;Wlba}3UFH^d zyg2kIe!??1Dw(qap1F~o91{!A+{jLjf$+?Y7$=XBHjA4_^COi+e)Yio_~P-0wko)b zHW#wK%+fZiu%+u>?(5}C6PzDm^v!Zk1{P`73!|WS^)sFxm$^G-`kIekl(ysAMi<6d zORt+EUqwEy+#MRv8ah`*3w(NKa&M@np0#V4AhEV?R<)yoX4Ty+e(U9ByRxlU?(G`1RzTLE&Go<90!!3xNGj#RwiL`c4*^(rVN`M+ z0R$qIa*+_fY@+9k2d)f3{(pY<`$t8`oFNn)7 z5%n*y>eG~$i~5tb`fg64M@S~e{H)rG7$I?9M0Ousk@%@EeL1yjOG?+xGWQ0j*3_R* z^*Kg<;s^yh`p0fEkRj((dzl+9k4o*06llLZYMI(z2GPq!c~-}a@d>y-3ihvF_dgx; zKUHOmLQcQb))(^syI+c1=5<-(|KX2QxXDN%%#5bwl-kGa9>@Rgfie3cdK=_FT(D3# zi3ZWw1!bs65mGbAKI!$1D^WgH*GH}F2M^21vcUBb>;IOhIMfQPDjxj!up?GQcFC=YUe9R^5ztU3@lA8lol)63JBgPP+!-;6 zm*vQ&(!SG<-321i5LKE}9zaxTh&Y+|sSJ6WNzpbGGf#bX z+J=-t?=+_jQm74)oe>}b!-mMt2!M=1Hbizt0Av)iA!0@#t5nUX_s62*gca=vG?SIQ z$6W1$AZ-jOvW73pfV7zm@}6n9e&dne>CdEkNhk75s+Z{gOk~%p5J9hJqM>HL8i-!c zM8hWN(S<-AJ^UE$6U`*?^Z3Nj!}v*+KA+|yZS;BP8N`yy^UgDXBIrD$ne=lnY0u!N z{7z{&Uk0>|idbk~a-IQ%<|XGDvib0`_KXS5#4}!Yo&iD(XgmXmU0!yc(VPQpQQ0=@ z8M4{%T9j=Y|63}yxwyvW;%Cq9Ic>Aki7+zS>Fft2lPzMu`;3|t=)K~@&;POJy_7-f`Mp$4 z$?LtyPU)KKdVVirgeRjbAZorBbuz0hK-7FM>U}_bgjSQ>K8Vz?>VwS?>Ae5P5Gl{b z|7=;)GQ8pyh?XFw`XH(>d(+LeS9}olFzcj1oe#bz{Y7)}ijTEd@Kb)LG~yK>JFg&? zqJ8YV0tn5=&MRay=~L5RG#9V<)OiI6F`)4ZAV&Puc|~O|`aCN8$$Eus9(^9M`5?7c zDNgYfL(fA;eC1Rk43)le^#w%YD_37YRQgH=oo~wuTcy;+?uIEZz3ZK}JEf2gW4Eg? z(nuobS3oFsM|MjRNQLc=?3N^u3fmpAB`Kz>l!m_t(;Yu-Pf9OysXfkUB!Pa9Ga3;3 zJ4uFBZr0x9lQ8CzT+#l0#+ad(LSw~(dR zr5RPs6w6=RK4xjgPPYk{yq9I{bX#MxA;8S-bO7a8mSJAol>w6kkYIVHIPCRqU6yC; ztsWgry5*VHZQ_G$I`B1_;^nUoDO{7W_fRCA*#4S~zK0@ZXMS;QMqQUNE)T|&2`~); zNTpnxu~R=FnO~dfU=I5LF~YSOd)Nnv5w6QbX3H3e5w6R$=-NcPWedsphK%eN7B77x z8gWCKiPZcJ89N~&9huyau@fR7ncR@E8wV`}t;iHNzH!{}6)A)C<|{I`8zv15D>8O$ z1Jp8hY$H3SD>E{-8Q4M^+{%m{+<*`R8V>@Z@X8Dy=tVwX=p6S9Gi8r8Z29X|Ue)Rh zCyDHu`PFJs5cIsgss z%h-#2Isn!0%WytVX3r8pg8MT;7d@HL7)}B#XF*axdcTxHR_%2XEyFf09zss{bbl&7_2$aL zpHd1@=ua8Dte(?8^rwv7y$3?^rwn)Mj565#;f!5~$mtmd&?zIIjE7SuF~-B0oLTN7 zF-#9<%%Hk}a=`T&dn^`2xqyyJw(Ztu?8XYQP_56jFb5NWT9#w6Mkz!e$=HM06w*M) zBrCU%q)JI=|461_PZf|Fsz*{|lXydh!yv|fa%c$XsAQ3LL#mW4KW)gga5W=4XdA>A zj8at0qZxbRHK*i8Gte;&lm*#GQ>|oO>d{QjtdNo#sz);%d3{%0yDAqwpDEjzZD{`X z+g{;$mQVFsPL*_9FJ#oq8M9*qhUJA!#$0*=itD_XvCDQElYjuTmZbxz&lfXxElUDO z@KVNJSkl-882^<3?k7u<=9SvzB?P>wv50UGkcyZTjU*`DUowHY#3~F@y9AgkkU9X) zzer~(YgSbhBYGvHwqydTg?l^%U`;}dHG$arm5e?33WV;JjJ?qeB)eBK%xRm`CV(8H zekId;3s#dxD*>F|cr{~}yaZQax7SK`lK>cB&jkC#m2ts{w9Z9uWP-nCLfvXbs3k(1 zGr`z20HMGCM*yXIGZT!qwMW?0TmJK=E$IZdPe*0?h874nX4FjNRRn0PuSmd(BK^BnU982s%KgU=PvMMFF+n zFIWr#iHi$s8{3;80w?>Z!6p?hC?OleR+>f(KABc?9+B0<*qvr=8?JGvjFb>Zo{ z_)ttQy(0t#T^S#l%85S z?TbuC?xsR%wi>?71p66z!6YDne!U=SNC;;6GD8>SL`d;fYDm74Ccqhz03^Q3XhWJz zz+a~g$80qa;2MtEYWUhTHE9NDy**P<|1OzchPc~P)5~{yd&Zu~Cpiji&vY7MO)vfJ z_RO&1*7S_nVH@%9lIfK+gMX%`SK9PD(q=#ajD>Gg(F-vUb!P96w}&yfwYq;2^*(mRAMrMu_Qu$S`|0rq??hKc=QP zI~)W!)0-WRA5+t_p~2uYZ6{`fg859W%Kb}5U73|WOj?3465yJRjF5iG*i|HAVf!Ux7mw9I^^h5sXKFF zGh6x=*gKio(zk#BBo=4&w?LXrfwsp2D;sUr^k6a}z--Y=CMJcx*DUP@wU=g9QZl^^ z5D0Llm)YRbtlgv|HEc_>?al5d5YsQsa&5`S+L?yNCcvD=)&UrHMV8aprfxzpW5pa+PhS7sUX7)!Is4O#bl zN`?-_(6<&+ONZLhxBW)|8mxeJG~CBOBaRGJU8`e|I)Gwj?87zd9Qn zrcc6Ev3hoIR+$59Rpn*u2Hu;kXl5FKUO;OM$<0DPsKOd+v+8lIAtS;nz1)~>YIfN{ zdvk6<2bIt(}1=0Tq9+pVCERPHDFFTSBY0VnKH^3 z2WaL;M8f!_Fdl3fpUSGL&VA$}M$+ktsO5ySXHPzRcHNXo{q)`rs88)o$BgV#S#B2U zcCLM=F?6wO6~oh(j6$1Gu{-eyiTFT7p<*eG$;BV{a6<*G=87PiL zxH#`CuG%!lPY5tyJ{^FkyppxML^^=7y^^(Cj5+{sc||&s36_%tuV;e;st<9eqh{*M z9p=r|nFTf-?2CD9D%j1cNwwTIvD;&IN62peNDeZvfiYD|hBmKfo0=x3Q|LU~_ST-G z15oPqY`^~TaaJh|^|x%$t9oSNf7Pm_R1dw8@&BckeDvW=)soNt-x{kW&Gc{Cw%to= z@#!xR!o4J^P87wb|1LeKtq)lh{(IJb%p_WT^FIS9hz@WPIsrYbv@?+q-}`&Eae$T} zz+_n{WAFA&>F6zk9JGH^w3fEfQas|VtUAD?*5iAi={Ja^gl}c-HC-Tiy_M~1o;Lzw z^tZ(5b7e87rIh}?tm;ucOYgT$<>lFl*Opt|2!;9DayzF7!hCIcOLLe82=le&`U?t$G_vc;)#v5r zlME*Hb>*ybT$RBG!IH_ka`qqh6c_z#OUR|B+M0&RJO7{xgc>i>shE(iE4O!vbpS-` z%BzgG>i{xdSI!4T>Rbn~p0uvKLoa4USsQ?%)|Gec8UIzD2az<8JS3TKRQXX;F08qD zroPamFJd(;`}YX1Ky0dnEJZxjSP7|@hZ-v(HS9gx6){dUuaP*$as6cG0gsftGT5eZ;qzqDsPs>}H?Li%Y5}%f{ zk|Dk<0pM-rLC=z9WN=47$|=hk+ZuDq0B>7)OZnJkf`aDIBpkJKq;Pyz9voOAm0=43 zDXFY%eAbv$hAy9#x0GR`sUaD>d{*B7068#^44Yp07y>XmUA~$1_G_cE59pO zSI5RH!KD7KJZ>2;m3?Kf3eRPvEx8?k}yhS{Y zwn|!7U8sQtagvR^!+R`zf3BK*Fi__Ka{bS$ndo2=;YP`(U89KhUn->t|W#Mj?Cy*@+hT7 z$c!Fz6i+0H3~x`5OL`89diCW5fj=(NFQ7^|GUM9l7gq%#Gj8bdG566xO>_Q{$>oEh zGlsL-?jKpwjkk>aBTKq*vcNxb|9&=CP7?S>_8%Ef)(p*Z{xM1W!O^5HY-;<*lyc>1 zBmbCEu3WwHj~RM=QaL#4kUTLsIx#5>j=EaKD|7yd$)N{Dy@s>T<)2t8EDsj>Czc9Z zi4rFcl3RjObnZ|2Ck{U$K3gl%BIloy+G@-B>2B6<-_GD|2GGXunb&=@_%#4$?-Xwp=HiLD>-gxR6CqWf`3-YTrFWZ zt7I;2M)_wAJ=8LA6Uskp_3aLcVs&_1>2AD8KaC?XH03#7 zTYVT$AnkOHH*A!Q-~>uny`*s!?W1S zkF1u&Xo|)V9bhSXv_%VHDS9+U3t=gGw8lH-1I<_S z2Cr;Ya`)Ki)|T?gyg?rOJ(n-4?yYa~k`cd)CJq3=a+7Bt%mR}1Ca;4T-UA`MN!~*} zMoSWTbMnt|(Rc*q%XTyGNlW&S%JAxDkL^wi5xkjqi1jY8{-&)=&ObalY6!m(T$u{W zXKbaHF>_gB5nL(HWd2I$2)fNv^85T_8-|2&>UmN(jH_*Cc48bd(<=A!=m&Z9%n3M=Ac)}?{rW5f?x%jJx;S^ey7Lb z*LG4uFtm5dW4?7-7N&cWzaJ6R4rJ*Z$$LEBl{YCRmwUX{X5pGx1n==!xZWT$0=;a$ zE}1qy`qN?NoZUKCFd#(hyb5zz7YNZhuctZf4uoi(H~1jlMid^<{YmYSQNM%vjo|&M z2J(5o-?Pgj=1kiC@;2=z*%kNX%eleh?-4xaC&%BeS|x=iz0CSAkBsj0CJ;$=5u3Gz zk%8d`{;-9E*_ zAWxbyE_p6ldrWl5aE&O*bDn)OKnIZiIsUSR{{HI#a(+%qGfdOtEH8TMFG=?a(Lm^> z9$%E?y)?b{mrcp*g}D^|NUIvZr2iPt9gU z{g=J0j0)s!PLzMe3yk}LFd5KHg3VI)D_+iwnf>#$&0g^sG#go%UiH|V69;6?8d;#Z zbZOSKU-cLV*;urC)nn&J%*_JlU%j#|*4$FrfAz9m;W25~CupA5LW>1+F zH?ums+3ReM3jpEV>@i#TwHAct&E(xf|E{OrPv#sKoz(_NEaTqlcodZb6!UFO@+U;YMree( zTRpoMpaV$1RbF0|v7Zhg=dB*QFtklJbujBRK+3UO9{kN~NzfiIIq&4CJ#V?m z=Vp)Vm4OiLaZgs8$H{mf)O^6q<79ih4(16ho*H9=$+Jf;Kn9u*7Z9c&JbN?&NJ)S2 z?Au>Jl=#6bRGT;VBKdCqnCdSJ;y_0w3*tX|_6!qgq59FQG;JIR)sJ3V^G1Ipme}jw zH3z{2bWCzLcdu7rd?ixy*Hpl*Ojko{sP=li79l-NB**i9ay>Z+Dxjm1C(?iN?D7+_ zF#Y5)_m#E|gy|>qxVJDd_x{2a>oVel#)9xzwq3@i-qYIue}*OMEZ`)FWvzIEK|&K=VeMAX%ovm5ul@z zdm@*q3UgMG^KDRFrg#F$luz!7T&4~mZ>hK@GDj&rc0^;jDFSp%a#LiEsu*fT<)+9S zb?{L@PAQNYsyS-Hah8fxwOjZ$)me6HdV9%CsE zkzby^X(;E&fsRSekzZa=_B2GK50YQ5+PTIi2gxs2z0BWOh~zPjd8%Y|d5;6=sG31F z&%I4YT9lfnIyj@tdmQsr$>_YtF~4NcapRP$AZ`7lOG&dJVK-JQ|pQI7ek z(Rq{O3Z?Y;9W%na)1r%70ZF__Wh?bLyhz^dSdy$eEgCw2-|#L`Z0j07kd4G8s&h{VpAbF!Td&{>yJ{!?VjV#G6{@XyZ(j#Mze43Zp_d^b!7a&ee-jNlO`_%Vbc?c^&^kck6;J2MXIuwB zaEr3bn~@ANZdK||`=TW_*so5S zof#dDf@WyHI#tjN?pLP@n&JIwQSeAh0O6Ws*_qK8O&|)cQTE=fFp7d}RJGZI(g9d- zjbgN7>QL_-{~>99maan(1b+~JH5MlTfRhy0ln}r#oKP=Ut8yqsESg(Qsr36wD1em=F;gE`0ue$Y3Q=sK~b-;mEOE#%D zDD~%(mNEv}pjfFlIp{HI;n7r0Gb|;*Yz#%d8JIqrItu}0@o1{09-BUvYH3EN1UN0t z`1G+qIRRlmD*HNQ^q%stGJ!sX(d{W`J@U4R*y`!F7mr4#}@tehnkuq z4xtL%2U$d8zrjw)ozm;fNJ$R{cam96CQoM@hRFF~bOVSukTjDid-hY0hR68# z_)DW9uj{fgE@j=gT5U~6)dp2O#*m>f*|3UgdpV%4#y=OvqoA`gOIxn zY#{0YD(yWrXs|6SPpE#N)W@Z=%0T!7#XW`*Iwu}PGywjO6l->-u6Tg!6Qw>Y@yqb|6UCLZA)22TvzRL<{mzRHgdYU|HWfH0C4ltX z)P7EX0^r}4>d%uwUnsS`#4ls!FGT-AnxFS}IB%Iec3#vEQ-k3DD&;4D^k1d?1i=55 z@EZkrm4>$#IDTEdpIKo$^!%vpZ-h#^10u|{UkB)voC-4S!@Otn4TDc>3NA+SjlggzQUnABzh`A@ZQ+4l|rhso}m15=i2up~w?Z!Qm*V_ie#yBFG(-N98 zi=lW5+I_s6>TmUK`2fiFXyiAQ4(fXq>{ESC^2SA~b#h#r;DnKmPWCm4OzGrHte=A} zrO@ImFAukLbXPy9AU@4a%>+Gt&zt~?`h#j}Ho|oZD1T6W4=NQ^Pt(=GvLB@% z6aQJ2UFMq=5b3;rR#|iXLib$1D0}(W^jJVMj{$NVI`~CwCtvjmAefuuG>8OC_eyHiDF84c_C1le{UGD35==BTOSNLUDTGoQ}P*?c& z@o(Kf@t(7pVVnL5XqIS9@3g?TkJ6jIX@So@lNe<=o^zF7R&CzggYzn1|D8eoj^1Lw z>}s2zG~&g+U3{lWavW}nZ%6f}4Fk4S{SOkeAT;p ztnBI>kd)U)?Iv(@5Y-4aRSwjt+L|X5fv9$u&p<;8%q_or{IWk;)nvAPk9ZPW=H`;$ zy~&LFXz&SK&x7+`rxuWu_xkoh6Cj-T`mD)HlLIo)y4T-t7+ozF@PIm+7qexzfm?1I zt4zMHj|QB`Z+O@Gc8donalYN+0V258r_(aLa+5n4 zCYR2P?i#>vh#&O%3&loMGJVi*Z#o5YL+(Mb;~*^v&qK*6v!VkI;OZNK5BdB-VIwF# z-$OpLCJQC0JSTn-)?@wQk>rtC(V&)Wcn6R8+>bn;U@iwe=9fL4c(bF)RkA+t7$>_~ zu9kz(IML(DC9|Wm2Jo9+_Hp0N>w%_BC$Czx5;ObSd7w2dC7&dquRbwtd~<6Db~x*9weezFFSj*QYwir zh-wB%iC#@*#7wU`Q;-OmSH%>6w1=(!?w9=|8Fz8?hbmd^_&dkx+2gY3tF|P;CDF(s z9Grr4i?fnBR<*_F3YU0*IaamB=V_*KS`eCdc>ce7Nb>C^QNQF5mqg75v^IlC*93t& zRa>+43q-AV{4QPN-)IVIXlwHICDE@3w$^UD)wMGqf?Hj01w?SG^j6En;ady*IJx-0 zqQyvx-+t^Xr>6Mr$372e7_DWd{jofsJ&sCjlZ&?bWnU*le;9zpQE2m-2a?-v9s(DX1s((d#-oAp#6tUG-s=KAYUos0hM zm;GRA<%Gk(-B-R^XutQBSv>_o3p6}H(thvvJ5*N&5Zdqk!$#}xRkc`dkFSofkzzZb zc~OZ-9XsrR(JmUxB$JPc`n3fU z{j+a(b%CPtWkIs;m}tZZ4XN$R`12ZiK&Ar_xQtOq8bIEc1$JAvJsuWa9;hpVq{oD4 zKpQaWFPHQ(GXqKn^OJuT*w@vFg3S-?zOD`+{rtf0>*@gb=LdFQx4o>%@)Gq`fv<}W zCjElI?(4P}_A3L%&f?%8*nwtW7f9MG1G}%={y1&&D+8LG3=!Ik$rlE8Ul)Wd(Cq61 zb*$aj1)|l$fPLLVXgVEo(bYlO%H)spqM<(RVM|ULQDtUTZyrHAi+wFn96)kh6ENf$LymbCOoOua)kE?p)c$UE?aWy-^`Y5` zv+L_?lOGR^nkJbmqK*gTp;#B_IRWdVEUN}(4_Qq*5p{pS!D4v`q?2g!K%fptyhYxK zgT&wjp$=iDPXr?HK+xIj3jk5)fq=99vZ2sP+^QjY>5Ax}k^IIR8l39_;b{me%$N%( zNrPTyYYqrcLoj@VHe_cOK*f;b3Y|%{-r2AVE1^NzV^;GnL~U?3>>`>!8Yt7Jg2)VL z9_|K`_R*lf*@FU-*`vXTLv*j%m4(ZoY@=nBeWAw#J9+3jQfQwD?Dkt%O$#*M4$BqUX9;chT=YUv_7_Xroun_gVs;l= z9w|3FyC7(Rrj$U^zUWE`g!V;O%I;FiP08$ql#<_+l1Ir+0|ZK(D;@p~YgpUEd#`mjD? zyD#Xls}D{_EsnY;TNg78CKL*S&9*5}rz$tkasZ+DB4D9T3fngqeI1nj+p5)b{WI<&BMi z66b6LL~w`L$O!To|1L;6Tpjg5Qa*U!IWGbt`CVWShyjuOF5rNe{5_Dqf_4VUg;z&o z1_6-V>Aq_~BzMYiOKKaa(=ymvFN2r9@+IFLBs;E-9xMP5<(YXixB?=&JFrV?Kty*3 zc1f*YF4_~6{b+61kCc0y`}Gss{oqOsf)!}I5lGq}0(;;G2W%>*4&yE%ZEzr;cN&B;-1w#9?&`L!gkc;MoWtWF$S@8f;&IuX6NfSIk zSm%Z;oavJ?Kxo0n=YS-h8``s>yZy zh80NKD;z5j)+>%Qv;nD!T@c!l2?$xBnScRxY#9Hmmxs)7yJspQCA1aiciuS8en3R;5c`>2L4`Zr)5HU{`vA?? z7>Mkh&V7KSzEj-C$l^YCg=)CXR(eCAaqfZIf$j=>ALL>Yy(`rF7NRjK-W}RMcU=G) z>{J#Xy4yJ)vB=&n&S$bEAO5(48I=uGa)1!HpUp?SWwonwVi8>}MwY4@l#A{S%kH;T zH;9z?h74(&ABFt~N!_gt)zIn@$*Lskk{p@vNF1Ti6Kv`Mh|t=wyU82~{o3%LA^H~bYsXe=E_ygD+YoxyeUlGw@!KT}c;2<@AVeM( zdRhNCNa!C)9=ahKa4f$ee6Jh~JPt8QO^=kfcwBcA^M`^hxQC-;}k-p}FX}ul>pts)myC zxiGt*KF~Wg6kcDqQ|CUE25WrYDD}i?oD$YK=XP<-Za0&rYFH0$*DI-vwBIi)a)CK4D|w# z4j}y-(n|j7G9cj1WcSU{%e4|OZt`YmAGFW`5+AbZD*ioGqTdef5+#VT0!`BZ>R3CN z0#equLk3fS5&Ip?&Uje%QPN{&^!)J$lk$TwyT4{VSPJ=}dx;$cE6^;X14;W~SZ$_A zKv+KvnIbI_)?o}s!?HbLa>%XGf`P+G`e~T$t*tvutjpgG_?NXVnCNX{-Lo+kQ1bmE z*>h`jMlX$s{=yko2T=Ae#JDeru_S~P+mp*~i#GPwNT7T8UI!qcAN}WPI3qy7cVRMh zRdn4XNgxC~u5XUG=m4F7r4cdjFi~iiGcO230F8Np2=5B5d4U*WmzZ~?7A5lgFqwRN zG;Gi?T`}J~Cj{z9`-ui3`Mo&dLNVcR#%W>M{N&Bsqj@cdlk%r9+edFt4HtcW36p7e zL=y%AP=}Y|O}zj~%3JWJUVxDPBK7i^w6oz-(s{{_JEHa7_)Ql&j|0=X9|THVl&N$O X$$1N2zBA%qhJV@hFW*@{d+`4OVLCoD diff --git a/crates/view/src/service.rs b/crates/view/src/service.rs index 7971258eac..8e3c8ce26c 100644 --- a/crates/view/src/service.rs +++ b/crates/view/src/service.rs @@ -815,6 +815,25 @@ impl ViewService for ViewServer { address_index: fvk.address_index(&address).map(Into::into), })) } + async fn transparent_address( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + let fvk = + self.storage.full_viewing_key().await.map_err(|_| { + tonic::Status::failed_precondition("Error retrieving full viewing key") + })?; + + let encoding = fvk.incoming().transparent_address(); + let address: Address = encoding + .parse() + .map_err(|_| tonic::Status::internal("could not parse newly generated address"))?; + + Ok(tonic::Response::new(pb::TransparentAddressResponse { + address: Some(address.into()), + encoding, + })) + } #[instrument(skip_all, level = "trace")] async fn ephemeral_address( diff --git a/proto/penumbra/penumbra/view/v1/view.proto b/proto/penumbra/penumbra/view/v1/view.proto index 3a11c35f03..5f1ffb41b5 100644 --- a/proto/penumbra/penumbra/view/v1/view.proto +++ b/proto/penumbra/penumbra/view/v1/view.proto @@ -61,6 +61,9 @@ service ViewService { // Query for an address given an address index rpc AddressByIndex(AddressByIndexRequest) returns (AddressByIndexResponse); + // Returns the transparent address for the user's wallet. + rpc TransparentAddress(TransparentAddressRequest) returns (TransparentAddressResponse); + // Query for wallet id rpc WalletId(WalletIdRequest) returns (WalletIdResponse); @@ -148,6 +151,18 @@ service ViewService { rpc Auctions(AuctionsRequest) returns (stream AuctionsResponse); } +// There's only one transparent address per wallet, so this request has no parameters; +// the message exists to satisfy forward-compatibility properties. +message TransparentAddressRequest { +} + +message TransparentAddressResponse { + // The raw (binary) transparent address + core.keys.v1.Address address = 1; + // The t-address encoding of the transparent address + string encoding = 2; +} + // Filters in an `AuctionsRequest` will be combined using `AND` logic -- that // is, the more filters you add, the fewer responses you're likely to get. message AuctionsRequest {