diff --git a/buf.gen.yaml b/buf.gen.yaml new file mode 100644 index 0000000..b61fcb0 --- /dev/null +++ b/buf.gen.yaml @@ -0,0 +1,11 @@ +version: v1 +plugins: + - plugin: buf.build/community/neoeinstein-prost:v0.3.1 + out: models/src/gen + opt: + - bytes=. + - compile_well_known_types + - extern_path=.google.protobuf=::pbjson_types + - file_descriptor_set + - plugin: buf.build/community/neoeinstein-prost-serde:v0.3.0 + out: models/src/gen diff --git a/justfile b/justfile new file mode 100644 index 0000000..1ce3e69 --- /dev/null +++ b/justfile @@ -0,0 +1,4 @@ +# generate delta-sharing types from proto files +generate: + cd proto && buf dep update + @buf generate proto diff --git a/models/Cargo.toml b/models/Cargo.toml index 72f8f0b..6c788cd 100644 --- a/models/Cargo.toml +++ b/models/Cargo.toml @@ -10,6 +10,8 @@ publish = false [dependencies] strum = { version = "0.26", features = ["derive"] } +pbjson = { version = "0.6" } +prost = { version = "0.12" } serde = { workspace = true } serde_json = { workspace = true } diff --git a/models/src/gen/unitycatalog.catalogs.v1.rs b/models/src/gen/unitycatalog.catalogs.v1.rs new file mode 100644 index 0000000..de34931 --- /dev/null +++ b/models/src/gen/unitycatalog.catalogs.v1.rs @@ -0,0 +1,556 @@ +// @generated +/// Creates a new catalog instance. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CatalogInfo { + /// unique identifier for the catalog. + #[prost(string, tag="1")] + pub id: ::prost::alloc::string::String, + /// The name of the catalog. + #[prost(string, tag="2")] + pub name: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="3")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// A map of key-value properties attached to the securable. + #[prost(map="string, string", tag="4")] + pub properties: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, + /// Time at which this catalog was created, in epoch milliseconds. + #[prost(int64, tag="5")] + pub created_at: i64, + /// Time at which this catalog was last updated, in epoch milliseconds. + #[prost(int64, tag="6")] + pub updated_at: i64, +} +/// Creates a new catalog instance. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateCatalogRequest { + /// The name of the catalog. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="2")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// A map of key-value properties attached to the securable. + #[prost(map="string, string", tag="3")] + pub properties: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateCatalogResponse { + /// The newly created catalog. + #[prost(message, optional, tag="1")] + pub catalog: ::core::option::Option, +} +/// Deletes the catalog that matches the supplied name. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteCatalogRequest { + /// The name of the catalog. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Force deletion even if the catalog is not empty. + #[prost(bool, optional, tag="2")] + pub force: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteCatalogResponse { +} +/// Gets the specified catalog. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetCatalogRequest { + /// The name of the catalog. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetCatalogResponse { + /// The catalog. + #[prost(message, optional, tag="1")] + pub catalog: ::core::option::Option, +} +/// Lists all catalogs. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListCatalogsRequest { + /// The maximum number of results per page that should be returned. + /// If the number of available results is larger than maxResults, the response + /// will provide a next_page_token that can be used to get the next page of results + /// in subsequent list requests. The server may return fewer than maxResults + /// items even if there are more available. The client should check nextPageToken + /// in the response to determine if there are more available. + /// Must be non-negative. 0 will return no results but nextPageToken may be populated. + #[prost(int32, optional, tag="1")] + pub max_results: ::core::option::Option, + /// Specifies a page token to use. Set pageToken to the nextPageToken returned + /// by a previous list request to get the next page of results. + /// next_page_token will not be returned in a response if there are no more results available. + #[prost(string, optional, tag="2")] + pub page_token: ::core::option::Option<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListCatalogsResponse { + /// The list of catalogs. + #[prost(message, repeated, tag="1")] + pub catalogs: ::prost::alloc::vec::Vec, + /// A token to retrieve the next page of results. Pass this value in ListCatalogsRequest.page_token. + #[prost(string, optional, tag="2")] + pub next_page_token: ::core::option::Option<::prost::alloc::string::String>, +} +/// Updates the catalog that matches the supplied name. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateCatalogRequest { + /// The name of the catalog. + #[prost(string, optional, tag="1")] + pub new_name: ::core::option::Option<::prost::alloc::string::String>, + /// User-provided free-form text description. + #[prost(string, optional, tag="2")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// A map of key-value properties attached to the securable. + /// TODO(roeap): maps cannot be optional, how do we distinguish between an empty map and no map? + #[prost(map="string, string", tag="3")] + pub properties: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateCatalogResponse { + /// The updated catalog. + #[prost(message, optional, tag="1")] + pub catalog: ::core::option::Option, +} +/// Encoded file descriptor set for the `unitycatalog.catalogs.v1` package +pub const FILE_DESCRIPTOR_SET: &[u8] = &[ + 0x0a, 0xdc, 0x09, 0x0a, 0x25, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xc2, 0x02, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, + 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x6e, 0x66, + 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x4a, 0xae, 0x06, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x19, + 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, + 0x12, 0x03, 0x02, 0x00, 0x21, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, + 0x0a, 0x2d, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x07, 0x00, 0x19, 0x01, 0x1a, 0x21, 0x20, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x07, 0x08, 0x13, 0x0a, 0x31, 0x0a, 0x04, 0x04, + 0x00, 0x02, 0x00, 0x12, 0x03, 0x09, 0x02, 0x3a, 0x1a, 0x24, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, + 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x09, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x09, 0x09, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x09, 0x0e, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, + 0x08, 0x12, 0x03, 0x09, 0x10, 0x39, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, + 0x09, 0x0e, 0x02, 0x12, 0x03, 0x09, 0x11, 0x38, 0x0a, 0x27, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, + 0x12, 0x03, 0x0c, 0x02, 0x3c, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x0c, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0c, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x01, 0x08, 0x12, 0x03, 0x0c, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, + 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0c, 0x13, 0x3a, 0x0a, 0x38, 0x0a, 0x04, 0x04, + 0x00, 0x02, 0x02, 0x12, 0x03, 0x0f, 0x02, 0x1e, 0x1a, 0x2b, 0x20, 0x55, 0x73, 0x65, 0x72, 0x2d, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, 0x6f, + 0x72, 0x6d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, + 0x0f, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x0f, 0x0b, + 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x12, 0x19, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x0f, 0x1c, 0x1d, 0x0a, 0x47, 0x0a, + 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x12, 0x02, 0x25, 0x1a, 0x3a, 0x20, 0x41, 0x20, 0x6d, + 0x61, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x65, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x75, 0x72, + 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, + 0x03, 0x12, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x12, + 0x16, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x12, 0x23, 0x24, + 0x0a, 0x4d, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, 0x12, 0x03, 0x15, 0x02, 0x17, 0x1a, 0x40, 0x20, + 0x54, 0x69, 0x6d, 0x65, 0x20, 0x61, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x77, 0x61, 0x73, 0x20, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x05, 0x12, 0x03, 0x15, 0x02, 0x07, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x15, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x15, 0x15, 0x16, 0x0a, 0x52, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x05, 0x12, 0x03, 0x18, 0x02, 0x17, 0x1a, 0x45, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x61, 0x74, + 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x20, 0x77, 0x61, 0x73, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x20, 0x6d, + 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x05, 0x05, 0x12, 0x03, 0x18, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x18, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x05, 0x03, 0x12, 0x03, 0x18, 0x15, 0x16, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, + 0xa5, 0x2b, 0x0a, 0x22, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, + 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfd, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x5e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x58, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, + 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x22, 0x58, + 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x00, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, + 0x0a, 0x06, 0x5f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x30, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x55, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, 0x02, 0x28, 0x00, + 0x48, 0x00, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, + 0x08, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, + 0x12, 0x2b, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x65, 0x78, + 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, + 0x10, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x22, 0x96, 0x02, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x08, 0x6e, 0x65, + 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x88, + 0x01, 0x01, 0x12, 0x5e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0a, + 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x58, 0x0a, 0x15, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x32, 0xbf, 0x04, 0x0a, 0x0f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x70, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x2e, 0x2e, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x0d, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x2e, 0x2e, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x0a, + 0x47, 0x65, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x2b, 0x2e, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x2d, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x2e, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0xe6, 0x1b, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x68, + 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, + 0x12, 0x03, 0x02, 0x00, 0x21, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, + 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2f, 0x0a, 0x2d, 0x0a, 0x02, 0x04, + 0x00, 0x12, 0x04, 0x08, 0x00, 0x11, 0x01, 0x1a, 0x21, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, + 0x01, 0x12, 0x03, 0x08, 0x08, 0x1c, 0x0a, 0x27, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, + 0x0a, 0x02, 0x3c, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, + 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0a, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x00, 0x08, 0x12, 0x03, 0x0a, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, + 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0a, 0x13, 0x3a, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x01, 0x12, 0x03, 0x0d, 0x02, 0x1e, 0x1a, 0x2b, 0x20, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x04, 0x12, 0x03, 0x0d, 0x02, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x0d, 0x0b, 0x11, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0d, 0x12, 0x19, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0d, 0x1c, 0x1d, 0x0a, 0x47, 0x0a, 0x04, 0x04, + 0x00, 0x02, 0x02, 0x12, 0x03, 0x10, 0x02, 0x25, 0x1a, 0x3a, 0x20, 0x41, 0x20, 0x6d, 0x61, 0x70, + 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x65, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x70, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, + 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x75, 0x72, 0x61, 0x62, + 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x06, 0x12, 0x03, 0x10, + 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x10, 0x16, 0x20, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x10, 0x23, 0x24, 0x0a, 0x0a, + 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x13, 0x00, 0x16, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, + 0x01, 0x12, 0x03, 0x13, 0x08, 0x1d, 0x0a, 0x29, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, + 0x15, 0x02, 0x1a, 0x1a, 0x1c, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x6c, 0x79, 0x20, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x15, 0x02, 0x0d, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x15, 0x0e, 0x15, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x15, 0x18, 0x19, 0x0a, 0x41, 0x0a, 0x02, 0x04, + 0x02, 0x12, 0x04, 0x19, 0x00, 0x1f, 0x01, 0x1a, 0x35, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x74, 0x68, + 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, + 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, + 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x19, 0x08, 0x1c, 0x0a, 0x27, 0x0a, 0x04, 0x04, 0x02, + 0x02, 0x00, 0x12, 0x03, 0x1b, 0x02, 0x3c, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x1b, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1b, 0x09, 0x0d, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1b, 0x10, 0x11, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x02, 0x02, 0x00, 0x08, 0x12, 0x03, 0x1b, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, + 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1b, 0x13, 0x3a, 0x0a, 0x3f, 0x0a, + 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, 0x03, 0x1e, 0x02, 0x1a, 0x1a, 0x32, 0x20, 0x46, 0x6f, 0x72, + 0x63, 0x65, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x76, 0x65, 0x6e, + 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, + 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x04, 0x12, 0x03, 0x1e, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x01, 0x05, 0x12, 0x03, 0x1e, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, + 0x02, 0x01, 0x01, 0x12, 0x03, 0x1e, 0x10, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, + 0x03, 0x12, 0x03, 0x1e, 0x18, 0x19, 0x0a, 0x09, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x03, 0x21, 0x00, + 0x20, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x21, 0x08, 0x1d, 0x0a, 0x29, 0x0a, + 0x02, 0x04, 0x04, 0x12, 0x04, 0x24, 0x00, 0x27, 0x01, 0x1a, 0x1d, 0x20, 0x47, 0x65, 0x74, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, + 0x03, 0x24, 0x08, 0x19, 0x0a, 0x27, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x26, 0x02, + 0x3c, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x26, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x26, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x26, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, + 0x12, 0x03, 0x26, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, + 0x0e, 0x02, 0x12, 0x03, 0x26, 0x13, 0x3a, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x29, + 0x00, 0x2c, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x29, 0x08, 0x1a, 0x0a, + 0x1b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x2b, 0x02, 0x1a, 0x1a, 0x0e, 0x20, 0x54, + 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x2b, 0x02, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x2b, 0x0e, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, + 0x03, 0x12, 0x03, 0x2b, 0x18, 0x19, 0x0a, 0x21, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x2f, 0x00, + 0x3d, 0x01, 0x1a, 0x15, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, + 0x12, 0x03, 0x2f, 0x08, 0x1b, 0x0a, 0x94, 0x04, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, + 0x37, 0x02, 0x46, 0x1a, 0x86, 0x04, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, + 0x75, 0x6d, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x74, 0x68, + 0x61, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x61, + 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x0a, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x20, 0x61, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, + 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, + 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x0a, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, + 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, + 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x79, + 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x65, 0x77, 0x65, 0x72, 0x20, 0x74, 0x68, + 0x61, 0x6e, 0x20, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x0a, 0x20, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x6e, + 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x20, 0x69, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x4d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x20, 0x30, + 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x6f, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x65, 0x78, 0x74, + 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, + 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x00, 0x04, 0x12, 0x03, 0x37, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x00, 0x05, 0x12, 0x03, 0x37, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x37, 0x11, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x37, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x08, 0x12, 0x03, 0x37, + 0x21, 0x45, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x00, 0x08, 0x87, 0x09, 0x03, 0x05, 0x12, + 0x03, 0x37, 0x22, 0x44, 0x0a, 0xf3, 0x01, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, 0x3c, + 0x02, 0x21, 0x1a, 0xe5, 0x01, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, + 0x61, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, + 0x75, 0x73, 0x65, 0x2e, 0x20, 0x53, 0x65, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, + 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, + 0x0a, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, + 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, + 0x67, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, + 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x6e, + 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, + 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, + 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x01, 0x04, 0x12, 0x03, 0x3c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, + 0x05, 0x12, 0x03, 0x3c, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, + 0x03, 0x3c, 0x12, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3c, + 0x1f, 0x20, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x04, 0x3f, 0x00, 0x45, 0x01, 0x0a, 0x0a, + 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x3f, 0x08, 0x1c, 0x0a, 0x24, 0x0a, 0x04, 0x04, 0x07, + 0x02, 0x00, 0x12, 0x03, 0x41, 0x02, 0x24, 0x1a, 0x17, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, + 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x04, 0x12, 0x03, 0x41, 0x02, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, 0x03, 0x41, 0x0b, 0x16, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x41, 0x17, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x41, 0x22, 0x23, 0x0a, 0x6f, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x01, + 0x12, 0x03, 0x44, 0x02, 0x26, 0x1a, 0x62, 0x20, 0x41, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, + 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x20, 0x50, 0x61, 0x73, 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, + 0x01, 0x04, 0x12, 0x03, 0x44, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x44, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x44, 0x12, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x03, 0x12, 0x03, 0x44, 0x24, + 0x25, 0x0a, 0x41, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x04, 0x48, 0x00, 0x52, 0x01, 0x1a, 0x35, 0x20, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x48, 0x08, 0x1c, + 0x0a, 0x27, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x00, 0x12, 0x03, 0x4a, 0x02, 0x49, 0x1a, 0x1a, 0x20, + 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, + 0x00, 0x04, 0x12, 0x03, 0x4a, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x05, + 0x12, 0x03, 0x4a, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x4a, 0x12, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4a, 0x1d, + 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x08, 0x12, 0x03, 0x4a, 0x1f, 0x48, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x08, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x4a, 0x20, + 0x47, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x01, 0x12, 0x03, 0x4d, 0x02, 0x1e, 0x1a, 0x2b, + 0x20, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, + 0x72, 0x65, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x08, 0x02, 0x01, 0x04, 0x12, 0x03, 0x4d, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, + 0x01, 0x05, 0x12, 0x03, 0x4d, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x4d, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x4d, 0x1c, 0x1d, 0x0a, 0xa6, 0x01, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x02, 0x12, 0x03, 0x51, 0x02, + 0x25, 0x1a, 0x98, 0x01, 0x20, 0x41, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x65, + 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x20, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x20, 0x54, + 0x4f, 0x44, 0x4f, 0x28, 0x72, 0x6f, 0x65, 0x61, 0x70, 0x29, 0x3a, 0x20, 0x6d, 0x61, 0x70, 0x73, + 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x64, 0x6f, 0x20, 0x77, 0x65, 0x20, 0x64, + 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, + 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x6d, 0x61, 0x70, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x61, 0x70, 0x3f, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x08, 0x02, 0x02, 0x06, 0x12, 0x03, 0x51, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, + 0x02, 0x02, 0x01, 0x12, 0x03, 0x51, 0x16, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x02, + 0x03, 0x12, 0x03, 0x51, 0x23, 0x24, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x09, 0x12, 0x04, 0x54, 0x00, + 0x57, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, 0x03, 0x54, 0x08, 0x1d, 0x0a, 0x23, + 0x0a, 0x04, 0x04, 0x09, 0x02, 0x00, 0x12, 0x03, 0x56, 0x02, 0x1a, 0x1a, 0x16, 0x20, 0x54, 0x68, + 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x06, 0x12, 0x03, 0x56, 0x02, + 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x01, 0x12, 0x03, 0x56, 0x0e, 0x15, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x03, 0x12, 0x03, 0x56, 0x18, 0x19, 0x0a, 0x0a, 0x0a, + 0x02, 0x06, 0x00, 0x12, 0x04, 0x59, 0x00, 0x68, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x06, 0x00, 0x01, + 0x12, 0x03, 0x59, 0x08, 0x17, 0x0a, 0x2e, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x00, 0x12, 0x03, 0x5b, + 0x02, 0x4a, 0x1a, 0x21, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x6e, + 0x65, 0x77, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x5b, 0x06, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x5b, 0x14, + 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x5b, 0x33, 0x48, 0x0a, + 0x42, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, 0x03, 0x5e, 0x02, 0x4a, 0x1a, 0x35, 0x20, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x5e, 0x06, + 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x5e, 0x14, 0x28, 0x0a, + 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x5e, 0x33, 0x48, 0x0a, 0x2a, 0x0a, + 0x04, 0x06, 0x00, 0x02, 0x02, 0x12, 0x03, 0x61, 0x02, 0x41, 0x1a, 0x1d, 0x20, 0x47, 0x65, 0x74, + 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x02, 0x01, 0x12, 0x03, 0x61, 0x06, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x02, + 0x12, 0x03, 0x61, 0x11, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, + 0x61, 0x2d, 0x3f, 0x0a, 0x22, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, 0x03, 0x64, 0x02, 0x47, + 0x1a, 0x15, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, + 0x12, 0x03, 0x64, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, + 0x64, 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x64, 0x31, + 0x45, 0x0a, 0x42, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x04, 0x12, 0x03, 0x67, 0x02, 0x4a, 0x1a, 0x35, + 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x6e, + 0x61, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, + 0x67, 0x06, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, 0x67, 0x14, + 0x28, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x67, 0x33, 0x48, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +]; +include!("unitycatalog.catalogs.v1.serde.rs"); +// @@protoc_insertion_point(module) \ No newline at end of file diff --git a/models/src/gen/unitycatalog.catalogs.v1.serde.rs b/models/src/gen/unitycatalog.catalogs.v1.serde.rs new file mode 100644 index 0000000..5d4c2ae --- /dev/null +++ b/models/src/gen/unitycatalog.catalogs.v1.serde.rs @@ -0,0 +1,1206 @@ +// @generated +impl serde::Serialize for CatalogInfo { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.id.is_empty() { + len += 1; + } + if !self.name.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if !self.properties.is_empty() { + len += 1; + } + if self.created_at != 0 { + len += 1; + } + if self.updated_at != 0 { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.CatalogInfo", len)?; + if !self.id.is_empty() { + struct_ser.serialize_field("id", &self.id)?; + } + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if !self.properties.is_empty() { + struct_ser.serialize_field("properties", &self.properties)?; + } + if self.created_at != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("createdAt", ToString::to_string(&self.created_at).as_str())?; + } + if self.updated_at != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("updatedAt", ToString::to_string(&self.updated_at).as_str())?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CatalogInfo { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "id", + "name", + "comment", + "properties", + "created_at", + "createdAt", + "updated_at", + "updatedAt", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Id, + Name, + Comment, + Properties, + CreatedAt, + UpdatedAt, + } + 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 { + "id" => Ok(GeneratedField::Id), + "name" => Ok(GeneratedField::Name), + "comment" => Ok(GeneratedField::Comment), + "properties" => Ok(GeneratedField::Properties), + "createdAt" | "created_at" => Ok(GeneratedField::CreatedAt), + "updatedAt" | "updated_at" => Ok(GeneratedField::UpdatedAt), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CatalogInfo; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.CatalogInfo") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut id__ = None; + let mut name__ = None; + let mut comment__ = None; + let mut properties__ = None; + let mut created_at__ = None; + let mut updated_at__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Id => { + if id__.is_some() { + return Err(serde::de::Error::duplicate_field("id")); + } + id__ = Some(map_.next_value()?); + } + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Properties => { + if properties__.is_some() { + return Err(serde::de::Error::duplicate_field("properties")); + } + properties__ = Some( + map_.next_value::>()? + ); + } + GeneratedField::CreatedAt => { + if created_at__.is_some() { + return Err(serde::de::Error::duplicate_field("createdAt")); + } + created_at__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::UpdatedAt => { + if updated_at__.is_some() { + return Err(serde::de::Error::duplicate_field("updatedAt")); + } + updated_at__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + } + } + Ok(CatalogInfo { + id: id__.unwrap_or_default(), + name: name__.unwrap_or_default(), + comment: comment__, + properties: properties__.unwrap_or_default(), + created_at: created_at__.unwrap_or_default(), + updated_at: updated_at__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.CatalogInfo", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateCatalogRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if !self.properties.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.CreateCatalogRequest", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if !self.properties.is_empty() { + struct_ser.serialize_field("properties", &self.properties)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateCatalogRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "comment", + "properties", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + Comment, + Properties, + } + 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 { + "name" => Ok(GeneratedField::Name), + "comment" => Ok(GeneratedField::Comment), + "properties" => Ok(GeneratedField::Properties), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateCatalogRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.CreateCatalogRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut comment__ = None; + let mut properties__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Properties => { + if properties__.is_some() { + return Err(serde::de::Error::duplicate_field("properties")); + } + properties__ = Some( + map_.next_value::>()? + ); + } + } + } + Ok(CreateCatalogRequest { + name: name__.unwrap_or_default(), + comment: comment__, + properties: properties__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.CreateCatalogRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateCatalogResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.catalog.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.CreateCatalogResponse", len)?; + if let Some(v) = self.catalog.as_ref() { + struct_ser.serialize_field("catalog", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateCatalogResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "catalog", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Catalog, + } + 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 { + "catalog" => Ok(GeneratedField::Catalog), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateCatalogResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.CreateCatalogResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut catalog__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Catalog => { + if catalog__.is_some() { + return Err(serde::de::Error::duplicate_field("catalog")); + } + catalog__ = map_.next_value()?; + } + } + } + Ok(CreateCatalogResponse { + catalog: catalog__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.CreateCatalogResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteCatalogRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if self.force.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.DeleteCatalogRequest", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if let Some(v) = self.force.as_ref() { + struct_ser.serialize_field("force", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteCatalogRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "force", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + Force, + } + 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 { + "name" => Ok(GeneratedField::Name), + "force" => Ok(GeneratedField::Force), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteCatalogRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.DeleteCatalogRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut force__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::Force => { + if force__.is_some() { + return Err(serde::de::Error::duplicate_field("force")); + } + force__ = map_.next_value()?; + } + } + } + Ok(DeleteCatalogRequest { + name: name__.unwrap_or_default(), + force: force__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.DeleteCatalogRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteCatalogResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let len = 0; + let struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.DeleteCatalogResponse", len)?; + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteCatalogResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + } + 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, + { + Err(serde::de::Error::unknown_field(value, FIELDS)) + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteCatalogResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.DeleteCatalogResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; + } + Ok(DeleteCatalogResponse { + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.DeleteCatalogResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetCatalogRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.GetCatalogRequest", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetCatalogRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + } + 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 { + "name" => Ok(GeneratedField::Name), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetCatalogRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.GetCatalogRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + } + } + Ok(GetCatalogRequest { + name: name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.GetCatalogRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetCatalogResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.catalog.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.GetCatalogResponse", len)?; + if let Some(v) = self.catalog.as_ref() { + struct_ser.serialize_field("catalog", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetCatalogResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "catalog", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Catalog, + } + 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 { + "catalog" => Ok(GeneratedField::Catalog), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetCatalogResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.GetCatalogResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut catalog__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Catalog => { + if catalog__.is_some() { + return Err(serde::de::Error::duplicate_field("catalog")); + } + catalog__ = map_.next_value()?; + } + } + } + Ok(GetCatalogResponse { + catalog: catalog__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.GetCatalogResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListCatalogsRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.max_results.is_some() { + len += 1; + } + if self.page_token.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.ListCatalogsRequest", len)?; + if let Some(v) = self.max_results.as_ref() { + struct_ser.serialize_field("maxResults", v)?; + } + if let Some(v) = self.page_token.as_ref() { + struct_ser.serialize_field("pageToken", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListCatalogsRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "max_results", + "maxResults", + "page_token", + "pageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + MaxResults, + PageToken, + } + 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 { + "maxResults" | "max_results" => Ok(GeneratedField::MaxResults), + "pageToken" | "page_token" => Ok(GeneratedField::PageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListCatalogsRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.ListCatalogsRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut max_results__ = None; + let mut page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::MaxResults => { + if max_results__.is_some() { + return Err(serde::de::Error::duplicate_field("maxResults")); + } + max_results__ = + map_.next_value::<::std::option::Option<::pbjson::private::NumberDeserialize<_>>>()?.map(|x| x.0) + ; + } + GeneratedField::PageToken => { + if page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("pageToken")); + } + page_token__ = map_.next_value()?; + } + } + } + Ok(ListCatalogsRequest { + max_results: max_results__, + page_token: page_token__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.ListCatalogsRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListCatalogsResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.catalogs.is_empty() { + len += 1; + } + if self.next_page_token.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.ListCatalogsResponse", len)?; + if !self.catalogs.is_empty() { + struct_ser.serialize_field("catalogs", &self.catalogs)?; + } + if let Some(v) = self.next_page_token.as_ref() { + struct_ser.serialize_field("nextPageToken", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListCatalogsResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "catalogs", + "next_page_token", + "nextPageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Catalogs, + NextPageToken, + } + 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 { + "catalogs" => Ok(GeneratedField::Catalogs), + "nextPageToken" | "next_page_token" => Ok(GeneratedField::NextPageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListCatalogsResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.ListCatalogsResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut catalogs__ = None; + let mut next_page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Catalogs => { + if catalogs__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogs")); + } + catalogs__ = Some(map_.next_value()?); + } + GeneratedField::NextPageToken => { + if next_page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("nextPageToken")); + } + next_page_token__ = map_.next_value()?; + } + } + } + Ok(ListCatalogsResponse { + catalogs: catalogs__.unwrap_or_default(), + next_page_token: next_page_token__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.ListCatalogsResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateCatalogRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.new_name.is_some() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if !self.properties.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.UpdateCatalogRequest", len)?; + if let Some(v) = self.new_name.as_ref() { + struct_ser.serialize_field("newName", v)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if !self.properties.is_empty() { + struct_ser.serialize_field("properties", &self.properties)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateCatalogRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "new_name", + "newName", + "comment", + "properties", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + NewName, + Comment, + Properties, + } + 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 { + "newName" | "new_name" => Ok(GeneratedField::NewName), + "comment" => Ok(GeneratedField::Comment), + "properties" => Ok(GeneratedField::Properties), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateCatalogRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.UpdateCatalogRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut new_name__ = None; + let mut comment__ = None; + let mut properties__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::NewName => { + if new_name__.is_some() { + return Err(serde::de::Error::duplicate_field("newName")); + } + new_name__ = map_.next_value()?; + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Properties => { + if properties__.is_some() { + return Err(serde::de::Error::duplicate_field("properties")); + } + properties__ = Some( + map_.next_value::>()? + ); + } + } + } + Ok(UpdateCatalogRequest { + new_name: new_name__, + comment: comment__, + properties: properties__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.UpdateCatalogRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateCatalogResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.catalog.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.catalogs.v1.UpdateCatalogResponse", len)?; + if let Some(v) = self.catalog.as_ref() { + struct_ser.serialize_field("catalog", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateCatalogResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "catalog", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Catalog, + } + 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 { + "catalog" => Ok(GeneratedField::Catalog), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateCatalogResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.catalogs.v1.UpdateCatalogResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut catalog__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Catalog => { + if catalog__.is_some() { + return Err(serde::de::Error::duplicate_field("catalog")); + } + catalog__ = map_.next_value()?; + } + } + } + Ok(UpdateCatalogResponse { + catalog: catalog__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.catalogs.v1.UpdateCatalogResponse", FIELDS, GeneratedVisitor) + } +} diff --git a/models/src/gen/unitycatalog.functions.v1.rs b/models/src/gen/unitycatalog.functions.v1.rs new file mode 100644 index 0000000..ea1378e --- /dev/null +++ b/models/src/gen/unitycatalog.functions.v1.rs @@ -0,0 +1,1258 @@ +// @generated +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TableDependency { + /// Full name of the dependent table, in the form of catalog_name.schema_name.table_name. + #[prost(string, tag="1")] + pub table_full_name: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FunctionDependency { + /// Full name of the dependent function, in the form of catalog_name.schema_name.function_name. + #[prost(string, tag="1")] + pub function_full_name: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Dependency { + #[prost(oneof="dependency::Dependency", tags="1, 2")] + pub dependency: ::core::option::Option, +} +/// Nested message and enum types in `Dependency`. +pub mod dependency { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Dependency { + #[prost(message, tag="1")] + Table(super::TableDependency), + #[prost(message, tag="2")] + Function(super::FunctionDependency), + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DependencyList { + #[prost(message, repeated, tag="1")] + pub dependencies: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FunctionParameterInfo { + /// The name of the parameter. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Full data type spec, SQL/catalogString text. + #[prost(string, tag="2")] + pub type_text: ::prost::alloc::string::String, + /// Full data type spec, JSON-serialized. + #[prost(string, tag="3")] + pub type_json: ::prost::alloc::string::String, + #[prost(enumeration="super::super::tables::v1::ColumnTypeName", tag="4")] + pub type_name: i32, + /// Digits of precision; required on Create for DecimalTypes. + #[prost(int32, tag="5")] + pub type_precision: i32, + /// Digits to right of decimal; Required on Create for DecimalTypes. + #[prost(int32, tag="6")] + pub type_scale: i32, + /// Format of IntervalType. + #[prost(string, tag="7")] + pub type_interval_type: ::prost::alloc::string::String, + /// Ordinal position of column (starting at position 0). + #[prost(int32, tag="8")] + pub position: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FunctionParameterInfos { + #[prost(message, repeated, tag="1")] + pub parameters: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct FunctionInfo { + /// Name of function, relative to parent schema. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Name of parent catalog. + #[prost(string, tag="2")] + pub catalog_name: ::prost::alloc::string::String, + /// Name of parent schema relative to its parent catalog. + #[prost(string, tag="3")] + pub schema_name: ::prost::alloc::string::String, + #[prost(message, optional, tag="4")] + pub input_params: ::core::option::Option, + #[prost(enumeration="super::super::tables::v1::ColumnTypeName", tag="5")] + pub data_type: i32, + /// Pretty printed function data type. + #[prost(string, tag="6")] + pub full_data_type: ::prost::alloc::string::String, + #[prost(message, optional, tag="7")] + pub return_params: ::core::option::Option, + /// Function language. When EXTERNAL is used, the language of the routine function + /// should be specified in the external_language field, and the return_params + /// of the function cannot be used (as TABLE return type is not supported), + /// and the sql_data_access field must be NO_SQL. + /// TODO(roeap): should this be an enum? If so, what are the valid values? + #[prost(string, tag="8")] + pub routine_body: ::prost::alloc::string::String, + /// Function body + #[prost(string, tag="9")] + pub routine_definition: ::prost::alloc::string::String, + #[prost(message, optional, tag="10")] + pub routine_dependencies: ::core::option::Option, + /// Function parameter style. S is the value for SQL. + /// TODO(roeap): should this be an enum? If so, what are the valid values? + #[prost(string, tag="11")] + pub parameter_style: ::prost::alloc::string::String, + /// Whether the function is deterministic. + #[prost(bool, tag="12")] + pub is_deterministic: bool, + /// Function SQL data access. + #[prost(string, tag="13")] + pub sql_data_access: ::prost::alloc::string::String, + #[prost(bool, tag="14")] + pub is_null_call: bool, + /// Function security type. + #[prost(string, tag="15")] + pub security_type: ::prost::alloc::string::String, + /// Specific name of the function; Reserved for future use. + #[prost(string, tag="16")] + pub specific_name: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="17")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// JSON-serialized key-value pair map, encoded (escaped) as a string. + #[prost(map="string, string", tag="18")] + pub properties: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, + /// Full name of function, in form of catalog_name.schema_name.function__name + #[prost(string, tag="19")] + pub full_name: ::prost::alloc::string::String, + /// External language of the function. + #[prost(string, tag="23")] + pub external_language: ::prost::alloc::string::String, + /// Time at which this function was created, in epoch milliseconds. + #[prost(int64, tag="20")] + pub created_at: i64, + /// Time at which this function was last updated, in epoch milliseconds. + #[prost(int64, tag="21")] + pub updated_at: i64, + /// Id of Function, relative to parent schema. + #[prost(string, tag="22")] + pub function_id: ::prost::alloc::string::String, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum FunctionParameterMode { + Unspecified = 0, +} +impl FunctionParameterMode { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + FunctionParameterMode::Unspecified => "FUNCTION_PARAMETER_MODE_UNSPECIFIED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "FUNCTION_PARAMETER_MODE_UNSPECIFIED" => Some(Self::Unspecified), + _ => None, + } + } +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum FunctionParameterType { + Unspecified = 0, +} +impl FunctionParameterType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + FunctionParameterType::Unspecified => "FUNCTION_PARAMETER_TYPE_UNSPECIFIED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "FUNCTION_PARAMETER_TYPE_UNSPECIFIED" => Some(Self::Unspecified), + _ => None, + } + } +} +/// TODO(roeap): This type essentially just replicates the `FunctionInfo`, with a few +/// fields missing. Since its quite complex and still considered experimantal, maybe +/// the types can be consolidated. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateFunction { + /// Name of function, relative to parent schema. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Name of parent catalog. + #[prost(string, tag="2")] + pub catalog_name: ::prost::alloc::string::String, + /// Name of parent schema relative to its parent catalog. + #[prost(string, tag="3")] + pub schema_name: ::prost::alloc::string::String, + #[prost(message, optional, tag="4")] + pub input_params: ::core::option::Option, + #[prost(enumeration="super::super::tables::v1::ColumnTypeName", tag="5")] + pub data_type: i32, + /// Pretty printed function data type. + #[prost(string, tag="6")] + pub full_data_type: ::prost::alloc::string::String, + #[prost(message, optional, tag="7")] + pub return_params: ::core::option::Option, + /// Function language. When EXTERNAL is used, the language of the routine function + /// should be specified in the external_language field, and the return_params + /// of the function cannot be used (as TABLE return type is not supported), + /// and the sql_data_access field must be NO_SQL. + /// TODO(roeap): should this be an enum? If so, what are the valid values? + #[prost(string, tag="8")] + pub routine_body: ::prost::alloc::string::String, + /// Function body + #[prost(string, tag="9")] + pub routine_definition: ::prost::alloc::string::String, + #[prost(message, optional, tag="10")] + pub routine_dependencies: ::core::option::Option, + /// Function parameter style. S is the value for SQL. + /// TODO(roeap): should this be an enum? If so, what are the valid values? + #[prost(string, tag="11")] + pub parameter_style: ::prost::alloc::string::String, + /// Whether the function is deterministic. + #[prost(bool, tag="12")] + pub is_deterministic: bool, + /// Function SQL data access. + #[prost(string, tag="13")] + pub sql_data_access: ::prost::alloc::string::String, + #[prost(bool, tag="14")] + pub is_null_call: bool, + /// Function security type. + #[prost(string, tag="15")] + pub security_type: ::prost::alloc::string::String, + /// Specific name of the function; Reserved for future use. + #[prost(string, tag="16")] + pub specific_name: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="17")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// JSON-serialized key-value pair map, encoded (escaped) as a string. + #[prost(map="string, string", tag="18")] + pub properties: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, + /// Full name of function, in form of catalog_name.schema_name.function__name + #[prost(string, tag="19")] + pub full_name: ::prost::alloc::string::String, + /// External language of the function. + #[prost(string, tag="23")] + pub external_language: ::prost::alloc::string::String, +} +/// Creates a new function instance. WARNING: This API is experimental and will change in future versions. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateFunctionRequest { + /// The function to create. + #[prost(message, optional, tag="1")] + pub function_info: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateFunctionResponse { + /// The created function. + #[prost(message, optional, tag="1")] + pub function: ::core::option::Option, +} +/// Deletes the function that matches the supplied name. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteFunctionRequest { + /// The fully-qualified name of the function (of the form catalog_name.schema_name.function__name). + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteFunctionResponse { +} +/// Gets a function from within a parent catalog and schema. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetFunctionRequest { + /// The fully-qualified name of the function (of the form catalog_name.schema_name.function__name). + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetFunctionResponse { + /// The function. + #[prost(message, optional, tag="1")] + pub function: ::core::option::Option, +} +/// List functions within the specified parent catalog and schema. +/// There is no guarantee of a specific ordering of the elements in the array. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListFunctionsRequest { + /// The name of the parent catalog. + #[prost(string, tag="1")] + pub catalog_name: ::prost::alloc::string::String, + /// The name of the parent schema. + #[prost(string, tag="2")] + pub schema_name: ::prost::alloc::string::String, + #[prost(int32, optional, tag="3")] + pub max_results: ::core::option::Option, + /// Specifies a page token to use. Set pageToken to the nextPageToken returned + /// by a previous list request to get the next page of results. + /// next_page_token will not be returned in a response if there are no more results available. + #[prost(string, optional, tag="4")] + pub page_token: ::core::option::Option<::prost::alloc::string::String>, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListFunctionsResponse { + /// The functions. + #[prost(message, repeated, tag="1")] + pub functions: ::prost::alloc::vec::Vec, + /// A token that can be sent as page_token to retrieve the next page. + /// If this field is omitted, there are no more results. + #[prost(string, optional, tag="2")] + pub next_page_token: ::core::option::Option<::prost::alloc::string::String>, +} +/// Encoded file descriptor set for the `unitycatalog.functions.v1` package +pub const FILE_DESCRIPTOR_SET: &[u8] = &[ + 0x0a, 0xb1, 0x36, 0x0a, 0x26, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x42, 0x0a, 0x0f, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x2f, 0x0a, 0x0f, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4b, 0x0a, 0x12, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, + 0x63, 0x79, 0x12, 0x35, 0x0a, 0x12, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, + 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x10, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x0a, 0x44, 0x65, + 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x42, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, + 0x6e, 0x63, 0x79, 0x48, 0x00, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x08, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x48, 0x00, 0x52, + 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x64, 0x65, 0x70, + 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x5b, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x65, 0x6e, + 0x64, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x0c, 0x64, 0x65, 0x70, + 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x65, + 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x22, 0xd5, 0x02, 0x0a, 0x15, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x09, 0x74, + 0x79, 0x70, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x54, 0x65, 0x78, + 0x74, 0x12, 0x24, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x74, + 0x79, 0x70, 0x65, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, + 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x74, 0x79, 0x70, 0x65, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x53, 0x63, 0x61, + 0x6c, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x76, 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x74, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6a, 0x0a, 0x16, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x50, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0xc2, 0x09, 0x0a, 0x0c, 0x46, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x0c, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x0b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x43, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x66, 0x75, 0x6c, 0x6c, 0x44, 0x61, + 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, + 0x52, 0x0c, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x21, + 0x0a, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x42, 0x6f, 0x64, + 0x79, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, + 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x5c, 0x0a, 0x14, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x65, + 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, + 0x64, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x13, 0x72, 0x6f, 0x75, 0x74, 0x69, + 0x6e, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x27, + 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0f, 0x69, 0x73, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x71, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x71, 0x6c, + 0x44, 0x61, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x73, + 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x69, 0x73, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x23, 0x0a, 0x0d, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x57, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x24, + 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x28, 0x0a, 0x0b, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, + 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x2a, 0x40, 0x0a, + 0x15, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x2a, + 0x40, 0x0a, 0x15, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x46, 0x55, 0x4e, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x4a, 0xf8, 0x23, 0x0a, 0x07, 0x12, 0x05, 0x00, 0x00, 0x86, 0x01, 0x01, 0x0a, 0x08, 0x0a, + 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, + 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, + 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2d, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, 0x07, + 0x00, 0x09, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x07, 0x05, 0x1a, 0x0a, + 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x08, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x08, 0x02, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, + 0x02, 0x00, 0x02, 0x12, 0x03, 0x08, 0x28, 0x29, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x01, 0x12, 0x04, + 0x0b, 0x00, 0x0d, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x01, 0x01, 0x12, 0x03, 0x0b, 0x05, 0x1a, + 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x00, 0x12, 0x03, 0x0c, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, + 0x05, 0x05, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x02, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x01, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0c, 0x28, 0x29, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, + 0x04, 0x0f, 0x00, 0x12, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x0f, 0x08, + 0x17, 0x0a, 0x64, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x11, 0x02, 0x47, 0x1a, 0x57, + 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, + 0x66, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, + 0x12, 0x03, 0x11, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x11, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x11, 0x1b, + 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x11, 0x1d, 0x46, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x11, 0x1e, + 0x45, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x14, 0x00, 0x17, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x14, 0x08, 0x1a, 0x0a, 0x6a, 0x0a, 0x04, 0x04, 0x01, 0x02, + 0x00, 0x12, 0x03, 0x16, 0x02, 0x4a, 0x1a, 0x5d, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6e, 0x61, + 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, + 0x65, 0x6e, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, + 0x16, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x16, 0x09, + 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x16, 0x1e, 0x1f, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x08, 0x12, 0x03, 0x16, 0x20, 0x49, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x01, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x16, 0x21, 0x48, 0x0a, + 0x0a, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x19, 0x00, 0x1e, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, + 0x02, 0x01, 0x12, 0x03, 0x19, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x04, 0x04, 0x02, 0x08, 0x00, 0x12, + 0x04, 0x1a, 0x02, 0x1d, 0x03, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x08, 0x00, 0x01, 0x12, 0x03, + 0x1a, 0x08, 0x12, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x1b, 0x04, 0x1e, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x06, 0x12, 0x03, 0x1b, 0x04, 0x13, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1b, 0x14, 0x19, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, 0x1b, 0x1c, 0x1d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x02, + 0x02, 0x01, 0x12, 0x03, 0x1c, 0x04, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x06, + 0x12, 0x03, 0x1c, 0x04, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x1c, 0x17, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1c, 0x22, + 0x23, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x20, 0x00, 0x22, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x20, 0x08, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x03, 0x02, + 0x00, 0x12, 0x03, 0x21, 0x02, 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x04, 0x12, + 0x03, 0x21, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x06, 0x12, 0x03, 0x21, + 0x0b, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x21, 0x16, 0x22, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x21, 0x25, 0x26, 0x0a, 0x0a, + 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x24, 0x00, 0x3b, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, + 0x01, 0x12, 0x03, 0x24, 0x08, 0x1d, 0x0a, 0x29, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, + 0x26, 0x02, 0x3c, 0x1a, 0x1c, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, + 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x26, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x26, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x26, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x00, 0x08, 0x12, 0x03, 0x26, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x04, 0x02, + 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x26, 0x13, 0x3a, 0x0a, 0x3b, 0x0a, 0x04, 0x04, + 0x04, 0x02, 0x01, 0x12, 0x03, 0x29, 0x02, 0x41, 0x1a, 0x2e, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x2c, 0x20, + 0x53, 0x51, 0x4c, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, + 0x05, 0x12, 0x03, 0x29, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x01, 0x12, + 0x03, 0x29, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x03, 0x12, 0x03, 0x29, + 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x01, 0x08, 0x12, 0x03, 0x29, 0x17, 0x40, + 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x04, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x29, + 0x18, 0x3f, 0x0a, 0x34, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x02, 0x12, 0x03, 0x2c, 0x02, 0x41, 0x1a, + 0x27, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x20, 0x73, 0x70, 0x65, 0x63, 0x2c, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x2d, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, + 0x05, 0x12, 0x03, 0x2c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x01, 0x12, + 0x03, 0x2c, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x03, 0x12, 0x03, 0x2c, + 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x02, 0x08, 0x12, 0x03, 0x2c, 0x17, 0x40, + 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x04, 0x02, 0x02, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x2c, + 0x18, 0x3f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x03, 0x12, 0x03, 0x2e, 0x02, 0x36, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x03, 0x06, 0x12, 0x03, 0x2e, 0x02, 0x27, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x03, 0x01, 0x12, 0x03, 0x2e, 0x28, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x03, 0x03, 0x12, 0x03, 0x2e, 0x34, 0x35, 0x0a, 0x48, 0x0a, 0x04, 0x04, 0x04, 0x02, + 0x04, 0x12, 0x03, 0x31, 0x02, 0x1b, 0x1a, 0x3b, 0x20, 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, + 0x6f, 0x66, 0x20, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x3b, 0x20, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x04, 0x05, 0x12, 0x03, 0x31, 0x02, + 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x04, 0x01, 0x12, 0x03, 0x31, 0x08, 0x16, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x04, 0x03, 0x12, 0x03, 0x31, 0x19, 0x1a, 0x0a, 0x4f, 0x0a, + 0x04, 0x04, 0x04, 0x02, 0x05, 0x12, 0x03, 0x34, 0x02, 0x17, 0x1a, 0x42, 0x20, 0x44, 0x69, 0x67, + 0x69, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6f, 0x66, 0x20, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x3b, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x04, 0x02, 0x05, 0x05, 0x12, 0x03, 0x34, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x04, 0x02, 0x05, 0x01, 0x12, 0x03, 0x34, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, + 0x02, 0x05, 0x03, 0x12, 0x03, 0x34, 0x15, 0x16, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x06, + 0x12, 0x03, 0x37, 0x02, 0x20, 0x1a, 0x19, 0x20, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x6f, + 0x66, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x06, 0x05, 0x12, 0x03, 0x37, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x04, 0x02, 0x06, 0x01, 0x12, 0x03, 0x37, 0x09, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x04, 0x02, 0x06, 0x03, 0x12, 0x03, 0x37, 0x1e, 0x1f, 0x0a, 0x43, 0x0a, 0x04, 0x04, 0x04, + 0x02, 0x07, 0x12, 0x03, 0x3a, 0x02, 0x15, 0x1a, 0x36, 0x20, 0x4f, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x6c, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x20, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, + 0x74, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x30, 0x29, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x07, 0x05, 0x12, 0x03, 0x3a, 0x02, 0x07, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x04, 0x02, 0x07, 0x01, 0x12, 0x03, 0x3a, 0x08, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x04, 0x02, 0x07, 0x03, 0x12, 0x03, 0x3a, 0x13, 0x14, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x05, 0x12, + 0x04, 0x3d, 0x00, 0x3f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x3d, 0x08, + 0x1e, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x3e, 0x02, 0x30, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x04, 0x12, 0x03, 0x3e, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, 0x03, 0x3e, 0x0b, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x3e, 0x21, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, + 0x03, 0x12, 0x03, 0x3e, 0x2e, 0x2f, 0x0a, 0x0b, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x05, 0x41, 0x00, + 0x86, 0x01, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x41, 0x08, 0x14, 0x0a, + 0x3b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x43, 0x02, 0x3c, 0x1a, 0x2e, 0x20, 0x4e, + 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, + 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x00, 0x05, 0x12, 0x03, 0x43, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x00, 0x01, 0x12, 0x03, 0x43, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, + 0x03, 0x12, 0x03, 0x43, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x08, 0x12, + 0x03, 0x43, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, + 0x02, 0x12, 0x03, 0x43, 0x13, 0x3a, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, + 0x46, 0x02, 0x44, 0x1a, 0x19, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x05, 0x12, 0x03, 0x46, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x46, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x01, 0x03, 0x12, 0x03, 0x46, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, + 0x08, 0x12, 0x03, 0x46, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x01, 0x08, 0x87, + 0x09, 0x0e, 0x02, 0x12, 0x03, 0x46, 0x1b, 0x42, 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x02, + 0x12, 0x03, 0x49, 0x02, 0x43, 0x1a, 0x37, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x05, 0x12, 0x03, 0x49, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x02, 0x01, 0x12, 0x03, 0x49, 0x09, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x02, 0x03, 0x12, 0x03, 0x49, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, + 0x08, 0x12, 0x03, 0x49, 0x19, 0x42, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x02, 0x08, 0x87, + 0x09, 0x0e, 0x02, 0x12, 0x03, 0x49, 0x1a, 0x41, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x03, + 0x12, 0x03, 0x4b, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x06, 0x12, 0x03, + 0x4b, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x01, 0x12, 0x03, 0x4b, 0x19, + 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x03, 0x12, 0x03, 0x4b, 0x28, 0x29, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x04, 0x12, 0x03, 0x4d, 0x02, 0x36, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x04, 0x06, 0x12, 0x03, 0x4d, 0x02, 0x27, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x04, 0x01, 0x12, 0x03, 0x4d, 0x28, 0x31, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x04, + 0x03, 0x12, 0x03, 0x4d, 0x34, 0x35, 0x0a, 0x31, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x05, 0x12, 0x03, + 0x50, 0x02, 0x46, 0x1a, 0x24, 0x20, 0x50, 0x72, 0x65, 0x74, 0x74, 0x79, 0x20, 0x70, 0x72, 0x69, + 0x6e, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x05, 0x05, 0x12, 0x03, 0x50, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x05, 0x01, + 0x12, 0x03, 0x50, 0x09, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x05, 0x03, 0x12, 0x03, + 0x50, 0x1a, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x05, 0x08, 0x12, 0x03, 0x50, 0x1c, + 0x45, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x05, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, + 0x50, 0x1d, 0x44, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x06, 0x12, 0x03, 0x52, 0x02, 0x2b, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x06, 0x06, 0x12, 0x03, 0x52, 0x02, 0x18, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x06, 0x01, 0x12, 0x03, 0x52, 0x19, 0x26, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x06, 0x03, 0x12, 0x03, 0x52, 0x29, 0x2a, 0x0a, 0xe9, 0x02, 0x0a, 0x04, 0x04, + 0x06, 0x02, 0x07, 0x12, 0x03, 0x59, 0x02, 0x1a, 0x1a, 0xdb, 0x02, 0x20, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x2e, 0x20, 0x57, + 0x68, 0x65, 0x6e, 0x20, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x20, 0x69, 0x73, 0x20, + 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, + 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, + 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x73, 0x68, 0x6f, 0x75, + 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, + 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, + 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x2c, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x0a, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x28, 0x61, 0x73, 0x20, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x20, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x29, 0x2c, 0x0a, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x71, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, + 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x4e, 0x4f, 0x5f, 0x53, 0x51, 0x4c, 0x2e, 0x0a, 0x20, 0x54, + 0x4f, 0x44, 0x4f, 0x28, 0x72, 0x6f, 0x65, 0x61, 0x70, 0x29, 0x3a, 0x20, 0x73, 0x68, 0x6f, 0x75, + 0x6c, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, + 0x75, 0x6d, 0x3f, 0x20, 0x49, 0x66, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x77, 0x68, 0x61, 0x74, 0x20, + 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x3f, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x07, 0x05, 0x12, + 0x03, 0x59, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x07, 0x01, 0x12, 0x03, 0x59, + 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x07, 0x03, 0x12, 0x03, 0x59, 0x18, 0x19, + 0x0a, 0x1c, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x08, 0x12, 0x03, 0x5c, 0x02, 0x20, 0x1a, 0x0f, 0x20, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x6f, 0x64, 0x79, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x08, 0x05, 0x12, 0x03, 0x5c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x08, 0x01, 0x12, 0x03, 0x5c, 0x09, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x08, 0x03, 0x12, 0x03, 0x5c, 0x1e, 0x1f, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x09, + 0x12, 0x03, 0x5e, 0x02, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x09, 0x06, 0x12, 0x03, + 0x5e, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x09, 0x01, 0x12, 0x03, 0x5e, 0x11, + 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x09, 0x03, 0x12, 0x03, 0x5e, 0x28, 0x2a, 0x0a, + 0x88, 0x01, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x0a, 0x12, 0x03, 0x62, 0x02, 0x1e, 0x1a, 0x7b, 0x20, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x20, 0x53, 0x20, 0x69, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x51, 0x4c, + 0x2e, 0x0a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x28, 0x72, 0x6f, 0x65, 0x61, 0x70, 0x29, 0x3a, 0x20, + 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x62, 0x65, 0x20, 0x61, + 0x6e, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x3f, 0x20, 0x49, 0x66, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x77, + 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3f, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x0a, 0x05, 0x12, 0x03, 0x62, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0a, + 0x01, 0x12, 0x03, 0x62, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0a, 0x03, 0x12, + 0x03, 0x62, 0x1b, 0x1d, 0x0a, 0x35, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x0b, 0x12, 0x03, 0x65, 0x02, + 0x1d, 0x1a, 0x28, 0x20, 0x57, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x0b, 0x05, 0x12, 0x03, 0x65, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x0b, 0x01, 0x12, 0x03, 0x65, 0x07, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0b, 0x03, + 0x12, 0x03, 0x65, 0x1a, 0x1c, 0x0a, 0x28, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x0c, 0x12, 0x03, 0x68, + 0x02, 0x1e, 0x1a, 0x1b, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x53, 0x51, + 0x4c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0c, 0x05, 0x12, 0x03, 0x68, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x0c, 0x01, 0x12, 0x03, 0x68, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x0c, 0x03, 0x12, 0x03, 0x68, 0x1b, 0x1d, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, + 0x0d, 0x12, 0x03, 0x6a, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0d, 0x05, 0x12, + 0x03, 0x6a, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0d, 0x01, 0x12, 0x03, 0x6a, + 0x07, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0d, 0x03, 0x12, 0x03, 0x6a, 0x16, 0x18, + 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x0e, 0x12, 0x03, 0x6d, 0x02, 0x1c, 0x1a, 0x19, 0x20, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0e, + 0x05, 0x12, 0x03, 0x6d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0e, 0x01, 0x12, + 0x03, 0x6d, 0x09, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0e, 0x03, 0x12, 0x03, 0x6d, + 0x19, 0x1b, 0x0a, 0x46, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x0f, 0x12, 0x03, 0x70, 0x02, 0x1c, 0x1a, + 0x39, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, + 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, + 0x20, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x0f, 0x05, 0x12, 0x03, 0x70, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0f, + 0x01, 0x12, 0x03, 0x70, 0x09, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x0f, 0x03, 0x12, + 0x03, 0x70, 0x19, 0x1b, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x10, 0x12, 0x03, 0x73, 0x02, + 0x1f, 0x1a, 0x2b, 0x20, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x65, 0x78, 0x74, + 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x10, 0x04, 0x12, 0x03, 0x73, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x10, 0x05, 0x12, 0x03, 0x73, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x10, 0x01, 0x12, 0x03, 0x73, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x10, + 0x03, 0x12, 0x03, 0x73, 0x1c, 0x1e, 0x0a, 0x51, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x11, 0x12, 0x03, + 0x76, 0x02, 0x26, 0x1a, 0x44, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x6b, 0x65, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, + 0x70, 0x61, 0x69, 0x72, 0x20, 0x6d, 0x61, 0x70, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x20, 0x28, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x29, 0x20, 0x61, 0x73, 0x20, 0x61, + 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x11, 0x06, 0x12, 0x03, 0x76, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x11, 0x01, + 0x12, 0x03, 0x76, 0x16, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x11, 0x03, 0x12, 0x03, + 0x76, 0x23, 0x25, 0x0a, 0x58, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x12, 0x12, 0x03, 0x79, 0x02, 0x42, + 0x1a, 0x4b, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x6f, 0x72, + 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x12, 0x05, 0x12, 0x03, 0x79, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x12, 0x01, 0x12, 0x03, 0x79, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x12, 0x03, 0x12, 0x03, 0x79, 0x15, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x12, 0x08, + 0x12, 0x03, 0x79, 0x18, 0x41, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x12, 0x08, 0x87, 0x09, + 0x0e, 0x02, 0x12, 0x03, 0x79, 0x19, 0x40, 0x0a, 0x31, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x13, 0x12, + 0x03, 0x7c, 0x02, 0x4a, 0x1a, 0x24, 0x20, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, + 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x13, 0x05, 0x12, 0x03, 0x7c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x13, + 0x01, 0x12, 0x03, 0x7c, 0x09, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x13, 0x03, 0x12, + 0x03, 0x7c, 0x1d, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x13, 0x08, 0x12, 0x03, 0x7c, + 0x20, 0x49, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x13, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, + 0x03, 0x7c, 0x21, 0x48, 0x0a, 0x4e, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x14, 0x12, 0x03, 0x7f, 0x02, + 0x18, 0x1a, 0x41, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x61, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, + 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x77, 0x61, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x20, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x14, 0x05, 0x12, 0x03, 0x7f, + 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x14, 0x01, 0x12, 0x03, 0x7f, 0x08, 0x12, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x14, 0x03, 0x12, 0x03, 0x7f, 0x15, 0x17, 0x0a, 0x54, + 0x0a, 0x04, 0x04, 0x06, 0x02, 0x15, 0x12, 0x04, 0x82, 0x01, 0x02, 0x18, 0x1a, 0x46, 0x20, 0x54, + 0x69, 0x6d, 0x65, 0x20, 0x61, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x61, 0x73, 0x20, 0x6c, + 0x61, 0x73, 0x74, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x20, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x15, 0x05, 0x12, 0x04, 0x82, + 0x01, 0x02, 0x07, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x15, 0x01, 0x12, 0x04, 0x82, 0x01, + 0x08, 0x12, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x15, 0x03, 0x12, 0x04, 0x82, 0x01, 0x15, + 0x17, 0x0a, 0x3a, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x16, 0x12, 0x04, 0x85, 0x01, 0x02, 0x44, 0x1a, + 0x2c, 0x20, 0x49, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x16, 0x05, 0x12, 0x04, 0x85, 0x01, 0x02, 0x08, 0x0a, 0x0d, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x16, 0x01, 0x12, 0x04, 0x85, 0x01, 0x09, 0x14, 0x0a, 0x0d, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x16, 0x03, 0x12, 0x04, 0x85, 0x01, 0x17, 0x19, 0x0a, 0x0d, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x16, 0x08, 0x12, 0x04, 0x85, 0x01, 0x1a, 0x43, 0x0a, 0x11, 0x0a, 0x09, 0x04, 0x06, 0x02, + 0x16, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x04, 0x85, 0x01, 0x1b, 0x42, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x83, 0x3d, 0x0a, 0x23, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x2f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xde, 0x08, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x2a, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, + 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, + 0x52, 0x0b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x43, 0x0a, + 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x0e, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x0c, 0x66, 0x75, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x0c, 0x72, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x75, + 0x74, 0x69, 0x6e, 0x65, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x2d, 0x0a, 0x12, + 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, + 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x14, 0x72, + 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x13, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x44, 0x65, 0x70, + 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x74, 0x79, + 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, + 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x26, 0x0a, + 0x0f, 0x73, 0x71, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x71, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, + 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x4e, + 0x75, 0x6c, 0x6c, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, + 0x12, 0x59, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x12, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x09, 0x66, + 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x34, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x61, + 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4c, + 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x22, 0x67, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x16, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, 0x15, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5a, 0x0a, + 0x13, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xde, 0x01, 0x0a, 0x14, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, + 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, + 0x48, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x48, 0x00, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x70, + 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, + 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, + 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x9f, 0x01, 0x0a, 0x15, 0x4c, + 0x69, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x0a, 0x0f, 0x6e, + 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x32, 0xe2, 0x03, 0x0a, + 0x10, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x75, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x2e, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x6c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, + 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, + 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, + 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x30, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4a, 0xde, 0x28, 0x0a, 0x07, 0x12, 0x05, 0x00, 0x00, 0x8d, 0x01, 0x01, 0x0a, 0x08, 0x0a, + 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, + 0x22, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, + 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x30, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x02, 0x12, 0x03, 0x06, + 0x00, 0x2d, 0x0a, 0xd2, 0x01, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0b, 0x00, 0x47, 0x01, 0x1a, + 0xc5, 0x01, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x28, 0x72, 0x6f, 0x65, 0x61, 0x70, 0x29, 0x3a, 0x20, + 0x54, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x65, 0x73, 0x73, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x46, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x60, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, + 0x20, 0x66, 0x65, 0x77, 0x0a, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x74, 0x73, 0x20, + 0x71, 0x75, 0x69, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, + 0x65, 0x64, 0x20, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x61, 0x6e, 0x74, 0x61, 0x6c, 0x2c, + 0x20, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x0a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, + 0x0b, 0x08, 0x16, 0x0a, 0x3b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0d, 0x02, 0x3c, + 0x1a, 0x2e, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0d, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0d, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0d, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x00, 0x08, 0x12, 0x03, 0x0d, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, + 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0d, 0x13, 0x3a, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x01, 0x12, 0x03, 0x10, 0x02, 0x44, 0x1a, 0x19, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, + 0x66, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x10, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x10, 0x09, 0x15, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x10, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x01, 0x08, 0x12, 0x03, 0x10, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, + 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x10, 0x1b, 0x42, 0x0a, 0x44, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x13, 0x02, 0x43, 0x1a, 0x37, 0x20, 0x4e, 0x61, 0x6d, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, + 0x73, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x13, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x13, 0x09, 0x14, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x13, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x02, 0x08, 0x12, 0x03, 0x13, 0x19, 0x42, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, + 0x02, 0x02, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x13, 0x1a, 0x41, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x15, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x03, 0x06, 0x12, 0x03, 0x15, 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, + 0x12, 0x03, 0x15, 0x19, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, + 0x15, 0x28, 0x29, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, 0x12, 0x03, 0x17, 0x02, 0x36, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x06, 0x12, 0x03, 0x17, 0x02, 0x27, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x17, 0x28, 0x31, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x17, 0x34, 0x35, 0x0a, 0x31, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x05, 0x12, 0x03, 0x1a, 0x02, 0x46, 0x1a, 0x24, 0x20, 0x50, 0x72, 0x65, 0x74, 0x74, 0x79, + 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x05, 0x05, 0x12, 0x03, 0x1a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x1a, 0x09, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x05, 0x03, 0x12, 0x03, 0x1a, 0x1a, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x08, + 0x12, 0x03, 0x1a, 0x1c, 0x45, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x05, 0x08, 0x87, 0x09, + 0x0e, 0x02, 0x12, 0x03, 0x1a, 0x1d, 0x44, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x06, 0x12, + 0x03, 0x1c, 0x02, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x06, 0x12, 0x03, 0x1c, + 0x02, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x1c, 0x19, 0x26, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x03, 0x12, 0x03, 0x1c, 0x29, 0x2a, 0x0a, 0xe9, + 0x02, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x07, 0x12, 0x03, 0x23, 0x02, 0x1a, 0x1a, 0xdb, 0x02, 0x20, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, + 0x65, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, + 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, + 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, + 0x75, 0x74, 0x69, 0x6e, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, + 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x0a, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x28, 0x61, 0x73, 0x20, 0x54, 0x41, + 0x42, 0x4c, 0x45, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, + 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x29, 0x2c, 0x0a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x71, 0x6c, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x4e, 0x4f, 0x5f, 0x53, 0x51, 0x4c, + 0x2e, 0x0a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x28, 0x72, 0x6f, 0x65, 0x61, 0x70, 0x29, 0x3a, 0x20, + 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x62, 0x65, 0x20, 0x61, + 0x6e, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x3f, 0x20, 0x49, 0x66, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x77, + 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3f, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x07, 0x05, 0x12, 0x03, 0x23, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, + 0x01, 0x12, 0x03, 0x23, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x03, 0x12, + 0x03, 0x23, 0x18, 0x19, 0x0a, 0x1c, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x08, 0x12, 0x03, 0x26, 0x02, + 0x20, 0x1a, 0x0f, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x6f, 0x64, + 0x79, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x05, 0x12, 0x03, 0x26, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x26, 0x09, 0x1b, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x03, 0x12, 0x03, 0x26, 0x1e, 0x1f, 0x0a, 0x0b, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x09, 0x12, 0x03, 0x28, 0x02, 0x2b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x09, 0x06, 0x12, 0x03, 0x28, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x09, 0x01, + 0x12, 0x03, 0x28, 0x11, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x09, 0x03, 0x12, 0x03, + 0x28, 0x28, 0x2a, 0x0a, 0x88, 0x01, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x0a, 0x12, 0x03, 0x2c, 0x02, + 0x1e, 0x1a, 0x7b, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x20, 0x53, 0x20, + 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x53, 0x51, 0x4c, 0x2e, 0x0a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x28, 0x72, 0x6f, 0x65, 0x61, + 0x70, 0x29, 0x3a, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x3f, 0x20, 0x49, 0x66, 0x20, 0x73, + 0x6f, 0x2c, 0x20, 0x77, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x3f, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x0a, 0x05, 0x12, 0x03, 0x2c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x0a, 0x01, 0x12, 0x03, 0x2c, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x0a, 0x03, 0x12, 0x03, 0x2c, 0x1b, 0x1d, 0x0a, 0x35, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x0b, + 0x12, 0x03, 0x2f, 0x02, 0x1d, 0x1a, 0x28, 0x20, 0x57, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x0b, 0x05, 0x12, 0x03, 0x2f, 0x02, 0x06, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x0b, 0x01, 0x12, 0x03, 0x2f, 0x07, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x0b, 0x03, 0x12, 0x03, 0x2f, 0x1a, 0x1c, 0x0a, 0x28, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x0c, 0x12, 0x03, 0x32, 0x02, 0x1e, 0x1a, 0x1b, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x53, 0x51, 0x4c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x0c, 0x05, 0x12, 0x03, 0x32, 0x02, + 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x0c, 0x01, 0x12, 0x03, 0x32, 0x09, 0x18, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x0c, 0x03, 0x12, 0x03, 0x32, 0x1b, 0x1d, 0x0a, 0x0b, 0x0a, + 0x04, 0x04, 0x00, 0x02, 0x0d, 0x12, 0x03, 0x34, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x0d, 0x05, 0x12, 0x03, 0x34, 0x02, 0x06, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x0d, + 0x01, 0x12, 0x03, 0x34, 0x07, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x0d, 0x03, 0x12, + 0x03, 0x34, 0x16, 0x18, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x0e, 0x12, 0x03, 0x37, 0x02, + 0x1c, 0x1a, 0x19, 0x20, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x0e, 0x05, 0x12, 0x03, 0x37, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x0e, 0x01, 0x12, 0x03, 0x37, 0x09, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x0e, + 0x03, 0x12, 0x03, 0x37, 0x19, 0x1b, 0x0a, 0x46, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x0f, 0x12, 0x03, + 0x3a, 0x02, 0x1c, 0x1a, 0x39, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6e, + 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x3b, 0x20, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x0f, 0x05, 0x12, 0x03, 0x3a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x0f, 0x01, 0x12, 0x03, 0x3a, 0x09, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x0f, 0x03, 0x12, 0x03, 0x3a, 0x19, 0x1b, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x10, + 0x12, 0x03, 0x3d, 0x02, 0x1f, 0x1a, 0x2b, 0x20, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x20, + 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x10, 0x04, 0x12, 0x03, 0x3d, 0x02, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x10, 0x05, 0x12, 0x03, 0x3d, 0x0b, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x10, 0x01, 0x12, 0x03, 0x3d, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x10, 0x03, 0x12, 0x03, 0x3d, 0x1c, 0x1e, 0x0a, 0x51, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x11, 0x12, 0x03, 0x40, 0x02, 0x26, 0x1a, 0x44, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x2d, 0x73, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x6b, 0x65, 0x79, 0x2d, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x20, 0x70, 0x61, 0x69, 0x72, 0x20, 0x6d, 0x61, 0x70, 0x2c, 0x20, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x28, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x29, 0x20, + 0x61, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x11, 0x06, 0x12, 0x03, 0x40, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x11, 0x01, 0x12, 0x03, 0x40, 0x16, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x11, 0x03, 0x12, 0x03, 0x40, 0x23, 0x25, 0x0a, 0x58, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x12, 0x12, + 0x03, 0x43, 0x02, 0x42, 0x1a, 0x4b, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, + 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x12, 0x05, 0x12, 0x03, 0x43, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x12, 0x01, 0x12, 0x03, 0x43, 0x09, 0x12, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x12, 0x03, 0x12, 0x03, 0x43, 0x15, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x12, 0x08, 0x12, 0x03, 0x43, 0x18, 0x41, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, + 0x12, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x43, 0x19, 0x40, 0x0a, 0x31, 0x0a, 0x04, 0x04, + 0x00, 0x02, 0x13, 0x12, 0x03, 0x46, 0x02, 0x4a, 0x1a, 0x24, 0x20, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x13, 0x05, 0x12, 0x03, 0x46, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x13, 0x01, 0x12, 0x03, 0x46, 0x09, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x13, 0x03, 0x12, 0x03, 0x46, 0x1d, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x13, + 0x08, 0x12, 0x03, 0x46, 0x20, 0x49, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x13, 0x08, 0x87, + 0x09, 0x0e, 0x02, 0x12, 0x03, 0x46, 0x21, 0x48, 0x0a, 0x74, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, + 0x4a, 0x00, 0x4d, 0x01, 0x1a, 0x68, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, + 0x20, 0x6e, 0x65, 0x77, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x20, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x3a, + 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x69, 0x73, 0x20, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, + 0x6c, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, + 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x4a, 0x08, 0x1d, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x01, + 0x02, 0x00, 0x12, 0x03, 0x4c, 0x02, 0x23, 0x1a, 0x19, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x4c, 0x02, 0x10, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4c, 0x11, 0x1e, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4c, 0x21, 0x22, 0x0a, 0x0a, 0x0a, 0x02, + 0x04, 0x02, 0x12, 0x04, 0x4f, 0x00, 0x52, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, + 0x03, 0x4f, 0x08, 0x1e, 0x0a, 0x24, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x51, 0x02, + 0x1c, 0x1a, 0x17, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, + 0x02, 0x00, 0x06, 0x12, 0x03, 0x51, 0x02, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x51, 0x0f, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x51, 0x1a, 0x1b, 0x0a, 0x42, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x04, 0x55, 0x00, 0x58, 0x01, + 0x1a, 0x36, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, + 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, + 0x03, 0x55, 0x08, 0x1d, 0x0a, 0x6e, 0x0a, 0x04, 0x04, 0x03, 0x02, 0x00, 0x12, 0x03, 0x57, 0x02, + 0x3c, 0x1a, 0x61, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x2d, 0x71, 0x75, + 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x05, 0x12, 0x03, 0x57, + 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x01, 0x12, 0x03, 0x57, 0x09, 0x0d, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x12, 0x03, 0x57, 0x10, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x03, 0x02, 0x00, 0x08, 0x12, 0x03, 0x57, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, + 0x04, 0x03, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x57, 0x13, 0x3a, 0x0a, 0x09, + 0x0a, 0x02, 0x04, 0x04, 0x12, 0x03, 0x5a, 0x00, 0x21, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, + 0x12, 0x03, 0x5a, 0x08, 0x1e, 0x0a, 0x46, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x5d, 0x00, 0x60, + 0x01, 0x1a, 0x3a, 0x20, 0x47, 0x65, 0x74, 0x73, 0x20, 0x61, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, + 0x61, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x5d, 0x08, 0x1a, 0x0a, 0x6e, 0x0a, 0x04, 0x04, 0x05, 0x02, + 0x00, 0x12, 0x03, 0x5f, 0x02, 0x3c, 0x1a, 0x61, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6c, + 0x6c, 0x79, 0x2d, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x28, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, + 0x00, 0x05, 0x12, 0x03, 0x5f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x5f, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x5f, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x08, 0x12, 0x03, 0x5f, 0x12, + 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x05, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, + 0x5f, 0x13, 0x3a, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x62, 0x00, 0x65, 0x01, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x62, 0x08, 0x1b, 0x0a, 0x1c, 0x0a, 0x04, 0x04, + 0x06, 0x02, 0x00, 0x12, 0x03, 0x64, 0x02, 0x1c, 0x1a, 0x0f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x00, 0x06, 0x12, 0x03, 0x64, 0x02, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x64, 0x0f, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x64, 0x1a, 0x1b, 0x0a, 0x99, 0x01, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x04, 0x69, 0x00, 0x76, 0x01, + 0x1a, 0x8c, 0x01, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, + 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x0a, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x69, 0x08, 0x1c, 0x0a, 0x2e, 0x0a, 0x04, 0x04, + 0x07, 0x02, 0x00, 0x12, 0x03, 0x6b, 0x02, 0x44, 0x1a, 0x21, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, + 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x07, 0x02, 0x00, 0x05, 0x12, 0x03, 0x6b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x6b, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, + 0x12, 0x03, 0x6b, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x08, 0x12, 0x03, + 0x6b, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x07, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, + 0x12, 0x03, 0x6b, 0x1b, 0x42, 0x0a, 0x2d, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x01, 0x12, 0x03, 0x6e, + 0x02, 0x43, 0x1a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x05, 0x12, 0x03, 0x6e, + 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x01, 0x12, 0x03, 0x6e, 0x09, 0x14, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x03, 0x12, 0x03, 0x6e, 0x17, 0x18, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x08, 0x12, 0x03, 0x6e, 0x19, 0x42, 0x0a, 0x10, 0x0a, 0x09, + 0x04, 0x07, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x6e, 0x1a, 0x41, 0x0a, 0x0b, + 0x0a, 0x04, 0x04, 0x07, 0x02, 0x02, 0x12, 0x03, 0x70, 0x02, 0x46, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x07, 0x02, 0x02, 0x04, 0x12, 0x03, 0x70, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, + 0x02, 0x05, 0x12, 0x03, 0x70, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, 0x01, + 0x12, 0x03, 0x70, 0x11, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, 0x03, 0x12, 0x03, + 0x70, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, 0x08, 0x12, 0x03, 0x70, 0x21, + 0x45, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x07, 0x02, 0x02, 0x08, 0x87, 0x09, 0x03, 0x05, 0x12, 0x03, + 0x70, 0x22, 0x44, 0x0a, 0xf3, 0x01, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x03, 0x12, 0x03, 0x75, 0x02, + 0x21, 0x1a, 0xe5, 0x01, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x61, + 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x75, + 0x73, 0x65, 0x2e, 0x20, 0x53, 0x65, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x0a, + 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, + 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x67, + 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x6e, 0x65, + 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x69, + 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, + 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, + 0x03, 0x04, 0x12, 0x03, 0x75, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x05, + 0x12, 0x03, 0x75, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x01, 0x12, 0x03, + 0x75, 0x12, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x03, 0x03, 0x12, 0x03, 0x75, 0x1f, + 0x20, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x04, 0x78, 0x00, 0x7f, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x78, 0x08, 0x1d, 0x0a, 0x1d, 0x0a, 0x04, 0x04, 0x08, 0x02, + 0x00, 0x12, 0x03, 0x7a, 0x02, 0x26, 0x1a, 0x10, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, + 0x04, 0x12, 0x03, 0x7a, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x7a, 0x0b, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x01, 0x12, 0x03, 0x7a, + 0x18, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, 0x12, 0x03, 0x7a, 0x24, 0x25, + 0x0a, 0x86, 0x01, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x01, 0x12, 0x03, 0x7e, 0x02, 0x26, 0x1a, 0x79, + 0x20, 0x41, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, + 0x6e, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x73, 0x20, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x72, 0x69, + 0x65, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, + 0x65, 0x2e, 0x0a, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, + 0x01, 0x04, 0x12, 0x03, 0x7e, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x7e, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x7e, 0x12, 0x21, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x03, 0x12, 0x03, 0x7e, 0x24, + 0x25, 0x0a, 0x0c, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x06, 0x81, 0x01, 0x00, 0x8d, 0x01, 0x01, 0x0a, + 0x0b, 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x04, 0x81, 0x01, 0x08, 0x18, 0x0a, 0x30, 0x0a, 0x04, + 0x06, 0x00, 0x02, 0x00, 0x12, 0x04, 0x83, 0x01, 0x02, 0x4d, 0x1a, 0x22, 0x20, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0d, + 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, 0x12, 0x04, 0x83, 0x01, 0x06, 0x14, 0x0a, 0x0d, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x04, 0x83, 0x01, 0x15, 0x2a, 0x0a, 0x0d, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x04, 0x83, 0x01, 0x35, 0x4b, 0x0a, 0x44, 0x0a, 0x04, 0x06, + 0x00, 0x02, 0x01, 0x12, 0x04, 0x86, 0x01, 0x02, 0x4d, 0x1a, 0x36, 0x20, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, + 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x04, 0x86, 0x01, 0x06, 0x14, + 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x04, 0x86, 0x01, 0x15, 0x2a, 0x0a, + 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x03, 0x12, 0x04, 0x86, 0x01, 0x35, 0x4b, 0x0a, 0x48, + 0x0a, 0x04, 0x06, 0x00, 0x02, 0x02, 0x12, 0x04, 0x89, 0x01, 0x02, 0x44, 0x1a, 0x3a, 0x20, 0x47, + 0x65, 0x74, 0x73, 0x20, 0x61, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, + 0x72, 0x6f, 0x6d, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, + 0x01, 0x12, 0x04, 0x89, 0x01, 0x06, 0x11, 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x02, + 0x12, 0x04, 0x89, 0x01, 0x12, 0x24, 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x03, 0x12, + 0x04, 0x89, 0x01, 0x2f, 0x42, 0x0a, 0x4e, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, 0x04, 0x8c, + 0x01, 0x02, 0x4a, 0x1a, 0x40, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, 0x04, + 0x8c, 0x01, 0x06, 0x13, 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x04, 0x8c, + 0x01, 0x14, 0x28, 0x0a, 0x0d, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x03, 0x12, 0x04, 0x8c, 0x01, + 0x33, 0x48, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +]; +include!("unitycatalog.functions.v1.serde.rs"); +// @@protoc_insertion_point(module) \ No newline at end of file diff --git a/models/src/gen/unitycatalog.functions.v1.serde.rs b/models/src/gen/unitycatalog.functions.v1.serde.rs new file mode 100644 index 0000000..03bfabb --- /dev/null +++ b/models/src/gen/unitycatalog.functions.v1.serde.rs @@ -0,0 +1,2550 @@ +// @generated +impl serde::Serialize for CreateFunction { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if !self.catalog_name.is_empty() { + len += 1; + } + if !self.schema_name.is_empty() { + len += 1; + } + if self.input_params.is_some() { + len += 1; + } + if self.data_type != 0 { + len += 1; + } + if !self.full_data_type.is_empty() { + len += 1; + } + if self.return_params.is_some() { + len += 1; + } + if !self.routine_body.is_empty() { + len += 1; + } + if !self.routine_definition.is_empty() { + len += 1; + } + if self.routine_dependencies.is_some() { + len += 1; + } + if !self.parameter_style.is_empty() { + len += 1; + } + if self.is_deterministic { + len += 1; + } + if !self.sql_data_access.is_empty() { + len += 1; + } + if self.is_null_call { + len += 1; + } + if !self.security_type.is_empty() { + len += 1; + } + if !self.specific_name.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if !self.properties.is_empty() { + len += 1; + } + if !self.full_name.is_empty() { + len += 1; + } + if !self.external_language.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.CreateFunction", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if !self.schema_name.is_empty() { + struct_ser.serialize_field("schemaName", &self.schema_name)?; + } + if let Some(v) = self.input_params.as_ref() { + struct_ser.serialize_field("inputParams", v)?; + } + if self.data_type != 0 { + let v = super::super::tables::v1::ColumnTypeName::try_from(self.data_type) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.data_type)))?; + struct_ser.serialize_field("dataType", &v)?; + } + if !self.full_data_type.is_empty() { + struct_ser.serialize_field("fullDataType", &self.full_data_type)?; + } + if let Some(v) = self.return_params.as_ref() { + struct_ser.serialize_field("returnParams", v)?; + } + if !self.routine_body.is_empty() { + struct_ser.serialize_field("routineBody", &self.routine_body)?; + } + if !self.routine_definition.is_empty() { + struct_ser.serialize_field("routineDefinition", &self.routine_definition)?; + } + if let Some(v) = self.routine_dependencies.as_ref() { + struct_ser.serialize_field("routineDependencies", v)?; + } + if !self.parameter_style.is_empty() { + struct_ser.serialize_field("parameterStyle", &self.parameter_style)?; + } + if self.is_deterministic { + struct_ser.serialize_field("isDeterministic", &self.is_deterministic)?; + } + if !self.sql_data_access.is_empty() { + struct_ser.serialize_field("sqlDataAccess", &self.sql_data_access)?; + } + if self.is_null_call { + struct_ser.serialize_field("isNullCall", &self.is_null_call)?; + } + if !self.security_type.is_empty() { + struct_ser.serialize_field("securityType", &self.security_type)?; + } + if !self.specific_name.is_empty() { + struct_ser.serialize_field("specificName", &self.specific_name)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if !self.properties.is_empty() { + struct_ser.serialize_field("properties", &self.properties)?; + } + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + if !self.external_language.is_empty() { + struct_ser.serialize_field("externalLanguage", &self.external_language)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateFunction { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "catalog_name", + "catalogName", + "schema_name", + "schemaName", + "input_params", + "inputParams", + "data_type", + "dataType", + "full_data_type", + "fullDataType", + "return_params", + "returnParams", + "routine_body", + "routineBody", + "routine_definition", + "routineDefinition", + "routine_dependencies", + "routineDependencies", + "parameter_style", + "parameterStyle", + "is_deterministic", + "isDeterministic", + "sql_data_access", + "sqlDataAccess", + "is_null_call", + "isNullCall", + "security_type", + "securityType", + "specific_name", + "specificName", + "comment", + "properties", + "full_name", + "fullName", + "external_language", + "externalLanguage", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + CatalogName, + SchemaName, + InputParams, + DataType, + FullDataType, + ReturnParams, + RoutineBody, + RoutineDefinition, + RoutineDependencies, + ParameterStyle, + IsDeterministic, + SqlDataAccess, + IsNullCall, + SecurityType, + SpecificName, + Comment, + Properties, + FullName, + ExternalLanguage, + } + 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 { + "name" => Ok(GeneratedField::Name), + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "schemaName" | "schema_name" => Ok(GeneratedField::SchemaName), + "inputParams" | "input_params" => Ok(GeneratedField::InputParams), + "dataType" | "data_type" => Ok(GeneratedField::DataType), + "fullDataType" | "full_data_type" => Ok(GeneratedField::FullDataType), + "returnParams" | "return_params" => Ok(GeneratedField::ReturnParams), + "routineBody" | "routine_body" => Ok(GeneratedField::RoutineBody), + "routineDefinition" | "routine_definition" => Ok(GeneratedField::RoutineDefinition), + "routineDependencies" | "routine_dependencies" => Ok(GeneratedField::RoutineDependencies), + "parameterStyle" | "parameter_style" => Ok(GeneratedField::ParameterStyle), + "isDeterministic" | "is_deterministic" => Ok(GeneratedField::IsDeterministic), + "sqlDataAccess" | "sql_data_access" => Ok(GeneratedField::SqlDataAccess), + "isNullCall" | "is_null_call" => Ok(GeneratedField::IsNullCall), + "securityType" | "security_type" => Ok(GeneratedField::SecurityType), + "specificName" | "specific_name" => Ok(GeneratedField::SpecificName), + "comment" => Ok(GeneratedField::Comment), + "properties" => Ok(GeneratedField::Properties), + "fullName" | "full_name" => Ok(GeneratedField::FullName), + "externalLanguage" | "external_language" => Ok(GeneratedField::ExternalLanguage), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateFunction; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.CreateFunction") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut catalog_name__ = None; + let mut schema_name__ = None; + let mut input_params__ = None; + let mut data_type__ = None; + let mut full_data_type__ = None; + let mut return_params__ = None; + let mut routine_body__ = None; + let mut routine_definition__ = None; + let mut routine_dependencies__ = None; + let mut parameter_style__ = None; + let mut is_deterministic__ = None; + let mut sql_data_access__ = None; + let mut is_null_call__ = None; + let mut security_type__ = None; + let mut specific_name__ = None; + let mut comment__ = None; + let mut properties__ = None; + let mut full_name__ = None; + let mut external_language__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::SchemaName => { + if schema_name__.is_some() { + return Err(serde::de::Error::duplicate_field("schemaName")); + } + schema_name__ = Some(map_.next_value()?); + } + GeneratedField::InputParams => { + if input_params__.is_some() { + return Err(serde::de::Error::duplicate_field("inputParams")); + } + input_params__ = map_.next_value()?; + } + GeneratedField::DataType => { + if data_type__.is_some() { + return Err(serde::de::Error::duplicate_field("dataType")); + } + data_type__ = Some(map_.next_value::()? as i32); + } + GeneratedField::FullDataType => { + if full_data_type__.is_some() { + return Err(serde::de::Error::duplicate_field("fullDataType")); + } + full_data_type__ = Some(map_.next_value()?); + } + GeneratedField::ReturnParams => { + if return_params__.is_some() { + return Err(serde::de::Error::duplicate_field("returnParams")); + } + return_params__ = map_.next_value()?; + } + GeneratedField::RoutineBody => { + if routine_body__.is_some() { + return Err(serde::de::Error::duplicate_field("routineBody")); + } + routine_body__ = Some(map_.next_value()?); + } + GeneratedField::RoutineDefinition => { + if routine_definition__.is_some() { + return Err(serde::de::Error::duplicate_field("routineDefinition")); + } + routine_definition__ = Some(map_.next_value()?); + } + GeneratedField::RoutineDependencies => { + if routine_dependencies__.is_some() { + return Err(serde::de::Error::duplicate_field("routineDependencies")); + } + routine_dependencies__ = map_.next_value()?; + } + GeneratedField::ParameterStyle => { + if parameter_style__.is_some() { + return Err(serde::de::Error::duplicate_field("parameterStyle")); + } + parameter_style__ = Some(map_.next_value()?); + } + GeneratedField::IsDeterministic => { + if is_deterministic__.is_some() { + return Err(serde::de::Error::duplicate_field("isDeterministic")); + } + is_deterministic__ = Some(map_.next_value()?); + } + GeneratedField::SqlDataAccess => { + if sql_data_access__.is_some() { + return Err(serde::de::Error::duplicate_field("sqlDataAccess")); + } + sql_data_access__ = Some(map_.next_value()?); + } + GeneratedField::IsNullCall => { + if is_null_call__.is_some() { + return Err(serde::de::Error::duplicate_field("isNullCall")); + } + is_null_call__ = Some(map_.next_value()?); + } + GeneratedField::SecurityType => { + if security_type__.is_some() { + return Err(serde::de::Error::duplicate_field("securityType")); + } + security_type__ = Some(map_.next_value()?); + } + GeneratedField::SpecificName => { + if specific_name__.is_some() { + return Err(serde::de::Error::duplicate_field("specificName")); + } + specific_name__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Properties => { + if properties__.is_some() { + return Err(serde::de::Error::duplicate_field("properties")); + } + properties__ = Some( + map_.next_value::>()? + ); + } + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + GeneratedField::ExternalLanguage => { + if external_language__.is_some() { + return Err(serde::de::Error::duplicate_field("externalLanguage")); + } + external_language__ = Some(map_.next_value()?); + } + } + } + Ok(CreateFunction { + name: name__.unwrap_or_default(), + catalog_name: catalog_name__.unwrap_or_default(), + schema_name: schema_name__.unwrap_or_default(), + input_params: input_params__, + data_type: data_type__.unwrap_or_default(), + full_data_type: full_data_type__.unwrap_or_default(), + return_params: return_params__, + routine_body: routine_body__.unwrap_or_default(), + routine_definition: routine_definition__.unwrap_or_default(), + routine_dependencies: routine_dependencies__, + parameter_style: parameter_style__.unwrap_or_default(), + is_deterministic: is_deterministic__.unwrap_or_default(), + sql_data_access: sql_data_access__.unwrap_or_default(), + is_null_call: is_null_call__.unwrap_or_default(), + security_type: security_type__.unwrap_or_default(), + specific_name: specific_name__.unwrap_or_default(), + comment: comment__, + properties: properties__.unwrap_or_default(), + full_name: full_name__.unwrap_or_default(), + external_language: external_language__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.CreateFunction", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateFunctionRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.function_info.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.CreateFunctionRequest", len)?; + if let Some(v) = self.function_info.as_ref() { + struct_ser.serialize_field("functionInfo", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateFunctionRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "function_info", + "functionInfo", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + FunctionInfo, + } + 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 { + "functionInfo" | "function_info" => Ok(GeneratedField::FunctionInfo), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateFunctionRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.CreateFunctionRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut function_info__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::FunctionInfo => { + if function_info__.is_some() { + return Err(serde::de::Error::duplicate_field("functionInfo")); + } + function_info__ = map_.next_value()?; + } + } + } + Ok(CreateFunctionRequest { + function_info: function_info__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.CreateFunctionRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateFunctionResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.function.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.CreateFunctionResponse", len)?; + if let Some(v) = self.function.as_ref() { + struct_ser.serialize_field("function", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateFunctionResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "function", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Function, + } + 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 { + "function" => Ok(GeneratedField::Function), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateFunctionResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.CreateFunctionResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut function__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Function => { + if function__.is_some() { + return Err(serde::de::Error::duplicate_field("function")); + } + function__ = map_.next_value()?; + } + } + } + Ok(CreateFunctionResponse { + function: function__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.CreateFunctionResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteFunctionRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.DeleteFunctionRequest", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteFunctionRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + } + 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 { + "name" => Ok(GeneratedField::Name), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteFunctionRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.DeleteFunctionRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + } + } + Ok(DeleteFunctionRequest { + name: name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.DeleteFunctionRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteFunctionResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let len = 0; + let struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.DeleteFunctionResponse", len)?; + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteFunctionResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + } + 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, + { + Err(serde::de::Error::unknown_field(value, FIELDS)) + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteFunctionResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.DeleteFunctionResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; + } + Ok(DeleteFunctionResponse { + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.DeleteFunctionResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for Dependency { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.dependency.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.Dependency", len)?; + if let Some(v) = self.dependency.as_ref() { + match v { + dependency::Dependency::Table(v) => { + struct_ser.serialize_field("table", v)?; + } + dependency::Dependency::Function(v) => { + struct_ser.serialize_field("function", v)?; + } + } + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for Dependency { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "table", + "function", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Table, + Function, + } + 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 { + "table" => Ok(GeneratedField::Table), + "function" => Ok(GeneratedField::Function), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = Dependency; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.Dependency") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut dependency__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Table => { + if dependency__.is_some() { + return Err(serde::de::Error::duplicate_field("table")); + } + dependency__ = map_.next_value::<::std::option::Option<_>>()?.map(dependency::Dependency::Table) +; + } + GeneratedField::Function => { + if dependency__.is_some() { + return Err(serde::de::Error::duplicate_field("function")); + } + dependency__ = map_.next_value::<::std::option::Option<_>>()?.map(dependency::Dependency::Function) +; + } + } + } + Ok(Dependency { + dependency: dependency__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.Dependency", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DependencyList { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.dependencies.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.DependencyList", len)?; + if !self.dependencies.is_empty() { + struct_ser.serialize_field("dependencies", &self.dependencies)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DependencyList { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "dependencies", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Dependencies, + } + 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 { + "dependencies" => Ok(GeneratedField::Dependencies), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DependencyList; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.DependencyList") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut dependencies__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Dependencies => { + if dependencies__.is_some() { + return Err(serde::de::Error::duplicate_field("dependencies")); + } + dependencies__ = Some(map_.next_value()?); + } + } + } + Ok(DependencyList { + dependencies: dependencies__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.DependencyList", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for FunctionDependency { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.function_full_name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.FunctionDependency", len)?; + if !self.function_full_name.is_empty() { + struct_ser.serialize_field("functionFullName", &self.function_full_name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for FunctionDependency { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "function_full_name", + "functionFullName", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + FunctionFullName, + } + 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 { + "functionFullName" | "function_full_name" => Ok(GeneratedField::FunctionFullName), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = FunctionDependency; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.FunctionDependency") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut function_full_name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::FunctionFullName => { + if function_full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("functionFullName")); + } + function_full_name__ = Some(map_.next_value()?); + } + } + } + Ok(FunctionDependency { + function_full_name: function_full_name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.FunctionDependency", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for FunctionInfo { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if !self.catalog_name.is_empty() { + len += 1; + } + if !self.schema_name.is_empty() { + len += 1; + } + if self.input_params.is_some() { + len += 1; + } + if self.data_type != 0 { + len += 1; + } + if !self.full_data_type.is_empty() { + len += 1; + } + if self.return_params.is_some() { + len += 1; + } + if !self.routine_body.is_empty() { + len += 1; + } + if !self.routine_definition.is_empty() { + len += 1; + } + if self.routine_dependencies.is_some() { + len += 1; + } + if !self.parameter_style.is_empty() { + len += 1; + } + if self.is_deterministic { + len += 1; + } + if !self.sql_data_access.is_empty() { + len += 1; + } + if self.is_null_call { + len += 1; + } + if !self.security_type.is_empty() { + len += 1; + } + if !self.specific_name.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if !self.properties.is_empty() { + len += 1; + } + if !self.full_name.is_empty() { + len += 1; + } + if !self.external_language.is_empty() { + len += 1; + } + if self.created_at != 0 { + len += 1; + } + if self.updated_at != 0 { + len += 1; + } + if !self.function_id.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.FunctionInfo", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if !self.schema_name.is_empty() { + struct_ser.serialize_field("schemaName", &self.schema_name)?; + } + if let Some(v) = self.input_params.as_ref() { + struct_ser.serialize_field("inputParams", v)?; + } + if self.data_type != 0 { + let v = super::super::tables::v1::ColumnTypeName::try_from(self.data_type) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.data_type)))?; + struct_ser.serialize_field("dataType", &v)?; + } + if !self.full_data_type.is_empty() { + struct_ser.serialize_field("fullDataType", &self.full_data_type)?; + } + if let Some(v) = self.return_params.as_ref() { + struct_ser.serialize_field("returnParams", v)?; + } + if !self.routine_body.is_empty() { + struct_ser.serialize_field("routineBody", &self.routine_body)?; + } + if !self.routine_definition.is_empty() { + struct_ser.serialize_field("routineDefinition", &self.routine_definition)?; + } + if let Some(v) = self.routine_dependencies.as_ref() { + struct_ser.serialize_field("routineDependencies", v)?; + } + if !self.parameter_style.is_empty() { + struct_ser.serialize_field("parameterStyle", &self.parameter_style)?; + } + if self.is_deterministic { + struct_ser.serialize_field("isDeterministic", &self.is_deterministic)?; + } + if !self.sql_data_access.is_empty() { + struct_ser.serialize_field("sqlDataAccess", &self.sql_data_access)?; + } + if self.is_null_call { + struct_ser.serialize_field("isNullCall", &self.is_null_call)?; + } + if !self.security_type.is_empty() { + struct_ser.serialize_field("securityType", &self.security_type)?; + } + if !self.specific_name.is_empty() { + struct_ser.serialize_field("specificName", &self.specific_name)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if !self.properties.is_empty() { + struct_ser.serialize_field("properties", &self.properties)?; + } + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + if !self.external_language.is_empty() { + struct_ser.serialize_field("externalLanguage", &self.external_language)?; + } + if self.created_at != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("createdAt", ToString::to_string(&self.created_at).as_str())?; + } + if self.updated_at != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("updatedAt", ToString::to_string(&self.updated_at).as_str())?; + } + if !self.function_id.is_empty() { + struct_ser.serialize_field("functionId", &self.function_id)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for FunctionInfo { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "catalog_name", + "catalogName", + "schema_name", + "schemaName", + "input_params", + "inputParams", + "data_type", + "dataType", + "full_data_type", + "fullDataType", + "return_params", + "returnParams", + "routine_body", + "routineBody", + "routine_definition", + "routineDefinition", + "routine_dependencies", + "routineDependencies", + "parameter_style", + "parameterStyle", + "is_deterministic", + "isDeterministic", + "sql_data_access", + "sqlDataAccess", + "is_null_call", + "isNullCall", + "security_type", + "securityType", + "specific_name", + "specificName", + "comment", + "properties", + "full_name", + "fullName", + "external_language", + "externalLanguage", + "created_at", + "createdAt", + "updated_at", + "updatedAt", + "function_id", + "functionId", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + CatalogName, + SchemaName, + InputParams, + DataType, + FullDataType, + ReturnParams, + RoutineBody, + RoutineDefinition, + RoutineDependencies, + ParameterStyle, + IsDeterministic, + SqlDataAccess, + IsNullCall, + SecurityType, + SpecificName, + Comment, + Properties, + FullName, + ExternalLanguage, + CreatedAt, + UpdatedAt, + FunctionId, + } + 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 { + "name" => Ok(GeneratedField::Name), + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "schemaName" | "schema_name" => Ok(GeneratedField::SchemaName), + "inputParams" | "input_params" => Ok(GeneratedField::InputParams), + "dataType" | "data_type" => Ok(GeneratedField::DataType), + "fullDataType" | "full_data_type" => Ok(GeneratedField::FullDataType), + "returnParams" | "return_params" => Ok(GeneratedField::ReturnParams), + "routineBody" | "routine_body" => Ok(GeneratedField::RoutineBody), + "routineDefinition" | "routine_definition" => Ok(GeneratedField::RoutineDefinition), + "routineDependencies" | "routine_dependencies" => Ok(GeneratedField::RoutineDependencies), + "parameterStyle" | "parameter_style" => Ok(GeneratedField::ParameterStyle), + "isDeterministic" | "is_deterministic" => Ok(GeneratedField::IsDeterministic), + "sqlDataAccess" | "sql_data_access" => Ok(GeneratedField::SqlDataAccess), + "isNullCall" | "is_null_call" => Ok(GeneratedField::IsNullCall), + "securityType" | "security_type" => Ok(GeneratedField::SecurityType), + "specificName" | "specific_name" => Ok(GeneratedField::SpecificName), + "comment" => Ok(GeneratedField::Comment), + "properties" => Ok(GeneratedField::Properties), + "fullName" | "full_name" => Ok(GeneratedField::FullName), + "externalLanguage" | "external_language" => Ok(GeneratedField::ExternalLanguage), + "createdAt" | "created_at" => Ok(GeneratedField::CreatedAt), + "updatedAt" | "updated_at" => Ok(GeneratedField::UpdatedAt), + "functionId" | "function_id" => Ok(GeneratedField::FunctionId), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = FunctionInfo; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.FunctionInfo") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut catalog_name__ = None; + let mut schema_name__ = None; + let mut input_params__ = None; + let mut data_type__ = None; + let mut full_data_type__ = None; + let mut return_params__ = None; + let mut routine_body__ = None; + let mut routine_definition__ = None; + let mut routine_dependencies__ = None; + let mut parameter_style__ = None; + let mut is_deterministic__ = None; + let mut sql_data_access__ = None; + let mut is_null_call__ = None; + let mut security_type__ = None; + let mut specific_name__ = None; + let mut comment__ = None; + let mut properties__ = None; + let mut full_name__ = None; + let mut external_language__ = None; + let mut created_at__ = None; + let mut updated_at__ = None; + let mut function_id__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::SchemaName => { + if schema_name__.is_some() { + return Err(serde::de::Error::duplicate_field("schemaName")); + } + schema_name__ = Some(map_.next_value()?); + } + GeneratedField::InputParams => { + if input_params__.is_some() { + return Err(serde::de::Error::duplicate_field("inputParams")); + } + input_params__ = map_.next_value()?; + } + GeneratedField::DataType => { + if data_type__.is_some() { + return Err(serde::de::Error::duplicate_field("dataType")); + } + data_type__ = Some(map_.next_value::()? as i32); + } + GeneratedField::FullDataType => { + if full_data_type__.is_some() { + return Err(serde::de::Error::duplicate_field("fullDataType")); + } + full_data_type__ = Some(map_.next_value()?); + } + GeneratedField::ReturnParams => { + if return_params__.is_some() { + return Err(serde::de::Error::duplicate_field("returnParams")); + } + return_params__ = map_.next_value()?; + } + GeneratedField::RoutineBody => { + if routine_body__.is_some() { + return Err(serde::de::Error::duplicate_field("routineBody")); + } + routine_body__ = Some(map_.next_value()?); + } + GeneratedField::RoutineDefinition => { + if routine_definition__.is_some() { + return Err(serde::de::Error::duplicate_field("routineDefinition")); + } + routine_definition__ = Some(map_.next_value()?); + } + GeneratedField::RoutineDependencies => { + if routine_dependencies__.is_some() { + return Err(serde::de::Error::duplicate_field("routineDependencies")); + } + routine_dependencies__ = map_.next_value()?; + } + GeneratedField::ParameterStyle => { + if parameter_style__.is_some() { + return Err(serde::de::Error::duplicate_field("parameterStyle")); + } + parameter_style__ = Some(map_.next_value()?); + } + GeneratedField::IsDeterministic => { + if is_deterministic__.is_some() { + return Err(serde::de::Error::duplicate_field("isDeterministic")); + } + is_deterministic__ = Some(map_.next_value()?); + } + GeneratedField::SqlDataAccess => { + if sql_data_access__.is_some() { + return Err(serde::de::Error::duplicate_field("sqlDataAccess")); + } + sql_data_access__ = Some(map_.next_value()?); + } + GeneratedField::IsNullCall => { + if is_null_call__.is_some() { + return Err(serde::de::Error::duplicate_field("isNullCall")); + } + is_null_call__ = Some(map_.next_value()?); + } + GeneratedField::SecurityType => { + if security_type__.is_some() { + return Err(serde::de::Error::duplicate_field("securityType")); + } + security_type__ = Some(map_.next_value()?); + } + GeneratedField::SpecificName => { + if specific_name__.is_some() { + return Err(serde::de::Error::duplicate_field("specificName")); + } + specific_name__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Properties => { + if properties__.is_some() { + return Err(serde::de::Error::duplicate_field("properties")); + } + properties__ = Some( + map_.next_value::>()? + ); + } + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + GeneratedField::ExternalLanguage => { + if external_language__.is_some() { + return Err(serde::de::Error::duplicate_field("externalLanguage")); + } + external_language__ = Some(map_.next_value()?); + } + GeneratedField::CreatedAt => { + if created_at__.is_some() { + return Err(serde::de::Error::duplicate_field("createdAt")); + } + created_at__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::UpdatedAt => { + if updated_at__.is_some() { + return Err(serde::de::Error::duplicate_field("updatedAt")); + } + updated_at__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::FunctionId => { + if function_id__.is_some() { + return Err(serde::de::Error::duplicate_field("functionId")); + } + function_id__ = Some(map_.next_value()?); + } + } + } + Ok(FunctionInfo { + name: name__.unwrap_or_default(), + catalog_name: catalog_name__.unwrap_or_default(), + schema_name: schema_name__.unwrap_or_default(), + input_params: input_params__, + data_type: data_type__.unwrap_or_default(), + full_data_type: full_data_type__.unwrap_or_default(), + return_params: return_params__, + routine_body: routine_body__.unwrap_or_default(), + routine_definition: routine_definition__.unwrap_or_default(), + routine_dependencies: routine_dependencies__, + parameter_style: parameter_style__.unwrap_or_default(), + is_deterministic: is_deterministic__.unwrap_or_default(), + sql_data_access: sql_data_access__.unwrap_or_default(), + is_null_call: is_null_call__.unwrap_or_default(), + security_type: security_type__.unwrap_or_default(), + specific_name: specific_name__.unwrap_or_default(), + comment: comment__, + properties: properties__.unwrap_or_default(), + full_name: full_name__.unwrap_or_default(), + external_language: external_language__.unwrap_or_default(), + created_at: created_at__.unwrap_or_default(), + updated_at: updated_at__.unwrap_or_default(), + function_id: function_id__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.FunctionInfo", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for FunctionParameterInfo { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if !self.type_text.is_empty() { + len += 1; + } + if !self.type_json.is_empty() { + len += 1; + } + if self.type_name != 0 { + len += 1; + } + if self.type_precision != 0 { + len += 1; + } + if self.type_scale != 0 { + len += 1; + } + if !self.type_interval_type.is_empty() { + len += 1; + } + if self.position != 0 { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.FunctionParameterInfo", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.type_text.is_empty() { + struct_ser.serialize_field("typeText", &self.type_text)?; + } + if !self.type_json.is_empty() { + struct_ser.serialize_field("typeJson", &self.type_json)?; + } + if self.type_name != 0 { + let v = super::super::tables::v1::ColumnTypeName::try_from(self.type_name) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.type_name)))?; + struct_ser.serialize_field("typeName", &v)?; + } + if self.type_precision != 0 { + struct_ser.serialize_field("typePrecision", &self.type_precision)?; + } + if self.type_scale != 0 { + struct_ser.serialize_field("typeScale", &self.type_scale)?; + } + if !self.type_interval_type.is_empty() { + struct_ser.serialize_field("typeIntervalType", &self.type_interval_type)?; + } + if self.position != 0 { + struct_ser.serialize_field("position", &self.position)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for FunctionParameterInfo { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "type_text", + "typeText", + "type_json", + "typeJson", + "type_name", + "typeName", + "type_precision", + "typePrecision", + "type_scale", + "typeScale", + "type_interval_type", + "typeIntervalType", + "position", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + TypeText, + TypeJson, + TypeName, + TypePrecision, + TypeScale, + TypeIntervalType, + Position, + } + 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 { + "name" => Ok(GeneratedField::Name), + "typeText" | "type_text" => Ok(GeneratedField::TypeText), + "typeJson" | "type_json" => Ok(GeneratedField::TypeJson), + "typeName" | "type_name" => Ok(GeneratedField::TypeName), + "typePrecision" | "type_precision" => Ok(GeneratedField::TypePrecision), + "typeScale" | "type_scale" => Ok(GeneratedField::TypeScale), + "typeIntervalType" | "type_interval_type" => Ok(GeneratedField::TypeIntervalType), + "position" => Ok(GeneratedField::Position), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = FunctionParameterInfo; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.FunctionParameterInfo") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut type_text__ = None; + let mut type_json__ = None; + let mut type_name__ = None; + let mut type_precision__ = None; + let mut type_scale__ = None; + let mut type_interval_type__ = None; + let mut position__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::TypeText => { + if type_text__.is_some() { + return Err(serde::de::Error::duplicate_field("typeText")); + } + type_text__ = Some(map_.next_value()?); + } + GeneratedField::TypeJson => { + if type_json__.is_some() { + return Err(serde::de::Error::duplicate_field("typeJson")); + } + type_json__ = Some(map_.next_value()?); + } + GeneratedField::TypeName => { + if type_name__.is_some() { + return Err(serde::de::Error::duplicate_field("typeName")); + } + type_name__ = Some(map_.next_value::()? as i32); + } + GeneratedField::TypePrecision => { + if type_precision__.is_some() { + return Err(serde::de::Error::duplicate_field("typePrecision")); + } + type_precision__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::TypeScale => { + if type_scale__.is_some() { + return Err(serde::de::Error::duplicate_field("typeScale")); + } + type_scale__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::TypeIntervalType => { + if type_interval_type__.is_some() { + return Err(serde::de::Error::duplicate_field("typeIntervalType")); + } + type_interval_type__ = Some(map_.next_value()?); + } + GeneratedField::Position => { + if position__.is_some() { + return Err(serde::de::Error::duplicate_field("position")); + } + position__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + } + } + Ok(FunctionParameterInfo { + name: name__.unwrap_or_default(), + type_text: type_text__.unwrap_or_default(), + type_json: type_json__.unwrap_or_default(), + type_name: type_name__.unwrap_or_default(), + type_precision: type_precision__.unwrap_or_default(), + type_scale: type_scale__.unwrap_or_default(), + type_interval_type: type_interval_type__.unwrap_or_default(), + position: position__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.FunctionParameterInfo", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for FunctionParameterInfos { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.parameters.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.FunctionParameterInfos", len)?; + if !self.parameters.is_empty() { + struct_ser.serialize_field("parameters", &self.parameters)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for FunctionParameterInfos { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "parameters", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Parameters, + } + 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 { + "parameters" => Ok(GeneratedField::Parameters), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = FunctionParameterInfos; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.FunctionParameterInfos") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut parameters__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Parameters => { + if parameters__.is_some() { + return Err(serde::de::Error::duplicate_field("parameters")); + } + parameters__ = Some(map_.next_value()?); + } + } + } + Ok(FunctionParameterInfos { + parameters: parameters__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.FunctionParameterInfos", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for FunctionParameterMode { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + let variant = match self { + Self::Unspecified => "FUNCTION_PARAMETER_MODE_UNSPECIFIED", + }; + serializer.serialize_str(variant) + } +} +impl<'de> serde::Deserialize<'de> for FunctionParameterMode { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "FUNCTION_PARAMETER_MODE_UNSPECIFIED", + ]; + + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = FunctionParameterMode; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + fn visit_i64(self, v: i64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) + }) + } + + fn visit_u64(self, v: u64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) + }) + } + + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "FUNCTION_PARAMETER_MODE_UNSPECIFIED" => Ok(FunctionParameterMode::Unspecified), + _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), + } + } + } + deserializer.deserialize_any(GeneratedVisitor) + } +} +impl serde::Serialize for FunctionParameterType { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + let variant = match self { + Self::Unspecified => "FUNCTION_PARAMETER_TYPE_UNSPECIFIED", + }; + serializer.serialize_str(variant) + } +} +impl<'de> serde::Deserialize<'de> for FunctionParameterType { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "FUNCTION_PARAMETER_TYPE_UNSPECIFIED", + ]; + + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = FunctionParameterType; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + fn visit_i64(self, v: i64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) + }) + } + + fn visit_u64(self, v: u64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) + }) + } + + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "FUNCTION_PARAMETER_TYPE_UNSPECIFIED" => Ok(FunctionParameterType::Unspecified), + _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), + } + } + } + deserializer.deserialize_any(GeneratedVisitor) + } +} +impl serde::Serialize for GetFunctionRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.GetFunctionRequest", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetFunctionRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + } + 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 { + "name" => Ok(GeneratedField::Name), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetFunctionRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.GetFunctionRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + } + } + Ok(GetFunctionRequest { + name: name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.GetFunctionRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetFunctionResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.function.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.GetFunctionResponse", len)?; + if let Some(v) = self.function.as_ref() { + struct_ser.serialize_field("function", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetFunctionResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "function", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Function, + } + 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 { + "function" => Ok(GeneratedField::Function), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetFunctionResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.GetFunctionResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut function__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Function => { + if function__.is_some() { + return Err(serde::de::Error::duplicate_field("function")); + } + function__ = map_.next_value()?; + } + } + } + Ok(GetFunctionResponse { + function: function__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.GetFunctionResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListFunctionsRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.catalog_name.is_empty() { + len += 1; + } + if !self.schema_name.is_empty() { + len += 1; + } + if self.max_results.is_some() { + len += 1; + } + if self.page_token.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.ListFunctionsRequest", len)?; + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if !self.schema_name.is_empty() { + struct_ser.serialize_field("schemaName", &self.schema_name)?; + } + if let Some(v) = self.max_results.as_ref() { + struct_ser.serialize_field("maxResults", v)?; + } + if let Some(v) = self.page_token.as_ref() { + struct_ser.serialize_field("pageToken", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListFunctionsRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "catalog_name", + "catalogName", + "schema_name", + "schemaName", + "max_results", + "maxResults", + "page_token", + "pageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + CatalogName, + SchemaName, + MaxResults, + PageToken, + } + 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 { + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "schemaName" | "schema_name" => Ok(GeneratedField::SchemaName), + "maxResults" | "max_results" => Ok(GeneratedField::MaxResults), + "pageToken" | "page_token" => Ok(GeneratedField::PageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListFunctionsRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.ListFunctionsRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut catalog_name__ = None; + let mut schema_name__ = None; + let mut max_results__ = None; + let mut page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::SchemaName => { + if schema_name__.is_some() { + return Err(serde::de::Error::duplicate_field("schemaName")); + } + schema_name__ = Some(map_.next_value()?); + } + GeneratedField::MaxResults => { + if max_results__.is_some() { + return Err(serde::de::Error::duplicate_field("maxResults")); + } + max_results__ = + map_.next_value::<::std::option::Option<::pbjson::private::NumberDeserialize<_>>>()?.map(|x| x.0) + ; + } + GeneratedField::PageToken => { + if page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("pageToken")); + } + page_token__ = map_.next_value()?; + } + } + } + Ok(ListFunctionsRequest { + catalog_name: catalog_name__.unwrap_or_default(), + schema_name: schema_name__.unwrap_or_default(), + max_results: max_results__, + page_token: page_token__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.ListFunctionsRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListFunctionsResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.functions.is_empty() { + len += 1; + } + if self.next_page_token.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.ListFunctionsResponse", len)?; + if !self.functions.is_empty() { + struct_ser.serialize_field("functions", &self.functions)?; + } + if let Some(v) = self.next_page_token.as_ref() { + struct_ser.serialize_field("nextPageToken", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListFunctionsResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "functions", + "next_page_token", + "nextPageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Functions, + NextPageToken, + } + 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 { + "functions" => Ok(GeneratedField::Functions), + "nextPageToken" | "next_page_token" => Ok(GeneratedField::NextPageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListFunctionsResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.ListFunctionsResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut functions__ = None; + let mut next_page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Functions => { + if functions__.is_some() { + return Err(serde::de::Error::duplicate_field("functions")); + } + functions__ = Some(map_.next_value()?); + } + GeneratedField::NextPageToken => { + if next_page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("nextPageToken")); + } + next_page_token__ = map_.next_value()?; + } + } + } + Ok(ListFunctionsResponse { + functions: functions__.unwrap_or_default(), + next_page_token: next_page_token__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.ListFunctionsResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for TableDependency { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.table_full_name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.functions.v1.TableDependency", len)?; + if !self.table_full_name.is_empty() { + struct_ser.serialize_field("tableFullName", &self.table_full_name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for TableDependency { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "table_full_name", + "tableFullName", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TableFullName, + } + 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 { + "tableFullName" | "table_full_name" => Ok(GeneratedField::TableFullName), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TableDependency; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.functions.v1.TableDependency") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut table_full_name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TableFullName => { + if table_full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("tableFullName")); + } + table_full_name__ = Some(map_.next_value()?); + } + } + } + Ok(TableDependency { + table_full_name: table_full_name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.functions.v1.TableDependency", FIELDS, GeneratedVisitor) + } +} diff --git a/models/src/gen/unitycatalog.schemas.v1.rs b/models/src/gen/unitycatalog.schemas.v1.rs new file mode 100644 index 0000000..4db6de4 --- /dev/null +++ b/models/src/gen/unitycatalog.schemas.v1.rs @@ -0,0 +1,578 @@ +// @generated +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SchemaInfo { + /// Name of the schema, relative to its parent catalog. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Name of parent catalog. + #[prost(string, tag="2")] + pub catalog_name: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="3")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// JSON-serialized key-value pair map, encoded (escaped) as a string. + #[prost(map="string, string", tag="4")] + pub properties: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, + /// Full name of schema, in form of catalog_name.schema_name + #[prost(string, tag="5")] + pub full_name: ::prost::alloc::string::String, + /// Time at which this schema was created, in epoch milliseconds. + #[prost(int64, tag="6")] + pub created_at: i64, + /// Time at which this schema was last updated, in epoch milliseconds. + #[prost(int64, tag="7")] + pub updated_at: i64, + /// Unique identifier for the schema. + #[prost(string, tag="8")] + pub schema_id: ::prost::alloc::string::String, +} +/// Creates a new schema in the specified catalog. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateSchemaRequest { + /// The name of the catalog. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + #[prost(string, tag="2")] + pub catalog_name: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="3")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// A map of key-value properties attached to the securable. + #[prost(map="string, string", tag="4")] + pub properties: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, +} +/// Response message for the CreateSchema method. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateSchemaResponse { + /// The created schema. + #[prost(message, optional, tag="1")] + pub schema: ::core::option::Option, +} +/// Deletes the specified schema from the parent catalog. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteSchemaRequest { + /// full_name + #[prost(string, tag="1")] + pub full_name: ::prost::alloc::string::String, +} +/// Response message for the DeleteSchema method. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteSchemaResponse { +} +/// Gets the specified schema for a catalog. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetSchemaRequest { + /// full_name + #[prost(string, tag="1")] + pub full_name: ::prost::alloc::string::String, +} +/// Response message for the GetSchema method. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetSchemaResponse { + /// The schema. + #[prost(message, optional, tag="1")] + pub schema: ::core::option::Option, +} +/// Gets an array of schemas for a catalog. +/// There is no guarantee of a specific ordering of the elements in the array. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListSchemasRequest { + /// The name of the catalog. + #[prost(string, tag="1")] + pub catalog_name: ::prost::alloc::string::String, + #[prost(int32, optional, tag="2")] + pub max_results: ::core::option::Option, + /// Specifies a page token to use. Set pageToken to the nextPageToken returned + /// by a previous list request to get the next page of results. + /// next_page_token will not be returned in a response if there are no more results available. + #[prost(string, optional, tag="3")] + pub page_token: ::core::option::Option<::prost::alloc::string::String>, +} +/// Response message for the ListSchemas method. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListSchemasResponse { + /// The list of schemas. + #[prost(message, repeated, tag="1")] + pub schemas: ::prost::alloc::vec::Vec, + /// A token to retrieve the next page of results. + /// To read the next page, pass this value as the page_token in the ListSchemasRequest + /// call. + #[prost(string, tag="2")] + pub next_page_token: ::prost::alloc::string::String, +} +/// Updates the specified schema. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateSchemaRequest { + /// The name of the schema. + #[prost(string, tag="1")] + pub full_name: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="3")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// A map of key-value properties attached to the securable. + #[prost(map="string, string", tag="4")] + pub properties: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, + #[prost(string, tag="5")] + pub new_name: ::prost::alloc::string::String, +} +/// Response message for the UpdateSchema method. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateSchemaResponse { + /// The updated schema. + #[prost(message, optional, tag="1")] + pub schema: ::core::option::Option, +} +/// Encoded file descriptor set for the `unitycatalog.schemas.v1` package +pub const FILE_DESCRIPTOR_SET: &[u8] = &[ + 0x0a, 0x91, 0x0c, 0x0a, 0x24, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, + 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x95, 0x03, 0x0a, 0x0a, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x0c, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x53, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x2e, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x66, + 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x24, 0x0a, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x49, 0x64, 0x1a, 0x3d, 0x0a, 0x0f, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x4a, 0x92, 0x08, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, + 0x1e, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, + 0x02, 0x12, 0x03, 0x02, 0x00, 0x20, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, + 0x25, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x06, 0x00, 0x1e, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x06, 0x08, 0x12, 0x0a, 0x42, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x00, 0x12, 0x03, 0x08, 0x02, 0x3c, 0x1a, 0x35, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2c, 0x20, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x08, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x08, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x08, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, + 0x12, 0x03, 0x08, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, + 0x0e, 0x02, 0x12, 0x03, 0x08, 0x13, 0x3a, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, + 0x03, 0x0b, 0x02, 0x44, 0x1a, 0x19, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x0b, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0b, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0b, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x01, 0x08, 0x12, 0x03, 0x0b, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x01, 0x08, + 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0b, 0x1b, 0x42, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x02, 0x12, 0x03, 0x0e, 0x02, 0x1e, 0x1a, 0x2b, 0x20, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, 0x0e, 0x02, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x0e, 0x0b, 0x11, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0e, 0x12, 0x19, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x0e, 0x1c, 0x1d, 0x0a, 0x51, 0x0a, 0x04, 0x04, + 0x00, 0x02, 0x03, 0x12, 0x03, 0x11, 0x02, 0x25, 0x1a, 0x44, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x2d, + 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x6b, 0x65, 0x79, 0x2d, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x20, 0x70, 0x61, 0x69, 0x72, 0x20, 0x6d, 0x61, 0x70, 0x2c, 0x20, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x28, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x29, + 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x11, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x11, 0x16, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x03, 0x03, 0x12, 0x03, 0x11, 0x23, 0x24, 0x0a, 0x47, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, + 0x12, 0x03, 0x14, 0x02, 0x17, 0x1a, 0x3a, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6e, 0x61, 0x6d, + 0x65, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2c, 0x20, 0x69, 0x6e, 0x20, + 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x05, 0x12, 0x03, 0x14, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x14, 0x09, 0x12, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x14, 0x15, 0x16, 0x0a, 0x4c, 0x0a, 0x04, 0x04, + 0x00, 0x02, 0x05, 0x12, 0x03, 0x17, 0x02, 0x17, 0x1a, 0x3f, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, + 0x61, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x20, 0x77, 0x61, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x69, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x05, 0x05, 0x12, 0x03, 0x17, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x01, + 0x12, 0x03, 0x17, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, + 0x17, 0x15, 0x16, 0x0a, 0x51, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x06, 0x12, 0x03, 0x1a, 0x02, 0x17, + 0x1a, 0x44, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x61, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x77, 0x61, 0x73, + 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x69, + 0x6e, 0x20, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x05, 0x12, + 0x03, 0x1a, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x1a, + 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x03, 0x12, 0x03, 0x1a, 0x15, 0x16, + 0x0a, 0x30, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x07, 0x12, 0x03, 0x1d, 0x02, 0x41, 0x1a, 0x23, 0x20, + 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x05, 0x12, 0x03, 0x1d, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x1d, 0x09, 0x12, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x03, 0x12, 0x03, 0x1d, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x07, 0x08, 0x12, 0x03, 0x1d, 0x17, 0x40, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, + 0x02, 0x07, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1d, 0x18, 0x3f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xc1, 0x2a, 0x0a, 0x21, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, + 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x24, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa6, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x0c, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x5c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, + 0x53, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x22, 0x3b, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x09, 0x66, + 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, + 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x50, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xb2, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0c, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, + 0x48, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x48, 0x00, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x70, + 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, + 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, + 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x7c, 0x0a, 0x13, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, + 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, + 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xa7, 0x02, 0x0a, 0x13, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x24, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x5c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, + 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x22, 0x53, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x32, 0xa4, 0x04, 0x0a, 0x0d, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2c, 0x2e, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2c, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x12, 0x29, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x12, 0x2b, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x2c, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0xff, + 0x1a, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x6c, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, + 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x20, 0x0a, 0x09, 0x0a, + 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, + 0x05, 0x00, 0x2e, 0x0a, 0x3c, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x08, 0x00, 0x13, 0x01, 0x1a, + 0x30, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, + 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x08, 0x08, 0x1b, 0x0a, 0x27, 0x0a, + 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0a, 0x02, 0x3c, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, + 0x03, 0x0a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0a, + 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x0a, 0x10, 0x11, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x0a, 0x12, 0x3b, 0x0a, 0x10, + 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0a, 0x13, 0x3a, + 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x0c, 0x02, 0x44, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x0c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0c, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x01, 0x03, 0x12, 0x03, 0x0c, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x08, + 0x12, 0x03, 0x0c, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x01, 0x08, 0x87, 0x09, + 0x0e, 0x02, 0x12, 0x03, 0x0c, 0x1b, 0x42, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, + 0x03, 0x0f, 0x02, 0x1e, 0x1a, 0x2b, 0x20, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, + 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x04, 0x12, 0x03, 0x0f, 0x02, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x0f, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x0f, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x0f, 0x1c, 0x1d, 0x0a, 0x47, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x03, 0x12, 0x03, 0x12, 0x02, 0x25, 0x1a, 0x3a, 0x20, 0x41, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x6f, + 0x66, 0x20, 0x6b, 0x65, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, + 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x12, 0x02, 0x15, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x12, 0x16, 0x20, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x12, 0x23, 0x24, 0x0a, 0x3b, 0x0a, 0x02, + 0x04, 0x01, 0x12, 0x04, 0x16, 0x00, 0x19, 0x01, 0x1a, 0x2f, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, + 0x12, 0x03, 0x16, 0x08, 0x1c, 0x0a, 0x22, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x18, + 0x02, 0x18, 0x1a, 0x15, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x00, 0x06, 0x12, 0x03, 0x18, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x18, 0x0d, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x18, 0x16, 0x17, 0x0a, 0x43, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x1c, 0x00, 0x1f, 0x01, 0x1a, + 0x37, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x66, + 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, + 0x03, 0x1c, 0x08, 0x1b, 0x0a, 0x18, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x1e, 0x02, + 0x41, 0x1a, 0x0b, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x1e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x1e, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x1e, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, + 0x08, 0x12, 0x03, 0x1e, 0x17, 0x40, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, + 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1e, 0x18, 0x3f, 0x0a, 0x3a, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x03, + 0x22, 0x00, 0x1f, 0x1a, 0x2f, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x22, 0x08, 0x1c, + 0x0a, 0x36, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x25, 0x00, 0x28, 0x01, 0x1a, 0x2a, 0x20, 0x47, + 0x65, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, + 0x03, 0x25, 0x08, 0x18, 0x0a, 0x18, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x27, 0x02, + 0x41, 0x1a, 0x0b, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, 0x03, 0x27, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x27, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x27, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, + 0x08, 0x12, 0x03, 0x27, 0x17, 0x40, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, + 0x09, 0x0e, 0x02, 0x12, 0x03, 0x27, 0x18, 0x3f, 0x0a, 0x38, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, + 0x2b, 0x00, 0x2e, 0x01, 0x1a, 0x2c, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x2b, 0x08, 0x19, 0x0a, 0x1a, + 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x2d, 0x02, 0x18, 0x1a, 0x0d, 0x20, 0x54, 0x68, + 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, + 0x02, 0x00, 0x06, 0x12, 0x03, 0x2d, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x2d, 0x0d, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x2d, 0x16, 0x17, 0x0a, 0x81, 0x01, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x32, 0x00, 0x3c, + 0x01, 0x1a, 0x75, 0x20, 0x47, 0x65, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, + 0x79, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x61, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, + 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, + 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, + 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, + 0x03, 0x32, 0x08, 0x1a, 0x0a, 0x27, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x34, 0x02, + 0x44, 0x1a, 0x1a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x06, 0x02, 0x00, 0x05, 0x12, 0x03, 0x34, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x34, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x34, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x08, + 0x12, 0x03, 0x34, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x00, 0x08, 0x87, 0x09, + 0x0e, 0x02, 0x12, 0x03, 0x34, 0x1b, 0x42, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, + 0x03, 0x36, 0x02, 0x46, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x04, 0x12, 0x03, 0x36, + 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x05, 0x12, 0x03, 0x36, 0x0b, 0x10, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x36, 0x11, 0x1c, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, 0x36, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x01, 0x08, 0x12, 0x03, 0x36, 0x21, 0x45, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, + 0x02, 0x01, 0x08, 0x87, 0x09, 0x03, 0x05, 0x12, 0x03, 0x36, 0x22, 0x44, 0x0a, 0xf3, 0x01, 0x0a, + 0x04, 0x04, 0x06, 0x02, 0x02, 0x12, 0x03, 0x3b, 0x02, 0x21, 0x1a, 0xe5, 0x01, 0x20, 0x53, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x61, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x20, 0x53, 0x65, 0x74, + 0x20, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x0a, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x62, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, + 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x04, 0x12, 0x03, 0x3b, 0x02, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x05, 0x12, 0x03, 0x3b, 0x0b, 0x11, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x01, 0x12, 0x03, 0x3b, 0x12, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x02, 0x03, 0x12, 0x03, 0x3b, 0x1f, 0x20, 0x0a, 0x3a, 0x0a, 0x02, 0x04, 0x07, + 0x12, 0x04, 0x3f, 0x00, 0x47, 0x01, 0x1a, 0x2e, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x20, 0x6d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x3f, + 0x08, 0x1b, 0x0a, 0x23, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x00, 0x12, 0x03, 0x41, 0x02, 0x22, 0x1a, + 0x16, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x04, + 0x12, 0x03, 0x41, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, 0x03, + 0x41, 0x0b, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x41, 0x16, + 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x03, 0x41, 0x20, 0x21, 0x0a, + 0x98, 0x01, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x01, 0x12, 0x03, 0x46, 0x02, 0x1d, 0x1a, 0x8a, 0x01, + 0x20, 0x41, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x72, + 0x69, 0x65, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, + 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, + 0x54, 0x6f, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, + 0x20, 0x70, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x70, 0x61, 0x73, 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x0a, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, + 0x02, 0x01, 0x05, 0x12, 0x03, 0x46, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, + 0x01, 0x12, 0x03, 0x46, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x03, 0x12, + 0x03, 0x46, 0x1b, 0x1c, 0x0a, 0x2b, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x04, 0x4a, 0x00, 0x55, 0x01, + 0x1a, 0x1f, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x4a, 0x08, 0x1b, 0x0a, 0x26, 0x0a, + 0x04, 0x04, 0x08, 0x02, 0x00, 0x12, 0x03, 0x4c, 0x02, 0x41, 0x1a, 0x19, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x05, 0x12, 0x03, + 0x4c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4c, 0x09, + 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4c, 0x15, 0x16, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x08, 0x12, 0x03, 0x4c, 0x17, 0x40, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x08, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x4c, 0x18, 0x3f, 0x0a, + 0x38, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x01, 0x12, 0x03, 0x4f, 0x02, 0x1e, 0x1a, 0x2b, 0x20, 0x55, + 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x72, 0x65, + 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, + 0x01, 0x04, 0x12, 0x03, 0x4f, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x4f, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x4f, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x01, 0x03, 0x12, 0x03, 0x4f, 0x1c, + 0x1d, 0x0a, 0x47, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x02, 0x12, 0x03, 0x52, 0x02, 0x25, 0x1a, 0x3a, + 0x20, 0x41, 0x20, 0x6d, 0x61, 0x70, 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x65, 0x79, 0x2d, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x20, 0x61, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, + 0x65, 0x63, 0x75, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, + 0x02, 0x02, 0x06, 0x12, 0x03, 0x52, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x02, + 0x01, 0x12, 0x03, 0x52, 0x16, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x02, 0x03, 0x12, + 0x03, 0x52, 0x23, 0x24, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x03, 0x12, 0x03, 0x54, 0x02, + 0x40, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x03, 0x05, 0x12, 0x03, 0x54, 0x02, 0x08, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x03, 0x01, 0x12, 0x03, 0x54, 0x09, 0x11, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x08, 0x02, 0x03, 0x03, 0x12, 0x03, 0x54, 0x14, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x08, 0x02, 0x03, 0x08, 0x12, 0x03, 0x54, 0x16, 0x3f, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x08, 0x02, + 0x03, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x54, 0x17, 0x3e, 0x0a, 0x3b, 0x0a, 0x02, 0x04, + 0x09, 0x12, 0x04, 0x58, 0x00, 0x5b, 0x01, 0x1a, 0x2f, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, + 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x09, 0x01, 0x12, + 0x03, 0x58, 0x08, 0x1c, 0x0a, 0x22, 0x0a, 0x04, 0x04, 0x09, 0x02, 0x00, 0x12, 0x03, 0x5a, 0x02, + 0x18, 0x1a, 0x15, 0x20, 0x54, 0x68, 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, + 0x06, 0x12, 0x03, 0x5a, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x01, 0x12, + 0x03, 0x5a, 0x0d, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x09, 0x02, 0x00, 0x03, 0x12, 0x03, 0x5a, + 0x16, 0x17, 0x0a, 0x0a, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x5d, 0x00, 0x6c, 0x01, 0x0a, 0x0a, + 0x0a, 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x5d, 0x08, 0x15, 0x0a, 0x3d, 0x0a, 0x04, 0x06, 0x00, + 0x02, 0x00, 0x12, 0x03, 0x5f, 0x02, 0x47, 0x1a, 0x30, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x69, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x5f, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, + 0x12, 0x03, 0x5f, 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x5f, 0x31, 0x45, 0x0a, 0x44, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, 0x03, 0x62, 0x02, 0x47, + 0x1a, 0x37, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, + 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x62, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x02, + 0x12, 0x03, 0x62, 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x62, 0x31, 0x45, 0x0a, 0x37, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x02, 0x12, 0x03, 0x65, 0x02, 0x3e, + 0x1a, 0x2a, 0x20, 0x47, 0x65, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x61, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x65, 0x06, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, + 0x02, 0x02, 0x02, 0x12, 0x03, 0x65, 0x10, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, + 0x03, 0x12, 0x03, 0x65, 0x2b, 0x3c, 0x0a, 0x36, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, 0x03, + 0x68, 0x02, 0x44, 0x1a, 0x29, 0x20, 0x47, 0x65, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, + 0x72, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x61, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x68, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x68, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, + 0x02, 0x03, 0x03, 0x12, 0x03, 0x68, 0x2f, 0x42, 0x0a, 0x2c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x04, + 0x12, 0x03, 0x6b, 0x02, 0x47, 0x1a, 0x1f, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x01, 0x12, + 0x03, 0x6b, 0x06, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x02, 0x12, 0x03, 0x6b, + 0x13, 0x26, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x6b, 0x31, 0x45, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +]; +include!("unitycatalog.schemas.v1.serde.rs"); +// @@protoc_insertion_point(module) \ No newline at end of file diff --git a/models/src/gen/unitycatalog.schemas.v1.serde.rs b/models/src/gen/unitycatalog.schemas.v1.serde.rs new file mode 100644 index 0000000..dcf1e89 --- /dev/null +++ b/models/src/gen/unitycatalog.schemas.v1.serde.rs @@ -0,0 +1,1282 @@ +// @generated +impl serde::Serialize for CreateSchemaRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if !self.catalog_name.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if !self.properties.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.CreateSchemaRequest", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if !self.properties.is_empty() { + struct_ser.serialize_field("properties", &self.properties)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateSchemaRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "catalog_name", + "catalogName", + "comment", + "properties", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + CatalogName, + Comment, + Properties, + } + 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 { + "name" => Ok(GeneratedField::Name), + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "comment" => Ok(GeneratedField::Comment), + "properties" => Ok(GeneratedField::Properties), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateSchemaRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.CreateSchemaRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut catalog_name__ = None; + let mut comment__ = None; + let mut properties__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Properties => { + if properties__.is_some() { + return Err(serde::de::Error::duplicate_field("properties")); + } + properties__ = Some( + map_.next_value::>()? + ); + } + } + } + Ok(CreateSchemaRequest { + name: name__.unwrap_or_default(), + catalog_name: catalog_name__.unwrap_or_default(), + comment: comment__, + properties: properties__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.CreateSchemaRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateSchemaResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.schema.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.CreateSchemaResponse", len)?; + if let Some(v) = self.schema.as_ref() { + struct_ser.serialize_field("schema", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateSchemaResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "schema", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Schema, + } + 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 { + "schema" => Ok(GeneratedField::Schema), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateSchemaResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.CreateSchemaResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut schema__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Schema => { + if schema__.is_some() { + return Err(serde::de::Error::duplicate_field("schema")); + } + schema__ = map_.next_value()?; + } + } + } + Ok(CreateSchemaResponse { + schema: schema__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.CreateSchemaResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteSchemaRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.full_name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.DeleteSchemaRequest", len)?; + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteSchemaRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "full_name", + "fullName", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + FullName, + } + 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 { + "fullName" | "full_name" => Ok(GeneratedField::FullName), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteSchemaRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.DeleteSchemaRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut full_name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + } + } + Ok(DeleteSchemaRequest { + full_name: full_name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.DeleteSchemaRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteSchemaResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let len = 0; + let struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.DeleteSchemaResponse", len)?; + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteSchemaResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + } + 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, + { + Err(serde::de::Error::unknown_field(value, FIELDS)) + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteSchemaResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.DeleteSchemaResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; + } + Ok(DeleteSchemaResponse { + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.DeleteSchemaResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetSchemaRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.full_name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.GetSchemaRequest", len)?; + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetSchemaRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "full_name", + "fullName", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + FullName, + } + 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 { + "fullName" | "full_name" => Ok(GeneratedField::FullName), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetSchemaRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.GetSchemaRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut full_name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + } + } + Ok(GetSchemaRequest { + full_name: full_name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.GetSchemaRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetSchemaResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.schema.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.GetSchemaResponse", len)?; + if let Some(v) = self.schema.as_ref() { + struct_ser.serialize_field("schema", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetSchemaResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "schema", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Schema, + } + 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 { + "schema" => Ok(GeneratedField::Schema), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetSchemaResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.GetSchemaResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut schema__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Schema => { + if schema__.is_some() { + return Err(serde::de::Error::duplicate_field("schema")); + } + schema__ = map_.next_value()?; + } + } + } + Ok(GetSchemaResponse { + schema: schema__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.GetSchemaResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListSchemasRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.catalog_name.is_empty() { + len += 1; + } + if self.max_results.is_some() { + len += 1; + } + if self.page_token.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.ListSchemasRequest", len)?; + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if let Some(v) = self.max_results.as_ref() { + struct_ser.serialize_field("maxResults", v)?; + } + if let Some(v) = self.page_token.as_ref() { + struct_ser.serialize_field("pageToken", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListSchemasRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "catalog_name", + "catalogName", + "max_results", + "maxResults", + "page_token", + "pageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + CatalogName, + MaxResults, + PageToken, + } + 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 { + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "maxResults" | "max_results" => Ok(GeneratedField::MaxResults), + "pageToken" | "page_token" => Ok(GeneratedField::PageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListSchemasRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.ListSchemasRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut catalog_name__ = None; + let mut max_results__ = None; + let mut page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::MaxResults => { + if max_results__.is_some() { + return Err(serde::de::Error::duplicate_field("maxResults")); + } + max_results__ = + map_.next_value::<::std::option::Option<::pbjson::private::NumberDeserialize<_>>>()?.map(|x| x.0) + ; + } + GeneratedField::PageToken => { + if page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("pageToken")); + } + page_token__ = map_.next_value()?; + } + } + } + Ok(ListSchemasRequest { + catalog_name: catalog_name__.unwrap_or_default(), + max_results: max_results__, + page_token: page_token__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.ListSchemasRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListSchemasResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.schemas.is_empty() { + len += 1; + } + if !self.next_page_token.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.ListSchemasResponse", len)?; + if !self.schemas.is_empty() { + struct_ser.serialize_field("schemas", &self.schemas)?; + } + if !self.next_page_token.is_empty() { + struct_ser.serialize_field("nextPageToken", &self.next_page_token)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListSchemasResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "schemas", + "next_page_token", + "nextPageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Schemas, + NextPageToken, + } + 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 { + "schemas" => Ok(GeneratedField::Schemas), + "nextPageToken" | "next_page_token" => Ok(GeneratedField::NextPageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListSchemasResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.ListSchemasResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut schemas__ = None; + let mut next_page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Schemas => { + if schemas__.is_some() { + return Err(serde::de::Error::duplicate_field("schemas")); + } + schemas__ = Some(map_.next_value()?); + } + GeneratedField::NextPageToken => { + if next_page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("nextPageToken")); + } + next_page_token__ = Some(map_.next_value()?); + } + } + } + Ok(ListSchemasResponse { + schemas: schemas__.unwrap_or_default(), + next_page_token: next_page_token__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.ListSchemasResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for SchemaInfo { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if !self.catalog_name.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if !self.properties.is_empty() { + len += 1; + } + if !self.full_name.is_empty() { + len += 1; + } + if self.created_at != 0 { + len += 1; + } + if self.updated_at != 0 { + len += 1; + } + if !self.schema_id.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.SchemaInfo", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if !self.properties.is_empty() { + struct_ser.serialize_field("properties", &self.properties)?; + } + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + if self.created_at != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("createdAt", ToString::to_string(&self.created_at).as_str())?; + } + if self.updated_at != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("updatedAt", ToString::to_string(&self.updated_at).as_str())?; + } + if !self.schema_id.is_empty() { + struct_ser.serialize_field("schemaId", &self.schema_id)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for SchemaInfo { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "catalog_name", + "catalogName", + "comment", + "properties", + "full_name", + "fullName", + "created_at", + "createdAt", + "updated_at", + "updatedAt", + "schema_id", + "schemaId", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + CatalogName, + Comment, + Properties, + FullName, + CreatedAt, + UpdatedAt, + SchemaId, + } + 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 { + "name" => Ok(GeneratedField::Name), + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "comment" => Ok(GeneratedField::Comment), + "properties" => Ok(GeneratedField::Properties), + "fullName" | "full_name" => Ok(GeneratedField::FullName), + "createdAt" | "created_at" => Ok(GeneratedField::CreatedAt), + "updatedAt" | "updated_at" => Ok(GeneratedField::UpdatedAt), + "schemaId" | "schema_id" => Ok(GeneratedField::SchemaId), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = SchemaInfo; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.SchemaInfo") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut catalog_name__ = None; + let mut comment__ = None; + let mut properties__ = None; + let mut full_name__ = None; + let mut created_at__ = None; + let mut updated_at__ = None; + let mut schema_id__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Properties => { + if properties__.is_some() { + return Err(serde::de::Error::duplicate_field("properties")); + } + properties__ = Some( + map_.next_value::>()? + ); + } + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + GeneratedField::CreatedAt => { + if created_at__.is_some() { + return Err(serde::de::Error::duplicate_field("createdAt")); + } + created_at__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::UpdatedAt => { + if updated_at__.is_some() { + return Err(serde::de::Error::duplicate_field("updatedAt")); + } + updated_at__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::SchemaId => { + if schema_id__.is_some() { + return Err(serde::de::Error::duplicate_field("schemaId")); + } + schema_id__ = Some(map_.next_value()?); + } + } + } + Ok(SchemaInfo { + name: name__.unwrap_or_default(), + catalog_name: catalog_name__.unwrap_or_default(), + comment: comment__, + properties: properties__.unwrap_or_default(), + full_name: full_name__.unwrap_or_default(), + created_at: created_at__.unwrap_or_default(), + updated_at: updated_at__.unwrap_or_default(), + schema_id: schema_id__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.SchemaInfo", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateSchemaRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.full_name.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if !self.properties.is_empty() { + len += 1; + } + if !self.new_name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.UpdateSchemaRequest", len)?; + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if !self.properties.is_empty() { + struct_ser.serialize_field("properties", &self.properties)?; + } + if !self.new_name.is_empty() { + struct_ser.serialize_field("newName", &self.new_name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateSchemaRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "full_name", + "fullName", + "comment", + "properties", + "new_name", + "newName", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + FullName, + Comment, + Properties, + NewName, + } + 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 { + "fullName" | "full_name" => Ok(GeneratedField::FullName), + "comment" => Ok(GeneratedField::Comment), + "properties" => Ok(GeneratedField::Properties), + "newName" | "new_name" => Ok(GeneratedField::NewName), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateSchemaRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.UpdateSchemaRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut full_name__ = None; + let mut comment__ = None; + let mut properties__ = None; + let mut new_name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Properties => { + if properties__.is_some() { + return Err(serde::de::Error::duplicate_field("properties")); + } + properties__ = Some( + map_.next_value::>()? + ); + } + GeneratedField::NewName => { + if new_name__.is_some() { + return Err(serde::de::Error::duplicate_field("newName")); + } + new_name__ = Some(map_.next_value()?); + } + } + } + Ok(UpdateSchemaRequest { + full_name: full_name__.unwrap_or_default(), + comment: comment__, + properties: properties__.unwrap_or_default(), + new_name: new_name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.UpdateSchemaRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateSchemaResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.schema.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.schemas.v1.UpdateSchemaResponse", len)?; + if let Some(v) = self.schema.as_ref() { + struct_ser.serialize_field("schema", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateSchemaResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "schema", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Schema, + } + 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 { + "schema" => Ok(GeneratedField::Schema), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateSchemaResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.schemas.v1.UpdateSchemaResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut schema__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Schema => { + if schema__.is_some() { + return Err(serde::de::Error::duplicate_field("schema")); + } + schema__ = map_.next_value()?; + } + } + } + Ok(UpdateSchemaResponse { + schema: schema__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.schemas.v1.UpdateSchemaResponse", FIELDS, GeneratedVisitor) + } +} diff --git a/models/src/gen/unitycatalog.tables.v1.rs b/models/src/gen/unitycatalog.tables.v1.rs new file mode 100644 index 0000000..3be69a5 --- /dev/null +++ b/models/src/gen/unitycatalog.tables.v1.rs @@ -0,0 +1,903 @@ +// @generated +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ColumnInfo { + /// The name of the parameter. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Full data type spec, SQL/catalogString text. + #[prost(string, tag="2")] + pub type_text: ::prost::alloc::string::String, + /// Full data type spec, JSON-serialized. + #[prost(string, tag="3")] + pub type_json: ::prost::alloc::string::String, + #[prost(enumeration="ColumnTypeName", tag="4")] + pub type_name: i32, + /// Digits of precision; required on Create for DecimalTypes. + #[prost(int32, tag="5")] + pub type_precision: i32, + /// Digits to right of decimal; Required on Create for DecimalTypes. + #[prost(int32, tag="6")] + pub type_scale: i32, + /// Format of IntervalType. + #[prost(string, tag="7")] + pub type_interval_type: ::prost::alloc::string::String, + /// Ordinal position of column (starting at position 0). + #[prost(int32, tag="8")] + pub position: i32, + /// User-provided free-form text description. + #[prost(string, optional, tag="9")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// Whether field may be Null + /// TODO(roeap): assert that this field defaults to true.. + #[prost(bool, optional, tag="10")] + pub nullable: ::core::option::Option, + /// Partition index for column. + #[prost(int32, tag="11")] + pub partition_index: i32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TableInfo { + /// Name of the table, relative to its parent schema. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Name of parent catalog. + #[prost(string, tag="2")] + pub catalog_name: ::prost::alloc::string::String, + /// Name of parent schema relative to its parent catalog. + #[prost(string, tag="3")] + pub schema_name: ::prost::alloc::string::String, + /// Table type. + #[prost(enumeration="TableType", tag="4")] + pub table_type: i32, + #[prost(enumeration="DataSourceFormat", tag="5")] + pub data_source_format: i32, + /// The array of ColumnInfo definitions of the table's columns. + #[prost(message, repeated, tag="6")] + pub columns: ::prost::alloc::vec::Vec, + /// Storage root URL for table (for MANAGED, EXTERNAL tables) + #[prost(string, tag="7")] + pub storage_location: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="8")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// JSON-serialized key-value pair map, encoded (escaped) as a string. + #[prost(map="string, string", tag="9")] + pub properties: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, + /// Time at which this table was created, in epoch milliseconds. + #[prost(int64, tag="10")] + pub created_at: i64, + /// Time at which this table was last updated, in epoch milliseconds. + #[prost(int64, tag="11")] + pub updated_at: i64, + /// Unique identifier for the table. + #[prost(string, tag="12")] + pub table_id: ::prost::alloc::string::String, +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum TableType { + Unspecified = 0, + Table = 1, + View = 2, + External = 3, +} +impl TableType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + TableType::Unspecified => "TABLE_TYPE_UNSPECIFIED", + TableType::Table => "TABLE_TYPE_TABLE", + TableType::View => "TABLE_TYPE_VIEW", + TableType::External => "TABLE_TYPE_EXTERNAL", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TABLE_TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "TABLE_TYPE_TABLE" => Some(Self::Table), + "TABLE_TYPE_VIEW" => Some(Self::View), + "TABLE_TYPE_EXTERNAL" => Some(Self::External), + _ => None, + } + } +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum DataSourceFormat { + Unspecified = 0, + Delta = 1, + Parquet = 2, +} +impl DataSourceFormat { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + DataSourceFormat::Unspecified => "DATA_SOURCE_FORMAT_UNSPECIFIED", + DataSourceFormat::Delta => "DATA_SOURCE_FORMAT_DELTA", + DataSourceFormat::Parquet => "DATA_SOURCE_FORMAT_PARQUET", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "DATA_SOURCE_FORMAT_UNSPECIFIED" => Some(Self::Unspecified), + "DATA_SOURCE_FORMAT_DELTA" => Some(Self::Delta), + "DATA_SOURCE_FORMAT_PARQUET" => Some(Self::Parquet), + _ => None, + } + } +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum ColumnTypeName { + ColumnTypeUnspecified = 0, +} +impl ColumnTypeName { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + ColumnTypeName::ColumnTypeUnspecified => "COLUMN_TYPE_UNSPECIFIED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "COLUMN_TYPE_UNSPECIFIED" => Some(Self::ColumnTypeUnspecified), + _ => None, + } + } +} +// TODO(roeap): should there be a update tablke method as well, +// we can do schema evolution on delta lake tables after all. + +/// Creates a new table instance. +/// WARNING: This API is experimental and will change in future versions. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTableRequest { + /// Name of the table, relative to its parent schema. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Name of parent catalog. + #[prost(string, tag="2")] + pub catalog_name: ::prost::alloc::string::String, + /// Name of parent schema relative to its parent catalog. + #[prost(string, tag="3")] + pub schema_name: ::prost::alloc::string::String, + /// Table type. + #[prost(enumeration="TableType", tag="4")] + pub table_type: i32, + #[prost(enumeration="DataSourceFormat", tag="5")] + pub data_source_format: i32, + /// The array of ColumnInfo definitions of the table's columns. + #[prost(message, repeated, tag="6")] + pub columns: ::prost::alloc::vec::Vec, + /// Storage root URL for table (for MANAGED, EXTERNAL tables) + #[prost(string, tag="7")] + pub storage_location: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="8")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, + /// JSON-serialized key-value pair map, encoded (escaped) as a string. + #[prost(map="string, string", tag="9")] + pub properties: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, +} +/// Response message for CreateTable RPC. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateTableResponse { + /// The created table. + #[prost(message, optional, tag="1")] + pub table: ::core::option::Option, +} +/// Deletes a table from the specified parent catalog and schema. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteTableRequest { + /// Full name of the table + #[prost(string, tag="1")] + pub full_name: ::prost::alloc::string::String, +} +/// Response message for DeleteTable RPC. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteTableResponse { +} +/// Gets a table for a specific catalog and schema. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetTableRequest { + /// Full name of the table + #[prost(string, tag="1")] + pub full_name: ::prost::alloc::string::String, +} +/// Response message for GetTable RPC. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetTableResponse { + /// The table. + #[prost(message, optional, tag="1")] + pub table: ::core::option::Option, +} +/// Gets the list of all available tables under the parent catalog and schema. +/// There is no guarantee of a specific ordering of the elements in the array. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTablesRequest { + /// Name of parent catalog. + #[prost(string, tag="1")] + pub catalog_name: ::prost::alloc::string::String, + /// Name of parent schema relative to its parent catalog. + #[prost(string, tag="2")] + pub schema_name: ::prost::alloc::string::String, + #[prost(int32, optional, tag="3")] + pub max_results: ::core::option::Option, + /// Specifies a page token to use. Set pageToken to the nextPageToken returned + /// by a previous list request to get the next page of results. + /// next_page_token will not be returned in a response if there are no more results available. + #[prost(string, optional, tag="4")] + pub page_token: ::core::option::Option<::prost::alloc::string::String>, +} +/// Response message for ListTables RPC. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTablesResponse { + /// The list of tables. + #[prost(message, repeated, tag="1")] + pub tables: ::prost::alloc::vec::Vec, + /// A token to retrieve the next page of results. Pass this value in the + /// page_token field in the subsequent call to `ListTables` method to retrieve + /// the next page of results. + #[prost(string, tag="2")] + pub next_page_token: ::prost::alloc::string::String, +} +/// Encoded file descriptor set for the `unitycatalog.tables.v1` package +pub const FILE_DESCRIPTOR_SET: &[u8] = &[ + 0x0a, 0xf5, 0x23, 0x0a, 0x23, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, + 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcc, 0x03, + 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x09, 0x74, 0x79, 0x70, + 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x54, 0x65, 0x78, 0x74, 0x12, + 0x24, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x74, 0x79, 0x70, + 0x65, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x79, + 0x70, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0d, 0x74, 0x79, 0x70, 0x65, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x65, + 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, + 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x79, + 0x70, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x08, 0x6e, 0x75, 0x6c, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x08, 0x6e, + 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x42, + 0x0b, 0x0a, 0x09, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xa0, 0x05, 0x0a, + 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, + 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, + 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x21, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x56, 0x0a, 0x12, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x10, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, + 0x51, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x22, 0x0a, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x49, 0x64, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x2a, + 0x6b, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, + 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x42, 0x4c, + 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x13, + 0x0a, 0x0f, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x49, 0x45, + 0x57, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x03, 0x2a, 0x74, 0x0a, 0x10, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, + 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x51, 0x55, 0x45, 0x54, + 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x0e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4f, 0x4c, 0x55, 0x4d, 0x4e, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x4a, 0x8c, 0x18, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x5d, 0x01, 0x0a, 0x08, 0x0a, 0x01, + 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1f, + 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x0a, 0x0a, 0x02, 0x05, + 0x00, 0x12, 0x04, 0x06, 0x00, 0x0b, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, + 0x06, 0x05, 0x0e, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x07, 0x02, 0x1d, + 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x07, 0x02, 0x18, 0x0a, 0x0c, + 0x0a, 0x05, 0x05, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x07, 0x1b, 0x1c, 0x0a, 0x0b, 0x0a, 0x04, + 0x05, 0x00, 0x02, 0x01, 0x12, 0x03, 0x08, 0x02, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, + 0x01, 0x01, 0x12, 0x03, 0x08, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x01, 0x02, + 0x12, 0x03, 0x08, 0x15, 0x16, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x02, 0x12, 0x03, 0x09, + 0x02, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x09, 0x02, 0x11, + 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, 0x02, 0x02, 0x12, 0x03, 0x09, 0x14, 0x15, 0x0a, 0x0b, + 0x0a, 0x04, 0x05, 0x00, 0x02, 0x03, 0x12, 0x03, 0x0a, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x0a, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x00, 0x02, + 0x03, 0x02, 0x12, 0x03, 0x0a, 0x18, 0x19, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x01, 0x12, 0x04, 0x0d, + 0x00, 0x11, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x01, 0x01, 0x12, 0x03, 0x0d, 0x05, 0x15, 0x0a, + 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x00, 0x12, 0x03, 0x0e, 0x02, 0x25, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0e, 0x02, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, + 0x02, 0x00, 0x02, 0x12, 0x03, 0x0e, 0x23, 0x24, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x01, + 0x12, 0x03, 0x0f, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x0f, 0x02, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x05, 0x01, 0x02, 0x01, 0x02, 0x12, 0x03, 0x0f, 0x1d, + 0x1e, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x02, 0x12, 0x03, 0x10, 0x02, 0x21, 0x0a, 0x0c, + 0x0a, 0x05, 0x05, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x10, 0x02, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x01, 0x02, 0x02, 0x02, 0x12, 0x03, 0x10, 0x1f, 0x20, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x02, + 0x12, 0x04, 0x13, 0x00, 0x15, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x02, 0x01, 0x12, 0x03, 0x13, + 0x05, 0x13, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x02, 0x02, 0x00, 0x12, 0x03, 0x14, 0x02, 0x1e, 0x0a, + 0x0c, 0x0a, 0x05, 0x05, 0x02, 0x02, 0x00, 0x01, 0x12, 0x03, 0x14, 0x02, 0x19, 0x0a, 0x0c, 0x0a, + 0x05, 0x05, 0x02, 0x02, 0x00, 0x02, 0x12, 0x03, 0x14, 0x1c, 0x1d, 0x0a, 0x0a, 0x0a, 0x02, 0x04, + 0x00, 0x12, 0x04, 0x17, 0x00, 0x38, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, + 0x17, 0x08, 0x12, 0x0a, 0x29, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x19, 0x02, 0x3c, + 0x1a, 0x1c, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x19, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x19, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x19, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, + 0x08, 0x12, 0x03, 0x19, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, + 0x09, 0x0e, 0x02, 0x12, 0x03, 0x19, 0x13, 0x3a, 0x0a, 0x3b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, + 0x12, 0x03, 0x1c, 0x02, 0x41, 0x1a, 0x2e, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x2c, 0x20, 0x53, 0x51, 0x4c, + 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, + 0x65, 0x78, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, + 0x1c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x1c, 0x09, + 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x1c, 0x15, 0x16, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x08, 0x12, 0x03, 0x1c, 0x17, 0x40, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x00, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1c, 0x18, 0x3f, 0x0a, + 0x34, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x1f, 0x02, 0x41, 0x1a, 0x27, 0x20, 0x46, + 0x75, 0x6c, 0x6c, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x70, + 0x65, 0x63, 0x2c, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, + 0x1f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x1f, 0x09, + 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x1f, 0x15, 0x16, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x08, 0x12, 0x03, 0x1f, 0x17, 0x40, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x00, 0x02, 0x02, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x1f, 0x18, 0x3f, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x21, 0x02, 0x1f, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x21, 0x02, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x03, 0x01, 0x12, 0x03, 0x21, 0x11, 0x1a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, + 0x03, 0x12, 0x03, 0x21, 0x1d, 0x1e, 0x0a, 0x48, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, 0x12, 0x03, + 0x24, 0x02, 0x1b, 0x1a, 0x3b, 0x20, 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, + 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x3b, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x44, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x05, 0x12, 0x03, 0x24, 0x02, 0x07, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x24, 0x08, 0x16, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x24, 0x19, 0x1a, 0x0a, 0x4f, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x05, 0x12, 0x03, 0x27, 0x02, 0x17, 0x1a, 0x42, 0x20, 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, + 0x20, 0x74, 0x6f, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x3b, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x6f, + 0x6e, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x44, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x05, 0x05, 0x12, 0x03, 0x27, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x05, 0x01, 0x12, 0x03, 0x27, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x03, + 0x12, 0x03, 0x27, 0x15, 0x16, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x06, 0x12, 0x03, 0x2a, + 0x02, 0x20, 0x1a, 0x19, 0x20, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x06, 0x05, 0x12, 0x03, 0x2a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x2a, 0x09, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x06, 0x03, 0x12, 0x03, 0x2a, 0x1e, 0x1f, 0x0a, 0x43, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x07, 0x12, + 0x03, 0x2d, 0x02, 0x15, 0x1a, 0x36, 0x20, 0x4f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x20, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x20, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x30, 0x29, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x07, 0x05, 0x12, 0x03, 0x2d, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x07, 0x01, 0x12, 0x03, 0x2d, 0x08, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, + 0x03, 0x12, 0x03, 0x2d, 0x13, 0x14, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x08, 0x12, 0x03, + 0x30, 0x02, 0x1e, 0x1a, 0x2b, 0x20, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x04, 0x12, 0x03, 0x30, 0x02, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x05, 0x12, 0x03, 0x30, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x30, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x08, 0x03, 0x12, 0x03, 0x30, 0x1c, 0x1d, 0x0a, 0x60, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x09, + 0x12, 0x03, 0x34, 0x02, 0x1e, 0x1a, 0x53, 0x20, 0x57, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x4e, 0x75, 0x6c, + 0x6c, 0x0a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x28, 0x72, 0x6f, 0x65, 0x61, 0x70, 0x29, 0x3a, 0x20, + 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x20, + 0x74, 0x6f, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x09, 0x04, 0x12, 0x03, 0x34, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x09, + 0x05, 0x12, 0x03, 0x34, 0x0b, 0x0f, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x09, 0x01, 0x12, + 0x03, 0x34, 0x10, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x09, 0x03, 0x12, 0x03, 0x34, + 0x1b, 0x1d, 0x0a, 0x2a, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x0a, 0x12, 0x03, 0x37, 0x02, 0x1d, 0x1a, + 0x1d, 0x20, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x0a, 0x05, 0x12, 0x03, 0x37, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x0a, 0x01, 0x12, 0x03, 0x37, 0x08, 0x17, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x0a, 0x03, 0x12, 0x03, 0x37, 0x1a, 0x1c, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, + 0x3a, 0x00, 0x5d, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x3a, 0x08, 0x11, + 0x0a, 0x40, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x3c, 0x02, 0x3c, 0x1a, 0x33, 0x20, + 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x2c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, + 0x74, 0x73, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x05, 0x12, 0x03, 0x3c, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x3c, 0x09, 0x0d, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x3c, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x01, 0x02, 0x00, 0x08, 0x12, 0x03, 0x3c, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x01, + 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x3c, 0x13, 0x3a, 0x0a, 0x26, 0x0a, 0x04, + 0x04, 0x01, 0x02, 0x01, 0x12, 0x03, 0x3f, 0x02, 0x44, 0x1a, 0x19, 0x20, 0x4e, 0x61, 0x6d, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x05, 0x12, 0x03, 0x3f, + 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x01, 0x12, 0x03, 0x3f, 0x09, 0x15, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x03, 0x12, 0x03, 0x3f, 0x18, 0x19, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x01, 0x08, 0x12, 0x03, 0x3f, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, + 0x04, 0x01, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x3f, 0x1b, 0x42, 0x0a, 0x44, + 0x0a, 0x04, 0x04, 0x01, 0x02, 0x02, 0x12, 0x03, 0x42, 0x02, 0x43, 0x1a, 0x37, 0x20, 0x4e, 0x61, + 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, + 0x69, 0x74, 0x73, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x05, 0x12, 0x03, 0x42, + 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x01, 0x12, 0x03, 0x42, 0x09, 0x14, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x03, 0x12, 0x03, 0x42, 0x17, 0x18, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x01, 0x02, 0x02, 0x08, 0x12, 0x03, 0x42, 0x19, 0x42, 0x0a, 0x10, 0x0a, 0x09, + 0x04, 0x01, 0x02, 0x02, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x42, 0x1a, 0x41, 0x0a, 0x1a, + 0x0a, 0x04, 0x04, 0x01, 0x02, 0x03, 0x12, 0x03, 0x45, 0x02, 0x1b, 0x1a, 0x0d, 0x20, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, + 0x02, 0x03, 0x06, 0x12, 0x03, 0x45, 0x02, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, + 0x01, 0x12, 0x03, 0x45, 0x0c, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x03, 0x03, 0x12, + 0x03, 0x45, 0x19, 0x1a, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x04, 0x12, 0x03, 0x47, 0x02, + 0x2a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x06, 0x12, 0x03, 0x47, 0x02, 0x12, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x04, 0x01, 0x12, 0x03, 0x47, 0x13, 0x25, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x04, 0x03, 0x12, 0x03, 0x47, 0x28, 0x29, 0x0a, 0x4a, 0x0a, 0x04, 0x04, + 0x01, 0x02, 0x05, 0x12, 0x03, 0x4a, 0x02, 0x22, 0x1a, 0x3d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, + 0x72, 0x72, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, + 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x27, 0x73, 0x20, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x04, + 0x12, 0x03, 0x4a, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x06, 0x12, 0x03, + 0x4a, 0x0b, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x01, 0x12, 0x03, 0x4a, 0x16, + 0x1d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x05, 0x03, 0x12, 0x03, 0x4a, 0x20, 0x21, 0x0a, + 0x48, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x06, 0x12, 0x03, 0x4d, 0x02, 0x1e, 0x1a, 0x3b, 0x20, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x55, 0x52, 0x4c, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x4d, + 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x2c, 0x20, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, + 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x29, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x06, 0x05, 0x12, 0x03, 0x4d, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x01, + 0x12, 0x03, 0x4d, 0x09, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x06, 0x03, 0x12, 0x03, + 0x4d, 0x1c, 0x1d, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x07, 0x12, 0x03, 0x50, 0x02, 0x1e, + 0x1a, 0x2b, 0x20, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, + 0x20, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x07, 0x04, 0x12, 0x03, 0x50, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x07, 0x05, 0x12, 0x03, 0x50, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x07, 0x01, 0x12, 0x03, 0x50, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x07, 0x03, + 0x12, 0x03, 0x50, 0x1c, 0x1d, 0x0a, 0x51, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x08, 0x12, 0x03, 0x53, + 0x02, 0x25, 0x1a, 0x44, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x20, 0x6b, 0x65, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x70, + 0x61, 0x69, 0x72, 0x20, 0x6d, 0x61, 0x70, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x20, 0x28, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x29, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, + 0x06, 0x12, 0x03, 0x53, 0x02, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x01, 0x12, + 0x03, 0x53, 0x16, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x08, 0x03, 0x12, 0x03, 0x53, + 0x23, 0x24, 0x0a, 0x4b, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x09, 0x12, 0x03, 0x56, 0x02, 0x18, 0x1a, + 0x3e, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x61, 0x74, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x20, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x09, 0x05, 0x12, 0x03, 0x56, 0x02, 0x07, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x09, 0x01, 0x12, 0x03, 0x56, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x09, 0x03, 0x12, 0x03, 0x56, 0x15, 0x17, 0x0a, 0x50, 0x0a, 0x04, 0x04, 0x01, 0x02, + 0x0a, 0x12, 0x03, 0x59, 0x02, 0x18, 0x1a, 0x43, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x61, 0x74, + 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x20, 0x6d, 0x69, 0x6c, + 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x01, 0x02, 0x0a, 0x05, 0x12, 0x03, 0x59, 0x02, 0x07, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, + 0x0a, 0x01, 0x12, 0x03, 0x59, 0x08, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0a, 0x03, + 0x12, 0x03, 0x59, 0x15, 0x17, 0x0a, 0x2f, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x0b, 0x12, 0x03, 0x5c, + 0x02, 0x41, 0x1a, 0x22, 0x20, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0b, 0x05, 0x12, + 0x03, 0x5c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0b, 0x01, 0x12, 0x03, 0x5c, + 0x09, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0b, 0x03, 0x12, 0x03, 0x5c, 0x14, 0x16, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x0b, 0x08, 0x12, 0x03, 0x5c, 0x17, 0x40, 0x0a, 0x10, + 0x0a, 0x09, 0x04, 0x01, 0x02, 0x0b, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x5c, 0x18, 0x3f, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0x95, 0x2b, 0x0a, 0x20, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x23, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd0, 0x04, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x0c, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x56, 0x0a, 0x12, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x28, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x10, 0x64, 0x61, 0x74, 0x61, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x88, 0x01, 0x01, 0x12, 0x5a, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, + 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, + 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x4e, 0x0a, 0x13, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x3a, 0x0a, 0x12, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x24, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x24, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4b, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0c, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x2d, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x48, 0x00, 0x52, + 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x88, 0x01, 0x01, 0x12, 0x22, + 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, + 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x22, 0x77, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, + 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x32, 0x9c, 0x03, 0x0a, 0x06, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2a, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2b, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, + 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2a, 0x2e, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x12, 0x27, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x75, 0x6e, 0x69, + 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x12, 0x29, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x9c, 0x1d, 0x0a, 0x06, 0x12, 0x04, + 0x00, 0x00, 0x6b, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, + 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x1f, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, + 0x04, 0x00, 0x25, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2d, 0x0a, 0xee, + 0x01, 0x0a, 0x02, 0x04, 0x00, 0x12, 0x04, 0x0c, 0x00, 0x26, 0x01, 0x1a, 0x66, 0x20, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x20, 0x57, 0x41, 0x52, + 0x4e, 0x49, 0x4e, 0x47, 0x3a, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x41, 0x50, 0x49, 0x20, 0x69, + 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x69, + 0x6e, 0x20, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x0a, 0x32, 0x7a, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x28, 0x72, 0x6f, 0x65, 0x61, 0x70, + 0x29, 0x3a, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, + 0x62, 0x65, 0x20, 0x61, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, + 0x6b, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x61, 0x73, 0x20, 0x77, 0x65, 0x6c, + 0x6c, 0x2c, 0x0a, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x64, 0x6f, 0x20, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x20, 0x65, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, + 0x6e, 0x20, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x20, 0x6c, 0x61, 0x6b, 0x65, 0x20, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x2e, 0x0a, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x0c, 0x08, 0x1a, 0x0a, 0x40, 0x0a, 0x04, 0x04, + 0x00, 0x02, 0x00, 0x12, 0x03, 0x0e, 0x02, 0x3c, 0x1a, 0x33, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, + 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0e, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x00, 0x03, 0x12, 0x03, 0x0e, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, + 0x12, 0x03, 0x0e, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, + 0x0e, 0x02, 0x12, 0x03, 0x0e, 0x13, 0x3a, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, + 0x03, 0x11, 0x02, 0x44, 0x1a, 0x19, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x11, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x11, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x11, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x01, 0x08, 0x12, 0x03, 0x11, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x01, 0x08, + 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x11, 0x1b, 0x42, 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x02, 0x12, 0x03, 0x14, 0x02, 0x43, 0x1a, 0x37, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, + 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x14, 0x02, 0x08, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x14, 0x09, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x14, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, + 0x02, 0x08, 0x12, 0x03, 0x14, 0x19, 0x42, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x02, 0x08, + 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x14, 0x1a, 0x41, 0x0a, 0x1a, 0x0a, 0x04, 0x04, 0x00, 0x02, + 0x03, 0x12, 0x03, 0x17, 0x02, 0x1b, 0x1a, 0x0d, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, + 0x17, 0x02, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x17, 0x0c, + 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x17, 0x19, 0x1a, 0x0a, + 0x0b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, 0x12, 0x03, 0x19, 0x02, 0x2a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x04, 0x06, 0x12, 0x03, 0x19, 0x02, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x04, 0x01, 0x12, 0x03, 0x19, 0x13, 0x25, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, + 0x03, 0x12, 0x03, 0x19, 0x28, 0x29, 0x0a, 0x4a, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x05, 0x12, 0x03, + 0x1c, 0x02, 0x22, 0x1a, 0x3d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, + 0x6f, 0x66, 0x20, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, + 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x04, 0x12, 0x03, 0x1c, 0x02, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x06, 0x12, 0x03, 0x1c, 0x0b, 0x15, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x1c, 0x16, 0x1d, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, 0x1c, 0x20, 0x21, 0x0a, 0x48, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x06, 0x12, 0x03, 0x1f, 0x02, 0x1e, 0x1a, 0x3b, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, + 0x44, 0x2c, 0x20, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x20, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x29, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x05, 0x12, 0x03, 0x1f, + 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x01, 0x12, 0x03, 0x1f, 0x09, 0x19, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x06, 0x03, 0x12, 0x03, 0x1f, 0x1c, 0x1d, 0x0a, 0x38, + 0x0a, 0x04, 0x04, 0x00, 0x02, 0x07, 0x12, 0x03, 0x22, 0x02, 0x1e, 0x1a, 0x2b, 0x20, 0x55, 0x73, + 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, + 0x04, 0x12, 0x03, 0x22, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x05, 0x12, + 0x03, 0x22, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x01, 0x12, 0x03, 0x22, + 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x07, 0x03, 0x12, 0x03, 0x22, 0x1c, 0x1d, + 0x0a, 0x51, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x08, 0x12, 0x03, 0x25, 0x02, 0x25, 0x1a, 0x44, 0x20, + 0x4a, 0x53, 0x4f, 0x4e, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, + 0x6b, 0x65, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x70, 0x61, 0x69, 0x72, 0x20, 0x6d, + 0x61, 0x70, 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x28, 0x65, 0x73, 0x63, + 0x61, 0x70, 0x65, 0x64, 0x29, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x06, 0x12, 0x03, 0x25, 0x02, + 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x01, 0x12, 0x03, 0x25, 0x16, 0x20, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x08, 0x03, 0x12, 0x03, 0x25, 0x23, 0x24, 0x0a, 0x33, 0x0a, + 0x02, 0x04, 0x01, 0x12, 0x04, 0x29, 0x00, 0x2c, 0x01, 0x1a, 0x27, 0x20, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x52, 0x50, 0x43, + 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, 0x29, 0x08, 0x1b, 0x0a, 0x21, + 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x2b, 0x02, 0x16, 0x1a, 0x14, 0x20, 0x54, 0x68, + 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, 0x12, 0x03, 0x2b, 0x02, 0x0b, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x2b, 0x0c, 0x11, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x2b, 0x14, 0x15, 0x0a, 0x4b, 0x0a, 0x02, 0x04, + 0x02, 0x12, 0x04, 0x2f, 0x00, 0x32, 0x01, 0x1a, 0x3f, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, + 0x03, 0x2f, 0x08, 0x1a, 0x0a, 0x25, 0x0a, 0x04, 0x04, 0x02, 0x02, 0x00, 0x12, 0x03, 0x31, 0x02, + 0x41, 0x1a, 0x18, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x02, 0x02, 0x00, 0x05, 0x12, 0x03, 0x31, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x00, 0x01, 0x12, 0x03, 0x31, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, + 0x12, 0x03, 0x31, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x08, 0x12, 0x03, + 0x31, 0x17, 0x40, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, + 0x12, 0x03, 0x31, 0x18, 0x3f, 0x0a, 0x32, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x03, 0x35, 0x00, 0x1e, + 0x1a, 0x27, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x20, 0x52, 0x50, 0x43, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, + 0x12, 0x03, 0x35, 0x08, 0x1b, 0x0a, 0x3d, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x38, 0x00, 0x3b, + 0x01, 0x1a, 0x31, 0x20, 0x47, 0x65, 0x74, 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x38, 0x08, 0x17, + 0x0a, 0x25, 0x0a, 0x04, 0x04, 0x04, 0x02, 0x00, 0x12, 0x03, 0x3a, 0x02, 0x41, 0x1a, 0x18, 0x20, + 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, + 0x12, 0x03, 0x3a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x3a, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x3a, 0x15, + 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, 0x12, 0x03, 0x3a, 0x17, 0x40, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x3a, 0x18, + 0x3f, 0x0a, 0x30, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x3e, 0x00, 0x41, 0x01, 0x1a, 0x24, 0x20, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x47, 0x65, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x52, 0x50, + 0x43, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x3e, 0x08, 0x18, 0x0a, + 0x19, 0x0a, 0x04, 0x04, 0x05, 0x02, 0x00, 0x12, 0x03, 0x40, 0x02, 0x16, 0x1a, 0x0c, 0x20, 0x54, + 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, + 0x02, 0x00, 0x06, 0x12, 0x03, 0x40, 0x02, 0x0b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, + 0x01, 0x12, 0x03, 0x40, 0x0c, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, + 0x03, 0x40, 0x14, 0x15, 0x0a, 0xa5, 0x01, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x45, 0x00, 0x52, + 0x01, 0x1a, 0x98, 0x01, 0x20, 0x47, 0x65, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, + 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, + 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x67, 0x75, 0x61, + 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, + 0x04, 0x06, 0x01, 0x12, 0x03, 0x45, 0x08, 0x19, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, + 0x12, 0x03, 0x47, 0x02, 0x44, 0x1a, 0x19, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x05, 0x12, 0x03, 0x47, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, 0x12, 0x03, 0x47, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, 0x47, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x00, 0x08, 0x12, 0x03, 0x47, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x00, + 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x47, 0x1b, 0x42, 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x06, + 0x02, 0x01, 0x12, 0x03, 0x4a, 0x02, 0x43, 0x1a, 0x37, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, + 0x66, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x05, 0x12, 0x03, 0x4a, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, 0x12, 0x03, 0x4a, 0x09, 0x14, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, 0x4a, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x01, 0x08, 0x12, 0x03, 0x4a, 0x19, 0x42, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x01, + 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x4a, 0x1a, 0x41, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, + 0x02, 0x02, 0x12, 0x03, 0x4c, 0x02, 0x46, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x04, + 0x12, 0x03, 0x4c, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x05, 0x12, 0x03, + 0x4c, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x01, 0x12, 0x03, 0x4c, 0x11, + 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x03, 0x12, 0x03, 0x4c, 0x1f, 0x20, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x08, 0x12, 0x03, 0x4c, 0x21, 0x45, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x06, 0x02, 0x02, 0x08, 0x87, 0x09, 0x03, 0x05, 0x12, 0x03, 0x4c, 0x22, 0x44, 0x0a, + 0xf3, 0x01, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x03, 0x12, 0x03, 0x51, 0x02, 0x21, 0x1a, 0xe5, 0x01, + 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x61, 0x20, 0x70, 0x61, 0x67, + 0x65, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x20, + 0x53, 0x65, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x0a, 0x20, 0x62, 0x79, 0x20, + 0x61, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, + 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x69, + 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, + 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x04, 0x12, 0x03, + 0x51, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x05, 0x12, 0x03, 0x51, 0x0b, + 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x01, 0x12, 0x03, 0x51, 0x12, 0x1c, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x03, 0x12, 0x03, 0x51, 0x1f, 0x20, 0x0a, 0x32, 0x0a, + 0x02, 0x04, 0x07, 0x12, 0x04, 0x55, 0x00, 0x5d, 0x01, 0x1a, 0x26, 0x20, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x52, 0x50, 0x43, 0x2e, + 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x07, 0x01, 0x12, 0x03, 0x55, 0x08, 0x1a, 0x0a, 0x22, 0x0a, + 0x04, 0x04, 0x07, 0x02, 0x00, 0x12, 0x03, 0x57, 0x02, 0x20, 0x1a, 0x15, 0x20, 0x54, 0x68, 0x65, + 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, + 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x04, 0x12, 0x03, 0x57, 0x02, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x06, 0x12, 0x03, 0x57, 0x0b, 0x14, 0x0a, 0x0c, 0x0a, + 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x57, 0x15, 0x1b, 0x0a, 0x0c, 0x0a, 0x05, 0x04, + 0x07, 0x02, 0x00, 0x03, 0x12, 0x03, 0x57, 0x1e, 0x1f, 0x0a, 0xbb, 0x01, 0x0a, 0x04, 0x04, 0x07, + 0x02, 0x01, 0x12, 0x03, 0x5c, 0x02, 0x1d, 0x1a, 0xad, 0x01, 0x20, 0x41, 0x20, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x20, 0x50, 0x61, 0x73, 0x73, 0x20, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, + 0x20, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x60, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x60, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, + 0x74, 0x6f, 0x20, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x0a, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x5c, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x5c, 0x09, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x03, 0x12, 0x03, 0x5c, 0x1b, + 0x1c, 0x0a, 0x0a, 0x0a, 0x02, 0x06, 0x00, 0x12, 0x04, 0x5f, 0x00, 0x6b, 0x01, 0x0a, 0x0a, 0x0a, + 0x03, 0x06, 0x00, 0x01, 0x12, 0x03, 0x5f, 0x08, 0x0e, 0x0a, 0x2c, 0x0a, 0x04, 0x06, 0x00, 0x02, + 0x00, 0x12, 0x03, 0x61, 0x02, 0x44, 0x1a, 0x1f, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, + 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x61, 0x06, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, + 0x61, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x61, 0x2f, + 0x42, 0x0a, 0x4c, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x01, 0x12, 0x03, 0x64, 0x02, 0x44, 0x1a, 0x3f, + 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, + 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x64, 0x06, 0x11, 0x0a, 0x0c, 0x0a, + 0x05, 0x06, 0x00, 0x02, 0x01, 0x02, 0x12, 0x03, 0x64, 0x12, 0x24, 0x0a, 0x0c, 0x0a, 0x05, 0x06, + 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x64, 0x2f, 0x42, 0x0a, 0x3e, 0x0a, 0x04, 0x06, 0x00, 0x02, + 0x02, 0x12, 0x03, 0x67, 0x02, 0x3b, 0x1a, 0x31, 0x20, 0x47, 0x65, 0x74, 0x73, 0x20, 0x61, 0x20, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, + 0x02, 0x01, 0x12, 0x03, 0x67, 0x06, 0x0e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x02, + 0x12, 0x03, 0x67, 0x0f, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, + 0x67, 0x29, 0x39, 0x0a, 0x59, 0x0a, 0x04, 0x06, 0x00, 0x02, 0x03, 0x12, 0x03, 0x6a, 0x02, 0x41, + 0x1a, 0x4c, 0x20, 0x47, 0x65, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x06, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x6a, 0x06, 0x10, 0x0a, 0x0c, 0x0a, 0x05, + 0x06, 0x00, 0x02, 0x03, 0x02, 0x12, 0x03, 0x6a, 0x11, 0x22, 0x0a, 0x0c, 0x0a, 0x05, 0x06, 0x00, + 0x02, 0x03, 0x03, 0x12, 0x03, 0x6a, 0x2d, 0x3f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +]; +include!("unitycatalog.tables.v1.serde.rs"); +// @@protoc_insertion_point(module) \ No newline at end of file diff --git a/models/src/gen/unitycatalog.tables.v1.serde.rs b/models/src/gen/unitycatalog.tables.v1.serde.rs new file mode 100644 index 0000000..7856b0f --- /dev/null +++ b/models/src/gen/unitycatalog.tables.v1.serde.rs @@ -0,0 +1,1728 @@ +// @generated +impl serde::Serialize for ColumnInfo { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if !self.type_text.is_empty() { + len += 1; + } + if !self.type_json.is_empty() { + len += 1; + } + if self.type_name != 0 { + len += 1; + } + if self.type_precision != 0 { + len += 1; + } + if self.type_scale != 0 { + len += 1; + } + if !self.type_interval_type.is_empty() { + len += 1; + } + if self.position != 0 { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if self.nullable.is_some() { + len += 1; + } + if self.partition_index != 0 { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.tables.v1.ColumnInfo", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.type_text.is_empty() { + struct_ser.serialize_field("typeText", &self.type_text)?; + } + if !self.type_json.is_empty() { + struct_ser.serialize_field("typeJson", &self.type_json)?; + } + if self.type_name != 0 { + let v = ColumnTypeName::try_from(self.type_name) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.type_name)))?; + struct_ser.serialize_field("typeName", &v)?; + } + if self.type_precision != 0 { + struct_ser.serialize_field("typePrecision", &self.type_precision)?; + } + if self.type_scale != 0 { + struct_ser.serialize_field("typeScale", &self.type_scale)?; + } + if !self.type_interval_type.is_empty() { + struct_ser.serialize_field("typeIntervalType", &self.type_interval_type)?; + } + if self.position != 0 { + struct_ser.serialize_field("position", &self.position)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if let Some(v) = self.nullable.as_ref() { + struct_ser.serialize_field("nullable", v)?; + } + if self.partition_index != 0 { + struct_ser.serialize_field("partitionIndex", &self.partition_index)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ColumnInfo { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "type_text", + "typeText", + "type_json", + "typeJson", + "type_name", + "typeName", + "type_precision", + "typePrecision", + "type_scale", + "typeScale", + "type_interval_type", + "typeIntervalType", + "position", + "comment", + "nullable", + "partition_index", + "partitionIndex", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + TypeText, + TypeJson, + TypeName, + TypePrecision, + TypeScale, + TypeIntervalType, + Position, + Comment, + Nullable, + PartitionIndex, + } + 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 { + "name" => Ok(GeneratedField::Name), + "typeText" | "type_text" => Ok(GeneratedField::TypeText), + "typeJson" | "type_json" => Ok(GeneratedField::TypeJson), + "typeName" | "type_name" => Ok(GeneratedField::TypeName), + "typePrecision" | "type_precision" => Ok(GeneratedField::TypePrecision), + "typeScale" | "type_scale" => Ok(GeneratedField::TypeScale), + "typeIntervalType" | "type_interval_type" => Ok(GeneratedField::TypeIntervalType), + "position" => Ok(GeneratedField::Position), + "comment" => Ok(GeneratedField::Comment), + "nullable" => Ok(GeneratedField::Nullable), + "partitionIndex" | "partition_index" => Ok(GeneratedField::PartitionIndex), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ColumnInfo; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.tables.v1.ColumnInfo") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut type_text__ = None; + let mut type_json__ = None; + let mut type_name__ = None; + let mut type_precision__ = None; + let mut type_scale__ = None; + let mut type_interval_type__ = None; + let mut position__ = None; + let mut comment__ = None; + let mut nullable__ = None; + let mut partition_index__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::TypeText => { + if type_text__.is_some() { + return Err(serde::de::Error::duplicate_field("typeText")); + } + type_text__ = Some(map_.next_value()?); + } + GeneratedField::TypeJson => { + if type_json__.is_some() { + return Err(serde::de::Error::duplicate_field("typeJson")); + } + type_json__ = Some(map_.next_value()?); + } + GeneratedField::TypeName => { + if type_name__.is_some() { + return Err(serde::de::Error::duplicate_field("typeName")); + } + type_name__ = Some(map_.next_value::()? as i32); + } + GeneratedField::TypePrecision => { + if type_precision__.is_some() { + return Err(serde::de::Error::duplicate_field("typePrecision")); + } + type_precision__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::TypeScale => { + if type_scale__.is_some() { + return Err(serde::de::Error::duplicate_field("typeScale")); + } + type_scale__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::TypeIntervalType => { + if type_interval_type__.is_some() { + return Err(serde::de::Error::duplicate_field("typeIntervalType")); + } + type_interval_type__ = Some(map_.next_value()?); + } + GeneratedField::Position => { + if position__.is_some() { + return Err(serde::de::Error::duplicate_field("position")); + } + position__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Nullable => { + if nullable__.is_some() { + return Err(serde::de::Error::duplicate_field("nullable")); + } + nullable__ = map_.next_value()?; + } + GeneratedField::PartitionIndex => { + if partition_index__.is_some() { + return Err(serde::de::Error::duplicate_field("partitionIndex")); + } + partition_index__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + } + } + Ok(ColumnInfo { + name: name__.unwrap_or_default(), + type_text: type_text__.unwrap_or_default(), + type_json: type_json__.unwrap_or_default(), + type_name: type_name__.unwrap_or_default(), + type_precision: type_precision__.unwrap_or_default(), + type_scale: type_scale__.unwrap_or_default(), + type_interval_type: type_interval_type__.unwrap_or_default(), + position: position__.unwrap_or_default(), + comment: comment__, + nullable: nullable__, + partition_index: partition_index__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.tables.v1.ColumnInfo", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ColumnTypeName { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + let variant = match self { + Self::ColumnTypeUnspecified => "COLUMN_TYPE_UNSPECIFIED", + }; + serializer.serialize_str(variant) + } +} +impl<'de> serde::Deserialize<'de> for ColumnTypeName { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "COLUMN_TYPE_UNSPECIFIED", + ]; + + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ColumnTypeName; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + fn visit_i64(self, v: i64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) + }) + } + + fn visit_u64(self, v: u64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) + }) + } + + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "COLUMN_TYPE_UNSPECIFIED" => Ok(ColumnTypeName::ColumnTypeUnspecified), + _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), + } + } + } + deserializer.deserialize_any(GeneratedVisitor) + } +} +impl serde::Serialize for CreateTableRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if !self.catalog_name.is_empty() { + len += 1; + } + if !self.schema_name.is_empty() { + len += 1; + } + if self.table_type != 0 { + len += 1; + } + if self.data_source_format != 0 { + len += 1; + } + if !self.columns.is_empty() { + len += 1; + } + if !self.storage_location.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if !self.properties.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.tables.v1.CreateTableRequest", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if !self.schema_name.is_empty() { + struct_ser.serialize_field("schemaName", &self.schema_name)?; + } + if self.table_type != 0 { + let v = TableType::try_from(self.table_type) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.table_type)))?; + struct_ser.serialize_field("tableType", &v)?; + } + if self.data_source_format != 0 { + let v = DataSourceFormat::try_from(self.data_source_format) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.data_source_format)))?; + struct_ser.serialize_field("dataSourceFormat", &v)?; + } + if !self.columns.is_empty() { + struct_ser.serialize_field("columns", &self.columns)?; + } + if !self.storage_location.is_empty() { + struct_ser.serialize_field("storageLocation", &self.storage_location)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if !self.properties.is_empty() { + struct_ser.serialize_field("properties", &self.properties)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateTableRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "catalog_name", + "catalogName", + "schema_name", + "schemaName", + "table_type", + "tableType", + "data_source_format", + "dataSourceFormat", + "columns", + "storage_location", + "storageLocation", + "comment", + "properties", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + CatalogName, + SchemaName, + TableType, + DataSourceFormat, + Columns, + StorageLocation, + Comment, + Properties, + } + 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 { + "name" => Ok(GeneratedField::Name), + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "schemaName" | "schema_name" => Ok(GeneratedField::SchemaName), + "tableType" | "table_type" => Ok(GeneratedField::TableType), + "dataSourceFormat" | "data_source_format" => Ok(GeneratedField::DataSourceFormat), + "columns" => Ok(GeneratedField::Columns), + "storageLocation" | "storage_location" => Ok(GeneratedField::StorageLocation), + "comment" => Ok(GeneratedField::Comment), + "properties" => Ok(GeneratedField::Properties), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateTableRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.tables.v1.CreateTableRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut catalog_name__ = None; + let mut schema_name__ = None; + let mut table_type__ = None; + let mut data_source_format__ = None; + let mut columns__ = None; + let mut storage_location__ = None; + let mut comment__ = None; + let mut properties__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::SchemaName => { + if schema_name__.is_some() { + return Err(serde::de::Error::duplicate_field("schemaName")); + } + schema_name__ = Some(map_.next_value()?); + } + GeneratedField::TableType => { + if table_type__.is_some() { + return Err(serde::de::Error::duplicate_field("tableType")); + } + table_type__ = Some(map_.next_value::()? as i32); + } + GeneratedField::DataSourceFormat => { + if data_source_format__.is_some() { + return Err(serde::de::Error::duplicate_field("dataSourceFormat")); + } + data_source_format__ = Some(map_.next_value::()? as i32); + } + GeneratedField::Columns => { + if columns__.is_some() { + return Err(serde::de::Error::duplicate_field("columns")); + } + columns__ = Some(map_.next_value()?); + } + GeneratedField::StorageLocation => { + if storage_location__.is_some() { + return Err(serde::de::Error::duplicate_field("storageLocation")); + } + storage_location__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Properties => { + if properties__.is_some() { + return Err(serde::de::Error::duplicate_field("properties")); + } + properties__ = Some( + map_.next_value::>()? + ); + } + } + } + Ok(CreateTableRequest { + name: name__.unwrap_or_default(), + catalog_name: catalog_name__.unwrap_or_default(), + schema_name: schema_name__.unwrap_or_default(), + table_type: table_type__.unwrap_or_default(), + data_source_format: data_source_format__.unwrap_or_default(), + columns: columns__.unwrap_or_default(), + storage_location: storage_location__.unwrap_or_default(), + comment: comment__, + properties: properties__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.tables.v1.CreateTableRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateTableResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.table.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.tables.v1.CreateTableResponse", len)?; + if let Some(v) = self.table.as_ref() { + struct_ser.serialize_field("table", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateTableResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "table", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Table, + } + 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 { + "table" => Ok(GeneratedField::Table), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateTableResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.tables.v1.CreateTableResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut table__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Table => { + if table__.is_some() { + return Err(serde::de::Error::duplicate_field("table")); + } + table__ = map_.next_value()?; + } + } + } + Ok(CreateTableResponse { + table: table__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.tables.v1.CreateTableResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DataSourceFormat { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + let variant = match self { + Self::Unspecified => "DATA_SOURCE_FORMAT_UNSPECIFIED", + Self::Delta => "DATA_SOURCE_FORMAT_DELTA", + Self::Parquet => "DATA_SOURCE_FORMAT_PARQUET", + }; + serializer.serialize_str(variant) + } +} +impl<'de> serde::Deserialize<'de> for DataSourceFormat { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "DATA_SOURCE_FORMAT_UNSPECIFIED", + "DATA_SOURCE_FORMAT_DELTA", + "DATA_SOURCE_FORMAT_PARQUET", + ]; + + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DataSourceFormat; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + fn visit_i64(self, v: i64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) + }) + } + + fn visit_u64(self, v: u64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) + }) + } + + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "DATA_SOURCE_FORMAT_UNSPECIFIED" => Ok(DataSourceFormat::Unspecified), + "DATA_SOURCE_FORMAT_DELTA" => Ok(DataSourceFormat::Delta), + "DATA_SOURCE_FORMAT_PARQUET" => Ok(DataSourceFormat::Parquet), + _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), + } + } + } + deserializer.deserialize_any(GeneratedVisitor) + } +} +impl serde::Serialize for DeleteTableRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.full_name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.tables.v1.DeleteTableRequest", len)?; + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteTableRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "full_name", + "fullName", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + FullName, + } + 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 { + "fullName" | "full_name" => Ok(GeneratedField::FullName), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteTableRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.tables.v1.DeleteTableRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut full_name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + } + } + Ok(DeleteTableRequest { + full_name: full_name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.tables.v1.DeleteTableRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteTableResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let len = 0; + let struct_ser = serializer.serialize_struct("unitycatalog.tables.v1.DeleteTableResponse", len)?; + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteTableResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + } + 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, + { + Err(serde::de::Error::unknown_field(value, FIELDS)) + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteTableResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.tables.v1.DeleteTableResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; + } + Ok(DeleteTableResponse { + }) + } + } + deserializer.deserialize_struct("unitycatalog.tables.v1.DeleteTableResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetTableRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.full_name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.tables.v1.GetTableRequest", len)?; + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetTableRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "full_name", + "fullName", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + FullName, + } + 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 { + "fullName" | "full_name" => Ok(GeneratedField::FullName), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetTableRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.tables.v1.GetTableRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut full_name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + } + } + Ok(GetTableRequest { + full_name: full_name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.tables.v1.GetTableRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetTableResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.table.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.tables.v1.GetTableResponse", len)?; + if let Some(v) = self.table.as_ref() { + struct_ser.serialize_field("table", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetTableResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "table", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Table, + } + 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 { + "table" => Ok(GeneratedField::Table), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetTableResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.tables.v1.GetTableResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut table__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Table => { + if table__.is_some() { + return Err(serde::de::Error::duplicate_field("table")); + } + table__ = map_.next_value()?; + } + } + } + Ok(GetTableResponse { + table: table__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.tables.v1.GetTableResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListTablesRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.catalog_name.is_empty() { + len += 1; + } + if !self.schema_name.is_empty() { + len += 1; + } + if self.max_results.is_some() { + len += 1; + } + if self.page_token.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.tables.v1.ListTablesRequest", len)?; + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if !self.schema_name.is_empty() { + struct_ser.serialize_field("schemaName", &self.schema_name)?; + } + if let Some(v) = self.max_results.as_ref() { + struct_ser.serialize_field("maxResults", v)?; + } + if let Some(v) = self.page_token.as_ref() { + struct_ser.serialize_field("pageToken", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListTablesRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "catalog_name", + "catalogName", + "schema_name", + "schemaName", + "max_results", + "maxResults", + "page_token", + "pageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + CatalogName, + SchemaName, + MaxResults, + PageToken, + } + 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 { + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "schemaName" | "schema_name" => Ok(GeneratedField::SchemaName), + "maxResults" | "max_results" => Ok(GeneratedField::MaxResults), + "pageToken" | "page_token" => Ok(GeneratedField::PageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListTablesRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.tables.v1.ListTablesRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut catalog_name__ = None; + let mut schema_name__ = None; + let mut max_results__ = None; + let mut page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::SchemaName => { + if schema_name__.is_some() { + return Err(serde::de::Error::duplicate_field("schemaName")); + } + schema_name__ = Some(map_.next_value()?); + } + GeneratedField::MaxResults => { + if max_results__.is_some() { + return Err(serde::de::Error::duplicate_field("maxResults")); + } + max_results__ = + map_.next_value::<::std::option::Option<::pbjson::private::NumberDeserialize<_>>>()?.map(|x| x.0) + ; + } + GeneratedField::PageToken => { + if page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("pageToken")); + } + page_token__ = map_.next_value()?; + } + } + } + Ok(ListTablesRequest { + catalog_name: catalog_name__.unwrap_or_default(), + schema_name: schema_name__.unwrap_or_default(), + max_results: max_results__, + page_token: page_token__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.tables.v1.ListTablesRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListTablesResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.tables.is_empty() { + len += 1; + } + if !self.next_page_token.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.tables.v1.ListTablesResponse", len)?; + if !self.tables.is_empty() { + struct_ser.serialize_field("tables", &self.tables)?; + } + if !self.next_page_token.is_empty() { + struct_ser.serialize_field("nextPageToken", &self.next_page_token)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListTablesResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "tables", + "next_page_token", + "nextPageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Tables, + NextPageToken, + } + 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 { + "tables" => Ok(GeneratedField::Tables), + "nextPageToken" | "next_page_token" => Ok(GeneratedField::NextPageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListTablesResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.tables.v1.ListTablesResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut tables__ = None; + let mut next_page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Tables => { + if tables__.is_some() { + return Err(serde::de::Error::duplicate_field("tables")); + } + tables__ = Some(map_.next_value()?); + } + GeneratedField::NextPageToken => { + if next_page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("nextPageToken")); + } + next_page_token__ = Some(map_.next_value()?); + } + } + } + Ok(ListTablesResponse { + tables: tables__.unwrap_or_default(), + next_page_token: next_page_token__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.tables.v1.ListTablesResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for TableInfo { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if !self.catalog_name.is_empty() { + len += 1; + } + if !self.schema_name.is_empty() { + len += 1; + } + if self.table_type != 0 { + len += 1; + } + if self.data_source_format != 0 { + len += 1; + } + if !self.columns.is_empty() { + len += 1; + } + if !self.storage_location.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + if !self.properties.is_empty() { + len += 1; + } + if self.created_at != 0 { + len += 1; + } + if self.updated_at != 0 { + len += 1; + } + if !self.table_id.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.tables.v1.TableInfo", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if !self.schema_name.is_empty() { + struct_ser.serialize_field("schemaName", &self.schema_name)?; + } + if self.table_type != 0 { + let v = TableType::try_from(self.table_type) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.table_type)))?; + struct_ser.serialize_field("tableType", &v)?; + } + if self.data_source_format != 0 { + let v = DataSourceFormat::try_from(self.data_source_format) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.data_source_format)))?; + struct_ser.serialize_field("dataSourceFormat", &v)?; + } + if !self.columns.is_empty() { + struct_ser.serialize_field("columns", &self.columns)?; + } + if !self.storage_location.is_empty() { + struct_ser.serialize_field("storageLocation", &self.storage_location)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + if !self.properties.is_empty() { + struct_ser.serialize_field("properties", &self.properties)?; + } + if self.created_at != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("createdAt", ToString::to_string(&self.created_at).as_str())?; + } + if self.updated_at != 0 { + #[allow(clippy::needless_borrow)] + struct_ser.serialize_field("updatedAt", ToString::to_string(&self.updated_at).as_str())?; + } + if !self.table_id.is_empty() { + struct_ser.serialize_field("tableId", &self.table_id)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for TableInfo { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "catalog_name", + "catalogName", + "schema_name", + "schemaName", + "table_type", + "tableType", + "data_source_format", + "dataSourceFormat", + "columns", + "storage_location", + "storageLocation", + "comment", + "properties", + "created_at", + "createdAt", + "updated_at", + "updatedAt", + "table_id", + "tableId", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + CatalogName, + SchemaName, + TableType, + DataSourceFormat, + Columns, + StorageLocation, + Comment, + Properties, + CreatedAt, + UpdatedAt, + TableId, + } + 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 { + "name" => Ok(GeneratedField::Name), + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "schemaName" | "schema_name" => Ok(GeneratedField::SchemaName), + "tableType" | "table_type" => Ok(GeneratedField::TableType), + "dataSourceFormat" | "data_source_format" => Ok(GeneratedField::DataSourceFormat), + "columns" => Ok(GeneratedField::Columns), + "storageLocation" | "storage_location" => Ok(GeneratedField::StorageLocation), + "comment" => Ok(GeneratedField::Comment), + "properties" => Ok(GeneratedField::Properties), + "createdAt" | "created_at" => Ok(GeneratedField::CreatedAt), + "updatedAt" | "updated_at" => Ok(GeneratedField::UpdatedAt), + "tableId" | "table_id" => Ok(GeneratedField::TableId), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TableInfo; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.tables.v1.TableInfo") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut catalog_name__ = None; + let mut schema_name__ = None; + let mut table_type__ = None; + let mut data_source_format__ = None; + let mut columns__ = None; + let mut storage_location__ = None; + let mut comment__ = None; + let mut properties__ = None; + let mut created_at__ = None; + let mut updated_at__ = None; + let mut table_id__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::SchemaName => { + if schema_name__.is_some() { + return Err(serde::de::Error::duplicate_field("schemaName")); + } + schema_name__ = Some(map_.next_value()?); + } + GeneratedField::TableType => { + if table_type__.is_some() { + return Err(serde::de::Error::duplicate_field("tableType")); + } + table_type__ = Some(map_.next_value::()? as i32); + } + GeneratedField::DataSourceFormat => { + if data_source_format__.is_some() { + return Err(serde::de::Error::duplicate_field("dataSourceFormat")); + } + data_source_format__ = Some(map_.next_value::()? as i32); + } + GeneratedField::Columns => { + if columns__.is_some() { + return Err(serde::de::Error::duplicate_field("columns")); + } + columns__ = Some(map_.next_value()?); + } + GeneratedField::StorageLocation => { + if storage_location__.is_some() { + return Err(serde::de::Error::duplicate_field("storageLocation")); + } + storage_location__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + GeneratedField::Properties => { + if properties__.is_some() { + return Err(serde::de::Error::duplicate_field("properties")); + } + properties__ = Some( + map_.next_value::>()? + ); + } + GeneratedField::CreatedAt => { + if created_at__.is_some() { + return Err(serde::de::Error::duplicate_field("createdAt")); + } + created_at__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::UpdatedAt => { + if updated_at__.is_some() { + return Err(serde::de::Error::duplicate_field("updatedAt")); + } + updated_at__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::TableId => { + if table_id__.is_some() { + return Err(serde::de::Error::duplicate_field("tableId")); + } + table_id__ = Some(map_.next_value()?); + } + } + } + Ok(TableInfo { + name: name__.unwrap_or_default(), + catalog_name: catalog_name__.unwrap_or_default(), + schema_name: schema_name__.unwrap_or_default(), + table_type: table_type__.unwrap_or_default(), + data_source_format: data_source_format__.unwrap_or_default(), + columns: columns__.unwrap_or_default(), + storage_location: storage_location__.unwrap_or_default(), + comment: comment__, + properties: properties__.unwrap_or_default(), + created_at: created_at__.unwrap_or_default(), + updated_at: updated_at__.unwrap_or_default(), + table_id: table_id__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.tables.v1.TableInfo", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for TableType { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + let variant = match self { + Self::Unspecified => "TABLE_TYPE_UNSPECIFIED", + Self::Table => "TABLE_TYPE_TABLE", + Self::View => "TABLE_TYPE_VIEW", + Self::External => "TABLE_TYPE_EXTERNAL", + }; + serializer.serialize_str(variant) + } +} +impl<'de> serde::Deserialize<'de> for TableType { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "TABLE_TYPE_UNSPECIFIED", + "TABLE_TYPE_TABLE", + "TABLE_TYPE_VIEW", + "TABLE_TYPE_EXTERNAL", + ]; + + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = TableType; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + fn visit_i64(self, v: i64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) + }) + } + + fn visit_u64(self, v: u64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) + }) + } + + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "TABLE_TYPE_UNSPECIFIED" => Ok(TableType::Unspecified), + "TABLE_TYPE_TABLE" => Ok(TableType::Table), + "TABLE_TYPE_VIEW" => Ok(TableType::View), + "TABLE_TYPE_EXTERNAL" => Ok(TableType::External), + _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), + } + } + } + deserializer.deserialize_any(GeneratedVisitor) + } +} diff --git a/models/src/gen/unitycatalog.volumes.v1.rs b/models/src/gen/unitycatalog.volumes.v1.rs new file mode 100644 index 0000000..67f4e30 --- /dev/null +++ b/models/src/gen/unitycatalog.volumes.v1.rs @@ -0,0 +1,537 @@ +// @generated +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct VolumeInfo { + /// Name of the volume, relative to its parent schema. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Name of parent catalog. + #[prost(string, tag="2")] + pub catalog_name: ::prost::alloc::string::String, + /// Name of parent schema relative to its parent catalog. + #[prost(string, tag="3")] + pub schema_name: ::prost::alloc::string::String, + /// volume type. + #[prost(enumeration="VolumeType", tag="4")] + pub volume_type: i32, + /// Storage root URL for table (for MANAGED, EXTERNAL tables) + #[prost(string, tag="5")] + pub storage_location: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="8")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, +} +// TODO(roeap): there does not seem to be a properties field in the VolumeInfo, +// is this intentional? If not, we should add it? + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum VolumeType { + Unspecified = 0, +} +impl VolumeType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + VolumeType::Unspecified => "VOLUME_TYPE_UNSPECIFIED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "VOLUME_TYPE_UNSPECIFIED" => Some(Self::Unspecified), + _ => None, + } + } +} +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum VolumeOperation { + Unspecified = 0, +} +impl VolumeOperation { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + VolumeOperation::Unspecified => "VOLUME_OPERATION_UNSPECIFIED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "VOLUME_OPERATION_UNSPECIFIED" => Some(Self::Unspecified), + _ => None, + } + } +} +/// Creates a new volume. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateVolumeRequest { + /// Name of the table, relative to its parent schema. + #[prost(string, tag="1")] + pub name: ::prost::alloc::string::String, + /// Name of parent catalog. + #[prost(string, tag="2")] + pub catalog_name: ::prost::alloc::string::String, + /// Name of parent schema relative to its parent catalog. + #[prost(string, tag="3")] + pub schema_name: ::prost::alloc::string::String, + /// Table type. + #[prost(enumeration="VolumeType", tag="4")] + pub volume_type: i32, + /// Storage root URL for table (for MANAGED, EXTERNAL tables) + #[prost(string, tag="5")] + pub storage_location: ::prost::alloc::string::String, + /// User-provided free-form text description. + #[prost(string, optional, tag="6")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, +} +/// Response for CreateVolumeRequest. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct CreateVolumeResponse { + /// The created volume. + #[prost(message, optional, tag="1")] + pub volume: ::core::option::Option, +} +/// Deletes a volume from the specified parent catalog and schema. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteVolumeRequest { + /// Name of the volume to delete. + #[prost(string, tag="1")] + pub full_name: ::prost::alloc::string::String, +} +/// Response for DeleteVolumeRequest. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DeleteVolumeResponse { +} +/// Gets a volume for a specific catalog and schema. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetVolumeRequest { + /// Name of the volume to get. + #[prost(string, tag="1")] + pub full_name: ::prost::alloc::string::String, +} +/// Response for GetVolumeRequest. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetVolumeResponse { + /// The volume. + #[prost(message, optional, tag="1")] + pub volume: ::core::option::Option, +} +/// Gets an array of available volumes under the parent catalog and schema. +/// There is no guarantee of a specific ordering of the elements in the array. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListVolumesRequest { + /// Name of parent catalog. + #[prost(string, tag="1")] + pub catalog_name: ::prost::alloc::string::String, + /// Name of parent schema relative to its parent catalog. + #[prost(string, tag="2")] + pub schema_name: ::prost::alloc::string::String, + #[prost(int32, optional, tag="3")] + pub max_results: ::core::option::Option, + /// Specifies a page token to use. Set pageToken to the nextPageToken returned + /// by a previous list request to get the next page of results. + /// next_page_token will not be returned in a response if there are no more results available. + #[prost(string, optional, tag="4")] + pub page_token: ::core::option::Option<::prost::alloc::string::String>, +} +/// Updates the specified volume under the specified parent catalog and schema. +/// Currently only the name or the comment of the volume could be updated. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateVolumeRequest { + /// Name of the volume to update. + #[prost(string, tag="1")] + pub full_name: ::prost::alloc::string::String, + /// New name of the volume. + #[prost(string, tag="2")] + pub new_name: ::prost::alloc::string::String, + /// New comment of the volume. + #[prost(string, optional, tag="3")] + pub comment: ::core::option::Option<::prost::alloc::string::String>, +} +/// Response for UpdateVolumeRequest. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateVolumeResponse { + /// The updated volume. + #[prost(message, optional, tag="1")] + pub volume: ::core::option::Option, +} +/// Encoded file descriptor set for the `unitycatalog.volumes.v1` package +pub const FILE_DESCRIPTOR_SET: &[u8] = &[ + 0x0a, 0xe3, 0x0b, 0x0a, 0x24, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2e, + 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x9b, 0x02, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x0c, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, + 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x2a, 0x29, 0x0a, + 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x2a, 0x33, 0x0a, 0x0f, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x1c, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x4a, 0xfe, 0x07, + 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x26, 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, + 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, 0x12, 0x03, 0x02, 0x00, 0x20, 0x0a, 0x09, 0x0a, 0x02, + 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, 0x0a, 0x8a, 0x01, 0x0a, 0x02, 0x05, 0x00, 0x12, 0x04, + 0x09, 0x00, 0x0b, 0x01, 0x32, 0x7e, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x28, 0x72, 0x6f, 0x65, 0x61, + 0x70, 0x29, 0x3a, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x73, 0x65, 0x65, 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x2c, 0x0a, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x3f, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x74, + 0x2c, 0x20, 0x77, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x61, 0x64, 0x64, 0x20, + 0x69, 0x74, 0x3f, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x00, 0x01, 0x12, 0x03, 0x09, 0x05, 0x0f, + 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0a, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, + 0x05, 0x05, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x02, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x05, + 0x00, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0a, 0x1c, 0x1d, 0x0a, 0x0a, 0x0a, 0x02, 0x05, 0x01, 0x12, + 0x04, 0x0d, 0x00, 0x0f, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x05, 0x01, 0x01, 0x12, 0x03, 0x0d, 0x05, + 0x14, 0x0a, 0x0b, 0x0a, 0x04, 0x05, 0x01, 0x02, 0x00, 0x12, 0x03, 0x0e, 0x02, 0x23, 0x0a, 0x0c, + 0x0a, 0x05, 0x05, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0e, 0x02, 0x1e, 0x0a, 0x0c, 0x0a, 0x05, + 0x05, 0x01, 0x02, 0x00, 0x02, 0x12, 0x03, 0x0e, 0x21, 0x22, 0x0a, 0x0a, 0x0a, 0x02, 0x04, 0x00, + 0x12, 0x04, 0x11, 0x00, 0x26, 0x01, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x11, + 0x08, 0x12, 0x0a, 0x41, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x13, 0x02, 0x3c, 0x1a, + 0x34, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, + 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, + 0x13, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x13, 0x09, + 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x03, 0x12, 0x03, 0x13, 0x10, 0x11, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x08, 0x12, 0x03, 0x13, 0x12, 0x3b, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x13, 0x13, 0x3a, 0x0a, + 0x26, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, 0x12, 0x03, 0x16, 0x02, 0x44, 0x1a, 0x19, 0x20, 0x4e, + 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x16, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x16, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x16, 0x18, + 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x08, 0x12, 0x03, 0x16, 0x1a, 0x43, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x16, 0x1b, + 0x42, 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x02, 0x12, 0x03, 0x19, 0x02, 0x43, 0x1a, 0x37, + 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, + 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, + 0x12, 0x03, 0x19, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, + 0x19, 0x09, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x19, 0x17, + 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x08, 0x12, 0x03, 0x19, 0x19, 0x42, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x02, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x19, 0x1a, + 0x41, 0x0a, 0x1b, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x03, 0x12, 0x03, 0x1c, 0x02, 0x1d, 0x1a, 0x0e, + 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, 0x03, 0x1c, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x1c, 0x0d, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x03, 0x03, 0x12, 0x03, 0x1c, 0x1b, 0x1c, 0x0a, 0x48, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, + 0x12, 0x03, 0x1f, 0x02, 0x1e, 0x1a, 0x3b, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x20, + 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x2c, + 0x20, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x29, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x05, 0x12, 0x03, 0x1f, 0x02, 0x08, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x01, 0x12, 0x03, 0x1f, 0x09, 0x19, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, 0x03, 0x1f, 0x1c, 0x1d, 0x0a, 0x38, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x05, 0x12, 0x03, 0x22, 0x02, 0x1e, 0x1a, 0x2b, 0x20, 0x55, 0x73, 0x65, 0x72, + 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x04, 0x12, + 0x03, 0x22, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x05, 0x12, 0x03, 0x22, + 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x01, 0x12, 0x03, 0x22, 0x12, 0x19, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x03, 0x12, 0x03, 0x22, 0x1c, 0x1d, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x0a, 0xee, 0x20, 0x0a, 0x21, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x75, 0x6e, + 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x24, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa4, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, + 0x0c, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, + 0x53, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x22, 0x3b, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x09, 0x66, + 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, + 0x09, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x50, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x22, 0xdc, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0c, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, + 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, 0x02, 0x28, 0x00, + 0x48, 0x00, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x09, + 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x07, 0x6e, + 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x22, 0x53, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x75, 0x6e, 0x69, 0x74, + 0x79, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4a, 0xc6, 0x17, 0x0a, 0x06, 0x12, 0x04, 0x00, 0x00, 0x5c, + 0x01, 0x0a, 0x08, 0x0a, 0x01, 0x0c, 0x12, 0x03, 0x00, 0x00, 0x12, 0x0a, 0x08, 0x0a, 0x01, 0x02, + 0x12, 0x03, 0x02, 0x00, 0x20, 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x00, 0x12, 0x03, 0x04, 0x00, 0x25, + 0x0a, 0x09, 0x0a, 0x02, 0x03, 0x01, 0x12, 0x03, 0x05, 0x00, 0x2e, 0x0a, 0x23, 0x0a, 0x02, 0x04, + 0x00, 0x12, 0x04, 0x08, 0x00, 0x1d, 0x01, 0x1a, 0x17, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x2e, 0x0a, + 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x00, 0x01, 0x12, 0x03, 0x08, 0x08, 0x1b, 0x0a, 0x40, 0x0a, 0x04, + 0x04, 0x00, 0x02, 0x00, 0x12, 0x03, 0x0a, 0x02, 0x3c, 0x1a, 0x33, 0x20, 0x4e, 0x61, 0x6d, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, 0x05, 0x12, 0x03, 0x0a, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x00, 0x01, 0x12, 0x03, 0x0a, 0x09, 0x0d, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x00, 0x03, 0x12, 0x03, 0x0a, 0x10, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x00, + 0x08, 0x12, 0x03, 0x0a, 0x12, 0x3b, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x00, 0x08, 0x87, + 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0a, 0x13, 0x3a, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x01, + 0x12, 0x03, 0x0d, 0x02, 0x44, 0x1a, 0x19, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x05, 0x12, 0x03, 0x0d, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x01, 0x01, 0x12, 0x03, 0x0d, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x01, 0x03, 0x12, 0x03, 0x0d, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x01, 0x08, 0x12, 0x03, 0x0d, 0x1a, 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x01, + 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x0d, 0x1b, 0x42, 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x02, 0x12, 0x03, 0x10, 0x02, 0x43, 0x1a, 0x37, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, + 0x66, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x05, 0x12, 0x03, 0x10, 0x02, 0x08, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x02, 0x01, 0x12, 0x03, 0x10, 0x09, 0x14, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x02, 0x03, 0x12, 0x03, 0x10, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x02, 0x08, 0x12, 0x03, 0x10, 0x19, 0x42, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x00, 0x02, 0x02, + 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x10, 0x1a, 0x41, 0x0a, 0x1a, 0x0a, 0x04, 0x04, 0x00, + 0x02, 0x03, 0x12, 0x03, 0x13, 0x02, 0x1d, 0x1a, 0x0d, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x06, 0x12, + 0x03, 0x13, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x01, 0x12, 0x03, 0x13, + 0x0d, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x03, 0x03, 0x12, 0x03, 0x13, 0x1b, 0x1c, + 0x0a, 0x48, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x04, 0x12, 0x03, 0x16, 0x02, 0x1e, 0x1a, 0x3b, 0x20, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x55, 0x52, 0x4c, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x20, + 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x2c, 0x20, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, + 0x4c, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x29, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x04, 0x05, 0x12, 0x03, 0x16, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, + 0x01, 0x12, 0x03, 0x16, 0x09, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x04, 0x03, 0x12, + 0x03, 0x16, 0x1c, 0x1d, 0x0a, 0x38, 0x0a, 0x04, 0x04, 0x00, 0x02, 0x05, 0x12, 0x03, 0x19, 0x02, + 0x1e, 0x1a, 0x2b, 0x20, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x64, 0x20, 0x66, 0x72, 0x65, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x65, 0x78, 0x74, + 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, 0x04, 0x12, 0x03, 0x19, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x00, 0x02, 0x05, 0x05, 0x12, 0x03, 0x19, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, + 0x02, 0x05, 0x01, 0x12, 0x03, 0x19, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x00, 0x02, 0x05, + 0x03, 0x12, 0x03, 0x19, 0x1c, 0x1d, 0x0a, 0x2f, 0x0a, 0x02, 0x04, 0x01, 0x12, 0x04, 0x20, 0x00, + 0x23, 0x01, 0x1a, 0x23, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x01, 0x01, 0x12, 0x03, + 0x20, 0x08, 0x1c, 0x0a, 0x22, 0x0a, 0x04, 0x04, 0x01, 0x02, 0x00, 0x12, 0x03, 0x22, 0x02, 0x18, + 0x1a, 0x15, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x06, + 0x12, 0x03, 0x22, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x01, 0x12, 0x03, + 0x22, 0x0d, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x01, 0x02, 0x00, 0x03, 0x12, 0x03, 0x22, 0x16, + 0x17, 0x0a, 0x4c, 0x0a, 0x02, 0x04, 0x02, 0x12, 0x04, 0x26, 0x00, 0x29, 0x01, 0x1a, 0x40, 0x20, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x65, 0x64, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x02, 0x01, 0x12, 0x03, 0x26, 0x08, 0x1b, 0x0a, 0x2c, 0x0a, 0x04, 0x04, + 0x02, 0x02, 0x00, 0x12, 0x03, 0x28, 0x02, 0x41, 0x1a, 0x1f, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, + 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, + 0x00, 0x05, 0x12, 0x03, 0x28, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x28, 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x28, 0x15, 0x16, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x02, 0x02, 0x00, 0x08, 0x12, 0x03, 0x28, 0x17, + 0x40, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x02, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, + 0x28, 0x18, 0x3f, 0x0a, 0x2e, 0x0a, 0x02, 0x04, 0x03, 0x12, 0x03, 0x2c, 0x00, 0x1f, 0x1a, 0x23, + 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x03, 0x01, 0x12, 0x03, 0x2c, 0x08, 0x1c, 0x0a, + 0x3e, 0x0a, 0x02, 0x04, 0x04, 0x12, 0x04, 0x2f, 0x00, 0x32, 0x01, 0x1a, 0x32, 0x20, 0x47, 0x65, + 0x74, 0x73, 0x20, 0x61, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x0a, + 0x0a, 0x0a, 0x03, 0x04, 0x04, 0x01, 0x12, 0x03, 0x2f, 0x08, 0x18, 0x0a, 0x29, 0x0a, 0x04, 0x04, + 0x04, 0x02, 0x00, 0x12, 0x03, 0x31, 0x02, 0x41, 0x1a, 0x1c, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, + 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x67, 0x65, 0x74, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x05, 0x12, + 0x03, 0x31, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x01, 0x12, 0x03, 0x31, + 0x09, 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x03, 0x12, 0x03, 0x31, 0x15, 0x16, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x04, 0x02, 0x00, 0x08, 0x12, 0x03, 0x31, 0x17, 0x40, 0x0a, 0x10, + 0x0a, 0x09, 0x04, 0x04, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x31, 0x18, 0x3f, + 0x0a, 0x2c, 0x0a, 0x02, 0x04, 0x05, 0x12, 0x04, 0x35, 0x00, 0x38, 0x01, 0x1a, 0x20, 0x20, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x47, 0x65, 0x74, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, + 0x0a, 0x03, 0x04, 0x05, 0x01, 0x12, 0x03, 0x35, 0x08, 0x19, 0x0a, 0x1a, 0x0a, 0x04, 0x04, 0x05, + 0x02, 0x00, 0x12, 0x03, 0x37, 0x02, 0x18, 0x1a, 0x0d, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x06, 0x12, + 0x03, 0x37, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x01, 0x12, 0x03, 0x37, + 0x0d, 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x05, 0x02, 0x00, 0x03, 0x12, 0x03, 0x37, 0x16, 0x17, + 0x0a, 0xa2, 0x01, 0x0a, 0x02, 0x04, 0x06, 0x12, 0x04, 0x3c, 0x00, 0x49, 0x01, 0x1a, 0x95, 0x01, + 0x20, 0x47, 0x65, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x6f, + 0x66, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, + 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x20, + 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, + 0x72, 0x61, 0x79, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x06, 0x01, 0x12, 0x03, 0x3c, 0x08, + 0x1a, 0x0a, 0x26, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x00, 0x12, 0x03, 0x3e, 0x02, 0x44, 0x1a, 0x19, + 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x00, 0x05, 0x12, 0x03, 0x3e, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x01, + 0x12, 0x03, 0x3e, 0x09, 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x03, 0x12, 0x03, + 0x3e, 0x18, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x00, 0x08, 0x12, 0x03, 0x3e, 0x1a, + 0x43, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, + 0x3e, 0x1b, 0x42, 0x0a, 0x44, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x01, 0x12, 0x03, 0x41, 0x02, 0x43, + 0x1a, 0x37, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, + 0x01, 0x05, 0x12, 0x03, 0x41, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x01, + 0x12, 0x03, 0x41, 0x09, 0x14, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x03, 0x12, 0x03, + 0x41, 0x17, 0x18, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x01, 0x08, 0x12, 0x03, 0x41, 0x19, + 0x42, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, + 0x41, 0x1a, 0x41, 0x0a, 0x0b, 0x0a, 0x04, 0x04, 0x06, 0x02, 0x02, 0x12, 0x03, 0x43, 0x02, 0x46, + 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x04, 0x12, 0x03, 0x43, 0x02, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, 0x05, 0x12, 0x03, 0x43, 0x0b, 0x10, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x02, 0x01, 0x12, 0x03, 0x43, 0x11, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x02, 0x03, 0x12, 0x03, 0x43, 0x1f, 0x20, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x02, + 0x08, 0x12, 0x03, 0x43, 0x21, 0x45, 0x0a, 0x10, 0x0a, 0x09, 0x04, 0x06, 0x02, 0x02, 0x08, 0x87, + 0x09, 0x03, 0x05, 0x12, 0x03, 0x43, 0x22, 0x44, 0x0a, 0xf3, 0x01, 0x0a, 0x04, 0x04, 0x06, 0x02, + 0x03, 0x12, 0x03, 0x48, 0x02, 0x21, 0x1a, 0xe5, 0x01, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, + 0x69, 0x65, 0x73, 0x20, 0x61, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2e, 0x20, 0x53, 0x65, 0x74, 0x20, 0x70, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, + 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x65, 0x64, 0x0a, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x20, 0x74, 0x6f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x78, 0x74, + 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x2e, 0x0a, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, + 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, + 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, 0x04, 0x12, 0x03, 0x48, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x06, 0x02, 0x03, 0x05, 0x12, 0x03, 0x48, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, + 0x02, 0x03, 0x01, 0x12, 0x03, 0x48, 0x12, 0x1c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x06, 0x02, 0x03, + 0x03, 0x12, 0x03, 0x48, 0x1f, 0x20, 0x0a, 0xa2, 0x01, 0x0a, 0x02, 0x04, 0x07, 0x12, 0x04, 0x4d, + 0x00, 0x56, 0x01, 0x1a, 0x95, 0x01, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, + 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x0a, 0x20, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x6f, 0x6e, + 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, + 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, + 0x07, 0x01, 0x12, 0x03, 0x4d, 0x08, 0x1b, 0x0a, 0x2c, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x00, 0x12, + 0x03, 0x4f, 0x02, 0x41, 0x1a, 0x1f, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x05, 0x12, 0x03, + 0x4f, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x01, 0x12, 0x03, 0x4f, 0x09, + 0x12, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x03, 0x12, 0x03, 0x4f, 0x15, 0x16, 0x0a, + 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x00, 0x08, 0x12, 0x03, 0x4f, 0x17, 0x40, 0x0a, 0x10, 0x0a, + 0x09, 0x04, 0x07, 0x02, 0x00, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x4f, 0x18, 0x3f, 0x0a, + 0x26, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x01, 0x12, 0x03, 0x52, 0x02, 0x40, 0x1a, 0x19, 0x20, 0x4e, + 0x65, 0x77, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x05, + 0x12, 0x03, 0x52, 0x02, 0x08, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x01, 0x12, 0x03, + 0x52, 0x09, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x03, 0x12, 0x03, 0x52, 0x14, + 0x15, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x01, 0x08, 0x12, 0x03, 0x52, 0x16, 0x3f, 0x0a, + 0x10, 0x0a, 0x09, 0x04, 0x07, 0x02, 0x01, 0x08, 0x87, 0x09, 0x0e, 0x02, 0x12, 0x03, 0x52, 0x17, + 0x3e, 0x0a, 0x29, 0x0a, 0x04, 0x04, 0x07, 0x02, 0x02, 0x12, 0x03, 0x55, 0x02, 0x1e, 0x1a, 0x1c, + 0x20, 0x4e, 0x65, 0x77, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, + 0x04, 0x07, 0x02, 0x02, 0x04, 0x12, 0x03, 0x55, 0x02, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, + 0x02, 0x02, 0x05, 0x12, 0x03, 0x55, 0x0b, 0x11, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, + 0x01, 0x12, 0x03, 0x55, 0x12, 0x19, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x07, 0x02, 0x02, 0x03, 0x12, + 0x03, 0x55, 0x1c, 0x1d, 0x0a, 0x2f, 0x0a, 0x02, 0x04, 0x08, 0x12, 0x04, 0x59, 0x00, 0x5c, 0x01, + 0x1a, 0x23, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x03, 0x04, 0x08, 0x01, 0x12, 0x03, 0x59, 0x08, + 0x1c, 0x0a, 0x22, 0x0a, 0x04, 0x04, 0x08, 0x02, 0x00, 0x12, 0x03, 0x5b, 0x02, 0x18, 0x1a, 0x15, + 0x20, 0x54, 0x68, 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x06, 0x12, 0x03, + 0x5b, 0x02, 0x0c, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x01, 0x12, 0x03, 0x5b, 0x0d, + 0x13, 0x0a, 0x0c, 0x0a, 0x05, 0x04, 0x08, 0x02, 0x00, 0x03, 0x12, 0x03, 0x5b, 0x16, 0x17, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +]; +include!("unitycatalog.volumes.v1.serde.rs"); +// @@protoc_insertion_point(module) \ No newline at end of file diff --git a/models/src/gen/unitycatalog.volumes.v1.serde.rs b/models/src/gen/unitycatalog.volumes.v1.serde.rs new file mode 100644 index 0000000..258d95d --- /dev/null +++ b/models/src/gen/unitycatalog.volumes.v1.serde.rs @@ -0,0 +1,1304 @@ +// @generated +impl serde::Serialize for CreateVolumeRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if !self.catalog_name.is_empty() { + len += 1; + } + if !self.schema_name.is_empty() { + len += 1; + } + if self.volume_type != 0 { + len += 1; + } + if !self.storage_location.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.volumes.v1.CreateVolumeRequest", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if !self.schema_name.is_empty() { + struct_ser.serialize_field("schemaName", &self.schema_name)?; + } + if self.volume_type != 0 { + let v = VolumeType::try_from(self.volume_type) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.volume_type)))?; + struct_ser.serialize_field("volumeType", &v)?; + } + if !self.storage_location.is_empty() { + struct_ser.serialize_field("storageLocation", &self.storage_location)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateVolumeRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "catalog_name", + "catalogName", + "schema_name", + "schemaName", + "volume_type", + "volumeType", + "storage_location", + "storageLocation", + "comment", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + CatalogName, + SchemaName, + VolumeType, + StorageLocation, + Comment, + } + 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 { + "name" => Ok(GeneratedField::Name), + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "schemaName" | "schema_name" => Ok(GeneratedField::SchemaName), + "volumeType" | "volume_type" => Ok(GeneratedField::VolumeType), + "storageLocation" | "storage_location" => Ok(GeneratedField::StorageLocation), + "comment" => Ok(GeneratedField::Comment), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateVolumeRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.volumes.v1.CreateVolumeRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut catalog_name__ = None; + let mut schema_name__ = None; + let mut volume_type__ = None; + let mut storage_location__ = None; + let mut comment__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::SchemaName => { + if schema_name__.is_some() { + return Err(serde::de::Error::duplicate_field("schemaName")); + } + schema_name__ = Some(map_.next_value()?); + } + GeneratedField::VolumeType => { + if volume_type__.is_some() { + return Err(serde::de::Error::duplicate_field("volumeType")); + } + volume_type__ = Some(map_.next_value::()? as i32); + } + GeneratedField::StorageLocation => { + if storage_location__.is_some() { + return Err(serde::de::Error::duplicate_field("storageLocation")); + } + storage_location__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + } + } + Ok(CreateVolumeRequest { + name: name__.unwrap_or_default(), + catalog_name: catalog_name__.unwrap_or_default(), + schema_name: schema_name__.unwrap_or_default(), + volume_type: volume_type__.unwrap_or_default(), + storage_location: storage_location__.unwrap_or_default(), + comment: comment__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.volumes.v1.CreateVolumeRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for CreateVolumeResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.volume.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.volumes.v1.CreateVolumeResponse", len)?; + if let Some(v) = self.volume.as_ref() { + struct_ser.serialize_field("volume", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for CreateVolumeResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "volume", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Volume, + } + 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 { + "volume" => Ok(GeneratedField::Volume), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = CreateVolumeResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.volumes.v1.CreateVolumeResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut volume__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Volume => { + if volume__.is_some() { + return Err(serde::de::Error::duplicate_field("volume")); + } + volume__ = map_.next_value()?; + } + } + } + Ok(CreateVolumeResponse { + volume: volume__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.volumes.v1.CreateVolumeResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteVolumeRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.full_name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.volumes.v1.DeleteVolumeRequest", len)?; + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteVolumeRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "full_name", + "fullName", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + FullName, + } + 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 { + "fullName" | "full_name" => Ok(GeneratedField::FullName), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteVolumeRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.volumes.v1.DeleteVolumeRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut full_name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + } + } + Ok(DeleteVolumeRequest { + full_name: full_name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.volumes.v1.DeleteVolumeRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for DeleteVolumeResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let len = 0; + let struct_ser = serializer.serialize_struct("unitycatalog.volumes.v1.DeleteVolumeResponse", len)?; + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DeleteVolumeResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + } + 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, + { + Err(serde::de::Error::unknown_field(value, FIELDS)) + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DeleteVolumeResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.volumes.v1.DeleteVolumeResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + while map_.next_key::()?.is_some() { + let _ = map_.next_value::()?; + } + Ok(DeleteVolumeResponse { + }) + } + } + deserializer.deserialize_struct("unitycatalog.volumes.v1.DeleteVolumeResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetVolumeRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.full_name.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.volumes.v1.GetVolumeRequest", len)?; + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetVolumeRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "full_name", + "fullName", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + FullName, + } + 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 { + "fullName" | "full_name" => Ok(GeneratedField::FullName), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetVolumeRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.volumes.v1.GetVolumeRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut full_name__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + } + } + Ok(GetVolumeRequest { + full_name: full_name__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("unitycatalog.volumes.v1.GetVolumeRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GetVolumeResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.volume.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.volumes.v1.GetVolumeResponse", len)?; + if let Some(v) = self.volume.as_ref() { + struct_ser.serialize_field("volume", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GetVolumeResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "volume", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Volume, + } + 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 { + "volume" => Ok(GeneratedField::Volume), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GetVolumeResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.volumes.v1.GetVolumeResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut volume__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Volume => { + if volume__.is_some() { + return Err(serde::de::Error::duplicate_field("volume")); + } + volume__ = map_.next_value()?; + } + } + } + Ok(GetVolumeResponse { + volume: volume__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.volumes.v1.GetVolumeResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for ListVolumesRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.catalog_name.is_empty() { + len += 1; + } + if !self.schema_name.is_empty() { + len += 1; + } + if self.max_results.is_some() { + len += 1; + } + if self.page_token.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.volumes.v1.ListVolumesRequest", len)?; + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if !self.schema_name.is_empty() { + struct_ser.serialize_field("schemaName", &self.schema_name)?; + } + if let Some(v) = self.max_results.as_ref() { + struct_ser.serialize_field("maxResults", v)?; + } + if let Some(v) = self.page_token.as_ref() { + struct_ser.serialize_field("pageToken", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for ListVolumesRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "catalog_name", + "catalogName", + "schema_name", + "schemaName", + "max_results", + "maxResults", + "page_token", + "pageToken", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + CatalogName, + SchemaName, + MaxResults, + PageToken, + } + 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 { + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "schemaName" | "schema_name" => Ok(GeneratedField::SchemaName), + "maxResults" | "max_results" => Ok(GeneratedField::MaxResults), + "pageToken" | "page_token" => Ok(GeneratedField::PageToken), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = ListVolumesRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.volumes.v1.ListVolumesRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut catalog_name__ = None; + let mut schema_name__ = None; + let mut max_results__ = None; + let mut page_token__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::SchemaName => { + if schema_name__.is_some() { + return Err(serde::de::Error::duplicate_field("schemaName")); + } + schema_name__ = Some(map_.next_value()?); + } + GeneratedField::MaxResults => { + if max_results__.is_some() { + return Err(serde::de::Error::duplicate_field("maxResults")); + } + max_results__ = + map_.next_value::<::std::option::Option<::pbjson::private::NumberDeserialize<_>>>()?.map(|x| x.0) + ; + } + GeneratedField::PageToken => { + if page_token__.is_some() { + return Err(serde::de::Error::duplicate_field("pageToken")); + } + page_token__ = map_.next_value()?; + } + } + } + Ok(ListVolumesRequest { + catalog_name: catalog_name__.unwrap_or_default(), + schema_name: schema_name__.unwrap_or_default(), + max_results: max_results__, + page_token: page_token__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.volumes.v1.ListVolumesRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateVolumeRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.full_name.is_empty() { + len += 1; + } + if !self.new_name.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.volumes.v1.UpdateVolumeRequest", len)?; + if !self.full_name.is_empty() { + struct_ser.serialize_field("fullName", &self.full_name)?; + } + if !self.new_name.is_empty() { + struct_ser.serialize_field("newName", &self.new_name)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateVolumeRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "full_name", + "fullName", + "new_name", + "newName", + "comment", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + FullName, + NewName, + Comment, + } + 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 { + "fullName" | "full_name" => Ok(GeneratedField::FullName), + "newName" | "new_name" => Ok(GeneratedField::NewName), + "comment" => Ok(GeneratedField::Comment), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateVolumeRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.volumes.v1.UpdateVolumeRequest") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut full_name__ = None; + let mut new_name__ = None; + let mut comment__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::FullName => { + if full_name__.is_some() { + return Err(serde::de::Error::duplicate_field("fullName")); + } + full_name__ = Some(map_.next_value()?); + } + GeneratedField::NewName => { + if new_name__.is_some() { + return Err(serde::de::Error::duplicate_field("newName")); + } + new_name__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + } + } + Ok(UpdateVolumeRequest { + full_name: full_name__.unwrap_or_default(), + new_name: new_name__.unwrap_or_default(), + comment: comment__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.volumes.v1.UpdateVolumeRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for UpdateVolumeResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.volume.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.volumes.v1.UpdateVolumeResponse", len)?; + if let Some(v) = self.volume.as_ref() { + struct_ser.serialize_field("volume", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for UpdateVolumeResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "volume", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Volume, + } + 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 { + "volume" => Ok(GeneratedField::Volume), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = UpdateVolumeResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.volumes.v1.UpdateVolumeResponse") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut volume__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Volume => { + if volume__.is_some() { + return Err(serde::de::Error::duplicate_field("volume")); + } + volume__ = map_.next_value()?; + } + } + } + Ok(UpdateVolumeResponse { + volume: volume__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.volumes.v1.UpdateVolumeResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for VolumeInfo { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.name.is_empty() { + len += 1; + } + if !self.catalog_name.is_empty() { + len += 1; + } + if !self.schema_name.is_empty() { + len += 1; + } + if self.volume_type != 0 { + len += 1; + } + if !self.storage_location.is_empty() { + len += 1; + } + if self.comment.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("unitycatalog.volumes.v1.VolumeInfo", len)?; + if !self.name.is_empty() { + struct_ser.serialize_field("name", &self.name)?; + } + if !self.catalog_name.is_empty() { + struct_ser.serialize_field("catalogName", &self.catalog_name)?; + } + if !self.schema_name.is_empty() { + struct_ser.serialize_field("schemaName", &self.schema_name)?; + } + if self.volume_type != 0 { + let v = VolumeType::try_from(self.volume_type) + .map_err(|_| serde::ser::Error::custom(format!("Invalid variant {}", self.volume_type)))?; + struct_ser.serialize_field("volumeType", &v)?; + } + if !self.storage_location.is_empty() { + struct_ser.serialize_field("storageLocation", &self.storage_location)?; + } + if let Some(v) = self.comment.as_ref() { + struct_ser.serialize_field("comment", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for VolumeInfo { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "name", + "catalog_name", + "catalogName", + "schema_name", + "schemaName", + "volume_type", + "volumeType", + "storage_location", + "storageLocation", + "comment", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Name, + CatalogName, + SchemaName, + VolumeType, + StorageLocation, + Comment, + } + 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 { + "name" => Ok(GeneratedField::Name), + "catalogName" | "catalog_name" => Ok(GeneratedField::CatalogName), + "schemaName" | "schema_name" => Ok(GeneratedField::SchemaName), + "volumeType" | "volume_type" => Ok(GeneratedField::VolumeType), + "storageLocation" | "storage_location" => Ok(GeneratedField::StorageLocation), + "comment" => Ok(GeneratedField::Comment), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = VolumeInfo; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct unitycatalog.volumes.v1.VolumeInfo") + } + + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut name__ = None; + let mut catalog_name__ = None; + let mut schema_name__ = None; + let mut volume_type__ = None; + let mut storage_location__ = None; + let mut comment__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::Name => { + if name__.is_some() { + return Err(serde::de::Error::duplicate_field("name")); + } + name__ = Some(map_.next_value()?); + } + GeneratedField::CatalogName => { + if catalog_name__.is_some() { + return Err(serde::de::Error::duplicate_field("catalogName")); + } + catalog_name__ = Some(map_.next_value()?); + } + GeneratedField::SchemaName => { + if schema_name__.is_some() { + return Err(serde::de::Error::duplicate_field("schemaName")); + } + schema_name__ = Some(map_.next_value()?); + } + GeneratedField::VolumeType => { + if volume_type__.is_some() { + return Err(serde::de::Error::duplicate_field("volumeType")); + } + volume_type__ = Some(map_.next_value::()? as i32); + } + GeneratedField::StorageLocation => { + if storage_location__.is_some() { + return Err(serde::de::Error::duplicate_field("storageLocation")); + } + storage_location__ = Some(map_.next_value()?); + } + GeneratedField::Comment => { + if comment__.is_some() { + return Err(serde::de::Error::duplicate_field("comment")); + } + comment__ = map_.next_value()?; + } + } + } + Ok(VolumeInfo { + name: name__.unwrap_or_default(), + catalog_name: catalog_name__.unwrap_or_default(), + schema_name: schema_name__.unwrap_or_default(), + volume_type: volume_type__.unwrap_or_default(), + storage_location: storage_location__.unwrap_or_default(), + comment: comment__, + }) + } + } + deserializer.deserialize_struct("unitycatalog.volumes.v1.VolumeInfo", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for VolumeOperation { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + let variant = match self { + Self::Unspecified => "VOLUME_OPERATION_UNSPECIFIED", + }; + serializer.serialize_str(variant) + } +} +impl<'de> serde::Deserialize<'de> for VolumeOperation { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "VOLUME_OPERATION_UNSPECIFIED", + ]; + + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = VolumeOperation; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + fn visit_i64(self, v: i64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) + }) + } + + fn visit_u64(self, v: u64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) + }) + } + + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "VOLUME_OPERATION_UNSPECIFIED" => Ok(VolumeOperation::Unspecified), + _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), + } + } + } + deserializer.deserialize_any(GeneratedVisitor) + } +} +impl serde::Serialize for VolumeType { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + let variant = match self { + Self::Unspecified => "VOLUME_TYPE_UNSPECIFIED", + }; + serializer.serialize_str(variant) + } +} +impl<'de> serde::Deserialize<'de> for VolumeType { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "VOLUME_TYPE_UNSPECIFIED", + ]; + + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = VolumeType; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + fn visit_i64(self, v: i64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Signed(v), &self) + }) + } + + fn visit_u64(self, v: u64) -> std::result::Result + where + E: serde::de::Error, + { + i32::try_from(v) + .ok() + .and_then(|x| x.try_into().ok()) + .ok_or_else(|| { + serde::de::Error::invalid_value(serde::de::Unexpected::Unsigned(v), &self) + }) + } + + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "VOLUME_TYPE_UNSPECIFIED" => Ok(VolumeType::Unspecified), + _ => Err(serde::de::Error::unknown_variant(value, FIELDS)), + } + } + } + deserializer.deserialize_any(GeneratedVisitor) + } +} diff --git a/models/src/lib.rs b/models/src/lib.rs index 2312d5e..02cdab4 100644 --- a/models/src/lib.rs +++ b/models/src/lib.rs @@ -4,4 +4,37 @@ extern crate serde; extern crate serde_json; +pub mod types { + + pub mod catalogs { + pub mod v1 { + include!("gen/unitycatalog.catalogs.v1.rs"); + } + } + + pub mod schemas { + pub mod v1 { + include!("gen/unitycatalog.schemas.v1.rs"); + } + } + + pub mod tables { + pub mod v1 { + include!("gen/unitycatalog.tables.v1.rs"); + } + } + + pub mod volumes { + pub mod v1 { + include!("gen/unitycatalog.volumes.v1.rs"); + } + } + + pub mod functions { + pub mod v1 { + include!("gen/unitycatalog.functions.v1.rs"); + } + } +} + pub mod models; diff --git a/proto/buf.lock b/proto/buf.lock new file mode 100644 index 0000000..53f9512 --- /dev/null +++ b/proto/buf.lock @@ -0,0 +1,8 @@ +# Generated by buf. DO NOT EDIT. +version: v1 +deps: + - remote: buf.build + owner: bufbuild + repository: protovalidate + commit: 46a4cf4ba1094a34bcd89a6c67163b4b + digest: shake256:436ce453801917c11bc7b21d66bcfae87da2aceb804a041487be1e51dc9fbc219e61ea6a552db7a7aa6d63bb5efd0f3ed5fe3d4c42d4f750d0eb35f14144e3b6 diff --git a/proto/buf.yaml b/proto/buf.yaml new file mode 100644 index 0000000..235cd4f --- /dev/null +++ b/proto/buf.yaml @@ -0,0 +1,4 @@ +version: v1 +name: buf.build/delta/delta +deps: + - buf.build/bufbuild/protovalidate diff --git a/proto/unitycatalog/catalogs/v1/api.proto b/proto/unitycatalog/catalogs/v1/api.proto new file mode 100644 index 0000000..4894ae5 --- /dev/null +++ b/proto/unitycatalog/catalogs/v1/api.proto @@ -0,0 +1,105 @@ +syntax = "proto3"; + +package unitycatalog.catalogs.v1; + +import "buf/validate/validate.proto"; +import "unitycatalog/catalogs/v1/models.proto"; + +// Creates a new catalog instance. +message CreateCatalogRequest { + // The name of the catalog. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // User-provided free-form text description. + optional string comment = 2; + + // A map of key-value properties attached to the securable. + map properties = 3; +} + +message CreateCatalogResponse { + // The newly created catalog. + CatalogInfo catalog = 1; +} + +// Deletes the catalog that matches the supplied name. +message DeleteCatalogRequest { + // The name of the catalog. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // Force deletion even if the catalog is not empty. + optional bool force = 2; +} + +message DeleteCatalogResponse {} + +// Gets the specified catalog. +message GetCatalogRequest { + // The name of the catalog. + string name = 1 [(buf.validate.field).string.min_len = 1]; +} + +message GetCatalogResponse { + // The catalog. + CatalogInfo catalog = 1; +} + +// Lists all catalogs. +message ListCatalogsRequest { + // The maximum number of results per page that should be returned. + // If the number of available results is larger than maxResults, the response + // will provide a next_page_token that can be used to get the next page of results + // in subsequent list requests. The server may return fewer than maxResults + // items even if there are more available. The client should check nextPageToken + // in the response to determine if there are more available. + // Must be non-negative. 0 will return no results but nextPageToken may be populated. + optional int32 max_results = 1 [(buf.validate.field).int32.gte = 0]; + + // Specifies a page token to use. Set pageToken to the nextPageToken returned + // by a previous list request to get the next page of results. + // next_page_token will not be returned in a response if there are no more results available. + optional string page_token = 2; +} + +message ListCatalogsResponse { + // The list of catalogs. + repeated CatalogInfo catalogs = 1; + + // A token to retrieve the next page of results. Pass this value in ListCatalogsRequest.page_token. + optional string next_page_token = 2; +} + +// Updates the catalog that matches the supplied name. +message UpdateCatalogRequest { + // The name of the catalog. + optional string new_name = 1 [(buf.validate.field).string.min_len = 1]; + + // User-provided free-form text description. + optional string comment = 2; + + // A map of key-value properties attached to the securable. + // TODO(roeap): maps cannot be optional, how do we distinguish between an empty map and no map? + map properties = 3; +} + +message UpdateCatalogResponse { + // The updated catalog. + CatalogInfo catalog = 1; +} + +service CatalogsService { + // Creates a new catalog instance. + rpc CreateCatalog(CreateCatalogRequest) returns (CreateCatalogResponse); + + // Deletes the catalog that matches the supplied name. + rpc DeleteCatalog(DeleteCatalogRequest) returns (DeleteCatalogResponse); + + // Gets the specified catalog. + rpc GetCatalog(GetCatalogRequest) returns (GetCatalogResponse); + + // Lists all catalogs. + rpc ListCatalogs(ListCatalogsRequest) returns (ListCatalogsResponse); + + // Updates the catalog that matches the supplied name. + rpc UpdateCatalog(UpdateCatalogRequest) returns (UpdateCatalogResponse); +} diff --git a/proto/unitycatalog/catalogs/v1/models.proto b/proto/unitycatalog/catalogs/v1/models.proto new file mode 100644 index 0000000..c2a904e --- /dev/null +++ b/proto/unitycatalog/catalogs/v1/models.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; + +package unitycatalog.catalogs.v1; + +import "buf/validate/validate.proto"; + +// Creates a new catalog instance. +message CatalogInfo { + // unique identifier for the catalog. + string id = 1 [(buf.validate.field).string.min_len = 1]; + + // The name of the catalog. + string name = 2 [(buf.validate.field).string.min_len = 1]; + + // User-provided free-form text description. + optional string comment = 3; + + // A map of key-value properties attached to the securable. + map properties = 4; + + // Time at which this catalog was created, in epoch milliseconds. + int64 created_at = 5; + + // Time at which this catalog was last updated, in epoch milliseconds. + int64 updated_at = 6; +} diff --git a/proto/unitycatalog/functions/v1/api.proto b/proto/unitycatalog/functions/v1/api.proto new file mode 100644 index 0000000..6416068 --- /dev/null +++ b/proto/unitycatalog/functions/v1/api.proto @@ -0,0 +1,142 @@ +syntax = "proto3"; + +package unitycatalog.functions.v1; + +import "buf/validate/validate.proto"; +import "unitycatalog/functions/v1/models.proto"; +import "unitycatalog/tables/v1/models.proto"; + +// TODO(roeap): This type essentially just replicates the `FunctionInfo`, with a few +// fields missing. Since its quite complex and still considered experimantal, maybe +// the types can be consolidated. +message CreateFunction { + // Name of function, relative to parent schema. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // Name of parent catalog. + string catalog_name = 2 [(buf.validate.field).string.min_len = 1]; + + // Name of parent schema relative to its parent catalog. + string schema_name = 3 [(buf.validate.field).string.min_len = 1]; + + FunctionParameterInfos input_params = 4; + + unitycatalog.tables.v1.ColumnTypeName data_type = 5; + + // Pretty printed function data type. + string full_data_type = 6 [(buf.validate.field).string.min_len = 1]; + + FunctionParameterInfos return_params = 7; + + // Function language. When EXTERNAL is used, the language of the routine function + // should be specified in the external_language field, and the return_params + // of the function cannot be used (as TABLE return type is not supported), + // and the sql_data_access field must be NO_SQL. + // TODO(roeap): should this be an enum? If so, what are the valid values? + string routine_body = 8; + + // Function body + string routine_definition = 9; + + DependencyList routine_dependencies = 10; + + // Function parameter style. S is the value for SQL. + // TODO(roeap): should this be an enum? If so, what are the valid values? + string parameter_style = 11; + + // Whether the function is deterministic. + bool is_deterministic = 12; + + // Function SQL data access. + string sql_data_access = 13; + + bool is_null_call = 14; + + // Function security type. + string security_type = 15; + + // Specific name of the function; Reserved for future use. + string specific_name = 16; + + // User-provided free-form text description. + optional string comment = 17; + + // JSON-serialized key-value pair map, encoded (escaped) as a string. + map properties = 18; + + // Full name of function, in form of catalog_name.schema_name.function__name + string full_name = 19 [(buf.validate.field).string.min_len = 1]; + + // External language of the function. + string external_language = 23 [(buf.validate.field).string.min_len = 1]; +} + +// Creates a new function instance. WARNING: This API is experimental and will change in future versions. +message CreateFunctionRequest { + // The function to create. + CreateFunction function_info = 1; +} + +message CreateFunctionResponse { + // The created function. + FunctionInfo function = 1; +} + +// Deletes the function that matches the supplied name. +message DeleteFunctionRequest { + // The fully-qualified name of the function (of the form catalog_name.schema_name.function__name). + string name = 1 [(buf.validate.field).string.min_len = 1]; +} + +message DeleteFunctionResponse {} + +// Gets a function from within a parent catalog and schema. +message GetFunctionRequest { + // The fully-qualified name of the function (of the form catalog_name.schema_name.function__name). + string name = 1 [(buf.validate.field).string.min_len = 1]; +} + +message GetFunctionResponse { + // The function. + FunctionInfo function = 1; +} + +// List functions within the specified parent catalog and schema. +// There is no guarantee of a specific ordering of the elements in the array. +message ListFunctionsRequest { + // The name of the parent catalog. + string catalog_name = 1 [(buf.validate.field).string.min_len = 1]; + + // The name of the parent schema. + string schema_name = 2 [(buf.validate.field).string.min_len = 1]; + + optional int32 max_results = 3 [(buf.validate.field).int32.gte = 0]; + + // Specifies a page token to use. Set pageToken to the nextPageToken returned + // by a previous list request to get the next page of results. + // next_page_token will not be returned in a response if there are no more results available. + optional string page_token = 4; +} + +message ListFunctionsResponse { + // The functions. + repeated FunctionInfo functions = 1; + + // A token that can be sent as page_token to retrieve the next page. + // If this field is omitted, there are no more results. + optional string next_page_token = 2; +} + +service FunctionsService { + // Creates a new function instance. + rpc CreateFunction(CreateFunctionRequest) returns (CreateFunctionResponse); + + // Deletes the function that matches the supplied name. + rpc DeleteFunction(DeleteFunctionRequest) returns (DeleteFunctionResponse); + + // Gets a function from within a parent catalog and schema. + rpc GetFunction(GetFunctionRequest) returns (GetFunctionResponse); + + // List functions within the specified parent catalog and schema. + rpc ListFunctions(ListFunctionsRequest) returns (ListFunctionsResponse); +} diff --git a/proto/unitycatalog/functions/v1/models.proto b/proto/unitycatalog/functions/v1/models.proto new file mode 100644 index 0000000..a5f1f6b --- /dev/null +++ b/proto/unitycatalog/functions/v1/models.proto @@ -0,0 +1,135 @@ +syntax = "proto3"; + +package unitycatalog.functions.v1; + +import "buf/validate/validate.proto"; +import "unitycatalog/tables/v1/models.proto"; + +enum FunctionParameterMode { + FUNCTION_PARAMETER_MODE_UNSPECIFIED = 0; +} + +enum FunctionParameterType { + FUNCTION_PARAMETER_TYPE_UNSPECIFIED = 0; +} + +message TableDependency { + // Full name of the dependent table, in the form of catalog_name.schema_name.table_name. + string table_full_name = 1 [(buf.validate.field).string.min_len = 1]; +} + +message FunctionDependency { + // Full name of the dependent function, in the form of catalog_name.schema_name.function_name. + string function_full_name = 1 [(buf.validate.field).string.min_len = 1]; +} + +message Dependency { + oneof dependency { + TableDependency table = 1; + FunctionDependency function = 2; + } +} + +message DependencyList { + repeated Dependency dependencies = 1; +} + +message FunctionParameterInfo { + // The name of the parameter. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // Full data type spec, SQL/catalogString text. + string type_text = 2 [(buf.validate.field).string.min_len = 1]; + + // Full data type spec, JSON-serialized. + string type_json = 3 [(buf.validate.field).string.min_len = 1]; + + unitycatalog.tables.v1.ColumnTypeName type_name = 4; + + // Digits of precision; required on Create for DecimalTypes. + int32 type_precision = 5; + + // Digits to right of decimal; Required on Create for DecimalTypes. + int32 type_scale = 6; + + // Format of IntervalType. + string type_interval_type = 7; + + // Ordinal position of column (starting at position 0). + int32 position = 8; +} + +message FunctionParameterInfos { + repeated FunctionParameterInfo parameters = 1; +} + +message FunctionInfo { + // Name of function, relative to parent schema. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // Name of parent catalog. + string catalog_name = 2 [(buf.validate.field).string.min_len = 1]; + + // Name of parent schema relative to its parent catalog. + string schema_name = 3 [(buf.validate.field).string.min_len = 1]; + + FunctionParameterInfos input_params = 4; + + unitycatalog.tables.v1.ColumnTypeName data_type = 5; + + // Pretty printed function data type. + string full_data_type = 6 [(buf.validate.field).string.min_len = 1]; + + FunctionParameterInfos return_params = 7; + + // Function language. When EXTERNAL is used, the language of the routine function + // should be specified in the external_language field, and the return_params + // of the function cannot be used (as TABLE return type is not supported), + // and the sql_data_access field must be NO_SQL. + // TODO(roeap): should this be an enum? If so, what are the valid values? + string routine_body = 8; + + // Function body + string routine_definition = 9; + + DependencyList routine_dependencies = 10; + + // Function parameter style. S is the value for SQL. + // TODO(roeap): should this be an enum? If so, what are the valid values? + string parameter_style = 11; + + // Whether the function is deterministic. + bool is_deterministic = 12; + + // Function SQL data access. + string sql_data_access = 13; + + bool is_null_call = 14; + + // Function security type. + string security_type = 15; + + // Specific name of the function; Reserved for future use. + string specific_name = 16; + + // User-provided free-form text description. + optional string comment = 17; + + // JSON-serialized key-value pair map, encoded (escaped) as a string. + map properties = 18; + + // Full name of function, in form of catalog_name.schema_name.function__name + string full_name = 19 [(buf.validate.field).string.min_len = 1]; + + // External language of the function. + string external_language = 23 [(buf.validate.field).string.min_len = 1]; + + // Time at which this function was created, in epoch milliseconds. + int64 created_at = 20; + + // Time at which this function was last updated, in epoch milliseconds. + int64 updated_at = 21; + + // Id of Function, relative to parent schema. + string function_id = 22 [(buf.validate.field).string.min_len = 1]; +} diff --git a/proto/unitycatalog/schemas/v1/api.proto b/proto/unitycatalog/schemas/v1/api.proto new file mode 100644 index 0000000..aba267c --- /dev/null +++ b/proto/unitycatalog/schemas/v1/api.proto @@ -0,0 +1,109 @@ +syntax = "proto3"; + +package unitycatalog.schemas.v1; + +import "buf/validate/validate.proto"; +import "unitycatalog/schemas/v1/models.proto"; + +// Creates a new schema in the specified catalog. +message CreateSchemaRequest { + // The name of the catalog. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + string catalog_name = 2 [(buf.validate.field).string.min_len = 1]; + + // User-provided free-form text description. + optional string comment = 3; + + // A map of key-value properties attached to the securable. + map properties = 4; +} + +// Response message for the CreateSchema method. +message CreateSchemaResponse { + // The created schema. + SchemaInfo schema = 1; +} + +// Deletes the specified schema from the parent catalog. +message DeleteSchemaRequest { + // full_name + string full_name = 1 [(buf.validate.field).string.min_len = 1]; +} + +// Response message for the DeleteSchema method. +message DeleteSchemaResponse {} + +// Gets the specified schema for a catalog. +message GetSchemaRequest { + // full_name + string full_name = 1 [(buf.validate.field).string.min_len = 1]; +} + +// Response message for the GetSchema method. +message GetSchemaResponse { + // The schema. + SchemaInfo schema = 1; +} + +// Gets an array of schemas for a catalog. +// There is no guarantee of a specific ordering of the elements in the array. +message ListSchemasRequest { + // The name of the catalog. + string catalog_name = 1 [(buf.validate.field).string.min_len = 1]; + + optional int32 max_results = 2 [(buf.validate.field).int32.gte = 0]; + + // Specifies a page token to use. Set pageToken to the nextPageToken returned + // by a previous list request to get the next page of results. + // next_page_token will not be returned in a response if there are no more results available. + optional string page_token = 3; +} + +// Response message for the ListSchemas method. +message ListSchemasResponse { + // The list of schemas. + repeated SchemaInfo schemas = 1; + + // A token to retrieve the next page of results. + // To read the next page, pass this value as the page_token in the ListSchemasRequest + // call. + string next_page_token = 2; +} + +// Updates the specified schema. +message UpdateSchemaRequest { + // The name of the schema. + string full_name = 1 [(buf.validate.field).string.min_len = 1]; + + // User-provided free-form text description. + optional string comment = 3; + + // A map of key-value properties attached to the securable. + map properties = 4; + + string new_name = 5 [(buf.validate.field).string.min_len = 1]; +} + +// Response message for the UpdateSchema method. +message UpdateSchemaResponse { + // The updated schema. + SchemaInfo schema = 1; +} + +service SchemaService { + // Creates a new schema in the specified catalog. + rpc CreateSchema(CreateSchemaRequest) returns (CreateSchemaResponse); + + // Deletes the specified schema from the parent catalog. + rpc DeleteSchema(DeleteSchemaRequest) returns (DeleteSchemaResponse); + + // Gets the specified schema for a catalog. + rpc GetSchema(GetSchemaRequest) returns (GetSchemaResponse); + + // Gets an array of schemas for a catalog. + rpc ListSchemas(ListSchemasRequest) returns (ListSchemasResponse); + + // Updates the specified schema. + rpc UpdateSchema(UpdateSchemaRequest) returns (UpdateSchemaResponse); +} diff --git a/proto/unitycatalog/schemas/v1/models.proto b/proto/unitycatalog/schemas/v1/models.proto new file mode 100644 index 0000000..cb563bb --- /dev/null +++ b/proto/unitycatalog/schemas/v1/models.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; + +package unitycatalog.schemas.v1; + +import "buf/validate/validate.proto"; + +message SchemaInfo { + // Name of the schema, relative to its parent catalog. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // Name of parent catalog. + string catalog_name = 2 [(buf.validate.field).string.min_len = 1]; + + // User-provided free-form text description. + optional string comment = 3; + + // JSON-serialized key-value pair map, encoded (escaped) as a string. + map properties = 4; + + // Full name of schema, in form of catalog_name.schema_name + string full_name = 5; + + // Time at which this schema was created, in epoch milliseconds. + int64 created_at = 6; + + // Time at which this schema was last updated, in epoch milliseconds. + int64 updated_at = 7; + + // Unique identifier for the schema. + string schema_id = 8 [(buf.validate.field).string.min_len = 1]; +} diff --git a/proto/unitycatalog/tables/v1/api.proto b/proto/unitycatalog/tables/v1/api.proto new file mode 100644 index 0000000..64e274c --- /dev/null +++ b/proto/unitycatalog/tables/v1/api.proto @@ -0,0 +1,108 @@ +syntax = "proto3"; + +package unitycatalog.tables.v1; + +import "buf/validate/validate.proto"; +import "unitycatalog/tables/v1/models.proto"; + +// TODO(roeap): should there be a update tablke method as well, +// we can do schema evolution on delta lake tables after all. + +// Creates a new table instance. +// WARNING: This API is experimental and will change in future versions. +message CreateTableRequest { + // Name of the table, relative to its parent schema. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // Name of parent catalog. + string catalog_name = 2 [(buf.validate.field).string.min_len = 1]; + + // Name of parent schema relative to its parent catalog. + string schema_name = 3 [(buf.validate.field).string.min_len = 1]; + + // Table type. + TableType table_type = 4; + + DataSourceFormat data_source_format = 5; + + // The array of ColumnInfo definitions of the table's columns. + repeated ColumnInfo columns = 6; + + // Storage root URL for table (for MANAGED, EXTERNAL tables) + string storage_location = 7; + + // User-provided free-form text description. + optional string comment = 8; + + // JSON-serialized key-value pair map, encoded (escaped) as a string. + map properties = 9; +} + +// Response message for CreateTable RPC. +message CreateTableResponse { + // The created table. + TableInfo table = 1; +} + +// Deletes a table from the specified parent catalog and schema. +message DeleteTableRequest { + // Full name of the table + string full_name = 1 [(buf.validate.field).string.min_len = 1]; +} + +// Response message for DeleteTable RPC. +message DeleteTableResponse {} + +// Gets a table for a specific catalog and schema. +message GetTableRequest { + // Full name of the table + string full_name = 1 [(buf.validate.field).string.min_len = 1]; +} + +// Response message for GetTable RPC. +message GetTableResponse { + // The table. + TableInfo table = 1; +} + +// Gets the list of all available tables under the parent catalog and schema. +// There is no guarantee of a specific ordering of the elements in the array. +message ListTablesRequest { + // Name of parent catalog. + string catalog_name = 1 [(buf.validate.field).string.min_len = 1]; + + // Name of parent schema relative to its parent catalog. + string schema_name = 2 [(buf.validate.field).string.min_len = 1]; + + optional int32 max_results = 3 [(buf.validate.field).int32.gte = 0]; + + // Specifies a page token to use. Set pageToken to the nextPageToken returned + // by a previous list request to get the next page of results. + // next_page_token will not be returned in a response if there are no more results available. + optional string page_token = 4; +} + +// Response message for ListTables RPC. +message ListTablesResponse { + // The list of tables. + repeated TableInfo tables = 1; + + // A token to retrieve the next page of results. Pass this value in the + // page_token field in the subsequent call to `ListTables` method to retrieve + // the next page of results. + string next_page_token = 2; +} + +service Tables { + // Creates a new table instance. + rpc CreateTable(CreateTableRequest) returns (CreateTableResponse); + + // Deletes a table from the specified parent catalog and schema. + rpc DeleteTable(DeleteTableRequest) returns (DeleteTableResponse); + + // Gets a table for a specific catalog and schema. + rpc GetTable(GetTableRequest) returns (GetTableResponse); + + // Gets the list of all available tables under the parent catalog and schema. + rpc ListTables(ListTablesRequest) returns (ListTablesResponse); +} diff --git a/proto/unitycatalog/tables/v1/models.proto b/proto/unitycatalog/tables/v1/models.proto new file mode 100644 index 0000000..c7b484a --- /dev/null +++ b/proto/unitycatalog/tables/v1/models.proto @@ -0,0 +1,94 @@ +syntax = "proto3"; + +package unitycatalog.tables.v1; + +import "buf/validate/validate.proto"; + +enum TableType { + TABLE_TYPE_UNSPECIFIED = 0; + TABLE_TYPE_TABLE = 1; + TABLE_TYPE_VIEW = 2; + TABLE_TYPE_EXTERNAL = 3; +} + +enum DataSourceFormat { + DATA_SOURCE_FORMAT_UNSPECIFIED = 0; + DATA_SOURCE_FORMAT_DELTA = 1; + DATA_SOURCE_FORMAT_PARQUET = 2; +} + +enum ColumnTypeName { + COLUMN_TYPE_UNSPECIFIED = 0; +} + +message ColumnInfo { + // The name of the parameter. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // Full data type spec, SQL/catalogString text. + string type_text = 2 [(buf.validate.field).string.min_len = 1]; + + // Full data type spec, JSON-serialized. + string type_json = 3 [(buf.validate.field).string.min_len = 1]; + + ColumnTypeName type_name = 4; + + // Digits of precision; required on Create for DecimalTypes. + int32 type_precision = 5; + + // Digits to right of decimal; Required on Create for DecimalTypes. + int32 type_scale = 6; + + // Format of IntervalType. + string type_interval_type = 7; + + // Ordinal position of column (starting at position 0). + int32 position = 8; + + // User-provided free-form text description. + optional string comment = 9; + + // Whether field may be Null + // TODO(roeap): assert that this field defaults to true.. + optional bool nullable = 10; + + // Partition index for column. + int32 partition_index = 11; +} + +message TableInfo { + // Name of the table, relative to its parent schema. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // Name of parent catalog. + string catalog_name = 2 [(buf.validate.field).string.min_len = 1]; + + // Name of parent schema relative to its parent catalog. + string schema_name = 3 [(buf.validate.field).string.min_len = 1]; + + // Table type. + TableType table_type = 4; + + DataSourceFormat data_source_format = 5; + + // The array of ColumnInfo definitions of the table's columns. + repeated ColumnInfo columns = 6; + + // Storage root URL for table (for MANAGED, EXTERNAL tables) + string storage_location = 7; + + // User-provided free-form text description. + optional string comment = 8; + + // JSON-serialized key-value pair map, encoded (escaped) as a string. + map properties = 9; + + // Time at which this table was created, in epoch milliseconds. + int64 created_at = 10; + + // Time at which this table was last updated, in epoch milliseconds. + int64 updated_at = 11; + + // Unique identifier for the table. + string table_id = 12 [(buf.validate.field).string.min_len = 1]; +} diff --git a/proto/unitycatalog/volumes/v1/api.proto b/proto/unitycatalog/volumes/v1/api.proto new file mode 100644 index 0000000..15f4165 --- /dev/null +++ b/proto/unitycatalog/volumes/v1/api.proto @@ -0,0 +1,93 @@ +syntax = "proto3"; + +package unitycatalog.volumes.v1; + +import "buf/validate/validate.proto"; +import "unitycatalog/volumes/v1/models.proto"; + +// Creates a new volume. +message CreateVolumeRequest { + // Name of the table, relative to its parent schema. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // Name of parent catalog. + string catalog_name = 2 [(buf.validate.field).string.min_len = 1]; + + // Name of parent schema relative to its parent catalog. + string schema_name = 3 [(buf.validate.field).string.min_len = 1]; + + // Table type. + VolumeType volume_type = 4; + + // Storage root URL for table (for MANAGED, EXTERNAL tables) + string storage_location = 5; + + // User-provided free-form text description. + optional string comment = 6; + + // JSON-serialized key-value pair map, encoded (escaped) as a string. + // map properties = 9; +} + +// Response for CreateVolumeRequest. +message CreateVolumeResponse { + // The created volume. + VolumeInfo volume = 1; +} + +// Deletes a volume from the specified parent catalog and schema. +message DeleteVolumeRequest { + // Name of the volume to delete. + string full_name = 1 [(buf.validate.field).string.min_len = 1]; +} + +// Response for DeleteVolumeRequest. +message DeleteVolumeResponse {} + +// Gets a volume for a specific catalog and schema. +message GetVolumeRequest { + // Name of the volume to get. + string full_name = 1 [(buf.validate.field).string.min_len = 1]; +} + +// Response for GetVolumeRequest. +message GetVolumeResponse { + // The volume. + VolumeInfo volume = 1; +} + +// Gets an array of available volumes under the parent catalog and schema. +// There is no guarantee of a specific ordering of the elements in the array. +message ListVolumesRequest { + // Name of parent catalog. + string catalog_name = 1 [(buf.validate.field).string.min_len = 1]; + + // Name of parent schema relative to its parent catalog. + string schema_name = 2 [(buf.validate.field).string.min_len = 1]; + + optional int32 max_results = 3 [(buf.validate.field).int32.gte = 0]; + + // Specifies a page token to use. Set pageToken to the nextPageToken returned + // by a previous list request to get the next page of results. + // next_page_token will not be returned in a response if there are no more results available. + optional string page_token = 4; +} + +// Updates the specified volume under the specified parent catalog and schema. +// Currently only the name or the comment of the volume could be updated. +message UpdateVolumeRequest { + // Name of the volume to update. + string full_name = 1 [(buf.validate.field).string.min_len = 1]; + + // New name of the volume. + string new_name = 2 [(buf.validate.field).string.min_len = 1]; + + // New comment of the volume. + optional string comment = 3; +} + +// Response for UpdateVolumeRequest. +message UpdateVolumeResponse { + // The updated volume. + VolumeInfo volume = 1; +} diff --git a/proto/unitycatalog/volumes/v1/models.proto b/proto/unitycatalog/volumes/v1/models.proto new file mode 100644 index 0000000..eaa4168 --- /dev/null +++ b/proto/unitycatalog/volumes/v1/models.proto @@ -0,0 +1,39 @@ +syntax = "proto3"; + +package unitycatalog.volumes.v1; + +import "buf/validate/validate.proto"; + +// TODO(roeap): there does not seem to be a properties field in the VolumeInfo, +// is this intentional? If not, we should add it? + +enum VolumeType { + VOLUME_TYPE_UNSPECIFIED = 0; +} + +enum VolumeOperation { + VOLUME_OPERATION_UNSPECIFIED = 0; +} + +message VolumeInfo { + // Name of the volume, relative to its parent schema. + string name = 1 [(buf.validate.field).string.min_len = 1]; + + // Name of parent catalog. + string catalog_name = 2 [(buf.validate.field).string.min_len = 1]; + + // Name of parent schema relative to its parent catalog. + string schema_name = 3 [(buf.validate.field).string.min_len = 1]; + + // volume type. + VolumeType volume_type = 4; + + // Storage root URL for table (for MANAGED, EXTERNAL tables) + string storage_location = 5; + + // User-provided free-form text description. + optional string comment = 8; + + // JSON-serialized key-value pair map, encoded (escaped) as a string. + // map properties = 9; +}