From 391a8a82d12ec4c924a2b8db2662547c32cb9a64 Mon Sep 17 00:00:00 2001 From: Henry de Valence Date: Mon, 29 Jan 2024 22:33:57 -0800 Subject: [PATCH] view: restore denom metadata queries to view service This was previously removed as being duplicative. But it isn't, because something might want to request specifically from a view server, which can respond with more opinionated denom metadata than the chain. --- .../src/gen/proto_descriptor.bin.no_lfs | Bin 95422 -> 81667 bytes .../proto/src/gen/penumbra.view.v1alpha1.rs | 134 ++- .../src/gen/penumbra.view.v1alpha1.serde.rs | 184 ++++ .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 357921 -> 345031 bytes crates/view/src/service.rs | 27 +- .../go/gen/penumbra/view/v1alpha1/view.pb.go | 982 ++++++++++-------- .../penumbra/view/v1alpha1/view.proto | 22 +- 7 files changed, 928 insertions(+), 421 deletions(-) diff --git a/crates/cnidarium/src/gen/proto_descriptor.bin.no_lfs b/crates/cnidarium/src/gen/proto_descriptor.bin.no_lfs index 1c4f88c83f36ca748bafe4e98cbde684f342afaa..ad8745ec01f5af5a5d47cdbc6c4512e6b2345e35 100644 GIT binary patch delta 13921 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Ž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, +} +impl ::prost::Name for DenomMetadataByIdRequest { + const NAME: &'static str = "DenomMetadataByIdRequest"; + const PACKAGE: &'static str = "penumbra.view.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.view.v1alpha1.{}", Self::NAME) + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DenomMetadataByIdResponse { + /// If present, information on the requested asset. + /// + /// If the requested asset was unknown, this field will not be present. + #[prost(message, optional, tag = "1")] + pub denom_metadata: ::core::option::Option< + super::super::core::asset::v1alpha1::DenomMetadata, + >, +} +impl ::prost::Name for DenomMetadataByIdResponse { + const NAME: &'static str = "DenomMetadataByIdResponse"; + const PACKAGE: &'static str = "penumbra.view.v1alpha1"; + fn full_name() -> ::prost::alloc::string::String { + ::prost::alloc::format!("penumbra.view.v1alpha1.{}", Self::NAME) + } +} /// Generated client implementations. #[cfg(feature = "rpc")] pub mod view_protocol_service_client { @@ -1495,7 +1528,7 @@ pub mod view_protocol_service_client { ); self.inner.server_streaming(req, path, codec).await } - /// Queries for assets. + /// Queries for metadata about known assets. /// Returns a stream of `AssetsResponse`s. pub async fn assets( &mut self, @@ -1527,6 +1560,41 @@ pub mod view_protocol_service_client { ); self.inner.server_streaming(req, path, codec).await } + /// Query for metadata about a specific asset, by asset ID. + /// + /// This is the same as the method on the shielded pool's `QueryService`, but exposing it + /// here allows a view server to provide more specific or opinionated asset metadata -- like + /// using an asset registry to provide tickers, symbols, etc. + pub async fn denom_metadata_by_id( + &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.v1alpha1.ViewProtocolService/DenomMetadataById", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "penumbra.view.v1alpha1.ViewProtocolService", + "DenomMetadataById", + ), + ); + self.inner.unary(req, path, codec).await + } /// Query for the current app parameters. pub async fn app_parameters( &mut self, @@ -2236,12 +2304,24 @@ pub mod view_protocol_service_server { > + Send + 'static; - /// Queries for assets. + /// Queries for metadata about known assets. /// Returns a stream of `AssetsResponse`s. async fn assets( &self, request: tonic::Request, ) -> std::result::Result, tonic::Status>; + /// Query for metadata about a specific asset, by asset ID. + /// + /// This is the same as the method on the shielded pool's `QueryService`, but exposing it + /// here allows a view server to provide more specific or opinionated asset metadata -- like + /// using an asset registry to provide tickers, symbols, etc. + async fn denom_metadata_by_id( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// Query for the current app parameters. async fn app_parameters( &self, @@ -2795,6 +2875,56 @@ pub mod view_protocol_service_server { }; Box::pin(fut) } + "/penumbra.view.v1alpha1.ViewProtocolService/DenomMetadataById" => { + #[allow(non_camel_case_types)] + struct DenomMetadataByIdSvc(pub Arc); + impl< + T: ViewProtocolService, + > tonic::server::UnaryService + for DenomMetadataByIdSvc { + type Response = super::DenomMetadataByIdResponse; + 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 { + ::denom_metadata_by_id( + &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 = DenomMetadataByIdSvc(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.v1alpha1.ViewProtocolService/AppParameters" => { #[allow(non_camel_case_types)] struct AppParametersSvc(pub Arc); diff --git a/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs index 6c163d5079..bd9c24e1e1 100644 --- a/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs @@ -1660,6 +1660,190 @@ impl<'de> serde::Deserialize<'de> for broadcast_transaction_response::Confirmed deserializer.deserialize_struct("penumbra.view.v1alpha1.BroadcastTransactionResponse.Confirmed", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for DenomMetadataByIdRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.asset_id.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.DenomMetadataByIdRequest", len)?; + if let Some(v) = self.asset_id.as_ref() { + struct_ser.serialize_field("assetId", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DenomMetadataByIdRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "asset_id", + "assetId", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + AssetId, + } + 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 { + "assetId" | "asset_id" => Ok(GeneratedField::AssetId), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DenomMetadataByIdRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.view.v1alpha1.DenomMetadataByIdRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut asset_id__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::AssetId => { + if asset_id__.is_some() { + return Err(serde::de::Error::duplicate_field("assetId")); + } + asset_id__ = map_.next_value()?; + } + } + } + Ok(DenomMetadataByIdRequest { + asset_id: asset_id__, + }) + } + } + deserializer.deserialize_struct("penumbra.view.v1alpha1.DenomMetadataByIdRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DenomMetadataByIdResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.denom_metadata.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.DenomMetadataByIdResponse", len)?; + if let Some(v) = self.denom_metadata.as_ref() { + struct_ser.serialize_field("denomMetadata", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DenomMetadataByIdResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "denom_metadata", + "denomMetadata", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + DenomMetadata, + } + 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 { + "denomMetadata" | "denom_metadata" => Ok(GeneratedField::DenomMetadata), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DenomMetadataByIdResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.view.v1alpha1.DenomMetadataByIdResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut denom_metadata__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::DenomMetadata => { + if denom_metadata__.is_some() { + return Err(serde::de::Error::duplicate_field("denomMetadata")); + } + denom_metadata__ = map_.next_value()?; + } + } + } + Ok(DenomMetadataByIdResponse { + denom_metadata: denom_metadata__, + }) + } + } + deserializer.deserialize_struct("penumbra.view.v1alpha1.DenomMetadataByIdResponse", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for EphemeralAddressRequest { #[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 575909ab651d95e09ea055e9bcbc889383ccb774..ff340c08d641994a3f967c65db2c3f78acf37443 100644 GIT binary patch delta 26040 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 Y?g$WhpOa>H1PIpWWS6e?KU(sC0P--hLjV8( delta 38979 zcmd^|d7PBRwfFm3yXTn!W}0CeS(;&onPHPnfq*c`ju}v|TgbpPFbXqdW{AC*-le82dUa$)vsE;GM(Btd;d@R zw0}7D1FJYSd*OolL245Jw7)j3#_5tt6bJVf2d*2lV@dZi%kElnb8-8C1D|mlQd3(~ z&C62r>W@o}8Zl~gRjO@8x+R^e=ijF0)Uk~X>6OQ&*0iP@Qf-KwYE8HNGTjoS8l}ut z>87^&w#MeB)>M5{gXCYmvL2$XIr^SzZc1mrnsZ_`r6z(7fhRIpB1BPHNIF86cL@$v z67q3F_S(6JRd2BDxXEHkqLt_nl5lLWO3Rk`t6Q4ennwrce4ZUP?-c9%_S@#A?LNuw zK|I~iD3W#Wkg^6B)rDl`U4GChd(xr(+b17X?%0pI*@X*#(JgscP~4DSy0X4S)uy|h zat0TV8kK#wZeXTndi3D{=M2lPE6kc47bKRY>)Y0}q+7d>qNw6g`_wFNZeG4JU86)> zvSwM$44q+Nx~(psIk_SzL6MEi8kg!a9hf_g8vjG)?ALW&Gc|`4x;maS}D+Sb~= zSgLb?-QB9Ij5y{hhS}twA=#&ex%V=N5;*^fL6nKf>}3%Mc#543+Pl?Hu_g}=N*dBj z)+}G#l5VJ9+Sa{PWZ2JJR==_}Ee6P^I`t(vCn#!3x6u*B*vrV)aa48g7yYeXH8l%X zOJZI4wJyq-oEgO1>RWIyt=&6g>>WqdD4wx~XOa3QKB_Lvmpn8mHGOJvgLYS~-OE)+ zsZzX$)zs=PXPjAGCzIXKt$V4a%Rg7mk7?%c11hEj9rrGvu$PNzN4-2*9(cd3U%4i< zYfWTtTe2ckd2rC_2YN|%3Cikf7uC)e6I^`o{5kU%94e-`S90CKe4bZZYJpuE8vkL*3v25RnMK7DxR+!h)4bY6GZ#!REm9q~^hEx#b^qtT$nu!u@D(Ug3MCe&tDa zwxMCaC53KFobA6`%j6F|fq3K}^#u5j^qk6Pt)SyVTy*2o^p7dH^4~8yTb@2QxX1}Q z%uBbeXl}?hH+0SRPxr{am~P$63HST=AzQ@>w_m^Pzpcz=K@ddaVzMddsNF6exi!rc zNDWpUM-BPmcvvu))+o<=kYPBW=NXo@-g4Jl)>T$%;L2nsnW+7bgXYefHfvE`2L&Hy zPIf#ZC`vOdE>@$Qojtq0dnP|h*VOVwoZkW66{fE+OAMyF;Go+1bqV2?Jjqk7pj%5? z4|QhjpaRVejZMqd@Y!+H$bVIdI>S06BjZS|;XI(Cpf(*%$^Jo8r_Eu!?-CZL6cDl` z&p?pYwie1YV&DQB8}#hLrIG$0g48cmybAM>Jm&$u3Ir)Lf)vf0I)D1qMGNWfXt~hFr;XP^?Go=9X3UZEEh(an!(ns_{&^twxR7D!VZnXT7D{xPvLyn>u&yf z!-N?nN`kxrGde)cny1Z~p`desZVsF}?XbmlwLd+0R$cA%Ql}Cx6WXr$e(~%1p+{q8 zl8HcBFn~eePn)}7A)I#QAwieCB^DZDvR}}ruJ)kXsf%i-FV=!0pwka5DcLjVZiYt2uf2uMFt97t?PXR#Q_}R>xwGcYqN3^qU?4ONazO3EMT=`^kQqsb`pjTU-;MMCcjKk+70DlG%`aUyzx~P; z!z_EJoqeitsr`2=JL>3F<;l7r(VAXW&ung~nqqexH8%TYWA&t(g(kHw|Gjc>kO))r z>WC%dfwQo75%MU}W=&mKYG_j%~kx+zh|{*S|e#q&Ni2Wr#F}XFEPv|6 z;jum{XP=}qybFKp)X}k?L58(^QPLTmZEHQz85f(7{j&Awh2s)Ef^ZG%jJFvW^d1f2tsd;7_=BXIAF4=~8YM)f_Q^gE1Ej#v?3&&5(GdnO( zD=szJ9hj$;Rfd%0A2295UNNJ+8QHDB{LT0od1e>p8F^+@<;*Bc8DWj&X^4tO3i;6?b3E*B-G1N#Dz`dxtCb(8}(`gU4dspPFY}N5o zGgYZd9U!T!QW2U;vm|S+tRa3hYgy{&CgJC)#@3Xcd$maj2udxWQmfXqwxyP&Q+si0 zBP^zdhv#K1#ug6Gn`<#L9-ho}H$oO8D9+hva(x_AC#$2bW=uPOYdJ|@1u|*Kwe^yp+H_@kfEsD65|D+ z0A7L@5Z7c&H*K(W+du%)kO#47#Rg+Ze3P810ormQL1`E~#Gv2~(#9Tb+Xf|_N0Dxm z&Z9_qX=9J%1SD;YS`o|bVWvI~Aj|V04j{`_C(U>WE&gHoJ_Ez7pe!FU)QAG#3e!uG zL{VD%P@t?Zy%Y+N6{eR$0kUFP6_9AfA?SFt-R$TB9MRv=LHA&vz;_dT6wM!#{r*3@ z&EQW;IL0jrItFp!Q<^`fLo%Y_J*IQ_h^Cxl_UWmxBtM^5X1D#OS7v1ai1^`^1t6mP zm7TlhK}7j0X~GT&Bp|52$sL~mEDg|904Gh*)S)u^4qQ{ep%D#SrinhOO@hK#=Nr=l zYjwUI#96L39ox3WS+1_o&IJmT)%nIGV~ai9w2(N=I}S)&{{g`b;$y^G+~e%uWT*e<4W-8g-Hhth z=y^P?*lWu1d0px8^Z2~#^$2==zWwwVdVIe9ENQ=AXOGDA%KW+jMB4Ay1t8LXzs|QG zOvv}^d>6!-pJ0pSiD`>7KOtX9apor!Yp=vNU{2_v2PY^%PGE34Syj@vi<0h%R`%P> z@%0k4w#A{70F)s;A@K=@L@6gq1jmpBs86&i`y+*P1^;9#cBe&PHgH@~-^o^@S0ICi zBk}lCvwu19r0R#W zR?sDwgEd1+32QC4cj#|_MX<1yxL`_0g;P54oz656?8ospDL0(X=W3~MTAs$?cA`Tn zG}HiGNtA#h)>^bqJ_iDf4mX z7;9p*4)+M8HDpMSno!wNl@_+X>9~R~%NjGZuCl;Fv|}4-zh(7}D`iV*Y4fVp%nNE# zgw4s+NUe`uk#0gQ#)KR80u(%?VgHH%cte3&7z(9Eky@B6ySa?jp)B9t(noU^0nyMR z9HoU`y@NADwE%L7sO9*7sgqSvIYE%=X7PMus>th>R(?3wzkFYhX zuzvl@f+{gCi!@P{n8K4#P$OCJTvAvgyb=l2sK53a8T{R4mfNYa3v#V$W{(H$vHhS$ z3~)Ben-r=2!wwxo%@m2dxy&j|plhgvKZ+xD#Kf+)>=_kTSt&v(s)<^f>Q~C1VoU3O zsp$(+^A{{i9h_NMTa!9eZ#){qVJ^6o7?E`5=G8QGYxA0xrK+z-YSm4zf?T=}{3^Y4 zO&gi8zP7X~XelnDY0c_Zrm^&ybgHo}wUim<5;~vS*A%dprc6Cv2$gD=D^3Eb^CS-W zYK!^1`Ks#FtuiE0<<-`Jfgza?a!{>SnQbM?gdRLSn56W9dakqV{uRShQ|SU>JSmk4 z4Z~Evb#;2F><)$#b}nE8V()Oov*X{_6w#+*=$Yw8!h{0 z%c&Tl+*ZL3WCs1p&SK~~BNc}ufU3JI?Y+^8cMqnCLFf(T8!flIVsvUMoprAcubNI$ z6hz)>hut+aV6`KhNxHyv(sm^&=;=m_SdB6~5-9g3%Qa3~Xq{jzQ4-*|$tp_*7i+_# z>bF~VZN*vIMHkfd2US(lW$1;A7EE6-c**clbB!_Ma3P<7**eLjPB^sUTwY=#R(x@*ouxnPw3*FrWwTn-EQ?7 z5|XMeOa`_6Iat{3R?YN~j0-toT5z~bFX;K3tZefWhwSTkbkDkyIUozn1=A8od+;MWjl%noCIx5DgllMM4S*D?LQ3oahZn;fms;34;KQX%SSA? zOCFdRx+IiF32;1ObuQ0~LT`Mukb~*CBt#rO9FOKXGDuJBZNuN>F`0WyLWd{;mTjDN z$QMHMKUP>@CbE(c)i(jhV^ZJOWVjLy;N72+Uiue0L;dn?XWs`3Hq6A#Yy++?D3}!$UI$$R!p|11ubl< zlBBzHc;oWJ z>zAj}P1(y%?^4N^s76Gq$x4kvR>p%DvTIKtP+LYRFBE1iBkK#g^0XRbw*R7K@5y&Q zad|IV@e(4ABDO5K+?TVH剤pR)puB8#32P^dD)*JBcF;N@G&vIBc%_g7`qe@X zfgmB`kUsdTaL5AR&4?tgSwv67LAkPu7gBpSNcz!h;aUk2u-7DDZZgw-U$a=gDJUuF zb<5U{(3KF1kRg)H)nB)WO=?!D$m>>Fw{%DY^}1CdK^&wK8Q+M6l7SO4gpz^tjR;E0 zeZwjXg%Y3gh6r`33??jklkPj&C)Zv+>759HD2n@zRouxGEJ^Pn`5=1mH&z0AdJ`O!9uGWkBGs+y8oYXKT{e5rhxK*AawxtgpkBtSjMG$jW}fDOwSD ztM9Ty&pmDOcM(Dygzq9%iUa%3Dhr#C=m8|r>Tfgx-s@yL`{B9&ojKXgw?+bplWnt{ zc4cV}nO6jBbI9HjgqFs@nVo9e{Y@ohVGbF#E1_1%;%?zrkWRI`>xDV2Af0Mco%W)j zNU(5km)h;WSa*k;xikU^5a&`m-?W5WAxlFLVy=*^?kgENy`;avj$LhA73D16T9>vo zF2Ntv%elAaWsLW-=9gyKU^A$S{GN1{D{a$RppYMuO%G`_Xv)4aR0SlwSK6kxKvMRV zw&^XNSnXAzDxiRZ)T)3)6<39-fK-`{Dj-3+N>nk3TKGxdz0Qu^pB?o3ftl-UwnRi! zUqrn=6cq}5NR1DPq}PX%LV|yNC@CcP*N2k&BI!n(IG9ut3M9x7NhIB97xzqeD8ad+4(r$ZnzY|6g6zW20Eg+SugHWdO%{WsZ!xI!S&z$Q_qioyBfkM7A% zx#*^e_e3=pe{_#+=8$9o;~u-$FjI3`!ro)o3=dYShDB*xvV$*fnzSVX5O1_4YESV- zTWk~4@+FQ1iM@=(UgAmrK|8iByX)c+nFsBJ?wN7X(?g-TKv4*!ZW&169}3|ifqy78 z7f9eA3e6=h&GxWuh5;y$AVVb4*Tc3M2AcV-a+m2o4++%6wiyQEG7LOwvtK9{00k6e z2qot7s9mgGE?+@<)b6Qm3lgM9ZT1ZNQ|Cm|f5MLK%zko7zswVMLiTT50@&1fdst^E z;2||UB$93q>kJ9}_OQ;7z;6%hoRG4gvT8D2DtF&OVQ!$F zw25D8p{Vl?n^3QYk~%|%P*Ud|Ho;!=6{Hw8JLcJAyhFCH-A?>~DCt%0lm! zOh698bYz7!D3sv83+j?8`jkT2Ty0P|JWY>*+8bhj66qRCnc>25FDJ#_oPs(AbL4{BAdV0|U~+2scw z{z?QO-R+fdkSS7o(y!R1A%JwZS8M<@Jk|#}U~EV-4!>fL7-Qf;+LOKTiUaHSMDQ{- z*b~9a7_=vXm#M*?2;KvJPXzA)zenJ2?T8Ts1hAdhH;y%Gek%LNFQ&Ht=Z1IuvXh-e zXT50|Nc*pKvd3Qk`Q){ZQ4om;u+}kSIwS(Db&}c>Ln6Rh2T%Noc;Y}>Vx7}|!yj6# z$?GBvY58>#hP3=TC#mfk9x&E9>{VUoC=8l@z0-d94cA*otdB6H&DT3-Fb`B0U+zkbtl>t|O-MTn_f9Tg#- z`D&*$RD+nx)y@#@>6N2`teRv>#8*R(n;6WMD#(idI>)}z$^PM%*~#mic;{d`gBJ8hTVRTD{&W=@1-f@=^FkC%f|2nf*38W*sK^WD&8^VVN4{gTBGZ zK7Z@X%ngoN0ZTsd$2T~vnWei1(l|Fc_Wnj#_Q!-IzJ%$5j3roUUF#*yjomdL(j`nx5vuQ)<(iG+*`q6n##!N>a@J8U^N zuY?ShA#>#WO*t8akxBCXPN{ZJkQ8*kGkB=cWI|yLn;4Q5biXrpe^U@s=&g~~WeN=$ z7F0w*TcZkbTmdrQVPp!uH51jSh=R68H7cT@tx=7bUq9g3p%eiHL52m%H2Z<5Aem-A z;FN~VE7R-;oI!dLNE=el1I|!wDP5r{=mBTUe!-_Qa0E6Hh;7+XcYc2Owx|G3CAiz7 z0yvfcS*n*ua8STDr7odj!vk19y7_ zFTsrMj`84d0KeVgu#9+cNZ_|S1GNW-1b(|Sa!hc(7N0oB&g@Ztx?tkY2)_gPJ0s(i z(8o@PlXDud1Nb|o9cC#3iF)kHR^K&e(yj=gBLKT1011Tba*}#%4D5~o>~c5?q?U() zO%!Bz`=+}(TN8Ij5S@V79YIKBWOwAnI{~rVA;2t4)W9Yx@^aR_=fp`bM*y5RcVCVG zIGP5Tmx06UkjU_7tpf;@V3L*YOTm52yZ*Xs)GkKLg%FWe)iG(9?HBQA#?`e{Rp8m z2=7N~=nTU9q6Ufa2X;B@cIW?&@&9`ve%R?H@B^mhE5~zv`&hvleM-?nbHL~lEO~c1+-5cv%4JFT|oQPF}ur z5=KSJCV6qv|JI3Zcl9Q@bkuL1MAzU2k4hD*8RdCy`#JaTwvRlIMY~cA$%uEJYesfR zxXyD+^^_Qrs+{LCB^E70(*MqL&9Deb|2xlRSp2&*da=wuE^xCCJox^R7eocf^y7l4 z0GWPV;Fb<%@f%}u`!H2p4YJ0Jp4Icg|b8%FF41X6# z1&90WYanxzi`_mWLXrY5c83mEiZ4d-m%4UmrTAh|{H1PjiO#7M zACZ|NX);C2s8cNd{ZhB1j$=XnfK++;s`Dy}*t?QQ&DJk-D7uKn+i{L-$~)slHN*}_JZ=~R295}8i5yQO-uQmm#^?JkE2`eSWU z=}p-K9v@h>DXOe66q3lK$UcVQ&g=z`_s!fHG01GHkc2^z@5!XHSk_Jtxb{I6FFL8( zrurpZwUjL_ePb-Of{TwUWxJ70N;x9T(KXq4R!11}SIBBo?6$ENy|Ve(bj#9u;>AHm z?N-WhHZ~^LG&Qgnx|Geyh7{))R;dCMP;0npDVyK*EsdN!`(+LSYQqu7yV zLp{Ax_La4`tt*<>P!}l$Y`s~^wsn1~jm@s+mim_CIDk;!%0;$R{qp)oF0ZDRv@{>X zPVJI4jVl{kQw?j_W2FGm*HSb^a0TI&m>H2%jxhXlrHL43LvHNIabre|oG@aD7EDyB z?%zdKK9-|{+&z`j^!ByhnQLf17O`5=^{Wts|F+U#oTOM$&vBQwMvj?~e^ujh?tRJ` z7j2HRnNEY}NzCzq$Q;F39&k(bD2{Pp;t#kJ^rQrm9{PYgae?6vv(?+py_BN_mqXfiu~*frwM;FxF83Oie=5e&1GDes_Z5E z&4*K`k_aHFAs|P|AkEOgR{*!UW@vx}aGT4}Ap49mvw9-i^u&=1o^Z{`P^?AnW4ZLM=X^SGn1w*sGEM2vT2i`ZxtMs8Z2gKwrz)C4tSoX>hM5=?x(E^ zNFCOxTyh-eSt`Xq+g5a-g#3wvboPVogE|DMX7K1+l-Zi?_GI4-@@l;yJ$ifAHSs7& zD)+2w_7Wh`+p{ha4zVvtY~)#YAH6<=#EU=c4y?jtP=qYco^$QjT}S6u8?Mi}?D_Oz z^~Gn=)C;cLsUo}i$zB=$(nqt@7u5ZN%TbKqJ0>r3>~Y-=6{k9?(e=rZy%o2Li{Er^ z?GBWl>wiR1>Qn$V4^l=?HK|z~x615&4hY>%8#YW`Ay3Jfrj+p@;J3CZ??#UL)U@W7 z25ykkF*&;>$Yj*#dQ<9%2s`!1rMQfZyU^*a=18*0ijQ2wmisEssI(lH3GkQo%k%fp zl~j_8d$Rbul{j1~*T(sd)arB#?uM%sFsoxjxYJf~+{)qB2TH0cuITUmRnEi#)L5_b zrj`G1;4rnEd`hP>0)ll)jo9x$P7<5g{g?bILvu^x@W!Jw?_sg*^`tU(66~>^I6ewkf67cRf5e__cfQ5^j~FxTOyN(ciRtp>PTzSyOC|m z6z1K~f00Krxutra3liIWS8VfQnP`M1J6UZSC5MQ`lzt#3E zlaw!9V%&zryuWaJ>39d3G4C(j!6S`%v!(f^YoF+a<}KoU>Bc*#&CwFQrTH};xFXwO z*MLg?()+yX3$lIf5?>gi6r{E_zs+8`t4p?VSJ%pK3$scn;@iTk(ElLoutEPQ%qF${ zhh+N)7r&@H71`j~!zw=R(EjPJKRfNWKflo)G>>NGGU2EyO!D~SQu-K)44g8kan_Kl z*WyO9C;zn{P93vW*X~l{PQ-i}bU4<=0gjgqz8nq*9GQ?f$nLs38Dd1X8s#$7U47h?x7MF9@SdnPPcodVLz0()9oIi zE8T1oce>rH)N2)Lsj68$DtK5m8z*1<&7OUa=TzLG&Uv=V8O!F>4{y3_->$|H4vZpOSc7j=Ef8+jVE2&mdeOUt+D%#nJ{|a@e_uGO5(&o(%tOE_2GvS&Hyl8 z{>gLoQBFmZfdqZ1Ms#6;t=<8SEi7Kgu6XgA9)r`k%9z$ zBuOQx9CTAzMU}`x?mmxuBD!rP&IcKGcuuK9ay`R*1?xUkoYjEIa)9BB7hmK^t(=Qw7&A9-Xl2%&NgmF}*GBVaFf2NICP_Tt%E$RG=F$#c*lRB^}GcY;ydklw%^U@qw^FK2Y znKl?3$^3|s{Ln^z+(g8KKIp}}nFd#9@E`Kro@OZ42kuGG2Z&1K1U{|zkjI9i9-AF$ z-ps>MgOflC31Nei0L#N34IZ*UKjOLl^Mwco34Njjm4p4&kb{PPv`{ROn*<|P2Duzq z9xap$L)sRZuA}ypNC-`r1UR-umg~rp?ymk5lzbUT|@@q(pU> zGj5L;)*WZ_L}69MRgn;OO2>}F@q`QkVcqE<+Y9S1v2GHgCP`#q*Q_O48(7I9ivt>X2qy>OZdmuw=FDJn>&gU=KeB$oS( zS8jZluu#x59uXF;CIa}+dA5!@mEds{iJCHMF~ikFKAWv%J_Gig$K^!rx+H@CoL4C56OFQqDSNkPmcM+a?A@MO{z6jrZqF=#OC)^%QugBy=S<~K za9+ye*d@Tct zRgaZ#PnOChSlZvb?1oo+W&Y-wm|Tg9$rX}tC~|_~c+Imra&6PxrXZ#x&-F0=s{b!; zUeeku7aJBgG%sd^T#Uz-Yk7<j-X}_mh zi$B46FT#;y5buSp#aGE0wiYBX?}e=;yC)yeT1U?OAZ(}(s-YltLqVdB52T?)9UYVY z$6oAQUxz4Uv*crsJ?@_)Qb$q8XW21-TQcdhP#DrE;j?fC1_{S!Ua3Ay0*Nr6NsoO~ z=2#u2Qr~2s`Pc#Ew_Wrc^oLPJb-F)_ zAr^!XWjgxfAw+J}qFIa<)oSC1q?J$c%@PihRzAfyF+@mO`4oSGK5_s_E1%-;KVJGIJ(c~1%>ArEId_}a=ed9zSRcWSMc9dG3 z>1RLraP|TGt%y7hCkXjwyeMD6Iny^@6cU^>ed9%CQ}P@?`_b!1%s$6A9<-zCn2@?- zLSmff_@-laO8V>k*fpkO$`<50KhZt-Qu6sV$*$dwIDsy32FA^!_!cgUq@LcGd zB_|~ETY6T_|X&qTH}ytYJI42 zNCj^+4vA#zeKdZHt{iH(%(q8ZT=B!@sM#N=Z^Hc(zLv{#Ov$w!%S}LYf!~DSWEB-H zQkj$g$SU=Jx=0OvxJqqcO3+E!J|c(J72CfoY6#KhWxiRZl9}pW=5uySCJc}?#ASY8 z9Xx`hAujW)MygSvlZwx1^W$%nx*;k>%y>g+ete~r4Wao#Qp$$V{A5G>YF}>1WID+x zesySrP_RL28-zspSBExO%DEXoc8{?^*~PxjXM<8qq*P3BqyImi*~~GkR`{t609t2| z)MjI7B9IieG3=C()Mlg4%x1U5&Pzq3clhny-+s@dp`^OJ%IstaZ=dl(IQ0MZ$xdL*4V0QZ|RWhoqFvq3-1@ zz}-ss+2QYbv+oX7U#e6OsZ|e2d3T4ZFH8FO`LUOc>Sg=?K0nbVcuuNcCc59|xBusR z&s&SPg+h@^N!!AzL&CHz?EjDmwJoeVBvs!QRvnV6ZGm&$wg&|pq_#ass``@H-dPTl!X$HKKlZiXp7?mJRsN>W(fB81`jnJa-`{=vL%;pn zPi9$}zx#o{g2V^0i}!uEQmywCjo2jUWtd7pn)iLP-ct$4@V;;EoT~(cf8XaUs;nU; zfeat`ZofRHv^5C^Gb1?w{Xps=n+%FY@o?lap8)6wGP=l8At_>h1CNuBMgz~Q{U_yB$WYv>YKAa zkYIf3b8%KngW5my&4N6s3ii; zpuS2Z2hUC+n2%d<-Oe&Jof@~#jO+b0Xg;4BkL&A`kkZ9Zi<>B;qRBvl4!x-ay4`7U z6MB;bGMpaQS06J{g6g%TXh)+GU^zYBsZ_ZpNq|1XuqY0}AR*$=ISM#1!nJW%Uz8C9 z>4YTc>)k2=%(a;~BciG(_3+P%+w0=4>WQ6|vm!woJtSS?thhOh4+-2^ao%=Q)=87xYA;GAX7$bVk z#myklS(!pE&M2kzDh@ms$1Q2SGJ^oE^3uFs)!PT_BfVNmuNOsHBmn_0E=&-$UJ`fJ z^EP6CcGAB*ZeNwxtJv1%@wi-2r|I+t&lPcZux>h`$v}c0C{+fkd_^3O9&(UjL!=}o zA37ma5(#i@hxP$IqZ{J(t$DRd2fQIttJ)N~kw;-dz3N?&8za5yU6C6jy{cW2o0xc*me89b zB2-P33k^(o3tt45{|UQAETDwP7L;Y zd(;vn0NEb3gri#Gj<`G7v;wOa5w%+7YTdo@5nJ?*zfInpZ$KyHcj%3(6}bbs8Ht2Ht-axwS8xcz8euQH{2Fdo;>DDYX-`cR}rebbf% zy?9d@WRK~gxY_rU6d)dso8_3Ib%MSuqY~hFIL>7m-4dQC?UA_Im68ksL4w|uQVA*t zyHeUABlWhp{ghTK{!h&lNeT5TXa2UuO}vh;z-^0n)ss6&^tvt1Y~e z()V7D$6iTffAYmMUF6XJ%W(ouzvUHfw_J>OZK8efmnS6B5a@hu!sr|lov%%pK^qd* zwTW_lFa#2vuT3at0g$X>&rH}aC-e*wn%rk5Sj(=BGr&SiQCB541=eq!j3O!Qs)QN( zR05j3Dq*fcs{|mfN_5s8NhMI^RSEi$tV2}-4SiLj=dhqONSFlbepRB^(BNs?6bs14 zgj-dy)#hcPW9yIO?C$1b*P3K0DP*F;XFUK5q%1Wz7D^$lwXskNnXPOrltLmN8w;hd z0kpYT?2vgRpFBW3TAoXGr)o3FD7_DGz10X zrGz^wpFzAc2@$9)U0*5$6%YMVqP#j{0rREAh>>!C!FIbO{nr!ncyz_9R!ZJE$UR$P zy;?4}M_y0xGV`yn$}VCmZzXcuI#{h~2+Djbv`R><@~wpNT##_SmFTJ?zmSynR)XuU z;s(2jRlc3DPcG6{2~F;|6G3@!p1f!SEk(VT$ZhCoosm%_g}oP6P$f{o_dd!aq(1e*Unv4;hwR4_hBxcw`BlA5K?XAy;O&0XKgnlMlDtB_2g z5Go=QYFXt_0Ok7Bhe|+*4-%aEkf(_xff7GS~6bt*LuwG(epCrtq z1BwO6PZES?UJP|b!WW6$-%G8f?vkU^OLKK))~cULRW&Tl*qmULsH| z3XJjUXf3cTLBC13Clz@W|B>PidG&h?ZLPTzORcUYgIdGmTFp(lTRU1kIkBsM7)ibH zYYr*^s}`=`B=}9J8F&PhAT9iD!tYeEuN+=x$xPSdC#KBtFLi8;HMBkqrVfv>8kg5M z8^7>nNPFP=%C@7F0^jXtFSYfXM zq?utYE+{~3<-{Vc=18xXwxKnDTVz%~iq;9b*Q+QgJ)xNQ>VB+HqSi3z0T`#baO*}wcO~aQLh9_jD=@Qo6>DLccweZ z9y}y>;7oU3ce$b_uH+O}rom+r-B*s}jNHvL-79MNb+7OT$0XAkRzly2A`ePALmt#p zTlp$Ra&GSUS?=3?&W(7)1kT<2N6OCKeBx|(MrUtBAM2efH$QQd`%TB(Q%Ac!alL`6eUhlY{CW>#q!jhJV#jbU8CziP7x#6F|xXt{cjT__&T9Xfg@&qW9iFYH$5j{VZDsbQ+;RQqyoOn5jG=2UYv)==MH&w$S8E337w-kkkgJI6tPU<~&q2L)iWP&M& z=h!Fca^&6h3Hfq(0L__@FGpTspFla)svI6+pO~BXwL7eaGfB=wU%mSdGOwXI6T7K* z=7oZ1;)I_DKT|wBiasTG-Pi7s6FGq7Ov%f}duYy-ylk9Ra;6MX??8hfZ<CDP4`EPgFL^k4`S$U1{M4B@zuaQnjI%|wvHx~_aP1u<=u`XDmBrQ!k zb90aVxBK%Nwo#qAeixIAm(rZMUDeag@NhHOnLBQNz;81^l_i}8xkJBo$JMa^=PdB$ zfg(ZX$uws{&+#Dz&w^<`4^B`#$)vL|ckj3EuO}wqS(q;;3D3fOIY}g4IBt?b;4ZMU zaPq;ya)r=2=^T=4{mxBKWVPuWlGhJQBIl62emaA2$b_F51nvSmhfMj8V3k5BPdbO? z%D;Dy8O{veIn0-nMk04P2#56;6;kjVHtEpdb6YWWNjmkLZ~5MBwT3gna_apKCSMo0 z>N~2RfdGTMx=#I|vB4kN2!-sLbdKJ1kaw#!sVhuJ=d0Tlrla%K?TWBR=d0Tlh@+|Q zS-fumM7N}K?B2F9^|H&bvoFplj$BBa1LcK@j%1;()l91+}uKLw+E()ms9 zWY=pyLf5oAK)>nZ`{bF9&m z4KfTMpJPouK+TS=1Tvpz+2@;w0inr%o|VwIt`+<`%hemXP@qHVMJ6P9*I7wD@3wfk z59oCk6K~mCQkQCeXR$pXT7`laQr{zng!gwAvj_7P*56qKtVPL0JTJ6j7aJwZY~?~L z(NBDa#AK7ar)-a}=%eOVZM?YJ%Fh~dt~|FO;Z;=gO^51r^fqS=*7p=3DI#Z$9Tyy? za6r8%_xpr*#GH%xB@iVBD=bO12$+dfkg!~&-xHKLlYgldyVXb~li5qHM1SesF0Yvr zTDI&fa}$faWo4IJK}9f?1~PA^Z^*qEc$0D;7kU1e4VF7lwT1cy$OemNDWus|0tIfc zc%5v6Oeh=*@vpV)8*;+}?~0OZt)R1kwQ{!C zjk%u|d&@E#EfdYBAXW8^790Fp77}3GC{G5;GRhG{xzVz32_J`7hH_(QC@RLwo4UFS zLDATd`T;{7@4dmi1oFUgw>69x&Q&Q)zVFLj*wL%Z+!wu- zC~?vIqSqFs`aG1Y146Efi{5APGbN&9SC)Ezjvla-9b-rxS>q!}e~zA?lt|#8ty0}L z`HC!mwz{js?irxSyu~tG#!x^(hENiu+hP@mPghEiZj04Ly9oUR)%C?`mx^L8a04igMkd8+a1(IU%{@JFnkVV{r}XCARe zj#fW;<%<7&%(9=#tt<0}ls#q<%$tk5B3=Cb6S>FBy!qpw;8zlqcT&l~Jz@3MTXQM_ zz$YxW=Jq#?WOx#fR52`9U+#6yElYZpbtLHJsc?vAdD7~m-LXml;z^4)z{KOZ;(T{l z_6y;gxsK%D!H;4F^Hd4A)};HF++UO4g3*78MAI(#FOg{41^-1vn{5~Y+Lb%9vp07% z4;JeH4#g>fc3G(^Q%UWDcUi+n7-gtE*=KVvcJ}6v<`Lqs?j!^Ftkr)|o>4r`vlhG5 zGfaul&*zRT_hv5SLE%sZmMvcAd82L!>rtE$eq#M8(Q~qB(Z+J z^@;B|Cxzl@ioko+SH=hMty73oLrS%)1Ur41#8xY3y zuX2y|@Wy1mk|~WgAN`=`S60>dC;@GKWwE0xlU7>cTPyaxnTtphd}}52={Ti-9yuPP zTp<)K45=qex)r{&s`R}m-3H%TqxS_hqh8ZJ(T@Gr)(Z}4fD^;FGL`yIvW@?R0v1xw zD0Cy7WLN4JhIA90Wb?w12ulN;V#iK1sG|N;!dFO@@=vwZT!sq>kibIg>6vbWQ|(^* zxSVc*Q*HJj0$>@0&#+_i17?mZ*X+))`AIY>kGDV1v}0$R@?_9F)8^E@3`jiN$%&fq ztx_n8gH-22GV+zoXW6~=q+Y-Ad6s^hRJ|s7t{q!vVCBZxxuJ4+6_SOFu7*6BCa{pY z7LepUFRTS5EqR{QLWJf0sPpaEg`jqmipXeszG&xAq~)+W8dU}UtE(mo^B6%(d zbqxvJ1);8att4m1E;d5Sh?=t#@+*LHdl$6zVGBYbB&2RZNb;@^Q6WKHuTh0nb`&oP zUrOcq1!j1VdL^SDXSm2VD;fPb!$taeSanzHQag6Jkw^ySOT%|}xjw}?`A}{8t`($K zo4#swnNizFx!8qBmxX%c&eH}vcCCSxJ5M}R-7Q!_MY+Mmo?PytUf$8wSA`YSx16rB zE4Ah8TTWNmSpGuA0>Cx75xu>GGuIetbk4Lf?awW!^oCdSD73BziHNhsE(&+- zr5;;s&g_Z;I1t7xTokaZdTYcYHP{+fojkB?4XZ9kqud9j>Pv<{7_kV@gJGq~1IvR_ z>D$as_~Ul$h1`yQ-mRS;=O_~)8nXw!J$FujZ$>pQF6%y|ce}USoPd-WtlsV3ZgUTN zhGL>V}}%B6|}ai7ku8Q`UBo(@f~T+Q8{4m&v{ zEKf@(UndcOav`73B?fxu*F10AI+j8rWj}B4Gt>yCCT%u9%{PM|Uq8|c+` zdQse={4OlJqB2qIImjDZ{c@-)y>t4qU8HgK&gsiG2RNmMT||+4a+yKi%$a*ac}bMi zP+mv`+!MOGuFRM0*juIp5;}BW7Xu#-T2~R^&0MF!-pI_Gwi)|KB+r|+iM2t3_NHxO zZQYXoJ9g|ngGLb1eMgTcuG>w}-nH!sN&`@IXGlFrK$7=ed$3-ZK!WASSVm2H4Y?sKd{H>SNR};{lK0%OS$syqOA{Yd%j_n zSsbK(+>4Lu>o|3?WsD0A?}zr>c}k=nN&gc&cA}%l_#R~aL`Db+D)x|-(Wkckg`Ml` zd&9dy^Z8TT#1Sv z`eC^#MPBdR!9%_7$*+V%W?^Iy!s;`lG6nWbC$7UKWP#&Mhk$CGDiiAL+=NrsZfEVvmFirNUyJuZQOHnRt>%W+=xY%G3PpFZa^Mz&vgibu^k2rL&&;ZLyb4F zn#Z%XDwo8ugWec=B31 zC@2bo)XNS?^4{c(oucXsNkKO`)21suRVMvgomjg;tt98Ij+vxZ3hKn$cnDT8LIMk^ z1EP>*zRek^OMwLTHfQ{V;9#m=DF%IeuFoj%(9G?jX^<$Xp#eg|a=RFyv{=8SzsZSh zHj?xs=O)MeC`3Pz^=kApR9L< z73?ptcZctI z+iCey6;PT6qmjX50szSV}Fu29ohX zZ4|aUDCs}!#2z)}4dTYL?e+rdz>OYFhYX1M+U|!#lpweL?^v-djhX#Zr)NSKDtVc zj3jH_K&o6uH;_QQCc4oOjEryOJ|E}RRKF3LO_iD_zu}nOJV;pHaM;b07t5=JdMkI( zcyCV4TaK+=DT$Qwmcu+nS^!cqIm}Wv%cx%^W8*uy$HseiW!`bjgp@>h-f>JY1`?ik z92JbQ-D+-WI0IM!sa2h!9kLjH@@`>4ieP&9rZ4b?ba|M z{m6-ZVqj~?`jL~+TO>6C`*8>h1uUe7g(UCCAuJ@YABV8RnKwGI&kgEua(*f^9_eMn z1@$w>Y~c*IGXe{(O^UB%{>(8a!6AYD%;6-sn9GQy|E2l?59Mh_kn_v1-;WU3uR>TT zP$4xcBzeCIQ6WM7N~2D9-4SBAy!Ne|4hmjKJrRObU;FA+KP0?gJFNQWAkoOA|D6+C zmz%b~H@oyZhlQ!kV@8TF|8R1b?eFbh{g2R_lM2#5LT?TU(m%wT4^=#TJSpc*^s1^) za?P*jj8ui6uB|5zBbBk9?3&mcBrGS(>)rzt z3)HE(_a=ISs!w%|TO6s3^;CJ?Qj8T+GD#_%S%Jh>PtQ%BL|sm2|H|YMTRq(^(p#hC zf#r0UqtSBBex%If*5#t&8)hR4gd{tX%)eUjOQ|A{Lp) zo#k?zQVS;YxU*b_fq{yJExdDbYbJYxtIy%lU6V%wis!h)$Aly-=eQ_&tYRTbcwX-D z$=>)3@2~3?9;tqT;ykynj#fg#a-L{RY;F_*IX8B(dC+|n;O7%+RHi&inmNm3#HuJL zssO3SZbs=GcgM!RJha!t%tPgF8&+x7nThhFg zb5W#Z+2e)Otv$*X1Gy+{ZAe%z(n_}7(Hxp^V^^A{8%@qjUFMZ@kZ80mPs?BK+CQn7 zlsjpv*Dp78syCpT1l, + ) -> Result, Status> { + let asset_id = request + .into_inner() + .asset_id + .ok_or_else(|| Status::invalid_argument("missing asset id"))? + .try_into() + .map_err(|e| Status::invalid_argument(format!("{e:#}")))?; + + let metadata = self + .storage + .asset_by_id(&asset_id) + .await + .map_err(|e| Status::internal(format!("Error retrieving asset by id: {e:#}")))?; + + Ok(Response::new(DenomMetadataByIdResponse { + denom_metadata: metadata.map(Into::into), + })) + } } diff --git a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go index 99488a9947..ed1a750fe6 100644 --- a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go +++ b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go @@ -3082,6 +3082,105 @@ func (x *OwnedPositionIdsResponse) GetPositionId() *v1alpha111.PositionId { return nil } +// Requests information on an asset by asset id +type DenomMetadataByIdRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The asset id to request information on. + AssetId *v1alpha14.AssetId `protobuf:"bytes,2,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"` +} + +func (x *DenomMetadataByIdRequest) Reset() { + *x = DenomMetadataByIdRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DenomMetadataByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DenomMetadataByIdRequest) ProtoMessage() {} + +func (x *DenomMetadataByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DenomMetadataByIdRequest.ProtoReflect.Descriptor instead. +func (*DenomMetadataByIdRequest) Descriptor() ([]byte, []int) { + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{53} +} + +func (x *DenomMetadataByIdRequest) GetAssetId() *v1alpha14.AssetId { + if x != nil { + return x.AssetId + } + return nil +} + +type DenomMetadataByIdResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // If present, information on the requested asset. + // + // If the requested asset was unknown, this field will not be present. + DenomMetadata *v1alpha14.DenomMetadata `protobuf:"bytes,1,opt,name=denom_metadata,json=denomMetadata,proto3" json:"denom_metadata,omitempty"` +} + +func (x *DenomMetadataByIdResponse) Reset() { + *x = DenomMetadataByIdResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DenomMetadataByIdResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DenomMetadataByIdResponse) ProtoMessage() {} + +func (x *DenomMetadataByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DenomMetadataByIdResponse.ProtoReflect.Descriptor instead. +func (*DenomMetadataByIdResponse) Descriptor() ([]byte, []int) { + return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{54} +} + +func (x *DenomMetadataByIdResponse) GetDenomMetadata() *v1alpha14.DenomMetadata { + if x != nil { + return x.DenomMetadata + } + return nil +} + // Signals that building is in progress. type AuthorizeAndBuildResponse_BuildProgress struct { state protoimpl.MessageState @@ -3095,7 +3194,7 @@ type AuthorizeAndBuildResponse_BuildProgress struct { func (x *AuthorizeAndBuildResponse_BuildProgress) Reset() { *x = AuthorizeAndBuildResponse_BuildProgress{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3108,7 +3207,7 @@ func (x *AuthorizeAndBuildResponse_BuildProgress) String() string { func (*AuthorizeAndBuildResponse_BuildProgress) ProtoMessage() {} func (x *AuthorizeAndBuildResponse_BuildProgress) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[53] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3144,7 +3243,7 @@ type AuthorizeAndBuildResponse_Complete struct { func (x *AuthorizeAndBuildResponse_Complete) Reset() { *x = AuthorizeAndBuildResponse_Complete{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3157,7 +3256,7 @@ func (x *AuthorizeAndBuildResponse_Complete) String() string { func (*AuthorizeAndBuildResponse_Complete) ProtoMessage() {} func (x *AuthorizeAndBuildResponse_Complete) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[54] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3193,7 +3292,7 @@ type BroadcastTransactionResponse_BroadcastSuccess struct { func (x *BroadcastTransactionResponse_BroadcastSuccess) Reset() { *x = BroadcastTransactionResponse_BroadcastSuccess{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3206,7 +3305,7 @@ func (x *BroadcastTransactionResponse_BroadcastSuccess) String() string { func (*BroadcastTransactionResponse_BroadcastSuccess) ProtoMessage() {} func (x *BroadcastTransactionResponse_BroadcastSuccess) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[55] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3246,7 +3345,7 @@ type BroadcastTransactionResponse_Confirmed struct { func (x *BroadcastTransactionResponse_Confirmed) Reset() { *x = BroadcastTransactionResponse_Confirmed{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3259,7 +3358,7 @@ func (x *BroadcastTransactionResponse_Confirmed) String() string { func (*BroadcastTransactionResponse_Confirmed) ProtoMessage() {} func (x *BroadcastTransactionResponse_Confirmed) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[56] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3304,7 +3403,7 @@ type TransactionPlannerRequest_Output struct { func (x *TransactionPlannerRequest_Output) Reset() { *x = TransactionPlannerRequest_Output{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3317,7 +3416,7 @@ func (x *TransactionPlannerRequest_Output) String() string { func (*TransactionPlannerRequest_Output) ProtoMessage() {} func (x *TransactionPlannerRequest_Output) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[57] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3365,7 +3464,7 @@ type TransactionPlannerRequest_Swap struct { func (x *TransactionPlannerRequest_Swap) Reset() { *x = TransactionPlannerRequest_Swap{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[58] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3378,7 +3477,7 @@ func (x *TransactionPlannerRequest_Swap) String() string { func (*TransactionPlannerRequest_Swap) ProtoMessage() {} func (x *TransactionPlannerRequest_Swap) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[58] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3436,7 +3535,7 @@ type TransactionPlannerRequest_SwapClaim struct { func (x *TransactionPlannerRequest_SwapClaim) Reset() { *x = TransactionPlannerRequest_SwapClaim{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[59] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3449,7 +3548,7 @@ func (x *TransactionPlannerRequest_SwapClaim) String() string { func (*TransactionPlannerRequest_SwapClaim) ProtoMessage() {} func (x *TransactionPlannerRequest_SwapClaim) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[59] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3484,7 +3583,7 @@ type TransactionPlannerRequest_Delegate struct { func (x *TransactionPlannerRequest_Delegate) Reset() { *x = TransactionPlannerRequest_Delegate{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[60] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3497,7 +3596,7 @@ func (x *TransactionPlannerRequest_Delegate) String() string { func (*TransactionPlannerRequest_Delegate) ProtoMessage() {} func (x *TransactionPlannerRequest_Delegate) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[60] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3539,7 +3638,7 @@ type TransactionPlannerRequest_Undelegate struct { func (x *TransactionPlannerRequest_Undelegate) Reset() { *x = TransactionPlannerRequest_Undelegate{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[61] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3552,7 +3651,7 @@ func (x *TransactionPlannerRequest_Undelegate) String() string { func (*TransactionPlannerRequest_Undelegate) ProtoMessage() {} func (x *TransactionPlannerRequest_Undelegate) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[61] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3597,7 +3696,7 @@ type TransactionPlannerRequest_PositionOpen struct { func (x *TransactionPlannerRequest_PositionOpen) Reset() { *x = TransactionPlannerRequest_PositionOpen{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[62] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3610,7 +3709,7 @@ func (x *TransactionPlannerRequest_PositionOpen) String() string { func (*TransactionPlannerRequest_PositionOpen) ProtoMessage() {} func (x *TransactionPlannerRequest_PositionOpen) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[62] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3645,7 +3744,7 @@ type TransactionPlannerRequest_PositionClose struct { func (x *TransactionPlannerRequest_PositionClose) Reset() { *x = TransactionPlannerRequest_PositionClose{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[63] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3658,7 +3757,7 @@ func (x *TransactionPlannerRequest_PositionClose) String() string { func (*TransactionPlannerRequest_PositionClose) ProtoMessage() {} func (x *TransactionPlannerRequest_PositionClose) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[63] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3697,7 +3796,7 @@ type TransactionPlannerRequest_PositionWithdraw struct { func (x *TransactionPlannerRequest_PositionWithdraw) Reset() { *x = TransactionPlannerRequest_PositionWithdraw{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[64] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3710,7 +3809,7 @@ func (x *TransactionPlannerRequest_PositionWithdraw) String() string { func (*TransactionPlannerRequest_PositionWithdraw) ProtoMessage() {} func (x *TransactionPlannerRequest_PositionWithdraw) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[64] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3760,7 +3859,7 @@ type WitnessAndBuildResponse_BuildProgress struct { func (x *WitnessAndBuildResponse_BuildProgress) Reset() { *x = WitnessAndBuildResponse_BuildProgress{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[65] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3773,7 +3872,7 @@ func (x *WitnessAndBuildResponse_BuildProgress) String() string { func (*WitnessAndBuildResponse_BuildProgress) ProtoMessage() {} func (x *WitnessAndBuildResponse_BuildProgress) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[65] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3809,7 +3908,7 @@ type WitnessAndBuildResponse_Complete struct { func (x *WitnessAndBuildResponse_Complete) Reset() { *x = WitnessAndBuildResponse_Complete{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[66] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3822,7 +3921,7 @@ func (x *WitnessAndBuildResponse_Complete) String() string { func (*WitnessAndBuildResponse_Complete) ProtoMessage() {} func (x *WitnessAndBuildResponse_Complete) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[66] + mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4549,198 +4648,219 @@ var file_penumbra_view_v1alpha1_view_proto_rawDesc = []byte{ 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, 0xf4, 0x15, 0x0a, 0x13, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x18, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x19, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x52, 0x0a, 0x0e, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x32, 0xee, 0x16, 0x0a, 0x13, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x71, 0x0a, 0x0e, 0x4e, - 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, - 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x56, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x71, 0x0a, 0x0e, 0x4e, 0x6f, + 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, - 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x59, - 0x0a, 0x06, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6c, 0x0a, 0x0d, 0x41, 0x70, 0x70, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x09, 0x47, 0x61, 0x73, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, - 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x59, 0x0a, + 0x06, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x0d, 0x46, 0x4d, 0x44, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x08, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x49, 0x64, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x78, 0x0a, 0x11, 0x44, 0x65, 0x6e, 0x6f, + 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x12, 0x30, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x60, 0x0a, 0x09, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x47, 0x61, 0x73, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x0d, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5d, 0x0a, 0x08, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6f, 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x75, 0x0a, 0x10, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, 0x74, + 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x75, 0x0a, 0x10, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, + 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0e, 0x55, 0x6e, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x45, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2f, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, + 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x4e, 0x75, + 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, - 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, - 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x53, 0x77, 0x61, 0x70, 0x42, - 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, - 0x0a, 0x0e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, - 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, - 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, - 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x12, - 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, - 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, + 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x12, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x77, 0x0a, 0x10, 0x4f, + 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x77, 0x0a, 0x10, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x12, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x07, 0x57, 0x69, 0x74, 0x6e, - 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x65, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5a, 0x0a, 0x07, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, + 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, + 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, + 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, + 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x7a, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0x83, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0xf5, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, - 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7a, 0x0a, 0x11, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, - 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, - 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, - 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, - 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0xf5, 0x01, 0x0a, - 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, 0x56, 0x69, 0x65, - 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, - 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, - 0x76, 0x69, 0x65, 0x77, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, - 0x56, 0x58, 0xaa, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x56, 0x69, - 0x65, 0x77, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x16, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, - 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x50, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, + 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x2f, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x76, 0x69, 0x65, 0x77, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x56, 0x58, 0xaa, 0x02, 0x16, 0x50, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, + 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x22, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x18, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x56, + 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4755,7 +4875,7 @@ func file_penumbra_view_v1alpha1_view_proto_rawDescGZIP() []byte { return file_penumbra_view_v1alpha1_view_proto_rawDescData } -var file_penumbra_view_v1alpha1_view_proto_msgTypes = make([]protoimpl.MessageInfo, 67) +var file_penumbra_view_v1alpha1_view_proto_msgTypes = make([]protoimpl.MessageInfo, 69) var file_penumbra_view_v1alpha1_view_proto_goTypes = []interface{}{ (*AuthorizeAndBuildRequest)(nil), // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest (*AuthorizeAndBuildResponse)(nil), // 1: penumbra.view.v1alpha1.AuthorizeAndBuildResponse @@ -4810,209 +4930,215 @@ var file_penumbra_view_v1alpha1_view_proto_goTypes = []interface{}{ (*SwapRecord)(nil), // 50: penumbra.view.v1alpha1.SwapRecord (*OwnedPositionIdsRequest)(nil), // 51: penumbra.view.v1alpha1.OwnedPositionIdsRequest (*OwnedPositionIdsResponse)(nil), // 52: penumbra.view.v1alpha1.OwnedPositionIdsResponse - (*AuthorizeAndBuildResponse_BuildProgress)(nil), // 53: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.BuildProgress - (*AuthorizeAndBuildResponse_Complete)(nil), // 54: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.Complete - (*BroadcastTransactionResponse_BroadcastSuccess)(nil), // 55: penumbra.view.v1alpha1.BroadcastTransactionResponse.BroadcastSuccess - (*BroadcastTransactionResponse_Confirmed)(nil), // 56: penumbra.view.v1alpha1.BroadcastTransactionResponse.Confirmed - (*TransactionPlannerRequest_Output)(nil), // 57: penumbra.view.v1alpha1.TransactionPlannerRequest.Output - (*TransactionPlannerRequest_Swap)(nil), // 58: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap - (*TransactionPlannerRequest_SwapClaim)(nil), // 59: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim - (*TransactionPlannerRequest_Delegate)(nil), // 60: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate - (*TransactionPlannerRequest_Undelegate)(nil), // 61: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate - (*TransactionPlannerRequest_PositionOpen)(nil), // 62: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen - (*TransactionPlannerRequest_PositionClose)(nil), // 63: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose - (*TransactionPlannerRequest_PositionWithdraw)(nil), // 64: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw - (*WitnessAndBuildResponse_BuildProgress)(nil), // 65: penumbra.view.v1alpha1.WitnessAndBuildResponse.BuildProgress - (*WitnessAndBuildResponse_Complete)(nil), // 66: penumbra.view.v1alpha1.WitnessAndBuildResponse.Complete - (*v1alpha1.TransactionPlan)(nil), // 67: penumbra.core.transaction.v1alpha1.TransactionPlan - (*v1alpha1.Transaction)(nil), // 68: penumbra.core.transaction.v1alpha1.Transaction - (*v1alpha11.Fee)(nil), // 69: penumbra.core.component.fee.v1alpha1.Fee - (*v1alpha1.MemoPlaintext)(nil), // 70: penumbra.core.transaction.v1alpha1.MemoPlaintext - (*v1alpha12.AddressIndex)(nil), // 71: penumbra.core.keys.v1alpha1.AddressIndex - (*v1alpha13.IbcRelay)(nil), // 72: penumbra.core.component.ibc.v1alpha1.IbcRelay - (*v1alpha13.Ics20Withdrawal)(nil), // 73: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - (*v1alpha12.Address)(nil), // 74: penumbra.core.keys.v1alpha1.Address - (*v1alpha12.WalletId)(nil), // 75: penumbra.core.keys.v1alpha1.WalletId - (*v1alpha14.AssetId)(nil), // 76: penumbra.core.asset.v1alpha1.AssetId - (*v1alpha14.Value)(nil), // 77: penumbra.core.asset.v1alpha1.Value - (*v1alpha15.Amount)(nil), // 78: penumbra.core.num.v1alpha1.Amount - (*v1alpha1.WitnessData)(nil), // 79: penumbra.core.transaction.v1alpha1.WitnessData - (*v1alpha1.AuthorizationData)(nil), // 80: penumbra.core.transaction.v1alpha1.AuthorizationData - (*v1alpha14.Denom)(nil), // 81: penumbra.core.asset.v1alpha1.Denom - (*v1alpha14.DenomMetadata)(nil), // 82: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha16.AppParameters)(nil), // 83: penumbra.core.app.v1alpha1.AppParameters - (*v1alpha11.GasPrices)(nil), // 84: penumbra.core.component.fee.v1alpha1.GasPrices - (*v1alpha17.FmdParameters)(nil), // 85: penumbra.core.component.shielded_pool.v1alpha1.FmdParameters - (*v1alpha18.StateCommitment)(nil), // 86: penumbra.crypto.tct.v1alpha1.StateCommitment - (*v1alpha19.Nullifier)(nil), // 87: penumbra.core.component.sct.v1alpha1.Nullifier - (*v1alpha110.TransactionId)(nil), // 88: penumbra.core.txhash.v1alpha1.TransactionId - (*v1alpha1.TransactionPerspective)(nil), // 89: penumbra.core.transaction.v1alpha1.TransactionPerspective - (*v1alpha1.TransactionView)(nil), // 90: penumbra.core.transaction.v1alpha1.TransactionView - (*v1alpha12.IdentityKey)(nil), // 91: penumbra.core.keys.v1alpha1.IdentityKey - (*v1alpha17.Note)(nil), // 92: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha19.CommitmentSource)(nil), // 93: penumbra.core.component.sct.v1alpha1.CommitmentSource - (*v1alpha12.AddressView)(nil), // 94: penumbra.core.keys.v1alpha1.AddressView - (*v1alpha111.SwapPlaintext)(nil), // 95: penumbra.core.component.dex.v1alpha1.SwapPlaintext - (*v1alpha111.BatchSwapOutputData)(nil), // 96: penumbra.core.component.dex.v1alpha1.BatchSwapOutputData - (*v1alpha111.PositionState)(nil), // 97: penumbra.core.component.dex.v1alpha1.PositionState - (*v1alpha111.TradingPair)(nil), // 98: penumbra.core.component.dex.v1alpha1.TradingPair - (*v1alpha111.PositionId)(nil), // 99: penumbra.core.component.dex.v1alpha1.PositionId - (*v1alpha112.RateData)(nil), // 100: penumbra.core.component.stake.v1alpha1.RateData - (*v1alpha111.Position)(nil), // 101: penumbra.core.component.dex.v1alpha1.Position - (*v1alpha111.Reserves)(nil), // 102: penumbra.core.component.dex.v1alpha1.Reserves + (*DenomMetadataByIdRequest)(nil), // 53: penumbra.view.v1alpha1.DenomMetadataByIdRequest + (*DenomMetadataByIdResponse)(nil), // 54: penumbra.view.v1alpha1.DenomMetadataByIdResponse + (*AuthorizeAndBuildResponse_BuildProgress)(nil), // 55: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.BuildProgress + (*AuthorizeAndBuildResponse_Complete)(nil), // 56: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.Complete + (*BroadcastTransactionResponse_BroadcastSuccess)(nil), // 57: penumbra.view.v1alpha1.BroadcastTransactionResponse.BroadcastSuccess + (*BroadcastTransactionResponse_Confirmed)(nil), // 58: penumbra.view.v1alpha1.BroadcastTransactionResponse.Confirmed + (*TransactionPlannerRequest_Output)(nil), // 59: penumbra.view.v1alpha1.TransactionPlannerRequest.Output + (*TransactionPlannerRequest_Swap)(nil), // 60: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap + (*TransactionPlannerRequest_SwapClaim)(nil), // 61: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim + (*TransactionPlannerRequest_Delegate)(nil), // 62: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate + (*TransactionPlannerRequest_Undelegate)(nil), // 63: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate + (*TransactionPlannerRequest_PositionOpen)(nil), // 64: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen + (*TransactionPlannerRequest_PositionClose)(nil), // 65: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose + (*TransactionPlannerRequest_PositionWithdraw)(nil), // 66: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw + (*WitnessAndBuildResponse_BuildProgress)(nil), // 67: penumbra.view.v1alpha1.WitnessAndBuildResponse.BuildProgress + (*WitnessAndBuildResponse_Complete)(nil), // 68: penumbra.view.v1alpha1.WitnessAndBuildResponse.Complete + (*v1alpha1.TransactionPlan)(nil), // 69: penumbra.core.transaction.v1alpha1.TransactionPlan + (*v1alpha1.Transaction)(nil), // 70: penumbra.core.transaction.v1alpha1.Transaction + (*v1alpha11.Fee)(nil), // 71: penumbra.core.component.fee.v1alpha1.Fee + (*v1alpha1.MemoPlaintext)(nil), // 72: penumbra.core.transaction.v1alpha1.MemoPlaintext + (*v1alpha12.AddressIndex)(nil), // 73: penumbra.core.keys.v1alpha1.AddressIndex + (*v1alpha13.IbcRelay)(nil), // 74: penumbra.core.component.ibc.v1alpha1.IbcRelay + (*v1alpha13.Ics20Withdrawal)(nil), // 75: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + (*v1alpha12.Address)(nil), // 76: penumbra.core.keys.v1alpha1.Address + (*v1alpha12.WalletId)(nil), // 77: penumbra.core.keys.v1alpha1.WalletId + (*v1alpha14.AssetId)(nil), // 78: penumbra.core.asset.v1alpha1.AssetId + (*v1alpha14.Value)(nil), // 79: penumbra.core.asset.v1alpha1.Value + (*v1alpha15.Amount)(nil), // 80: penumbra.core.num.v1alpha1.Amount + (*v1alpha1.WitnessData)(nil), // 81: penumbra.core.transaction.v1alpha1.WitnessData + (*v1alpha1.AuthorizationData)(nil), // 82: penumbra.core.transaction.v1alpha1.AuthorizationData + (*v1alpha14.Denom)(nil), // 83: penumbra.core.asset.v1alpha1.Denom + (*v1alpha14.DenomMetadata)(nil), // 84: penumbra.core.asset.v1alpha1.DenomMetadata + (*v1alpha16.AppParameters)(nil), // 85: penumbra.core.app.v1alpha1.AppParameters + (*v1alpha11.GasPrices)(nil), // 86: penumbra.core.component.fee.v1alpha1.GasPrices + (*v1alpha17.FmdParameters)(nil), // 87: penumbra.core.component.shielded_pool.v1alpha1.FmdParameters + (*v1alpha18.StateCommitment)(nil), // 88: penumbra.crypto.tct.v1alpha1.StateCommitment + (*v1alpha19.Nullifier)(nil), // 89: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha110.TransactionId)(nil), // 90: penumbra.core.txhash.v1alpha1.TransactionId + (*v1alpha1.TransactionPerspective)(nil), // 91: penumbra.core.transaction.v1alpha1.TransactionPerspective + (*v1alpha1.TransactionView)(nil), // 92: penumbra.core.transaction.v1alpha1.TransactionView + (*v1alpha12.IdentityKey)(nil), // 93: penumbra.core.keys.v1alpha1.IdentityKey + (*v1alpha17.Note)(nil), // 94: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha19.CommitmentSource)(nil), // 95: penumbra.core.component.sct.v1alpha1.CommitmentSource + (*v1alpha12.AddressView)(nil), // 96: penumbra.core.keys.v1alpha1.AddressView + (*v1alpha111.SwapPlaintext)(nil), // 97: penumbra.core.component.dex.v1alpha1.SwapPlaintext + (*v1alpha111.BatchSwapOutputData)(nil), // 98: penumbra.core.component.dex.v1alpha1.BatchSwapOutputData + (*v1alpha111.PositionState)(nil), // 99: penumbra.core.component.dex.v1alpha1.PositionState + (*v1alpha111.TradingPair)(nil), // 100: penumbra.core.component.dex.v1alpha1.TradingPair + (*v1alpha111.PositionId)(nil), // 101: penumbra.core.component.dex.v1alpha1.PositionId + (*v1alpha112.RateData)(nil), // 102: penumbra.core.component.stake.v1alpha1.RateData + (*v1alpha111.Position)(nil), // 103: penumbra.core.component.dex.v1alpha1.Position + (*v1alpha111.Reserves)(nil), // 104: penumbra.core.component.dex.v1alpha1.Reserves } var file_penumbra_view_v1alpha1_view_proto_depIdxs = []int32{ - 67, // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 53, // 1: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.build_progress:type_name -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse.BuildProgress - 54, // 2: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.complete:type_name -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse.Complete - 68, // 3: penumbra.view.v1alpha1.BroadcastTransactionRequest.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 55, // 4: penumbra.view.v1alpha1.BroadcastTransactionResponse.broadcast_success:type_name -> penumbra.view.v1alpha1.BroadcastTransactionResponse.BroadcastSuccess - 56, // 5: penumbra.view.v1alpha1.BroadcastTransactionResponse.confirmed:type_name -> penumbra.view.v1alpha1.BroadcastTransactionResponse.Confirmed - 69, // 6: penumbra.view.v1alpha1.TransactionPlannerRequest.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 70, // 7: penumbra.view.v1alpha1.TransactionPlannerRequest.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext - 71, // 8: penumbra.view.v1alpha1.TransactionPlannerRequest.source:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 57, // 9: penumbra.view.v1alpha1.TransactionPlannerRequest.outputs:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Output - 58, // 10: penumbra.view.v1alpha1.TransactionPlannerRequest.swaps:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Swap - 59, // 11: penumbra.view.v1alpha1.TransactionPlannerRequest.swap_claims:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim - 60, // 12: penumbra.view.v1alpha1.TransactionPlannerRequest.delegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate - 61, // 13: penumbra.view.v1alpha1.TransactionPlannerRequest.undelegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate - 72, // 14: penumbra.view.v1alpha1.TransactionPlannerRequest.ibc_relay_actions:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay - 73, // 15: penumbra.view.v1alpha1.TransactionPlannerRequest.ics20_withdrawals:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal - 62, // 16: penumbra.view.v1alpha1.TransactionPlannerRequest.position_opens:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen - 63, // 17: penumbra.view.v1alpha1.TransactionPlannerRequest.position_closes:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose - 64, // 18: penumbra.view.v1alpha1.TransactionPlannerRequest.position_withdraws:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw - 67, // 19: penumbra.view.v1alpha1.TransactionPlannerResponse.plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 71, // 20: penumbra.view.v1alpha1.AddressByIndexRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 74, // 21: penumbra.view.v1alpha1.AddressByIndexResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address - 75, // 22: penumbra.view.v1alpha1.WalletIdResponse.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId - 74, // 23: penumbra.view.v1alpha1.IndexByAddressRequest.address:type_name -> penumbra.core.keys.v1alpha1.Address - 71, // 24: penumbra.view.v1alpha1.IndexByAddressResponse.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 71, // 25: penumbra.view.v1alpha1.EphemeralAddressRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 74, // 26: penumbra.view.v1alpha1.EphemeralAddressResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address - 71, // 27: penumbra.view.v1alpha1.BalancesRequest.account_filter:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 76, // 28: penumbra.view.v1alpha1.BalancesRequest.asset_id_filter:type_name -> penumbra.core.asset.v1alpha1.AssetId - 71, // 29: penumbra.view.v1alpha1.BalancesResponse.account:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 77, // 30: penumbra.view.v1alpha1.BalancesResponse.balance:type_name -> penumbra.core.asset.v1alpha1.Value - 76, // 31: penumbra.view.v1alpha1.NotesRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId - 71, // 32: penumbra.view.v1alpha1.NotesRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 78, // 33: penumbra.view.v1alpha1.NotesRequest.amount_to_spend:type_name -> penumbra.core.num.v1alpha1.Amount - 71, // 34: penumbra.view.v1alpha1.NotesForVotingRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 67, // 35: penumbra.view.v1alpha1.WitnessRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 79, // 36: penumbra.view.v1alpha1.WitnessResponse.witness_data:type_name -> penumbra.core.transaction.v1alpha1.WitnessData - 67, // 37: penumbra.view.v1alpha1.WitnessAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan - 80, // 38: penumbra.view.v1alpha1.WitnessAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData - 65, // 39: penumbra.view.v1alpha1.WitnessAndBuildResponse.build_progress:type_name -> penumbra.view.v1alpha1.WitnessAndBuildResponse.BuildProgress - 66, // 40: penumbra.view.v1alpha1.WitnessAndBuildResponse.complete:type_name -> penumbra.view.v1alpha1.WitnessAndBuildResponse.Complete - 81, // 41: penumbra.view.v1alpha1.AssetsRequest.include_specific_denominations:type_name -> penumbra.core.asset.v1alpha1.Denom - 82, // 42: penumbra.view.v1alpha1.AssetsResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata - 83, // 43: penumbra.view.v1alpha1.AppParametersResponse.parameters:type_name -> penumbra.core.app.v1alpha1.AppParameters - 84, // 44: penumbra.view.v1alpha1.GasPricesResponse.gas_prices:type_name -> penumbra.core.component.fee.v1alpha1.GasPrices - 85, // 45: penumbra.view.v1alpha1.FMDParametersResponse.parameters:type_name -> penumbra.core.component.shielded_pool.v1alpha1.FmdParameters - 86, // 46: penumbra.view.v1alpha1.NoteByCommitmentRequest.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 69, // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 55, // 1: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.build_progress:type_name -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse.BuildProgress + 56, // 2: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.complete:type_name -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse.Complete + 70, // 3: penumbra.view.v1alpha1.BroadcastTransactionRequest.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 57, // 4: penumbra.view.v1alpha1.BroadcastTransactionResponse.broadcast_success:type_name -> penumbra.view.v1alpha1.BroadcastTransactionResponse.BroadcastSuccess + 58, // 5: penumbra.view.v1alpha1.BroadcastTransactionResponse.confirmed:type_name -> penumbra.view.v1alpha1.BroadcastTransactionResponse.Confirmed + 71, // 6: penumbra.view.v1alpha1.TransactionPlannerRequest.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 72, // 7: penumbra.view.v1alpha1.TransactionPlannerRequest.memo:type_name -> penumbra.core.transaction.v1alpha1.MemoPlaintext + 73, // 8: penumbra.view.v1alpha1.TransactionPlannerRequest.source:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 59, // 9: penumbra.view.v1alpha1.TransactionPlannerRequest.outputs:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Output + 60, // 10: penumbra.view.v1alpha1.TransactionPlannerRequest.swaps:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Swap + 61, // 11: penumbra.view.v1alpha1.TransactionPlannerRequest.swap_claims:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim + 62, // 12: penumbra.view.v1alpha1.TransactionPlannerRequest.delegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate + 63, // 13: penumbra.view.v1alpha1.TransactionPlannerRequest.undelegations:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate + 74, // 14: penumbra.view.v1alpha1.TransactionPlannerRequest.ibc_relay_actions:type_name -> penumbra.core.component.ibc.v1alpha1.IbcRelay + 75, // 15: penumbra.view.v1alpha1.TransactionPlannerRequest.ics20_withdrawals:type_name -> penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal + 64, // 16: penumbra.view.v1alpha1.TransactionPlannerRequest.position_opens:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen + 65, // 17: penumbra.view.v1alpha1.TransactionPlannerRequest.position_closes:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose + 66, // 18: penumbra.view.v1alpha1.TransactionPlannerRequest.position_withdraws:type_name -> penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw + 69, // 19: penumbra.view.v1alpha1.TransactionPlannerResponse.plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 73, // 20: penumbra.view.v1alpha1.AddressByIndexRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 76, // 21: penumbra.view.v1alpha1.AddressByIndexResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address + 77, // 22: penumbra.view.v1alpha1.WalletIdResponse.wallet_id:type_name -> penumbra.core.keys.v1alpha1.WalletId + 76, // 23: penumbra.view.v1alpha1.IndexByAddressRequest.address:type_name -> penumbra.core.keys.v1alpha1.Address + 73, // 24: penumbra.view.v1alpha1.IndexByAddressResponse.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 73, // 25: penumbra.view.v1alpha1.EphemeralAddressRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 76, // 26: penumbra.view.v1alpha1.EphemeralAddressResponse.address:type_name -> penumbra.core.keys.v1alpha1.Address + 73, // 27: penumbra.view.v1alpha1.BalancesRequest.account_filter:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 78, // 28: penumbra.view.v1alpha1.BalancesRequest.asset_id_filter:type_name -> penumbra.core.asset.v1alpha1.AssetId + 73, // 29: penumbra.view.v1alpha1.BalancesResponse.account:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 79, // 30: penumbra.view.v1alpha1.BalancesResponse.balance:type_name -> penumbra.core.asset.v1alpha1.Value + 78, // 31: penumbra.view.v1alpha1.NotesRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId + 73, // 32: penumbra.view.v1alpha1.NotesRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 80, // 33: penumbra.view.v1alpha1.NotesRequest.amount_to_spend:type_name -> penumbra.core.num.v1alpha1.Amount + 73, // 34: penumbra.view.v1alpha1.NotesForVotingRequest.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 69, // 35: penumbra.view.v1alpha1.WitnessRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 81, // 36: penumbra.view.v1alpha1.WitnessResponse.witness_data:type_name -> penumbra.core.transaction.v1alpha1.WitnessData + 69, // 37: penumbra.view.v1alpha1.WitnessAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan + 82, // 38: penumbra.view.v1alpha1.WitnessAndBuildRequest.authorization_data:type_name -> penumbra.core.transaction.v1alpha1.AuthorizationData + 67, // 39: penumbra.view.v1alpha1.WitnessAndBuildResponse.build_progress:type_name -> penumbra.view.v1alpha1.WitnessAndBuildResponse.BuildProgress + 68, // 40: penumbra.view.v1alpha1.WitnessAndBuildResponse.complete:type_name -> penumbra.view.v1alpha1.WitnessAndBuildResponse.Complete + 83, // 41: penumbra.view.v1alpha1.AssetsRequest.include_specific_denominations:type_name -> penumbra.core.asset.v1alpha1.Denom + 84, // 42: penumbra.view.v1alpha1.AssetsResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 85, // 43: penumbra.view.v1alpha1.AppParametersResponse.parameters:type_name -> penumbra.core.app.v1alpha1.AppParameters + 86, // 44: penumbra.view.v1alpha1.GasPricesResponse.gas_prices:type_name -> penumbra.core.component.fee.v1alpha1.GasPrices + 87, // 45: penumbra.view.v1alpha1.FMDParametersResponse.parameters:type_name -> penumbra.core.component.shielded_pool.v1alpha1.FmdParameters + 88, // 46: penumbra.view.v1alpha1.NoteByCommitmentRequest.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment 49, // 47: penumbra.view.v1alpha1.NoteByCommitmentResponse.spendable_note:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 86, // 48: penumbra.view.v1alpha1.SwapByCommitmentRequest.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 88, // 48: penumbra.view.v1alpha1.SwapByCommitmentRequest.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment 50, // 49: penumbra.view.v1alpha1.SwapByCommitmentResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord 50, // 50: penumbra.view.v1alpha1.UnclaimedSwapsResponse.swap:type_name -> penumbra.view.v1alpha1.SwapRecord - 87, // 51: penumbra.view.v1alpha1.NullifierStatusRequest.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 88, // 52: penumbra.view.v1alpha1.TransactionInfoByHashRequest.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId - 88, // 53: penumbra.view.v1alpha1.TransactionInfo.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId - 68, // 54: penumbra.view.v1alpha1.TransactionInfo.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 89, // 55: penumbra.view.v1alpha1.TransactionInfo.perspective:type_name -> penumbra.core.transaction.v1alpha1.TransactionPerspective - 90, // 56: penumbra.view.v1alpha1.TransactionInfo.view:type_name -> penumbra.core.transaction.v1alpha1.TransactionView + 89, // 51: penumbra.view.v1alpha1.NullifierStatusRequest.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 90, // 52: penumbra.view.v1alpha1.TransactionInfoByHashRequest.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId + 90, // 53: penumbra.view.v1alpha1.TransactionInfo.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId + 70, // 54: penumbra.view.v1alpha1.TransactionInfo.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 91, // 55: penumbra.view.v1alpha1.TransactionInfo.perspective:type_name -> penumbra.core.transaction.v1alpha1.TransactionPerspective + 92, // 56: penumbra.view.v1alpha1.TransactionInfo.view:type_name -> penumbra.core.transaction.v1alpha1.TransactionView 44, // 57: penumbra.view.v1alpha1.TransactionInfoResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo 44, // 58: penumbra.view.v1alpha1.TransactionInfoByHashResponse.tx_info:type_name -> penumbra.view.v1alpha1.TransactionInfo 49, // 59: penumbra.view.v1alpha1.NotesResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord 49, // 60: penumbra.view.v1alpha1.NotesForVotingResponse.note_record:type_name -> penumbra.view.v1alpha1.SpendableNoteRecord - 91, // 61: penumbra.view.v1alpha1.NotesForVotingResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 86, // 62: penumbra.view.v1alpha1.SpendableNoteRecord.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 92, // 63: penumbra.view.v1alpha1.SpendableNoteRecord.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 71, // 64: penumbra.view.v1alpha1.SpendableNoteRecord.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex - 87, // 65: penumbra.view.v1alpha1.SpendableNoteRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 93, // 66: penumbra.view.v1alpha1.SpendableNoteRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource - 94, // 67: penumbra.view.v1alpha1.SpendableNoteRecord.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView - 86, // 68: penumbra.view.v1alpha1.SwapRecord.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 95, // 69: penumbra.view.v1alpha1.SwapRecord.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlaintext - 87, // 70: penumbra.view.v1alpha1.SwapRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier - 96, // 71: penumbra.view.v1alpha1.SwapRecord.output_data:type_name -> penumbra.core.component.dex.v1alpha1.BatchSwapOutputData - 93, // 72: penumbra.view.v1alpha1.SwapRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource - 97, // 73: penumbra.view.v1alpha1.OwnedPositionIdsRequest.position_state:type_name -> penumbra.core.component.dex.v1alpha1.PositionState - 98, // 74: penumbra.view.v1alpha1.OwnedPositionIdsRequest.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair - 99, // 75: penumbra.view.v1alpha1.OwnedPositionIdsResponse.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId - 68, // 76: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.Complete.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 88, // 77: penumbra.view.v1alpha1.BroadcastTransactionResponse.BroadcastSuccess.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId - 88, // 78: penumbra.view.v1alpha1.BroadcastTransactionResponse.Confirmed.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId - 77, // 79: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.value:type_name -> penumbra.core.asset.v1alpha1.Value - 74, // 80: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.address:type_name -> penumbra.core.keys.v1alpha1.Address - 77, // 81: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.value:type_name -> penumbra.core.asset.v1alpha1.Value - 76, // 82: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.target_asset:type_name -> penumbra.core.asset.v1alpha1.AssetId - 69, // 83: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee - 74, // 84: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.claim_address:type_name -> penumbra.core.keys.v1alpha1.Address - 86, // 85: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment - 78, // 86: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.amount:type_name -> penumbra.core.num.v1alpha1.Amount - 100, // 87: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 77, // 88: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.value:type_name -> penumbra.core.asset.v1alpha1.Value - 100, // 89: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 101, // 90: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen.position:type_name -> penumbra.core.component.dex.v1alpha1.Position - 99, // 91: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId - 99, // 92: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId - 102, // 93: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.reserves:type_name -> penumbra.core.component.dex.v1alpha1.Reserves - 98, // 94: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair - 68, // 95: penumbra.view.v1alpha1.WitnessAndBuildResponse.Complete.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction - 16, // 96: penumbra.view.v1alpha1.ViewProtocolService.Status:input_type -> penumbra.view.v1alpha1.StatusRequest - 18, // 97: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:input_type -> penumbra.view.v1alpha1.StatusStreamRequest - 20, // 98: penumbra.view.v1alpha1.ViewProtocolService.Notes:input_type -> penumbra.view.v1alpha1.NotesRequest - 21, // 99: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:input_type -> penumbra.view.v1alpha1.NotesForVotingRequest - 26, // 100: penumbra.view.v1alpha1.ViewProtocolService.Assets:input_type -> penumbra.view.v1alpha1.AssetsRequest - 28, // 101: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:input_type -> penumbra.view.v1alpha1.AppParametersRequest - 30, // 102: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:input_type -> penumbra.view.v1alpha1.GasPricesRequest - 32, // 103: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:input_type -> penumbra.view.v1alpha1.FMDParametersRequest - 6, // 104: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:input_type -> penumbra.view.v1alpha1.AddressByIndexRequest - 8, // 105: penumbra.view.v1alpha1.ViewProtocolService.WalletId:input_type -> penumbra.view.v1alpha1.WalletIdRequest - 10, // 106: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:input_type -> penumbra.view.v1alpha1.IndexByAddressRequest - 12, // 107: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:input_type -> penumbra.view.v1alpha1.EphemeralAddressRequest - 14, // 108: penumbra.view.v1alpha1.ViewProtocolService.Balances:input_type -> penumbra.view.v1alpha1.BalancesRequest - 34, // 109: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:input_type -> penumbra.view.v1alpha1.NoteByCommitmentRequest - 36, // 110: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:input_type -> penumbra.view.v1alpha1.SwapByCommitmentRequest - 38, // 111: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:input_type -> penumbra.view.v1alpha1.UnclaimedSwapsRequest - 40, // 112: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:input_type -> penumbra.view.v1alpha1.NullifierStatusRequest - 42, // 113: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:input_type -> penumbra.view.v1alpha1.TransactionInfoByHashRequest - 43, // 114: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:input_type -> penumbra.view.v1alpha1.TransactionInfoRequest - 51, // 115: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:input_type -> penumbra.view.v1alpha1.OwnedPositionIdsRequest - 4, // 116: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:input_type -> penumbra.view.v1alpha1.TransactionPlannerRequest - 22, // 117: penumbra.view.v1alpha1.ViewProtocolService.Witness:input_type -> penumbra.view.v1alpha1.WitnessRequest - 24, // 118: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:input_type -> penumbra.view.v1alpha1.WitnessAndBuildRequest - 0, // 119: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:input_type -> penumbra.view.v1alpha1.AuthorizeAndBuildRequest - 2, // 120: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:input_type -> penumbra.view.v1alpha1.BroadcastTransactionRequest - 17, // 121: penumbra.view.v1alpha1.ViewProtocolService.Status:output_type -> penumbra.view.v1alpha1.StatusResponse - 19, // 122: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:output_type -> penumbra.view.v1alpha1.StatusStreamResponse - 47, // 123: penumbra.view.v1alpha1.ViewProtocolService.Notes:output_type -> penumbra.view.v1alpha1.NotesResponse - 48, // 124: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:output_type -> penumbra.view.v1alpha1.NotesForVotingResponse - 27, // 125: penumbra.view.v1alpha1.ViewProtocolService.Assets:output_type -> penumbra.view.v1alpha1.AssetsResponse - 29, // 126: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:output_type -> penumbra.view.v1alpha1.AppParametersResponse - 31, // 127: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:output_type -> penumbra.view.v1alpha1.GasPricesResponse - 33, // 128: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:output_type -> penumbra.view.v1alpha1.FMDParametersResponse - 7, // 129: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:output_type -> penumbra.view.v1alpha1.AddressByIndexResponse - 9, // 130: penumbra.view.v1alpha1.ViewProtocolService.WalletId:output_type -> penumbra.view.v1alpha1.WalletIdResponse - 11, // 131: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:output_type -> penumbra.view.v1alpha1.IndexByAddressResponse - 13, // 132: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:output_type -> penumbra.view.v1alpha1.EphemeralAddressResponse - 15, // 133: penumbra.view.v1alpha1.ViewProtocolService.Balances:output_type -> penumbra.view.v1alpha1.BalancesResponse - 35, // 134: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:output_type -> penumbra.view.v1alpha1.NoteByCommitmentResponse - 37, // 135: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:output_type -> penumbra.view.v1alpha1.SwapByCommitmentResponse - 39, // 136: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:output_type -> penumbra.view.v1alpha1.UnclaimedSwapsResponse - 41, // 137: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:output_type -> penumbra.view.v1alpha1.NullifierStatusResponse - 46, // 138: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:output_type -> penumbra.view.v1alpha1.TransactionInfoByHashResponse - 45, // 139: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:output_type -> penumbra.view.v1alpha1.TransactionInfoResponse - 52, // 140: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:output_type -> penumbra.view.v1alpha1.OwnedPositionIdsResponse - 5, // 141: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:output_type -> penumbra.view.v1alpha1.TransactionPlannerResponse - 23, // 142: penumbra.view.v1alpha1.ViewProtocolService.Witness:output_type -> penumbra.view.v1alpha1.WitnessResponse - 25, // 143: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:output_type -> penumbra.view.v1alpha1.WitnessAndBuildResponse - 1, // 144: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:output_type -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse - 3, // 145: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:output_type -> penumbra.view.v1alpha1.BroadcastTransactionResponse - 121, // [121:146] is the sub-list for method output_type - 96, // [96:121] is the sub-list for method input_type - 96, // [96:96] is the sub-list for extension type_name - 96, // [96:96] is the sub-list for extension extendee - 0, // [0:96] is the sub-list for field type_name + 93, // 61: penumbra.view.v1alpha1.NotesForVotingResponse.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 88, // 62: penumbra.view.v1alpha1.SpendableNoteRecord.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 94, // 63: penumbra.view.v1alpha1.SpendableNoteRecord.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 73, // 64: penumbra.view.v1alpha1.SpendableNoteRecord.address_index:type_name -> penumbra.core.keys.v1alpha1.AddressIndex + 89, // 65: penumbra.view.v1alpha1.SpendableNoteRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 95, // 66: penumbra.view.v1alpha1.SpendableNoteRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource + 96, // 67: penumbra.view.v1alpha1.SpendableNoteRecord.return_address:type_name -> penumbra.core.keys.v1alpha1.AddressView + 88, // 68: penumbra.view.v1alpha1.SwapRecord.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 97, // 69: penumbra.view.v1alpha1.SwapRecord.swap:type_name -> penumbra.core.component.dex.v1alpha1.SwapPlaintext + 89, // 70: penumbra.view.v1alpha1.SwapRecord.nullifier:type_name -> penumbra.core.component.sct.v1alpha1.Nullifier + 98, // 71: penumbra.view.v1alpha1.SwapRecord.output_data:type_name -> penumbra.core.component.dex.v1alpha1.BatchSwapOutputData + 95, // 72: penumbra.view.v1alpha1.SwapRecord.source:type_name -> penumbra.core.component.sct.v1alpha1.CommitmentSource + 99, // 73: penumbra.view.v1alpha1.OwnedPositionIdsRequest.position_state:type_name -> penumbra.core.component.dex.v1alpha1.PositionState + 100, // 74: penumbra.view.v1alpha1.OwnedPositionIdsRequest.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair + 101, // 75: penumbra.view.v1alpha1.OwnedPositionIdsResponse.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId + 78, // 76: penumbra.view.v1alpha1.DenomMetadataByIdRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId + 84, // 77: penumbra.view.v1alpha1.DenomMetadataByIdResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 70, // 78: penumbra.view.v1alpha1.AuthorizeAndBuildResponse.Complete.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 90, // 79: penumbra.view.v1alpha1.BroadcastTransactionResponse.BroadcastSuccess.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId + 90, // 80: penumbra.view.v1alpha1.BroadcastTransactionResponse.Confirmed.id:type_name -> penumbra.core.txhash.v1alpha1.TransactionId + 79, // 81: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.value:type_name -> penumbra.core.asset.v1alpha1.Value + 76, // 82: penumbra.view.v1alpha1.TransactionPlannerRequest.Output.address:type_name -> penumbra.core.keys.v1alpha1.Address + 79, // 83: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.value:type_name -> penumbra.core.asset.v1alpha1.Value + 78, // 84: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.target_asset:type_name -> penumbra.core.asset.v1alpha1.AssetId + 71, // 85: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.fee:type_name -> penumbra.core.component.fee.v1alpha1.Fee + 76, // 86: penumbra.view.v1alpha1.TransactionPlannerRequest.Swap.claim_address:type_name -> penumbra.core.keys.v1alpha1.Address + 88, // 87: penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim.swap_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 80, // 88: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.amount:type_name -> penumbra.core.num.v1alpha1.Amount + 102, // 89: penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData + 79, // 90: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.value:type_name -> penumbra.core.asset.v1alpha1.Value + 102, // 91: penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData + 103, // 92: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionOpen.position:type_name -> penumbra.core.component.dex.v1alpha1.Position + 101, // 93: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionClose.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId + 101, // 94: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.position_id:type_name -> penumbra.core.component.dex.v1alpha1.PositionId + 104, // 95: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.reserves:type_name -> penumbra.core.component.dex.v1alpha1.Reserves + 100, // 96: penumbra.view.v1alpha1.TransactionPlannerRequest.PositionWithdraw.trading_pair:type_name -> penumbra.core.component.dex.v1alpha1.TradingPair + 70, // 97: penumbra.view.v1alpha1.WitnessAndBuildResponse.Complete.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction + 16, // 98: penumbra.view.v1alpha1.ViewProtocolService.Status:input_type -> penumbra.view.v1alpha1.StatusRequest + 18, // 99: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:input_type -> penumbra.view.v1alpha1.StatusStreamRequest + 20, // 100: penumbra.view.v1alpha1.ViewProtocolService.Notes:input_type -> penumbra.view.v1alpha1.NotesRequest + 21, // 101: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:input_type -> penumbra.view.v1alpha1.NotesForVotingRequest + 26, // 102: penumbra.view.v1alpha1.ViewProtocolService.Assets:input_type -> penumbra.view.v1alpha1.AssetsRequest + 53, // 103: penumbra.view.v1alpha1.ViewProtocolService.DenomMetadataById:input_type -> penumbra.view.v1alpha1.DenomMetadataByIdRequest + 28, // 104: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:input_type -> penumbra.view.v1alpha1.AppParametersRequest + 30, // 105: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:input_type -> penumbra.view.v1alpha1.GasPricesRequest + 32, // 106: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:input_type -> penumbra.view.v1alpha1.FMDParametersRequest + 6, // 107: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:input_type -> penumbra.view.v1alpha1.AddressByIndexRequest + 8, // 108: penumbra.view.v1alpha1.ViewProtocolService.WalletId:input_type -> penumbra.view.v1alpha1.WalletIdRequest + 10, // 109: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:input_type -> penumbra.view.v1alpha1.IndexByAddressRequest + 12, // 110: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:input_type -> penumbra.view.v1alpha1.EphemeralAddressRequest + 14, // 111: penumbra.view.v1alpha1.ViewProtocolService.Balances:input_type -> penumbra.view.v1alpha1.BalancesRequest + 34, // 112: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:input_type -> penumbra.view.v1alpha1.NoteByCommitmentRequest + 36, // 113: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:input_type -> penumbra.view.v1alpha1.SwapByCommitmentRequest + 38, // 114: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:input_type -> penumbra.view.v1alpha1.UnclaimedSwapsRequest + 40, // 115: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:input_type -> penumbra.view.v1alpha1.NullifierStatusRequest + 42, // 116: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:input_type -> penumbra.view.v1alpha1.TransactionInfoByHashRequest + 43, // 117: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:input_type -> penumbra.view.v1alpha1.TransactionInfoRequest + 51, // 118: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:input_type -> penumbra.view.v1alpha1.OwnedPositionIdsRequest + 4, // 119: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:input_type -> penumbra.view.v1alpha1.TransactionPlannerRequest + 22, // 120: penumbra.view.v1alpha1.ViewProtocolService.Witness:input_type -> penumbra.view.v1alpha1.WitnessRequest + 24, // 121: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:input_type -> penumbra.view.v1alpha1.WitnessAndBuildRequest + 0, // 122: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:input_type -> penumbra.view.v1alpha1.AuthorizeAndBuildRequest + 2, // 123: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:input_type -> penumbra.view.v1alpha1.BroadcastTransactionRequest + 17, // 124: penumbra.view.v1alpha1.ViewProtocolService.Status:output_type -> penumbra.view.v1alpha1.StatusResponse + 19, // 125: penumbra.view.v1alpha1.ViewProtocolService.StatusStream:output_type -> penumbra.view.v1alpha1.StatusStreamResponse + 47, // 126: penumbra.view.v1alpha1.ViewProtocolService.Notes:output_type -> penumbra.view.v1alpha1.NotesResponse + 48, // 127: penumbra.view.v1alpha1.ViewProtocolService.NotesForVoting:output_type -> penumbra.view.v1alpha1.NotesForVotingResponse + 27, // 128: penumbra.view.v1alpha1.ViewProtocolService.Assets:output_type -> penumbra.view.v1alpha1.AssetsResponse + 54, // 129: penumbra.view.v1alpha1.ViewProtocolService.DenomMetadataById:output_type -> penumbra.view.v1alpha1.DenomMetadataByIdResponse + 29, // 130: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:output_type -> penumbra.view.v1alpha1.AppParametersResponse + 31, // 131: penumbra.view.v1alpha1.ViewProtocolService.GasPrices:output_type -> penumbra.view.v1alpha1.GasPricesResponse + 33, // 132: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:output_type -> penumbra.view.v1alpha1.FMDParametersResponse + 7, // 133: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:output_type -> penumbra.view.v1alpha1.AddressByIndexResponse + 9, // 134: penumbra.view.v1alpha1.ViewProtocolService.WalletId:output_type -> penumbra.view.v1alpha1.WalletIdResponse + 11, // 135: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:output_type -> penumbra.view.v1alpha1.IndexByAddressResponse + 13, // 136: penumbra.view.v1alpha1.ViewProtocolService.EphemeralAddress:output_type -> penumbra.view.v1alpha1.EphemeralAddressResponse + 15, // 137: penumbra.view.v1alpha1.ViewProtocolService.Balances:output_type -> penumbra.view.v1alpha1.BalancesResponse + 35, // 138: penumbra.view.v1alpha1.ViewProtocolService.NoteByCommitment:output_type -> penumbra.view.v1alpha1.NoteByCommitmentResponse + 37, // 139: penumbra.view.v1alpha1.ViewProtocolService.SwapByCommitment:output_type -> penumbra.view.v1alpha1.SwapByCommitmentResponse + 39, // 140: penumbra.view.v1alpha1.ViewProtocolService.UnclaimedSwaps:output_type -> penumbra.view.v1alpha1.UnclaimedSwapsResponse + 41, // 141: penumbra.view.v1alpha1.ViewProtocolService.NullifierStatus:output_type -> penumbra.view.v1alpha1.NullifierStatusResponse + 46, // 142: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfoByHash:output_type -> penumbra.view.v1alpha1.TransactionInfoByHashResponse + 45, // 143: penumbra.view.v1alpha1.ViewProtocolService.TransactionInfo:output_type -> penumbra.view.v1alpha1.TransactionInfoResponse + 52, // 144: penumbra.view.v1alpha1.ViewProtocolService.OwnedPositionIds:output_type -> penumbra.view.v1alpha1.OwnedPositionIdsResponse + 5, // 145: penumbra.view.v1alpha1.ViewProtocolService.TransactionPlanner:output_type -> penumbra.view.v1alpha1.TransactionPlannerResponse + 23, // 146: penumbra.view.v1alpha1.ViewProtocolService.Witness:output_type -> penumbra.view.v1alpha1.WitnessResponse + 25, // 147: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:output_type -> penumbra.view.v1alpha1.WitnessAndBuildResponse + 1, // 148: penumbra.view.v1alpha1.ViewProtocolService.AuthorizeAndBuild:output_type -> penumbra.view.v1alpha1.AuthorizeAndBuildResponse + 3, // 149: penumbra.view.v1alpha1.ViewProtocolService.BroadcastTransaction:output_type -> penumbra.view.v1alpha1.BroadcastTransactionResponse + 124, // [124:150] is the sub-list for method output_type + 98, // [98:124] is the sub-list for method input_type + 98, // [98:98] is the sub-list for extension type_name + 98, // [98:98] is the sub-list for extension extendee + 0, // [0:98] is the sub-list for field type_name } func init() { file_penumbra_view_v1alpha1_view_proto_init() } @@ -5658,7 +5784,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AuthorizeAndBuildResponse_BuildProgress); i { + switch v := v.(*DenomMetadataByIdRequest); i { case 0: return &v.state case 1: @@ -5670,7 +5796,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AuthorizeAndBuildResponse_Complete); i { + switch v := v.(*DenomMetadataByIdResponse); i { case 0: return &v.state case 1: @@ -5682,7 +5808,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BroadcastTransactionResponse_BroadcastSuccess); i { + switch v := v.(*AuthorizeAndBuildResponse_BuildProgress); i { case 0: return &v.state case 1: @@ -5694,7 +5820,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BroadcastTransactionResponse_Confirmed); i { + switch v := v.(*AuthorizeAndBuildResponse_Complete); i { case 0: return &v.state case 1: @@ -5706,7 +5832,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_Output); i { + switch v := v.(*BroadcastTransactionResponse_BroadcastSuccess); i { case 0: return &v.state case 1: @@ -5718,7 +5844,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_Swap); i { + switch v := v.(*BroadcastTransactionResponse_Confirmed); i { case 0: return &v.state case 1: @@ -5730,7 +5856,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_SwapClaim); i { + switch v := v.(*TransactionPlannerRequest_Output); i { case 0: return &v.state case 1: @@ -5742,7 +5868,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_Delegate); i { + switch v := v.(*TransactionPlannerRequest_Swap); i { case 0: return &v.state case 1: @@ -5754,7 +5880,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_Undelegate); i { + switch v := v.(*TransactionPlannerRequest_SwapClaim); i { case 0: return &v.state case 1: @@ -5766,7 +5892,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_PositionOpen); i { + switch v := v.(*TransactionPlannerRequest_Delegate); i { case 0: return &v.state case 1: @@ -5778,7 +5904,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_PositionClose); i { + switch v := v.(*TransactionPlannerRequest_Undelegate); i { case 0: return &v.state case 1: @@ -5790,7 +5916,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionPlannerRequest_PositionWithdraw); i { + switch v := v.(*TransactionPlannerRequest_PositionOpen); i { case 0: return &v.state case 1: @@ -5802,7 +5928,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WitnessAndBuildResponse_BuildProgress); i { + switch v := v.(*TransactionPlannerRequest_PositionClose); i { case 0: return &v.state case 1: @@ -5814,6 +5940,30 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TransactionPlannerRequest_PositionWithdraw); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_view_v1alpha1_view_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WitnessAndBuildResponse_BuildProgress); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_view_v1alpha1_view_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WitnessAndBuildResponse_Complete); i { case 0: return &v.state @@ -5844,7 +5994,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_view_v1alpha1_view_proto_rawDesc, NumEnums: 0, - NumMessages: 67, + NumMessages: 69, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/penumbra/penumbra/view/v1alpha1/view.proto b/proto/penumbra/penumbra/view/v1alpha1/view.proto index 7327d7b78e..d7c517d618 100644 --- a/proto/penumbra/penumbra/view/v1alpha1/view.proto +++ b/proto/penumbra/penumbra/view/v1alpha1/view.proto @@ -35,10 +35,17 @@ service ViewProtocolService { // Returns a stream of `NotesForVotingResponse`s. rpc NotesForVoting(NotesForVotingRequest) returns (stream NotesForVotingResponse); - // Queries for assets. + // Queries for metadata about known assets. // Returns a stream of `AssetsResponse`s. rpc Assets(AssetsRequest) returns (stream AssetsResponse); + // Query for metadata about a specific asset, by asset ID. + // + // This is the same as the method on the shielded pool's `QueryService`, but exposing it + // here allows a view server to provide more specific or opinionated asset metadata -- like + // using an asset registry to provide tickers, symbols, etc. + rpc DenomMetadataById(DenomMetadataByIdRequest) returns (DenomMetadataByIdResponse); + // Query for the current app parameters. rpc AppParameters(AppParametersRequest) returns (AppParametersResponse); @@ -548,3 +555,16 @@ message OwnedPositionIdsRequest { message OwnedPositionIdsResponse { core.component.dex.v1alpha1.PositionId position_id = 1; } + +// Requests information on an asset by asset id +message DenomMetadataByIdRequest { + // The asset id to request information on. + core.asset.v1alpha1.AssetId asset_id = 2; +} + +message DenomMetadataByIdResponse { + // If present, information on the requested asset. + // + // If the requested asset was unknown, this field will not be present. + core.asset.v1alpha1.DenomMetadata denom_metadata = 1; +} \ No newline at end of file