diff --git a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go index 42904e044bb2..2bc3db867e25 100755 --- a/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go +++ b/aiplatform/apiv1beta1/aiplatformpb/vertex_rag_data.pb.go @@ -87,9 +87,83 @@ func (x RagFile_RagFileType) Number() protoreflect.EnumNumber { // Deprecated: Use RagFile_RagFileType.Descriptor instead. func (RagFile_RagFileType) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{1, 0} + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{2, 0} } +// Config for the embedding model to use for RAG. +type RagEmbeddingModelConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The model config to use. + // + // Types that are assignable to ModelConfig: + // + // *RagEmbeddingModelConfig_VertexPredictionEndpoint_ + ModelConfig isRagEmbeddingModelConfig_ModelConfig `protobuf_oneof:"model_config"` +} + +func (x *RagEmbeddingModelConfig) Reset() { + *x = RagEmbeddingModelConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RagEmbeddingModelConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagEmbeddingModelConfig) ProtoMessage() {} + +func (x *RagEmbeddingModelConfig) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagEmbeddingModelConfig.ProtoReflect.Descriptor instead. +func (*RagEmbeddingModelConfig) Descriptor() ([]byte, []int) { + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{0} +} + +func (m *RagEmbeddingModelConfig) GetModelConfig() isRagEmbeddingModelConfig_ModelConfig { + if m != nil { + return m.ModelConfig + } + return nil +} + +func (x *RagEmbeddingModelConfig) GetVertexPredictionEndpoint() *RagEmbeddingModelConfig_VertexPredictionEndpoint { + if x, ok := x.GetModelConfig().(*RagEmbeddingModelConfig_VertexPredictionEndpoint_); ok { + return x.VertexPredictionEndpoint + } + return nil +} + +type isRagEmbeddingModelConfig_ModelConfig interface { + isRagEmbeddingModelConfig_ModelConfig() +} + +type RagEmbeddingModelConfig_VertexPredictionEndpoint_ struct { + // The Vertex AI Prediction Endpoint that either refers to a publisher model + // or an endpoint that is hosting a 1P fine-tuned text embedding model. + // Endpoints hosting non-1P fine-tuned text embedding models are + // currently not supported. + VertexPredictionEndpoint *RagEmbeddingModelConfig_VertexPredictionEndpoint `protobuf:"bytes,1,opt,name=vertex_prediction_endpoint,json=vertexPredictionEndpoint,proto3,oneof"` +} + +func (*RagEmbeddingModelConfig_VertexPredictionEndpoint_) isRagEmbeddingModelConfig_ModelConfig() {} + // A RagCorpus is a RagFile container and a project can have multiple // RagCorpora. type RagCorpus struct { @@ -105,6 +179,8 @@ type RagCorpus struct { DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` // Optional. The description of the RagCorpus. Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Optional. Immutable. The embedding model config of the RagCorpus. + RagEmbeddingModelConfig *RagEmbeddingModelConfig `protobuf:"bytes,6,opt,name=rag_embedding_model_config,json=ragEmbeddingModelConfig,proto3" json:"rag_embedding_model_config,omitempty"` // Output only. Timestamp when this RagCorpus was created. CreateTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` // Output only. Timestamp when this RagCorpus was last updated. @@ -114,7 +190,7 @@ type RagCorpus struct { func (x *RagCorpus) Reset() { *x = RagCorpus{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[0] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -127,7 +203,7 @@ func (x *RagCorpus) String() string { func (*RagCorpus) ProtoMessage() {} func (x *RagCorpus) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[0] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -140,7 +216,7 @@ func (x *RagCorpus) ProtoReflect() protoreflect.Message { // Deprecated: Use RagCorpus.ProtoReflect.Descriptor instead. func (*RagCorpus) Descriptor() ([]byte, []int) { - return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{0} + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{1} } func (x *RagCorpus) GetName() string { @@ -164,6 +240,13 @@ func (x *RagCorpus) GetDescription() string { return "" } +func (x *RagCorpus) GetRagEmbeddingModelConfig() *RagEmbeddingModelConfig { + if x != nil { + return x.RagEmbeddingModelConfig + } + return nil +} + func (x *RagCorpus) GetCreateTime() *timestamppb.Timestamp { if x != nil { return x.CreateTime @@ -214,7 +297,7 @@ type RagFile struct { func (x *RagFile) Reset() { *x = RagFile{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[1] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -227,7 +310,7 @@ func (x *RagFile) String() string { func (*RagFile) ProtoMessage() {} func (x *RagFile) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[1] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -240,7 +323,7 @@ func (x *RagFile) ProtoReflect() protoreflect.Message { // Deprecated: Use RagFile.ProtoReflect.Descriptor instead. func (*RagFile) Descriptor() ([]byte, []int) { - return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{1} + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{2} } func (m *RagFile) GetRagFileSource() isRagFile_RagFileSource { @@ -363,7 +446,7 @@ type RagFileChunkingConfig struct { func (x *RagFileChunkingConfig) Reset() { *x = RagFileChunkingConfig{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[2] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -376,7 +459,7 @@ func (x *RagFileChunkingConfig) String() string { func (*RagFileChunkingConfig) ProtoMessage() {} func (x *RagFileChunkingConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[2] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -389,7 +472,7 @@ func (x *RagFileChunkingConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use RagFileChunkingConfig.ProtoReflect.Descriptor instead. func (*RagFileChunkingConfig) Descriptor() ([]byte, []int) { - return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{2} + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{3} } func (x *RagFileChunkingConfig) GetChunkSize() int32 { @@ -419,7 +502,7 @@ type UploadRagFileConfig struct { func (x *UploadRagFileConfig) Reset() { *x = UploadRagFileConfig{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[3] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -432,7 +515,7 @@ func (x *UploadRagFileConfig) String() string { func (*UploadRagFileConfig) ProtoMessage() {} func (x *UploadRagFileConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[3] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -445,7 +528,7 @@ func (x *UploadRagFileConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadRagFileConfig.ProtoReflect.Descriptor instead. func (*UploadRagFileConfig) Descriptor() ([]byte, []int) { - return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{3} + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{4} } func (x *UploadRagFileConfig) GetRagFileChunkingConfig() *RagFileChunkingConfig { @@ -468,12 +551,18 @@ type ImportRagFilesConfig struct { ImportSource isImportRagFilesConfig_ImportSource `protobuf_oneof:"import_source"` // Specifies the size and overlap of chunks after importing RagFiles. RagFileChunkingConfig *RagFileChunkingConfig `protobuf:"bytes,4,opt,name=rag_file_chunking_config,json=ragFileChunkingConfig,proto3" json:"rag_file_chunking_config,omitempty"` + // Optional. The max number of queries per minute that this job is allowed to + // make to the embedding model specified on the corpus. This value is specific + // to this job and not shared across other import jobs. Consult the Quotas + // page on the project to set an appropriate value here. + // If unspecified, a default value of 1,000 QPM would be used. + MaxEmbeddingRequestsPerMin int32 `protobuf:"varint,5,opt,name=max_embedding_requests_per_min,json=maxEmbeddingRequestsPerMin,proto3" json:"max_embedding_requests_per_min,omitempty"` } func (x *ImportRagFilesConfig) Reset() { *x = ImportRagFilesConfig{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[4] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -486,7 +575,7 @@ func (x *ImportRagFilesConfig) String() string { func (*ImportRagFilesConfig) ProtoMessage() {} func (x *ImportRagFilesConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[4] + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -499,7 +588,7 @@ func (x *ImportRagFilesConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportRagFilesConfig.ProtoReflect.Descriptor instead. func (*ImportRagFilesConfig) Descriptor() ([]byte, []int) { - return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{4} + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{5} } func (m *ImportRagFilesConfig) GetImportSource() isImportRagFilesConfig_ImportSource { @@ -530,6 +619,13 @@ func (x *ImportRagFilesConfig) GetRagFileChunkingConfig() *RagFileChunkingConfig return nil } +func (x *ImportRagFilesConfig) GetMaxEmbeddingRequestsPerMin() int32 { + if x != nil { + return x.MaxEmbeddingRequestsPerMin + } + return 0 +} + type isImportRagFilesConfig_ImportSource interface { isImportRagFilesConfig_ImportSource() } @@ -552,6 +648,81 @@ func (*ImportRagFilesConfig_GcsSource) isImportRagFilesConfig_ImportSource() {} func (*ImportRagFilesConfig_GoogleDriveSource) isImportRagFilesConfig_ImportSource() {} +// Config representing a model hosted on Vertex Prediction Endpoint. +type RagEmbeddingModelConfig_VertexPredictionEndpoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required. The endpoint resource name. + // Format: + // `projects/{project}/locations/{location}/publishers/{publisher}/models/{model}` + // or + // `projects/{project}/locations/{location}/endpoints/{endpoint}` + Endpoint string `protobuf:"bytes,1,opt,name=endpoint,proto3" json:"endpoint,omitempty"` + // Output only. The resource name of the model that is deployed on the + // endpoint. Present only when the endpoint is not a publisher model. + // Pattern: + // `projects/{project}/locations/{location}/models/{model}` + Model string `protobuf:"bytes,2,opt,name=model,proto3" json:"model,omitempty"` + // Output only. Version ID of the model that is deployed on the endpoint. + // Present only when the endpoint is not a publisher model. + ModelVersionId string `protobuf:"bytes,3,opt,name=model_version_id,json=modelVersionId,proto3" json:"model_version_id,omitempty"` +} + +func (x *RagEmbeddingModelConfig_VertexPredictionEndpoint) Reset() { + *x = RagEmbeddingModelConfig_VertexPredictionEndpoint{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RagEmbeddingModelConfig_VertexPredictionEndpoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RagEmbeddingModelConfig_VertexPredictionEndpoint) ProtoMessage() {} + +func (x *RagEmbeddingModelConfig_VertexPredictionEndpoint) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RagEmbeddingModelConfig_VertexPredictionEndpoint.ProtoReflect.Descriptor instead. +func (*RagEmbeddingModelConfig_VertexPredictionEndpoint) Descriptor() ([]byte, []int) { + return file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *RagEmbeddingModelConfig_VertexPredictionEndpoint) GetEndpoint() string { + if x != nil { + return x.Endpoint + } + return "" +} + +func (x *RagEmbeddingModelConfig_VertexPredictionEndpoint) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *RagEmbeddingModelConfig_VertexPredictionEndpoint) GetModelVersionId() string { + if x != nil { + return x.ModelVersionId + } + return "" +} + var File_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto protoreflect.FileDescriptor var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ @@ -569,139 +740,177 @@ var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc = []byte{ 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0xfa, 0x02, 0x0a, 0x09, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x17, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x3a, 0x80, 0x01, 0xea, 0x41, 0x7d, 0x0a, - 0x23, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, 0x43, 0x6f, - 0x72, 0x70, 0x75, 0x73, 0x12, 0x3f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, - 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, - 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, 0x0a, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, - 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x22, 0xa4, 0x07, 0x0a, - 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, + 0x90, 0x03, 0x0a, 0x17, 0x52, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, + 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x91, 0x01, 0x0a, 0x1a, + 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x51, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, + 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x50, 0x72, 0x65, + 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x1a, + 0xd0, 0x01, 0x0a, 0x18, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x08, + 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, + 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x24, 0x0a, 0x22, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x27, 0xe0, 0x41, 0x03, 0xfa, 0x41, 0x21, 0x0a, 0x1f, 0x61, 0x69, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x05, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x12, 0x2d, 0x0a, 0x10, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x42, 0x0e, 0x0a, 0x0c, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x22, 0xf9, 0x03, 0x0a, 0x09, 0x52, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, + 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x1a, 0x72, 0x61, 0x67, 0x5f, + 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, - 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x13, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, - 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x14, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, - 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, - 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x00, 0x52, - 0x12, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x73, - 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x42, - 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, - 0x5d, 0x0a, 0x0d, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, - 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x0b, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, - 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, - 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, + 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x6c, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0xe0, 0x41, 0x01, 0xe0, 0x41, 0x05, 0x52, 0x17, + 0x72, 0x61, 0x67, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, + 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x3a, 0x80, 0x01, 0xea, 0x41, + 0x7d, 0x0a, 0x23, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, + 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x12, 0x3f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, + 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, + 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2a, 0x0a, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, + 0x6f, 0x72, 0x61, 0x32, 0x09, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x22, 0xa4, + 0x07, 0x0a, 0x07, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x67, 0x63, + 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, + 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x13, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, + 0x41, 0x03, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, + 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x14, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, + 0x00, 0x52, 0x12, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, + 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, + 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x12, 0x5d, 0x0a, 0x0d, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, - 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x44, 0x46, 0x10, 0x02, 0x3a, 0x8f, - 0x01, 0xea, 0x41, 0x8b, 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, 0x72, 0x61, - 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x2a, 0x08, 0x72, - 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, - 0x42, 0x11, 0x0a, 0x0f, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, - 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, - 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, - 0x22, 0x86, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, - 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, - 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, - 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xcb, 0x02, 0x0a, 0x14, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x64, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x5f, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, + 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x41, 0x47, + 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x44, 0x46, 0x10, 0x02, + 0x3a, 0x8f, 0x01, 0xea, 0x41, 0x8b, 0x01, 0x0a, 0x21, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x53, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x2f, 0x7b, + 0x72, 0x61, 0x67, 0x5f, 0x63, 0x6f, 0x72, 0x70, 0x75, 0x73, 0x7d, 0x2f, 0x72, 0x61, 0x67, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x7d, 0x2a, + 0x08, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x32, 0x07, 0x72, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, + 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x6c, + 0x61, 0x70, 0x22, 0x86, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x67, + 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, + 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, - 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x0f, 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0xe9, 0x01, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, - 0x12, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x52, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x43, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x56, 0x31, 0x42, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, - 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, - 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, + 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, + 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x94, 0x03, 0x0a, 0x14, + 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x64, 0x0a, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x76, + 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, 0x65, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x48, 0x00, 0x52, 0x11, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x44, 0x72, 0x69, 0x76, + 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x18, 0x72, 0x61, 0x67, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x67, 0x46, + 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x15, 0x72, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x69, + 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x47, 0x0a, 0x1e, 0x6d, 0x61, 0x78, 0x5f, + 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x1a, 0x6d, 0x61, 0x78, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x69, + 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0xe9, 0x01, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x12, 0x56, 0x65, 0x72, 0x74, + 0x65, 0x78, 0x52, 0x61, 0x67, 0x44, 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x43, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x69, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x56, 0x31, 0x42, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xea, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x41, 0x49, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -717,37 +926,41 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDescGZIP() [] } var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_goTypes = []interface{}{ - (RagFile_RagFileType)(0), // 0: google.cloud.aiplatform.v1beta1.RagFile.RagFileType - (*RagCorpus)(nil), // 1: google.cloud.aiplatform.v1beta1.RagCorpus - (*RagFile)(nil), // 2: google.cloud.aiplatform.v1beta1.RagFile - (*RagFileChunkingConfig)(nil), // 3: google.cloud.aiplatform.v1beta1.RagFileChunkingConfig - (*UploadRagFileConfig)(nil), // 4: google.cloud.aiplatform.v1beta1.UploadRagFileConfig - (*ImportRagFilesConfig)(nil), // 5: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig - (*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp - (*GcsSource)(nil), // 7: google.cloud.aiplatform.v1beta1.GcsSource - (*GoogleDriveSource)(nil), // 8: google.cloud.aiplatform.v1beta1.GoogleDriveSource - (*DirectUploadSource)(nil), // 9: google.cloud.aiplatform.v1beta1.DirectUploadSource + (RagFile_RagFileType)(0), // 0: google.cloud.aiplatform.v1beta1.RagFile.RagFileType + (*RagEmbeddingModelConfig)(nil), // 1: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig + (*RagCorpus)(nil), // 2: google.cloud.aiplatform.v1beta1.RagCorpus + (*RagFile)(nil), // 3: google.cloud.aiplatform.v1beta1.RagFile + (*RagFileChunkingConfig)(nil), // 4: google.cloud.aiplatform.v1beta1.RagFileChunkingConfig + (*UploadRagFileConfig)(nil), // 5: google.cloud.aiplatform.v1beta1.UploadRagFileConfig + (*ImportRagFilesConfig)(nil), // 6: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig + (*RagEmbeddingModelConfig_VertexPredictionEndpoint)(nil), // 7: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.VertexPredictionEndpoint + (*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp + (*GcsSource)(nil), // 9: google.cloud.aiplatform.v1beta1.GcsSource + (*GoogleDriveSource)(nil), // 10: google.cloud.aiplatform.v1beta1.GoogleDriveSource + (*DirectUploadSource)(nil), // 11: google.cloud.aiplatform.v1beta1.DirectUploadSource } var file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_depIdxs = []int32{ - 6, // 0: google.cloud.aiplatform.v1beta1.RagCorpus.create_time:type_name -> google.protobuf.Timestamp - 6, // 1: google.cloud.aiplatform.v1beta1.RagCorpus.update_time:type_name -> google.protobuf.Timestamp - 7, // 2: google.cloud.aiplatform.v1beta1.RagFile.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource - 8, // 3: google.cloud.aiplatform.v1beta1.RagFile.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource - 9, // 4: google.cloud.aiplatform.v1beta1.RagFile.direct_upload_source:type_name -> google.cloud.aiplatform.v1beta1.DirectUploadSource - 0, // 5: google.cloud.aiplatform.v1beta1.RagFile.rag_file_type:type_name -> google.cloud.aiplatform.v1beta1.RagFile.RagFileType - 6, // 6: google.cloud.aiplatform.v1beta1.RagFile.create_time:type_name -> google.protobuf.Timestamp - 6, // 7: google.cloud.aiplatform.v1beta1.RagFile.update_time:type_name -> google.protobuf.Timestamp - 3, // 8: google.cloud.aiplatform.v1beta1.UploadRagFileConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig - 7, // 9: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource - 8, // 10: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource - 3, // 11: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig - 12, // [12:12] is the sub-list for method output_type - 12, // [12:12] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 7, // 0: google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.vertex_prediction_endpoint:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig.VertexPredictionEndpoint + 1, // 1: google.cloud.aiplatform.v1beta1.RagCorpus.rag_embedding_model_config:type_name -> google.cloud.aiplatform.v1beta1.RagEmbeddingModelConfig + 8, // 2: google.cloud.aiplatform.v1beta1.RagCorpus.create_time:type_name -> google.protobuf.Timestamp + 8, // 3: google.cloud.aiplatform.v1beta1.RagCorpus.update_time:type_name -> google.protobuf.Timestamp + 9, // 4: google.cloud.aiplatform.v1beta1.RagFile.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource + 10, // 5: google.cloud.aiplatform.v1beta1.RagFile.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource + 11, // 6: google.cloud.aiplatform.v1beta1.RagFile.direct_upload_source:type_name -> google.cloud.aiplatform.v1beta1.DirectUploadSource + 0, // 7: google.cloud.aiplatform.v1beta1.RagFile.rag_file_type:type_name -> google.cloud.aiplatform.v1beta1.RagFile.RagFileType + 8, // 8: google.cloud.aiplatform.v1beta1.RagFile.create_time:type_name -> google.protobuf.Timestamp + 8, // 9: google.cloud.aiplatform.v1beta1.RagFile.update_time:type_name -> google.protobuf.Timestamp + 4, // 10: google.cloud.aiplatform.v1beta1.UploadRagFileConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig + 9, // 11: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.gcs_source:type_name -> google.cloud.aiplatform.v1beta1.GcsSource + 10, // 12: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.google_drive_source:type_name -> google.cloud.aiplatform.v1beta1.GoogleDriveSource + 4, // 13: google.cloud.aiplatform.v1beta1.ImportRagFilesConfig.rag_file_chunking_config:type_name -> google.cloud.aiplatform.v1beta1.RagFileChunkingConfig + 14, // [14:14] is the sub-list for method output_type + 14, // [14:14] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() } @@ -758,7 +971,7 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { file_google_cloud_aiplatform_v1beta1_io_proto_init() if !protoimpl.UnsafeEnabled { file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RagCorpus); i { + switch v := v.(*RagEmbeddingModelConfig); i { case 0: return &v.state case 1: @@ -770,7 +983,7 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { } } file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RagFile); i { + switch v := v.(*RagCorpus); i { case 0: return &v.state case 1: @@ -782,7 +995,7 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { } } file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RagFileChunkingConfig); i { + switch v := v.(*RagFile); i { case 0: return &v.state case 1: @@ -794,7 +1007,7 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { } } file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UploadRagFileConfig); i { + switch v := v.(*RagFileChunkingConfig); i { case 0: return &v.state case 1: @@ -806,6 +1019,18 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { } } file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UploadRagFileConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImportRagFilesConfig); i { case 0: return &v.state @@ -817,13 +1042,28 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { return nil } } + file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RagEmbeddingModelConfig_VertexPredictionEndpoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*RagEmbeddingModelConfig_VertexPredictionEndpoint_)(nil), } - file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[2].OneofWrappers = []interface{}{ (*RagFile_GcsSource)(nil), (*RagFile_GoogleDriveSource)(nil), (*RagFile_DirectUploadSource)(nil), } - file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[4].OneofWrappers = []interface{}{ + file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_msgTypes[5].OneofWrappers = []interface{}{ (*ImportRagFilesConfig_GcsSource)(nil), (*ImportRagFilesConfig_GoogleDriveSource)(nil), } @@ -833,7 +1073,7 @@ func file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_cloud_aiplatform_v1beta1_vertex_rag_data_proto_rawDesc, NumEnums: 1, - NumMessages: 5, + NumMessages: 7, NumExtensions: 0, NumServices: 0, }, diff --git a/batch/apiv1/batchpb/job.pb.go b/batch/apiv1/batchpb/job.pb.go index 6ccb22a5c72f..a3a756c8176b 100755 --- a/batch/apiv1/batchpb/job.pb.go +++ b/batch/apiv1/batchpb/job.pb.go @@ -1835,9 +1835,9 @@ type AllocationPolicy_InstancePolicyOrTemplate struct { // *AllocationPolicy_InstancePolicyOrTemplate_Policy // *AllocationPolicy_InstancePolicyOrTemplate_InstanceTemplate PolicyTemplate isAllocationPolicy_InstancePolicyOrTemplate_PolicyTemplate `protobuf_oneof:"policy_template"` - // Set this field true if users want Batch to help fetch drivers from a - // third party location and install them for GPUs specified in - // policy.accelerators or instance_template on their behalf. Default is + // Set this field true if you want Batch to help fetch drivers from a third + // party location and install them for GPUs specified in + // `policy.accelerators` or `instance_template` on your behalf. Default is // false. // // For Container-Optimized Image cases, Batch will install the diff --git a/batch/apiv1/batchpb/task.pb.go b/batch/apiv1/batchpb/task.pb.go index d9a0af1c6d5b..76de80fd191d 100755 --- a/batch/apiv1/batchpb/task.pb.go +++ b/batch/apiv1/batchpb/task.pb.go @@ -363,12 +363,11 @@ type TaskExecution struct { // due to the following reasons, the exit code will be 50000. // // Otherwise, it can be from different sources: - // - Batch known failures as + // * Batch known failures: // https://cloud.google.com/batch/docs/troubleshooting#reserved-exit-codes. - // - Batch runnable execution failures: You can rely on Batch logs for further - // diagnose: https://cloud.google.com/batch/docs/analyze-job-using-logs. - // If there are multiple runnables failures, Batch only exposes the first - // error caught for now. + // * Batch runnable execution failures; you can rely on Batch logs to further + // diagnose: https://cloud.google.com/batch/docs/analyze-job-using-logs. If + // there are multiple runnables failures, Batch only exposes the first error. ExitCode int32 `protobuf:"varint,1,opt,name=exit_code,json=exitCode,proto3" json:"exit_code,omitempty"` } @@ -667,10 +666,15 @@ type TaskSpec struct { Runnables []*Runnable `protobuf:"bytes,8,rep,name=runnables,proto3" json:"runnables,omitempty"` // ComputeResource requirements. ComputeResource *ComputeResource `protobuf:"bytes,3,opt,name=compute_resource,json=computeResource,proto3" json:"compute_resource,omitempty"` - // Maximum duration the task should run. - // The task will be killed and marked as FAILED if over this limit. - // The valid value range for max_run_duration in seconds is [0, - // 315576000000.999999999], + // Maximum duration the task should run before being automatically retried + // (if enabled) or automatically failed. Format the value of this field + // as a time limit in seconds followed by `s`—for example, `3600s` + // for 1 hour. The field accepts any value between 0 and the maximum listed + // for the `Duration` field type at + // https://protobuf.dev/reference/protobuf/google.protobuf/#duration; however, + // the actual maximum run time for a job will be limited to the maximum run + // time for a job listed at + // https://cloud.google.com/batch/quotas#max-job-duration. MaxRunDuration *durationpb.Duration `protobuf:"bytes,4,opt,name=max_run_duration,json=maxRunDuration,proto3" json:"max_run_duration,omitempty"` // Maximum number of retries on failures. // The default, 0, which means never retry. diff --git a/go.work.sum b/go.work.sum index 91a28210f98c..4a7c5fc2ab4f 100644 --- a/go.work.sum +++ b/go.work.sum @@ -73,9 +73,11 @@ golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808/go.mod h1:KG1lNk5ZFNssSZLrpVb4sMXKMpGwGXOxSG3rnu2gZQQ= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= google.golang.org/api v0.174.0/go.mod h1:aC7tB6j0HR1Nl0ni5ghpx6iLasmAX78Zkh/wgxAAjLg= google.golang.org/genproto v0.0.0-20230725213213-b022f6e96895/go.mod h1:0ggbjUrZYpy1q+ANUS30SEoGZ53cdfwtbuG7Ptgy108= google.golang.org/genproto/googleapis/api v0.0.0-20230725213213-b022f6e96895/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= diff --git a/internal/generated/snippets/redis/cluster/apiv1/CloudRedisClusterClient/GetClusterCertificateAuthority/main.go b/internal/generated/snippets/redis/cluster/apiv1/CloudRedisClusterClient/GetClusterCertificateAuthority/main.go new file mode 100644 index 000000000000..bbe66b3ec758 --- /dev/null +++ b/internal/generated/snippets/redis/cluster/apiv1/CloudRedisClusterClient/GetClusterCertificateAuthority/main.go @@ -0,0 +1,53 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go_gapic. DO NOT EDIT. + +// [START redis_v1_generated_CloudRedisCluster_GetClusterCertificateAuthority_sync] + +package main + +import ( + "context" + + cluster "cloud.google.com/go/redis/cluster/apiv1" + clusterpb "cloud.google.com/go/redis/cluster/apiv1/clusterpb" +) + +func main() { + ctx := context.Background() + // This snippet has been automatically generated and should be regarded as a code template only. + // It will require modifications to work: + // - It may require correct/in-range values for request initialization. + // - It may require specifying regional endpoints when creating the service client as shown in: + // https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options + c, err := cluster.NewCloudRedisClusterClient(ctx) + if err != nil { + // TODO: Handle error. + } + defer c.Close() + + req := &clusterpb.GetClusterCertificateAuthorityRequest{ + // TODO: Fill request struct fields. + // See https://pkg.go.dev/cloud.google.com/go/redis/cluster/apiv1/clusterpb#GetClusterCertificateAuthorityRequest. + } + resp, err := c.GetClusterCertificateAuthority(ctx, req) + if err != nil { + // TODO: Handle error. + } + // TODO: Use resp. + _ = resp +} + +// [END redis_v1_generated_CloudRedisCluster_GetClusterCertificateAuthority_sync] diff --git a/internal/generated/snippets/redis/cluster/apiv1/snippet_metadata.google.cloud.redis.cluster.v1.json b/internal/generated/snippets/redis/cluster/apiv1/snippet_metadata.google.cloud.redis.cluster.v1.json index 539b803ad791..5d98b33bfed3 100644 --- a/internal/generated/snippets/redis/cluster/apiv1/snippet_metadata.google.cloud.redis.cluster.v1.json +++ b/internal/generated/snippets/redis/cluster/apiv1/snippet_metadata.google.cloud.redis.cluster.v1.json @@ -239,6 +239,52 @@ } ] }, + { + "regionTag": "redis_v1_generated_CloudRedisCluster_GetClusterCertificateAuthority_sync", + "title": "redis GetClusterCertificateAuthority Sample", + "description": "GetClusterCertificateAuthority gets the details of certificate authority information for Redis cluster.", + "file": "CloudRedisClusterClient/GetClusterCertificateAuthority/main.go", + "language": "GO", + "clientMethod": { + "shortName": "GetClusterCertificateAuthority", + "fullName": "google.cloud.redis.cluster.v1.CloudRedisClusterClient.GetClusterCertificateAuthority", + "parameters": [ + { + "type": "context.Context", + "name": "ctx" + }, + { + "type": "clusterpb.GetClusterCertificateAuthorityRequest", + "name": "req" + }, + { + "type": "...gax.CallOption", + "name": "opts" + } + ], + "resultType": "*clusterpb.CertificateAuthority", + "client": { + "shortName": "CloudRedisClusterClient", + "fullName": "google.cloud.redis.cluster.v1.CloudRedisClusterClient" + }, + "method": { + "shortName": "GetClusterCertificateAuthority", + "fullName": "google.cloud.redis.cluster.v1.CloudRedisCluster.GetClusterCertificateAuthority", + "service": { + "shortName": "CloudRedisCluster", + "fullName": "google.cloud.redis.cluster.v1.CloudRedisCluster" + } + } + }, + "origin": "API_DEFINITION", + "segments": [ + { + "start": 18, + "end": 53, + "type": "FULL" + } + ] + }, { "regionTag": "redis_v1_generated_CloudRedisCluster_GetLocation_sync", "title": "redis GetLocation Sample", diff --git a/redis/cluster/apiv1/cloud_redis_cluster_client.go b/redis/cluster/apiv1/cloud_redis_cluster_client.go index f632f3e7f68c..994b8904a5ca 100755 --- a/redis/cluster/apiv1/cloud_redis_cluster_client.go +++ b/redis/cluster/apiv1/cloud_redis_cluster_client.go @@ -47,17 +47,18 @@ var newCloudRedisClusterClientHook clientHook // CloudRedisClusterCallOptions contains the retry settings for each method of CloudRedisClusterClient. type CloudRedisClusterCallOptions struct { - ListClusters []gax.CallOption - GetCluster []gax.CallOption - UpdateCluster []gax.CallOption - DeleteCluster []gax.CallOption - CreateCluster []gax.CallOption - GetLocation []gax.CallOption - ListLocations []gax.CallOption - CancelOperation []gax.CallOption - DeleteOperation []gax.CallOption - GetOperation []gax.CallOption - ListOperations []gax.CallOption + ListClusters []gax.CallOption + GetCluster []gax.CallOption + UpdateCluster []gax.CallOption + DeleteCluster []gax.CallOption + CreateCluster []gax.CallOption + GetClusterCertificateAuthority []gax.CallOption + GetLocation []gax.CallOption + ListLocations []gax.CallOption + CancelOperation []gax.CallOption + DeleteOperation []gax.CallOption + GetOperation []gax.CallOption + ListOperations []gax.CallOption } func defaultCloudRedisClusterGRPCClientOptions() []option.ClientOption { @@ -91,6 +92,9 @@ func defaultCloudRedisClusterCallOptions() *CloudRedisClusterCallOptions { CreateCluster: []gax.CallOption{ gax.WithTimeout(600000 * time.Millisecond), }, + GetClusterCertificateAuthority: []gax.CallOption{ + gax.WithTimeout(600000 * time.Millisecond), + }, GetLocation: []gax.CallOption{}, ListLocations: []gax.CallOption{}, CancelOperation: []gax.CallOption{}, @@ -117,6 +121,9 @@ func defaultCloudRedisClusterRESTCallOptions() *CloudRedisClusterCallOptions { CreateCluster: []gax.CallOption{ gax.WithTimeout(600000 * time.Millisecond), }, + GetClusterCertificateAuthority: []gax.CallOption{ + gax.WithTimeout(600000 * time.Millisecond), + }, GetLocation: []gax.CallOption{}, ListLocations: []gax.CallOption{}, CancelOperation: []gax.CallOption{}, @@ -139,6 +146,7 @@ type internalCloudRedisClusterClient interface { DeleteClusterOperation(name string) *DeleteClusterOperation CreateCluster(context.Context, *clusterpb.CreateClusterRequest, ...gax.CallOption) (*CreateClusterOperation, error) CreateClusterOperation(name string) *CreateClusterOperation + GetClusterCertificateAuthority(context.Context, *clusterpb.GetClusterCertificateAuthorityRequest, ...gax.CallOption) (*clusterpb.CertificateAuthority, error) GetLocation(context.Context, *locationpb.GetLocationRequest, ...gax.CallOption) (*locationpb.Location, error) ListLocations(context.Context, *locationpb.ListLocationsRequest, ...gax.CallOption) *LocationIterator CancelOperation(context.Context, *longrunningpb.CancelOperationRequest, ...gax.CallOption) error @@ -279,6 +287,11 @@ func (c *CloudRedisClusterClient) CreateClusterOperation(name string) *CreateClu return c.internalClient.CreateClusterOperation(name) } +// GetClusterCertificateAuthority gets the details of certificate authority information for Redis cluster. +func (c *CloudRedisClusterClient) GetClusterCertificateAuthority(ctx context.Context, req *clusterpb.GetClusterCertificateAuthorityRequest, opts ...gax.CallOption) (*clusterpb.CertificateAuthority, error) { + return c.internalClient.GetClusterCertificateAuthority(ctx, req, opts...) +} + // GetLocation gets information about a location. func (c *CloudRedisClusterClient) GetLocation(ctx context.Context, req *locationpb.GetLocationRequest, opts ...gax.CallOption) (*locationpb.Location, error) { return c.internalClient.GetLocation(ctx, req, opts...) @@ -674,6 +687,24 @@ func (c *cloudRedisClusterGRPCClient) CreateCluster(ctx context.Context, req *cl }, nil } +func (c *cloudRedisClusterGRPCClient) GetClusterCertificateAuthority(ctx context.Context, req *clusterpb.GetClusterCertificateAuthorityRequest, opts ...gax.CallOption) (*clusterpb.CertificateAuthority, error) { + hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))} + + hds = append(c.xGoogHeaders, hds...) + ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...) + opts = append((*c.CallOptions).GetClusterCertificateAuthority[0:len((*c.CallOptions).GetClusterCertificateAuthority):len((*c.CallOptions).GetClusterCertificateAuthority)], opts...) + var resp *clusterpb.CertificateAuthority + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.cloudRedisClusterClient.GetClusterCertificateAuthority(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + func (c *cloudRedisClusterGRPCClient) GetLocation(ctx context.Context, req *locationpb.GetLocationRequest, opts ...gax.CallOption) (*locationpb.Location, error) { hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))} @@ -1222,6 +1253,66 @@ func (c *cloudRedisClusterRESTClient) CreateCluster(ctx context.Context, req *cl }, nil } +// GetClusterCertificateAuthority gets the details of certificate authority information for Redis cluster. +func (c *cloudRedisClusterRESTClient) GetClusterCertificateAuthority(ctx context.Context, req *clusterpb.GetClusterCertificateAuthorityRequest, opts ...gax.CallOption) (*clusterpb.CertificateAuthority, error) { + baseUrl, err := url.Parse(c.endpoint) + if err != nil { + return nil, err + } + baseUrl.Path += fmt.Sprintf("/v1/%v", req.GetName()) + + params := url.Values{} + params.Add("$alt", "json;enum-encoding=int") + + baseUrl.RawQuery = params.Encode() + + // Build HTTP headers from client and context metadata. + hds := []string{"x-goog-request-params", fmt.Sprintf("%s=%v", "name", url.QueryEscape(req.GetName()))} + + hds = append(c.xGoogHeaders, hds...) + hds = append(hds, "Content-Type", "application/json") + headers := gax.BuildHeaders(ctx, hds...) + opts = append((*c.CallOptions).GetClusterCertificateAuthority[0:len((*c.CallOptions).GetClusterCertificateAuthority):len((*c.CallOptions).GetClusterCertificateAuthority)], opts...) + unm := protojson.UnmarshalOptions{AllowPartial: true, DiscardUnknown: true} + resp := &clusterpb.CertificateAuthority{} + e := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + if settings.Path != "" { + baseUrl.Path = settings.Path + } + httpReq, err := http.NewRequest("GET", baseUrl.String(), nil) + if err != nil { + return err + } + httpReq = httpReq.WithContext(ctx) + httpReq.Header = headers + + httpRsp, err := c.httpClient.Do(httpReq) + if err != nil { + return err + } + defer httpRsp.Body.Close() + + if err = googleapi.CheckResponse(httpRsp); err != nil { + return err + } + + buf, err := io.ReadAll(httpRsp.Body) + if err != nil { + return err + } + + if err := unm.Unmarshal(buf, resp); err != nil { + return err + } + + return nil + }, opts...) + if e != nil { + return nil, e + } + return resp, nil +} + // GetLocation gets information about a location. func (c *cloudRedisClusterRESTClient) GetLocation(ctx context.Context, req *locationpb.GetLocationRequest, opts ...gax.CallOption) (*locationpb.Location, error) { baseUrl, err := url.Parse(c.endpoint) diff --git a/redis/cluster/apiv1/cloud_redis_cluster_client_example_test.go b/redis/cluster/apiv1/cloud_redis_cluster_client_example_test.go index 3561b8c45c40..037ee7a29f1e 100644 --- a/redis/cluster/apiv1/cloud_redis_cluster_client_example_test.go +++ b/redis/cluster/apiv1/cloud_redis_cluster_client_example_test.go @@ -143,6 +143,31 @@ func ExampleCloudRedisClusterClient_GetCluster() { _ = resp } +func ExampleCloudRedisClusterClient_GetClusterCertificateAuthority() { + ctx := context.Background() + // This snippet has been automatically generated and should be regarded as a code template only. + // It will require modifications to work: + // - It may require correct/in-range values for request initialization. + // - It may require specifying regional endpoints when creating the service client as shown in: + // https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options + c, err := cluster.NewCloudRedisClusterClient(ctx) + if err != nil { + // TODO: Handle error. + } + defer c.Close() + + req := &clusterpb.GetClusterCertificateAuthorityRequest{ + // TODO: Fill request struct fields. + // See https://pkg.go.dev/cloud.google.com/go/redis/cluster/apiv1/clusterpb#GetClusterCertificateAuthorityRequest. + } + resp, err := c.GetClusterCertificateAuthority(ctx, req) + if err != nil { + // TODO: Handle error. + } + // TODO: Use resp. + _ = resp +} + func ExampleCloudRedisClusterClient_ListClusters() { ctx := context.Background() // This snippet has been automatically generated and should be regarded as a code template only. diff --git a/redis/cluster/apiv1/clusterpb/cloud_redis_cluster.pb.go b/redis/cluster/apiv1/clusterpb/cloud_redis_cluster.pb.go index 22cd7c400455..af818e660279 100755 --- a/redis/cluster/apiv1/clusterpb/cloud_redis_cluster.pb.go +++ b/redis/cluster/apiv1/clusterpb/cloud_redis_cluster.pb.go @@ -98,6 +98,66 @@ func (AuthorizationMode) EnumDescriptor() ([]byte, []int) { return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{0} } +// NodeType of a redis cluster node, +type NodeType int32 + +const ( + NodeType_NODE_TYPE_UNSPECIFIED NodeType = 0 + // Redis shared core nano node_type. + NodeType_REDIS_SHARED_CORE_NANO NodeType = 1 + // Redis highmem medium node_type. + NodeType_REDIS_HIGHMEM_MEDIUM NodeType = 2 + // Redis highmem xlarge node_type. + NodeType_REDIS_HIGHMEM_XLARGE NodeType = 3 + // Redis standard small node_type. + NodeType_REDIS_STANDARD_SMALL NodeType = 4 +) + +// Enum value maps for NodeType. +var ( + NodeType_name = map[int32]string{ + 0: "NODE_TYPE_UNSPECIFIED", + 1: "REDIS_SHARED_CORE_NANO", + 2: "REDIS_HIGHMEM_MEDIUM", + 3: "REDIS_HIGHMEM_XLARGE", + 4: "REDIS_STANDARD_SMALL", + } + NodeType_value = map[string]int32{ + "NODE_TYPE_UNSPECIFIED": 0, + "REDIS_SHARED_CORE_NANO": 1, + "REDIS_HIGHMEM_MEDIUM": 2, + "REDIS_HIGHMEM_XLARGE": 3, + "REDIS_STANDARD_SMALL": 4, + } +) + +func (x NodeType) Enum() *NodeType { + p := new(NodeType) + *p = x + return p +} + +func (x NodeType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NodeType) Descriptor() protoreflect.EnumDescriptor { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[1].Descriptor() +} + +func (NodeType) Type() protoreflect.EnumType { + return &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[1] +} + +func (x NodeType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NodeType.Descriptor instead. +func (NodeType) EnumDescriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{1} +} + // Available mode of in-transit encryption. type TransitEncryptionMode int32 @@ -135,11 +195,11 @@ func (x TransitEncryptionMode) String() string { } func (TransitEncryptionMode) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[1].Descriptor() + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[2].Descriptor() } func (TransitEncryptionMode) Type() protoreflect.EnumType { - return &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[1] + return &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[2] } func (x TransitEncryptionMode) Number() protoreflect.EnumNumber { @@ -148,7 +208,7 @@ func (x TransitEncryptionMode) Number() protoreflect.EnumNumber { // Deprecated: Use TransitEncryptionMode.Descriptor instead. func (TransitEncryptionMode) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{1} + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{2} } // Represents the different states of a Redis cluster. @@ -196,11 +256,11 @@ func (x Cluster_State) String() string { } func (Cluster_State) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[2].Descriptor() + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[3].Descriptor() } func (Cluster_State) Type() protoreflect.EnumType { - return &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[2] + return &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[3] } func (x Cluster_State) Number() protoreflect.EnumNumber { @@ -209,7 +269,243 @@ func (x Cluster_State) Number() protoreflect.EnumNumber { // Deprecated: Use Cluster_State.Descriptor instead. func (Cluster_State) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{6, 0} + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{7, 0} +} + +// Available persistence modes. +type ClusterPersistenceConfig_PersistenceMode int32 + +const ( + // Not set. + ClusterPersistenceConfig_PERSISTENCE_MODE_UNSPECIFIED ClusterPersistenceConfig_PersistenceMode = 0 + // Persistence is disabled, and any snapshot data is deleted. + ClusterPersistenceConfig_DISABLED ClusterPersistenceConfig_PersistenceMode = 1 + // RDB based persistence is enabled. + ClusterPersistenceConfig_RDB ClusterPersistenceConfig_PersistenceMode = 2 + // AOF based persistence is enabled. + ClusterPersistenceConfig_AOF ClusterPersistenceConfig_PersistenceMode = 3 +) + +// Enum value maps for ClusterPersistenceConfig_PersistenceMode. +var ( + ClusterPersistenceConfig_PersistenceMode_name = map[int32]string{ + 0: "PERSISTENCE_MODE_UNSPECIFIED", + 1: "DISABLED", + 2: "RDB", + 3: "AOF", + } + ClusterPersistenceConfig_PersistenceMode_value = map[string]int32{ + "PERSISTENCE_MODE_UNSPECIFIED": 0, + "DISABLED": 1, + "RDB": 2, + "AOF": 3, + } +) + +func (x ClusterPersistenceConfig_PersistenceMode) Enum() *ClusterPersistenceConfig_PersistenceMode { + p := new(ClusterPersistenceConfig_PersistenceMode) + *p = x + return p +} + +func (x ClusterPersistenceConfig_PersistenceMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ClusterPersistenceConfig_PersistenceMode) Descriptor() protoreflect.EnumDescriptor { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[4].Descriptor() +} + +func (ClusterPersistenceConfig_PersistenceMode) Type() protoreflect.EnumType { + return &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[4] +} + +func (x ClusterPersistenceConfig_PersistenceMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ClusterPersistenceConfig_PersistenceMode.Descriptor instead. +func (ClusterPersistenceConfig_PersistenceMode) EnumDescriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{13, 0} +} + +// Available snapshot periods. +type ClusterPersistenceConfig_RDBConfig_SnapshotPeriod int32 + +const ( + // Not set. + ClusterPersistenceConfig_RDBConfig_SNAPSHOT_PERIOD_UNSPECIFIED ClusterPersistenceConfig_RDBConfig_SnapshotPeriod = 0 + // One hour. + ClusterPersistenceConfig_RDBConfig_ONE_HOUR ClusterPersistenceConfig_RDBConfig_SnapshotPeriod = 1 + // Six hours. + ClusterPersistenceConfig_RDBConfig_SIX_HOURS ClusterPersistenceConfig_RDBConfig_SnapshotPeriod = 2 + // Twelve hours. + ClusterPersistenceConfig_RDBConfig_TWELVE_HOURS ClusterPersistenceConfig_RDBConfig_SnapshotPeriod = 3 + // Twenty four hours. + ClusterPersistenceConfig_RDBConfig_TWENTY_FOUR_HOURS ClusterPersistenceConfig_RDBConfig_SnapshotPeriod = 4 +) + +// Enum value maps for ClusterPersistenceConfig_RDBConfig_SnapshotPeriod. +var ( + ClusterPersistenceConfig_RDBConfig_SnapshotPeriod_name = map[int32]string{ + 0: "SNAPSHOT_PERIOD_UNSPECIFIED", + 1: "ONE_HOUR", + 2: "SIX_HOURS", + 3: "TWELVE_HOURS", + 4: "TWENTY_FOUR_HOURS", + } + ClusterPersistenceConfig_RDBConfig_SnapshotPeriod_value = map[string]int32{ + "SNAPSHOT_PERIOD_UNSPECIFIED": 0, + "ONE_HOUR": 1, + "SIX_HOURS": 2, + "TWELVE_HOURS": 3, + "TWENTY_FOUR_HOURS": 4, + } +) + +func (x ClusterPersistenceConfig_RDBConfig_SnapshotPeriod) Enum() *ClusterPersistenceConfig_RDBConfig_SnapshotPeriod { + p := new(ClusterPersistenceConfig_RDBConfig_SnapshotPeriod) + *p = x + return p +} + +func (x ClusterPersistenceConfig_RDBConfig_SnapshotPeriod) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ClusterPersistenceConfig_RDBConfig_SnapshotPeriod) Descriptor() protoreflect.EnumDescriptor { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[5].Descriptor() +} + +func (ClusterPersistenceConfig_RDBConfig_SnapshotPeriod) Type() protoreflect.EnumType { + return &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[5] +} + +func (x ClusterPersistenceConfig_RDBConfig_SnapshotPeriod) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ClusterPersistenceConfig_RDBConfig_SnapshotPeriod.Descriptor instead. +func (ClusterPersistenceConfig_RDBConfig_SnapshotPeriod) EnumDescriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{13, 0, 0} +} + +// Available fsync modes. +type ClusterPersistenceConfig_AOFConfig_AppendFsync int32 + +const ( + // Not set. Default: EVERYSEC + ClusterPersistenceConfig_AOFConfig_APPEND_FSYNC_UNSPECIFIED ClusterPersistenceConfig_AOFConfig_AppendFsync = 0 + // Never fsync. Normally Linux will flush data every 30 seconds with this + // configuration, but it's up to the kernel's exact tuning. + ClusterPersistenceConfig_AOFConfig_NO ClusterPersistenceConfig_AOFConfig_AppendFsync = 1 + // fsync every second. Fast enough, and you may lose 1 second of data if + // there is a disaster + ClusterPersistenceConfig_AOFConfig_EVERYSEC ClusterPersistenceConfig_AOFConfig_AppendFsync = 2 + // fsync every time new commands are appended to the AOF. It has the best + // data loss protection at the cost of performance + ClusterPersistenceConfig_AOFConfig_ALWAYS ClusterPersistenceConfig_AOFConfig_AppendFsync = 3 +) + +// Enum value maps for ClusterPersistenceConfig_AOFConfig_AppendFsync. +var ( + ClusterPersistenceConfig_AOFConfig_AppendFsync_name = map[int32]string{ + 0: "APPEND_FSYNC_UNSPECIFIED", + 1: "NO", + 2: "EVERYSEC", + 3: "ALWAYS", + } + ClusterPersistenceConfig_AOFConfig_AppendFsync_value = map[string]int32{ + "APPEND_FSYNC_UNSPECIFIED": 0, + "NO": 1, + "EVERYSEC": 2, + "ALWAYS": 3, + } +) + +func (x ClusterPersistenceConfig_AOFConfig_AppendFsync) Enum() *ClusterPersistenceConfig_AOFConfig_AppendFsync { + p := new(ClusterPersistenceConfig_AOFConfig_AppendFsync) + *p = x + return p +} + +func (x ClusterPersistenceConfig_AOFConfig_AppendFsync) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ClusterPersistenceConfig_AOFConfig_AppendFsync) Descriptor() protoreflect.EnumDescriptor { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[6].Descriptor() +} + +func (ClusterPersistenceConfig_AOFConfig_AppendFsync) Type() protoreflect.EnumType { + return &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[6] +} + +func (x ClusterPersistenceConfig_AOFConfig_AppendFsync) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ClusterPersistenceConfig_AOFConfig_AppendFsync.Descriptor instead. +func (ClusterPersistenceConfig_AOFConfig_AppendFsync) EnumDescriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{13, 1, 0} +} + +// Defines various modes of zone distribution. +// Currently supports two modes, can be expanded in future to support more +// types of distribution modes. +// design doc: go/same-zone-cluster +type ZoneDistributionConfig_ZoneDistributionMode int32 + +const ( + // Not Set. Default: MULTI_ZONE + ZoneDistributionConfig_ZONE_DISTRIBUTION_MODE_UNSPECIFIED ZoneDistributionConfig_ZoneDistributionMode = 0 + // Distribute all resources across 3 zones picked at random, within the + // region. + ZoneDistributionConfig_MULTI_ZONE ZoneDistributionConfig_ZoneDistributionMode = 1 + // Distribute all resources in a single zone. The zone field must be + // specified, when this mode is selected. + ZoneDistributionConfig_SINGLE_ZONE ZoneDistributionConfig_ZoneDistributionMode = 2 +) + +// Enum value maps for ZoneDistributionConfig_ZoneDistributionMode. +var ( + ZoneDistributionConfig_ZoneDistributionMode_name = map[int32]string{ + 0: "ZONE_DISTRIBUTION_MODE_UNSPECIFIED", + 1: "MULTI_ZONE", + 2: "SINGLE_ZONE", + } + ZoneDistributionConfig_ZoneDistributionMode_value = map[string]int32{ + "ZONE_DISTRIBUTION_MODE_UNSPECIFIED": 0, + "MULTI_ZONE": 1, + "SINGLE_ZONE": 2, + } +) + +func (x ZoneDistributionConfig_ZoneDistributionMode) Enum() *ZoneDistributionConfig_ZoneDistributionMode { + p := new(ZoneDistributionConfig_ZoneDistributionMode) + *p = x + return p +} + +func (x ZoneDistributionConfig_ZoneDistributionMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ZoneDistributionConfig_ZoneDistributionMode) Descriptor() protoreflect.EnumDescriptor { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[7].Descriptor() +} + +func (ZoneDistributionConfig_ZoneDistributionMode) Type() protoreflect.EnumType { + return &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes[7] +} + +func (x ZoneDistributionConfig_ZoneDistributionMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ZoneDistributionConfig_ZoneDistributionMode.Descriptor instead. +func (ZoneDistributionConfig_ZoneDistributionMode) EnumDescriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{14, 0} } // Request for [CreateCluster][CloudRedis.CreateCluster]. @@ -643,6 +939,60 @@ func (x *DeleteClusterRequest) GetRequestId() string { return "" } +// Request for +// [GetClusterCertificateAuthorityRequest][CloudRedis.GetClusterCertificateAuthorityRequest]. +type GetClusterCertificateAuthorityRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required. Redis cluster certificate authority resource name using the form: + // + // `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}/certificateAuthority` + // + // where `location_id` refers to a GCP region. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GetClusterCertificateAuthorityRequest) Reset() { + *x = GetClusterCertificateAuthorityRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetClusterCertificateAuthorityRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetClusterCertificateAuthorityRequest) ProtoMessage() {} + +func (x *GetClusterCertificateAuthorityRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetClusterCertificateAuthorityRequest.ProtoReflect.Descriptor instead. +func (*GetClusterCertificateAuthorityRequest) Descriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{6} +} + +func (x *GetClusterCertificateAuthorityRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + // A cluster instance. type Cluster struct { state protoimpl.MessageState @@ -669,7 +1019,8 @@ type Cluster struct { // Optional. The in-transit encryption for the Redis cluster. // If not provided, encryption is disabled for the cluster. TransitEncryptionMode TransitEncryptionMode `protobuf:"varint,12,opt,name=transit_encryption_mode,json=transitEncryptionMode,proto3,enum=google.cloud.redis.cluster.v1.TransitEncryptionMode" json:"transit_encryption_mode,omitempty"` - // Output only. Redis memory size in GB for the entire cluster. + // Output only. Redis memory size in GB for the entire cluster rounded up to + // the next integer. SizeGb *int32 `protobuf:"varint,13,opt,name=size_gb,json=sizeGb,proto3,oneof" json:"size_gb,omitempty"` // Required. Number of shards for the Redis cluster. ShardCount *int32 `protobuf:"varint,14,opt,name=shard_count,json=shardCount,proto3,oneof" json:"shard_count,omitempty"` @@ -685,12 +1036,27 @@ type Cluster struct { PscConnections []*PscConnection `protobuf:"bytes,17,rep,name=psc_connections,json=pscConnections,proto3" json:"psc_connections,omitempty"` // Output only. Additional information about the current state of the cluster. StateInfo *Cluster_StateInfo `protobuf:"bytes,18,opt,name=state_info,json=stateInfo,proto3" json:"state_info,omitempty"` + // Optional. The type of a redis node in the cluster. NodeType determines the + // underlying machine-type of a redis node. + NodeType NodeType `protobuf:"varint,19,opt,name=node_type,json=nodeType,proto3,enum=google.cloud.redis.cluster.v1.NodeType" json:"node_type,omitempty"` + // Optional. Persistence config (RDB, AOF) for the cluster. + PersistenceConfig *ClusterPersistenceConfig `protobuf:"bytes,20,opt,name=persistence_config,json=persistenceConfig,proto3" json:"persistence_config,omitempty"` + // Optional. Key/Value pairs of customer overrides for mutable Redis Configs + RedisConfigs map[string]string `protobuf:"bytes,21,rep,name=redis_configs,json=redisConfigs,proto3" json:"redis_configs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Output only. Precise value of redis memory size in GB for the entire + // cluster. + PreciseSizeGb *float64 `protobuf:"fixed64,22,opt,name=precise_size_gb,json=preciseSizeGb,proto3,oneof" json:"precise_size_gb,omitempty"` + // Optional. This config will be used to determine how the customer wants us + // to distribute cluster resources within the region. + ZoneDistributionConfig *ZoneDistributionConfig `protobuf:"bytes,23,opt,name=zone_distribution_config,json=zoneDistributionConfig,proto3" json:"zone_distribution_config,omitempty"` + // Optional. The delete operation will fail when the value is set to true. + DeletionProtectionEnabled *bool `protobuf:"varint,25,opt,name=deletion_protection_enabled,json=deletionProtectionEnabled,proto3,oneof" json:"deletion_protection_enabled,omitempty"` } func (x *Cluster) Reset() { *x = Cluster{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[6] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -703,7 +1069,7 @@ func (x *Cluster) String() string { func (*Cluster) ProtoMessage() {} func (x *Cluster) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[6] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -716,7 +1082,7 @@ func (x *Cluster) ProtoReflect() protoreflect.Message { // Deprecated: Use Cluster.ProtoReflect.Descriptor instead. func (*Cluster) Descriptor() ([]byte, []int) { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{6} + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{7} } func (x *Cluster) GetName() string { @@ -810,6 +1176,48 @@ func (x *Cluster) GetStateInfo() *Cluster_StateInfo { return nil } +func (x *Cluster) GetNodeType() NodeType { + if x != nil { + return x.NodeType + } + return NodeType_NODE_TYPE_UNSPECIFIED +} + +func (x *Cluster) GetPersistenceConfig() *ClusterPersistenceConfig { + if x != nil { + return x.PersistenceConfig + } + return nil +} + +func (x *Cluster) GetRedisConfigs() map[string]string { + if x != nil { + return x.RedisConfigs + } + return nil +} + +func (x *Cluster) GetPreciseSizeGb() float64 { + if x != nil && x.PreciseSizeGb != nil { + return *x.PreciseSizeGb + } + return 0 +} + +func (x *Cluster) GetZoneDistributionConfig() *ZoneDistributionConfig { + if x != nil { + return x.ZoneDistributionConfig + } + return nil +} + +func (x *Cluster) GetDeletionProtectionEnabled() bool { + if x != nil && x.DeletionProtectionEnabled != nil { + return *x.DeletionProtectionEnabled + } + return false +} + type PscConfig struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -824,7 +1232,7 @@ type PscConfig struct { func (x *PscConfig) Reset() { *x = PscConfig{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[7] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -837,7 +1245,7 @@ func (x *PscConfig) String() string { func (*PscConfig) ProtoMessage() {} func (x *PscConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[7] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -850,7 +1258,7 @@ func (x *PscConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use PscConfig.ProtoReflect.Descriptor instead. func (*PscConfig) Descriptor() ([]byte, []int) { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{7} + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{8} } func (x *PscConfig) GetNetwork() string { @@ -879,7 +1287,7 @@ type DiscoveryEndpoint struct { func (x *DiscoveryEndpoint) Reset() { *x = DiscoveryEndpoint{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[8] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -892,7 +1300,7 @@ func (x *DiscoveryEndpoint) String() string { func (*DiscoveryEndpoint) ProtoMessage() {} func (x *DiscoveryEndpoint) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[8] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -905,7 +1313,7 @@ func (x *DiscoveryEndpoint) ProtoReflect() protoreflect.Message { // Deprecated: Use DiscoveryEndpoint.ProtoReflect.Descriptor instead. func (*DiscoveryEndpoint) Descriptor() ([]byte, []int) { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{8} + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{9} } func (x *DiscoveryEndpoint) GetAddress() string { @@ -956,7 +1364,7 @@ type PscConnection struct { func (x *PscConnection) Reset() { *x = PscConnection{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[9] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -969,7 +1377,7 @@ func (x *PscConnection) String() string { func (*PscConnection) ProtoMessage() {} func (x *PscConnection) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[9] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -982,7 +1390,7 @@ func (x *PscConnection) ProtoReflect() protoreflect.Message { // Deprecated: Use PscConnection.ProtoReflect.Descriptor instead. func (*PscConnection) Descriptor() ([]byte, []int) { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{9} + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{10} } func (x *PscConnection) GetPscConnectionId() string { @@ -1049,7 +1457,7 @@ type OperationMetadata struct { func (x *OperationMetadata) Reset() { *x = OperationMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[10] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1062,7 +1470,7 @@ func (x *OperationMetadata) String() string { func (*OperationMetadata) ProtoMessage() {} func (x *OperationMetadata) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[10] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1075,7 +1483,7 @@ func (x *OperationMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use OperationMetadata.ProtoReflect.Descriptor instead. func (*OperationMetadata) Descriptor() ([]byte, []int) { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{10} + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{11} } func (x *OperationMetadata) GetCreateTime() *timestamppb.Timestamp { @@ -1127,35 +1535,42 @@ func (x *OperationMetadata) GetApiVersion() string { return "" } -// Represents additional information about the state of the cluster. -type Cluster_StateInfo struct { +// Redis cluster certificate authority +type CertificateAuthority struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Info: + // server ca information // - // *Cluster_StateInfo_UpdateInfo_ - Info isCluster_StateInfo_Info `protobuf_oneof:"info"` + // Types that are assignable to ServerCa: + // + // *CertificateAuthority_ManagedServerCa + ServerCa isCertificateAuthority_ServerCa `protobuf_oneof:"server_ca"` + // Identifier. Unique name of the resource in this scope including project, + // location and cluster using the form: + // + // `projects/{project}/locations/{location}/clusters/{cluster}/certificateAuthority` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (x *Cluster_StateInfo) Reset() { - *x = Cluster_StateInfo{} +func (x *CertificateAuthority) Reset() { + *x = CertificateAuthority{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[11] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Cluster_StateInfo) String() string { +func (x *CertificateAuthority) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Cluster_StateInfo) ProtoMessage() {} +func (*CertificateAuthority) ProtoMessage() {} -func (x *Cluster_StateInfo) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[11] +func (x *CertificateAuthority) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1166,27 +1581,230 @@ func (x *Cluster_StateInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Cluster_StateInfo.ProtoReflect.Descriptor instead. -func (*Cluster_StateInfo) Descriptor() ([]byte, []int) { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{6, 0} +// Deprecated: Use CertificateAuthority.ProtoReflect.Descriptor instead. +func (*CertificateAuthority) Descriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{12} } -func (m *Cluster_StateInfo) GetInfo() isCluster_StateInfo_Info { +func (m *CertificateAuthority) GetServerCa() isCertificateAuthority_ServerCa { if m != nil { - return m.Info + return m.ServerCa } return nil } -func (x *Cluster_StateInfo) GetUpdateInfo() *Cluster_StateInfo_UpdateInfo { - if x, ok := x.GetInfo().(*Cluster_StateInfo_UpdateInfo_); ok { - return x.UpdateInfo +func (x *CertificateAuthority) GetManagedServerCa() *CertificateAuthority_ManagedCertificateAuthority { + if x, ok := x.GetServerCa().(*CertificateAuthority_ManagedServerCa); ok { + return x.ManagedServerCa } return nil } -type isCluster_StateInfo_Info interface { - isCluster_StateInfo_Info() +func (x *CertificateAuthority) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type isCertificateAuthority_ServerCa interface { + isCertificateAuthority_ServerCa() +} + +type CertificateAuthority_ManagedServerCa struct { + ManagedServerCa *CertificateAuthority_ManagedCertificateAuthority `protobuf:"bytes,1,opt,name=managed_server_ca,json=managedServerCa,proto3,oneof"` +} + +func (*CertificateAuthority_ManagedServerCa) isCertificateAuthority_ServerCa() {} + +// Configuration of the persistence functionality. +type ClusterPersistenceConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional. The mode of persistence. + Mode ClusterPersistenceConfig_PersistenceMode `protobuf:"varint,1,opt,name=mode,proto3,enum=google.cloud.redis.cluster.v1.ClusterPersistenceConfig_PersistenceMode" json:"mode,omitempty"` + // Optional. RDB configuration. This field will be ignored if mode is not RDB. + RdbConfig *ClusterPersistenceConfig_RDBConfig `protobuf:"bytes,2,opt,name=rdb_config,json=rdbConfig,proto3" json:"rdb_config,omitempty"` + // Optional. AOF configuration. This field will be ignored if mode is not AOF. + AofConfig *ClusterPersistenceConfig_AOFConfig `protobuf:"bytes,3,opt,name=aof_config,json=aofConfig,proto3" json:"aof_config,omitempty"` +} + +func (x *ClusterPersistenceConfig) Reset() { + *x = ClusterPersistenceConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterPersistenceConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterPersistenceConfig) ProtoMessage() {} + +func (x *ClusterPersistenceConfig) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterPersistenceConfig.ProtoReflect.Descriptor instead. +func (*ClusterPersistenceConfig) Descriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{13} +} + +func (x *ClusterPersistenceConfig) GetMode() ClusterPersistenceConfig_PersistenceMode { + if x != nil { + return x.Mode + } + return ClusterPersistenceConfig_PERSISTENCE_MODE_UNSPECIFIED +} + +func (x *ClusterPersistenceConfig) GetRdbConfig() *ClusterPersistenceConfig_RDBConfig { + if x != nil { + return x.RdbConfig + } + return nil +} + +func (x *ClusterPersistenceConfig) GetAofConfig() *ClusterPersistenceConfig_AOFConfig { + if x != nil { + return x.AofConfig + } + return nil +} + +// Zone distribution config for allocation of cluster resources. +type ZoneDistributionConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional. The mode of zone distribution. Defaults to MULTI_ZONE, when not + // specified. + Mode ZoneDistributionConfig_ZoneDistributionMode `protobuf:"varint,1,opt,name=mode,proto3,enum=google.cloud.redis.cluster.v1.ZoneDistributionConfig_ZoneDistributionMode" json:"mode,omitempty"` + // Optional. When SINGLE ZONE distribution is selected, zone field would be + // used to allocate all resources in that zone. This is not applicable to + // MULTI_ZONE, and would be ignored for MULTI_ZONE clusters. + Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` +} + +func (x *ZoneDistributionConfig) Reset() { + *x = ZoneDistributionConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ZoneDistributionConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ZoneDistributionConfig) ProtoMessage() {} + +func (x *ZoneDistributionConfig) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ZoneDistributionConfig.ProtoReflect.Descriptor instead. +func (*ZoneDistributionConfig) Descriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{14} +} + +func (x *ZoneDistributionConfig) GetMode() ZoneDistributionConfig_ZoneDistributionMode { + if x != nil { + return x.Mode + } + return ZoneDistributionConfig_ZONE_DISTRIBUTION_MODE_UNSPECIFIED +} + +func (x *ZoneDistributionConfig) GetZone() string { + if x != nil { + return x.Zone + } + return "" +} + +// Represents additional information about the state of the cluster. +type Cluster_StateInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Info: + // + // *Cluster_StateInfo_UpdateInfo_ + Info isCluster_StateInfo_Info `protobuf_oneof:"info"` +} + +func (x *Cluster_StateInfo) Reset() { + *x = Cluster_StateInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cluster_StateInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cluster_StateInfo) ProtoMessage() {} + +func (x *Cluster_StateInfo) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Cluster_StateInfo.ProtoReflect.Descriptor instead. +func (*Cluster_StateInfo) Descriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{7, 0} +} + +func (m *Cluster_StateInfo) GetInfo() isCluster_StateInfo_Info { + if m != nil { + return m.Info + } + return nil +} + +func (x *Cluster_StateInfo) GetUpdateInfo() *Cluster_StateInfo_UpdateInfo { + if x, ok := x.GetInfo().(*Cluster_StateInfo_UpdateInfo_); ok { + return x.UpdateInfo + } + return nil +} + +type isCluster_StateInfo_Info interface { + isCluster_StateInfo_Info() } type Cluster_StateInfo_UpdateInfo_ struct { @@ -1211,7 +1829,7 @@ type Cluster_StateInfo_UpdateInfo struct { func (x *Cluster_StateInfo_UpdateInfo) Reset() { *x = Cluster_StateInfo_UpdateInfo{} if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[12] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1224,7 +1842,7 @@ func (x *Cluster_StateInfo_UpdateInfo) String() string { func (*Cluster_StateInfo_UpdateInfo) ProtoMessage() {} func (x *Cluster_StateInfo_UpdateInfo) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[12] + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1237,7 +1855,7 @@ func (x *Cluster_StateInfo_UpdateInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use Cluster_StateInfo_UpdateInfo.ProtoReflect.Descriptor instead. func (*Cluster_StateInfo_UpdateInfo) Descriptor() ([]byte, []int) { - return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{6, 0, 0} + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{7, 0, 0} } func (x *Cluster_StateInfo_UpdateInfo) GetTargetShardCount() int32 { @@ -1254,6 +1872,212 @@ func (x *Cluster_StateInfo_UpdateInfo) GetTargetReplicaCount() int32 { return 0 } +type CertificateAuthority_ManagedCertificateAuthority struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The PEM encoded CA certificate chains for redis managed + // server authentication + CaCerts []*CertificateAuthority_ManagedCertificateAuthority_CertChain `protobuf:"bytes,1,rep,name=ca_certs,json=caCerts,proto3" json:"ca_certs,omitempty"` +} + +func (x *CertificateAuthority_ManagedCertificateAuthority) Reset() { + *x = CertificateAuthority_ManagedCertificateAuthority{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CertificateAuthority_ManagedCertificateAuthority) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CertificateAuthority_ManagedCertificateAuthority) ProtoMessage() {} + +func (x *CertificateAuthority_ManagedCertificateAuthority) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CertificateAuthority_ManagedCertificateAuthority.ProtoReflect.Descriptor instead. +func (*CertificateAuthority_ManagedCertificateAuthority) Descriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{12, 0} +} + +func (x *CertificateAuthority_ManagedCertificateAuthority) GetCaCerts() []*CertificateAuthority_ManagedCertificateAuthority_CertChain { + if x != nil { + return x.CaCerts + } + return nil +} + +type CertificateAuthority_ManagedCertificateAuthority_CertChain struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The certificates that form the CA chain, from leaf to root order. + Certificates []string `protobuf:"bytes,1,rep,name=certificates,proto3" json:"certificates,omitempty"` +} + +func (x *CertificateAuthority_ManagedCertificateAuthority_CertChain) Reset() { + *x = CertificateAuthority_ManagedCertificateAuthority_CertChain{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CertificateAuthority_ManagedCertificateAuthority_CertChain) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CertificateAuthority_ManagedCertificateAuthority_CertChain) ProtoMessage() {} + +func (x *CertificateAuthority_ManagedCertificateAuthority_CertChain) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CertificateAuthority_ManagedCertificateAuthority_CertChain.ProtoReflect.Descriptor instead. +func (*CertificateAuthority_ManagedCertificateAuthority_CertChain) Descriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{12, 0, 0} +} + +func (x *CertificateAuthority_ManagedCertificateAuthority_CertChain) GetCertificates() []string { + if x != nil { + return x.Certificates + } + return nil +} + +// Configuration of the RDB based persistence. +type ClusterPersistenceConfig_RDBConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional. Period between RDB snapshots. + RdbSnapshotPeriod ClusterPersistenceConfig_RDBConfig_SnapshotPeriod `protobuf:"varint,1,opt,name=rdb_snapshot_period,json=rdbSnapshotPeriod,proto3,enum=google.cloud.redis.cluster.v1.ClusterPersistenceConfig_RDBConfig_SnapshotPeriod" json:"rdb_snapshot_period,omitempty"` + // Optional. The time that the first snapshot was/will be attempted, and to + // which future snapshots will be aligned. If not provided, the current time + // will be used. + RdbSnapshotStartTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=rdb_snapshot_start_time,json=rdbSnapshotStartTime,proto3" json:"rdb_snapshot_start_time,omitempty"` +} + +func (x *ClusterPersistenceConfig_RDBConfig) Reset() { + *x = ClusterPersistenceConfig_RDBConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterPersistenceConfig_RDBConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterPersistenceConfig_RDBConfig) ProtoMessage() {} + +func (x *ClusterPersistenceConfig_RDBConfig) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterPersistenceConfig_RDBConfig.ProtoReflect.Descriptor instead. +func (*ClusterPersistenceConfig_RDBConfig) Descriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{13, 0} +} + +func (x *ClusterPersistenceConfig_RDBConfig) GetRdbSnapshotPeriod() ClusterPersistenceConfig_RDBConfig_SnapshotPeriod { + if x != nil { + return x.RdbSnapshotPeriod + } + return ClusterPersistenceConfig_RDBConfig_SNAPSHOT_PERIOD_UNSPECIFIED +} + +func (x *ClusterPersistenceConfig_RDBConfig) GetRdbSnapshotStartTime() *timestamppb.Timestamp { + if x != nil { + return x.RdbSnapshotStartTime + } + return nil +} + +// Configuration of the AOF based persistence. +type ClusterPersistenceConfig_AOFConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional. fsync configuration. + AppendFsync ClusterPersistenceConfig_AOFConfig_AppendFsync `protobuf:"varint,1,opt,name=append_fsync,json=appendFsync,proto3,enum=google.cloud.redis.cluster.v1.ClusterPersistenceConfig_AOFConfig_AppendFsync" json:"append_fsync,omitempty"` +} + +func (x *ClusterPersistenceConfig_AOFConfig) Reset() { + *x = ClusterPersistenceConfig_AOFConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterPersistenceConfig_AOFConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterPersistenceConfig_AOFConfig) ProtoMessage() {} + +func (x *ClusterPersistenceConfig_AOFConfig) ProtoReflect() protoreflect.Message { + mi := &file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterPersistenceConfig_AOFConfig.ProtoReflect.Descriptor instead. +func (*ClusterPersistenceConfig_AOFConfig) Descriptor() ([]byte, []int) { + return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP(), []int{13, 1} +} + +func (x *ClusterPersistenceConfig_AOFConfig) GetAppendFsync() ClusterPersistenceConfig_AOFConfig_AppendFsync { + if x != nil { + return x.AppendFsync + } + return ClusterPersistenceConfig_AOFConfig_APPEND_FSYNC_UNSPECIFIED +} + var File_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto protoreflect.FileDescriptor var file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDesc = []byte{ @@ -1338,7 +2162,14 @@ var file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDesc = []byt 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x22, 0x86, 0x0b, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x04, + 0x22, 0x6e, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x31, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x2b, 0x0a, + 0x29, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, + 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x89, 0x10, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, @@ -1394,182 +2225,356 @@ var file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDesc = []byt 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x9c, 0x02, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x5e, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, + 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x49, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0xa6, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x31, 0x0a, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, - 0x68, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x48, 0x00, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x35, 0x0a, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x15, - 0x0a, 0x13, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x06, - 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x54, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, - 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0c, - 0x0a, 0x08, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x3a, 0x5d, 0xea, 0x41, - 0x5a, 0x0a, 0x1c, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, - 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, - 0x3a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x42, 0x10, 0x0a, 0x0e, 0x5f, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x62, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x73, 0x68, - 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x2a, 0x0a, 0x09, 0x50, 0x73, 0x63, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x22, 0x99, 0x01, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x79, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x70, - 0x6f, 0x72, 0x74, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x73, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x6b, 0x0a, 0x12, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, + 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, + 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x11, 0x70, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x62, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x52, + 0x65, 0x64, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x73, 0x12, 0x30, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x65, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x62, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x48, 0x03, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x47, 0x62, 0x88, 0x01, 0x01, 0x12, 0x74, 0x0a, 0x18, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x64, 0x69, + 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x73, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x70, 0x73, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x22, 0xcb, 0x01, 0x0a, 0x0d, 0x50, 0x73, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x11, 0x70, 0x73, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x0f, 0x70, 0x73, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x0f, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x0e, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, - 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x22, - 0xd5, 0x02, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x12, 0x17, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x2a, 0x0a, 0x0e, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x16, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x24, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x61, 0x70, 0x69, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2a, 0x5e, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x44, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, + 0xe0, 0x41, 0x01, 0x52, 0x16, 0x7a, 0x6f, 0x6e, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x48, 0x0a, 0x1b, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x48, 0x04, 0x52, 0x19, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x88, 0x01, 0x01, 0x1a, 0x9c, 0x02, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x5e, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x1a, 0xa6, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x31, 0x0a, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, + 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, + 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x35, 0x0a, 0x14, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, + 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, + 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x06, 0x0a, 0x04, + 0x69, 0x6e, 0x66, 0x6f, 0x1a, 0x3f, 0x0a, 0x11, 0x52, 0x65, 0x64, 0x69, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 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, 0x22, 0x54, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, + 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, + 0x0c, 0x0a, 0x08, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0c, 0x0a, + 0x08, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x3a, 0x5d, 0xea, 0x41, 0x5a, + 0x0a, 0x1c, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x3a, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x0a, 0x0a, 0x08, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x62, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x73, 0x68, 0x61, + 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, + 0x63, 0x69, 0x73, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x62, 0x42, 0x1e, 0x0a, 0x1c, + 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x2a, 0x0a, 0x09, + 0x50, 0x73, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x07, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, + 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x22, 0x99, 0x01, 0x0a, 0x11, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1d, + 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x03, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x17, 0x0a, + 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x03, + 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x73, 0x63, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x73, 0x63, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x70, 0x73, 0x63, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x22, 0xcb, 0x01, 0x0a, 0x0d, 0x50, 0x73, 0x63, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x11, 0x70, 0x73, 0x63, 0x5f, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0f, 0x70, 0x73, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x0f, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x75, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x22, 0xd5, 0x02, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, + 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x07, 0x65, + 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x06, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x2a, 0x0a, 0x0e, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x16, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x15, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, + 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x83, 0x04, 0x0a, 0x14, 0x43, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x12, 0x7d, 0x0a, 0x11, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, + 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x48, + 0x00, 0x52, 0x0f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x43, 0x61, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x08, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0xc4, 0x01, 0x0a, 0x1b, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x74, 0x0a, 0x08, 0x63, + 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x59, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, + 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x43, + 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x07, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, + 0x73, 0x1a, 0x2f, 0x0a, 0x09, 0x43, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x22, + 0x0a, 0x0c, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x73, 0x3a, 0x7f, 0xea, 0x41, 0x7c, 0x0a, 0x29, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x12, 0x4f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x63, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x61, + 0x22, 0xda, 0x07, 0x0a, 0x18, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x60, 0x0a, + 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, + 0x4d, 0x6f, 0x64, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, + 0x65, 0x0a, 0x0a, 0x72, 0x64, 0x62, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x44, 0x42, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x72, 0x64, 0x62, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x65, 0x0a, 0x0a, 0x61, 0x6f, 0x66, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x41, 0x4f, 0x46, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x09, 0x61, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0xe4, 0x02, + 0x0a, 0x09, 0x52, 0x44, 0x42, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x85, 0x01, 0x0a, 0x13, + 0x72, 0x64, 0x62, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x52, 0x44, 0x42, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x42, 0x03, 0xe0, 0x41, 0x01, + 0x52, 0x11, 0x72, 0x64, 0x62, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x12, 0x56, 0x0a, 0x17, 0x72, 0x64, 0x62, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x14, 0x72, 0x64, 0x62, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x77, 0x0a, 0x0e, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x1f, 0x0a, + 0x1b, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x5f, 0x50, 0x45, 0x52, 0x49, 0x4f, 0x44, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, + 0x0a, 0x08, 0x4f, 0x4e, 0x45, 0x5f, 0x48, 0x4f, 0x55, 0x52, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, + 0x53, 0x49, 0x58, 0x5f, 0x48, 0x4f, 0x55, 0x52, 0x53, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x54, + 0x57, 0x45, 0x4c, 0x56, 0x45, 0x5f, 0x48, 0x4f, 0x55, 0x52, 0x53, 0x10, 0x03, 0x12, 0x15, 0x0a, + 0x11, 0x54, 0x57, 0x45, 0x4e, 0x54, 0x59, 0x5f, 0x46, 0x4f, 0x55, 0x52, 0x5f, 0x48, 0x4f, 0x55, + 0x52, 0x53, 0x10, 0x04, 0x1a, 0xd1, 0x01, 0x0a, 0x09, 0x41, 0x4f, 0x46, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x75, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x66, 0x73, 0x79, + 0x6e, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x41, 0x4f, 0x46, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x70, 0x70, 0x65, + 0x6e, 0x64, 0x46, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x61, 0x70, + 0x70, 0x65, 0x6e, 0x64, 0x46, 0x73, 0x79, 0x6e, 0x63, 0x22, 0x4d, 0x0a, 0x0b, 0x41, 0x70, 0x70, + 0x65, 0x6e, 0x64, 0x46, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x50, 0x50, 0x45, + 0x4e, 0x44, 0x5f, 0x46, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x4f, 0x10, 0x01, 0x12, 0x0c, + 0x0a, 0x08, 0x45, 0x56, 0x45, 0x52, 0x59, 0x53, 0x45, 0x43, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, + 0x41, 0x4c, 0x57, 0x41, 0x59, 0x53, 0x10, 0x03, 0x22, 0x53, 0x0a, 0x0f, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x50, + 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, + 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x52, + 0x44, 0x42, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4f, 0x46, 0x10, 0x03, 0x22, 0xf7, 0x01, + 0x0a, 0x16, 0x5a, 0x6f, 0x6e, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x63, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x5a, 0x6f, + 0x6e, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, + 0x64, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, + 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, + 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x22, 0x5f, 0x0a, 0x14, 0x5a, 0x6f, 0x6e, 0x65, 0x44, 0x69, + 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x26, + 0x0a, 0x22, 0x5a, 0x4f, 0x4e, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, + 0x5a, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, + 0x5f, 0x5a, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x5e, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x44, 0x49, 0x53, - 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x99, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x43, - 0x52, 0x59, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, - 0x41, 0x4e, 0x53, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x31, 0x0a, 0x2d, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x43, 0x52, - 0x59, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x45, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0x02, 0x32, 0xd4, 0x08, 0x0a, 0x11, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x52, 0x65, 0x64, - 0x69, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0xb6, 0x01, 0x0a, 0x0c, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, - 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3d, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, + 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x8f, 0x01, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x1a, 0x0a, 0x16, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x5f, + 0x43, 0x4f, 0x52, 0x45, 0x5f, 0x4e, 0x41, 0x4e, 0x4f, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x52, + 0x45, 0x44, 0x49, 0x53, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x4d, 0x45, 0x4d, 0x5f, 0x4d, 0x45, 0x44, + 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x48, + 0x49, 0x47, 0x48, 0x4d, 0x45, 0x4d, 0x5f, 0x58, 0x4c, 0x41, 0x52, 0x47, 0x45, 0x10, 0x03, 0x12, + 0x18, 0x0a, 0x14, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, + 0x44, 0x5f, 0x53, 0x4d, 0x41, 0x4c, 0x4c, 0x10, 0x04, 0x2a, 0x99, 0x01, 0x0a, 0x15, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x69, 0x74, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x6f, 0x64, 0x65, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x49, 0x54, 0x5f, 0x45, + 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, + 0x54, 0x52, 0x41, 0x4e, 0x53, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x31, 0x0a, 0x2d, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x49, 0x54, 0x5f, 0x45, 0x4e, + 0x43, 0x52, 0x59, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x45, + 0x52, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x32, 0xc4, 0x0a, 0x0a, 0x11, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x52, + 0x65, 0x64, 0x69, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0xb6, 0x01, 0x0a, 0x0c, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x32, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, + 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, + 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x3b, 0xda, 0x41, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, - 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xe1, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7c, - 0xca, 0x41, 0x1e, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x13, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0xda, 0x41, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2c, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x3a, 0x07, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x32, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xcf, 0x01, 0x0a, - 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x33, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, - 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, - 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x6a, 0xca, 0x41, 0x2c, 0x0a, 0x15, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x13, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x3b, 0xda, + 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, + 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xe1, 0x01, 0x0a, 0x0d, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, + 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, + 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x7c, 0xca, 0x41, 0x1e, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, - 0x2a, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, + 0x41, 0x6e, 0x79, 0xda, 0x41, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2c, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x3a, + 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x32, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x2a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xdf, - 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x2f, 0x2a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xcf, + 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7a, 0xca, 0x41, 0x1e, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x12, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0xda, 0x41, 0x19, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x2c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x22, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x1a, 0x48, 0xca, 0x41, 0x14, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x9e, 0x01, 0x0a, 0x21, 0x63, - 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, - 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x42, 0x16, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x52, 0x65, 0x64, 0x69, 0x73, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, - 0x72, 0x65, 0x64, 0x69, 0x73, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x61, 0x70, - 0x69, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x62, 0x3b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x62, 0xea, 0x02, 0x21, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x64, 0x69, 0x73, 0x3a, 0x3a, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6a, 0xca, 0x41, 0x2c, 0x0a, 0x15, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2e, 0x2a, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, + 0x12, 0xdf, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7a, 0xca, 0x41, 0x1e, 0x0a, 0x07, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x12, 0x13, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0xda, 0x41, 0x19, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x2c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2c, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x07, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x22, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x12, 0xed, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, + 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x22, 0x50, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, + 0x41, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x2a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x7d, 0x1a, 0x48, 0xca, 0x41, 0x14, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x9e, 0x01, 0x0a, + 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, + 0x64, 0x2e, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x42, 0x16, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x52, 0x65, 0x64, 0x69, 0x73, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x6f, 0x2f, 0x72, 0x65, 0x64, 0x69, 0x73, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, + 0x61, 0x70, 0x69, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x62, 0x3b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x62, 0xea, 0x02, 0x21, 0x47, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x64, 0x69, 0x73, + 0x3a, 0x3a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1584,61 +2589,90 @@ func file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescGZIP() return file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDescData } -var file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_enumTypes = make([]protoimpl.EnumInfo, 8) +var file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_goTypes = []interface{}{ - (AuthorizationMode)(0), // 0: google.cloud.redis.cluster.v1.AuthorizationMode - (TransitEncryptionMode)(0), // 1: google.cloud.redis.cluster.v1.TransitEncryptionMode - (Cluster_State)(0), // 2: google.cloud.redis.cluster.v1.Cluster.State - (*CreateClusterRequest)(nil), // 3: google.cloud.redis.cluster.v1.CreateClusterRequest - (*ListClustersRequest)(nil), // 4: google.cloud.redis.cluster.v1.ListClustersRequest - (*ListClustersResponse)(nil), // 5: google.cloud.redis.cluster.v1.ListClustersResponse - (*UpdateClusterRequest)(nil), // 6: google.cloud.redis.cluster.v1.UpdateClusterRequest - (*GetClusterRequest)(nil), // 7: google.cloud.redis.cluster.v1.GetClusterRequest - (*DeleteClusterRequest)(nil), // 8: google.cloud.redis.cluster.v1.DeleteClusterRequest - (*Cluster)(nil), // 9: google.cloud.redis.cluster.v1.Cluster - (*PscConfig)(nil), // 10: google.cloud.redis.cluster.v1.PscConfig - (*DiscoveryEndpoint)(nil), // 11: google.cloud.redis.cluster.v1.DiscoveryEndpoint - (*PscConnection)(nil), // 12: google.cloud.redis.cluster.v1.PscConnection - (*OperationMetadata)(nil), // 13: google.cloud.redis.cluster.v1.OperationMetadata - (*Cluster_StateInfo)(nil), // 14: google.cloud.redis.cluster.v1.Cluster.StateInfo - (*Cluster_StateInfo_UpdateInfo)(nil), // 15: google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo - (*fieldmaskpb.FieldMask)(nil), // 16: google.protobuf.FieldMask - (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp - (*longrunningpb.Operation)(nil), // 18: google.longrunning.Operation + (AuthorizationMode)(0), // 0: google.cloud.redis.cluster.v1.AuthorizationMode + (NodeType)(0), // 1: google.cloud.redis.cluster.v1.NodeType + (TransitEncryptionMode)(0), // 2: google.cloud.redis.cluster.v1.TransitEncryptionMode + (Cluster_State)(0), // 3: google.cloud.redis.cluster.v1.Cluster.State + (ClusterPersistenceConfig_PersistenceMode)(0), // 4: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.PersistenceMode + (ClusterPersistenceConfig_RDBConfig_SnapshotPeriod)(0), // 5: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.SnapshotPeriod + (ClusterPersistenceConfig_AOFConfig_AppendFsync)(0), // 6: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig.AppendFsync + (ZoneDistributionConfig_ZoneDistributionMode)(0), // 7: google.cloud.redis.cluster.v1.ZoneDistributionConfig.ZoneDistributionMode + (*CreateClusterRequest)(nil), // 8: google.cloud.redis.cluster.v1.CreateClusterRequest + (*ListClustersRequest)(nil), // 9: google.cloud.redis.cluster.v1.ListClustersRequest + (*ListClustersResponse)(nil), // 10: google.cloud.redis.cluster.v1.ListClustersResponse + (*UpdateClusterRequest)(nil), // 11: google.cloud.redis.cluster.v1.UpdateClusterRequest + (*GetClusterRequest)(nil), // 12: google.cloud.redis.cluster.v1.GetClusterRequest + (*DeleteClusterRequest)(nil), // 13: google.cloud.redis.cluster.v1.DeleteClusterRequest + (*GetClusterCertificateAuthorityRequest)(nil), // 14: google.cloud.redis.cluster.v1.GetClusterCertificateAuthorityRequest + (*Cluster)(nil), // 15: google.cloud.redis.cluster.v1.Cluster + (*PscConfig)(nil), // 16: google.cloud.redis.cluster.v1.PscConfig + (*DiscoveryEndpoint)(nil), // 17: google.cloud.redis.cluster.v1.DiscoveryEndpoint + (*PscConnection)(nil), // 18: google.cloud.redis.cluster.v1.PscConnection + (*OperationMetadata)(nil), // 19: google.cloud.redis.cluster.v1.OperationMetadata + (*CertificateAuthority)(nil), // 20: google.cloud.redis.cluster.v1.CertificateAuthority + (*ClusterPersistenceConfig)(nil), // 21: google.cloud.redis.cluster.v1.ClusterPersistenceConfig + (*ZoneDistributionConfig)(nil), // 22: google.cloud.redis.cluster.v1.ZoneDistributionConfig + (*Cluster_StateInfo)(nil), // 23: google.cloud.redis.cluster.v1.Cluster.StateInfo + nil, // 24: google.cloud.redis.cluster.v1.Cluster.RedisConfigsEntry + (*Cluster_StateInfo_UpdateInfo)(nil), // 25: google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo + (*CertificateAuthority_ManagedCertificateAuthority)(nil), // 26: google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority + (*CertificateAuthority_ManagedCertificateAuthority_CertChain)(nil), // 27: google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain + (*ClusterPersistenceConfig_RDBConfig)(nil), // 28: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig + (*ClusterPersistenceConfig_AOFConfig)(nil), // 29: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig + (*fieldmaskpb.FieldMask)(nil), // 30: google.protobuf.FieldMask + (*timestamppb.Timestamp)(nil), // 31: google.protobuf.Timestamp + (*longrunningpb.Operation)(nil), // 32: google.longrunning.Operation } var file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_depIdxs = []int32{ - 9, // 0: google.cloud.redis.cluster.v1.CreateClusterRequest.cluster:type_name -> google.cloud.redis.cluster.v1.Cluster - 9, // 1: google.cloud.redis.cluster.v1.ListClustersResponse.clusters:type_name -> google.cloud.redis.cluster.v1.Cluster - 16, // 2: google.cloud.redis.cluster.v1.UpdateClusterRequest.update_mask:type_name -> google.protobuf.FieldMask - 9, // 3: google.cloud.redis.cluster.v1.UpdateClusterRequest.cluster:type_name -> google.cloud.redis.cluster.v1.Cluster - 17, // 4: google.cloud.redis.cluster.v1.Cluster.create_time:type_name -> google.protobuf.Timestamp - 2, // 5: google.cloud.redis.cluster.v1.Cluster.state:type_name -> google.cloud.redis.cluster.v1.Cluster.State + 15, // 0: google.cloud.redis.cluster.v1.CreateClusterRequest.cluster:type_name -> google.cloud.redis.cluster.v1.Cluster + 15, // 1: google.cloud.redis.cluster.v1.ListClustersResponse.clusters:type_name -> google.cloud.redis.cluster.v1.Cluster + 30, // 2: google.cloud.redis.cluster.v1.UpdateClusterRequest.update_mask:type_name -> google.protobuf.FieldMask + 15, // 3: google.cloud.redis.cluster.v1.UpdateClusterRequest.cluster:type_name -> google.cloud.redis.cluster.v1.Cluster + 31, // 4: google.cloud.redis.cluster.v1.Cluster.create_time:type_name -> google.protobuf.Timestamp + 3, // 5: google.cloud.redis.cluster.v1.Cluster.state:type_name -> google.cloud.redis.cluster.v1.Cluster.State 0, // 6: google.cloud.redis.cluster.v1.Cluster.authorization_mode:type_name -> google.cloud.redis.cluster.v1.AuthorizationMode - 1, // 7: google.cloud.redis.cluster.v1.Cluster.transit_encryption_mode:type_name -> google.cloud.redis.cluster.v1.TransitEncryptionMode - 10, // 8: google.cloud.redis.cluster.v1.Cluster.psc_configs:type_name -> google.cloud.redis.cluster.v1.PscConfig - 11, // 9: google.cloud.redis.cluster.v1.Cluster.discovery_endpoints:type_name -> google.cloud.redis.cluster.v1.DiscoveryEndpoint - 12, // 10: google.cloud.redis.cluster.v1.Cluster.psc_connections:type_name -> google.cloud.redis.cluster.v1.PscConnection - 14, // 11: google.cloud.redis.cluster.v1.Cluster.state_info:type_name -> google.cloud.redis.cluster.v1.Cluster.StateInfo - 10, // 12: google.cloud.redis.cluster.v1.DiscoveryEndpoint.psc_config:type_name -> google.cloud.redis.cluster.v1.PscConfig - 17, // 13: google.cloud.redis.cluster.v1.OperationMetadata.create_time:type_name -> google.protobuf.Timestamp - 17, // 14: google.cloud.redis.cluster.v1.OperationMetadata.end_time:type_name -> google.protobuf.Timestamp - 15, // 15: google.cloud.redis.cluster.v1.Cluster.StateInfo.update_info:type_name -> google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo - 4, // 16: google.cloud.redis.cluster.v1.CloudRedisCluster.ListClusters:input_type -> google.cloud.redis.cluster.v1.ListClustersRequest - 7, // 17: google.cloud.redis.cluster.v1.CloudRedisCluster.GetCluster:input_type -> google.cloud.redis.cluster.v1.GetClusterRequest - 6, // 18: google.cloud.redis.cluster.v1.CloudRedisCluster.UpdateCluster:input_type -> google.cloud.redis.cluster.v1.UpdateClusterRequest - 8, // 19: google.cloud.redis.cluster.v1.CloudRedisCluster.DeleteCluster:input_type -> google.cloud.redis.cluster.v1.DeleteClusterRequest - 3, // 20: google.cloud.redis.cluster.v1.CloudRedisCluster.CreateCluster:input_type -> google.cloud.redis.cluster.v1.CreateClusterRequest - 5, // 21: google.cloud.redis.cluster.v1.CloudRedisCluster.ListClusters:output_type -> google.cloud.redis.cluster.v1.ListClustersResponse - 9, // 22: google.cloud.redis.cluster.v1.CloudRedisCluster.GetCluster:output_type -> google.cloud.redis.cluster.v1.Cluster - 18, // 23: google.cloud.redis.cluster.v1.CloudRedisCluster.UpdateCluster:output_type -> google.longrunning.Operation - 18, // 24: google.cloud.redis.cluster.v1.CloudRedisCluster.DeleteCluster:output_type -> google.longrunning.Operation - 18, // 25: google.cloud.redis.cluster.v1.CloudRedisCluster.CreateCluster:output_type -> google.longrunning.Operation - 21, // [21:26] is the sub-list for method output_type - 16, // [16:21] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name + 2, // 7: google.cloud.redis.cluster.v1.Cluster.transit_encryption_mode:type_name -> google.cloud.redis.cluster.v1.TransitEncryptionMode + 16, // 8: google.cloud.redis.cluster.v1.Cluster.psc_configs:type_name -> google.cloud.redis.cluster.v1.PscConfig + 17, // 9: google.cloud.redis.cluster.v1.Cluster.discovery_endpoints:type_name -> google.cloud.redis.cluster.v1.DiscoveryEndpoint + 18, // 10: google.cloud.redis.cluster.v1.Cluster.psc_connections:type_name -> google.cloud.redis.cluster.v1.PscConnection + 23, // 11: google.cloud.redis.cluster.v1.Cluster.state_info:type_name -> google.cloud.redis.cluster.v1.Cluster.StateInfo + 1, // 12: google.cloud.redis.cluster.v1.Cluster.node_type:type_name -> google.cloud.redis.cluster.v1.NodeType + 21, // 13: google.cloud.redis.cluster.v1.Cluster.persistence_config:type_name -> google.cloud.redis.cluster.v1.ClusterPersistenceConfig + 24, // 14: google.cloud.redis.cluster.v1.Cluster.redis_configs:type_name -> google.cloud.redis.cluster.v1.Cluster.RedisConfigsEntry + 22, // 15: google.cloud.redis.cluster.v1.Cluster.zone_distribution_config:type_name -> google.cloud.redis.cluster.v1.ZoneDistributionConfig + 16, // 16: google.cloud.redis.cluster.v1.DiscoveryEndpoint.psc_config:type_name -> google.cloud.redis.cluster.v1.PscConfig + 31, // 17: google.cloud.redis.cluster.v1.OperationMetadata.create_time:type_name -> google.protobuf.Timestamp + 31, // 18: google.cloud.redis.cluster.v1.OperationMetadata.end_time:type_name -> google.protobuf.Timestamp + 26, // 19: google.cloud.redis.cluster.v1.CertificateAuthority.managed_server_ca:type_name -> google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority + 4, // 20: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.mode:type_name -> google.cloud.redis.cluster.v1.ClusterPersistenceConfig.PersistenceMode + 28, // 21: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.rdb_config:type_name -> google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig + 29, // 22: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.aof_config:type_name -> google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig + 7, // 23: google.cloud.redis.cluster.v1.ZoneDistributionConfig.mode:type_name -> google.cloud.redis.cluster.v1.ZoneDistributionConfig.ZoneDistributionMode + 25, // 24: google.cloud.redis.cluster.v1.Cluster.StateInfo.update_info:type_name -> google.cloud.redis.cluster.v1.Cluster.StateInfo.UpdateInfo + 27, // 25: google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.ca_certs:type_name -> google.cloud.redis.cluster.v1.CertificateAuthority.ManagedCertificateAuthority.CertChain + 5, // 26: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.rdb_snapshot_period:type_name -> google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.SnapshotPeriod + 31, // 27: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.RDBConfig.rdb_snapshot_start_time:type_name -> google.protobuf.Timestamp + 6, // 28: google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig.append_fsync:type_name -> google.cloud.redis.cluster.v1.ClusterPersistenceConfig.AOFConfig.AppendFsync + 9, // 29: google.cloud.redis.cluster.v1.CloudRedisCluster.ListClusters:input_type -> google.cloud.redis.cluster.v1.ListClustersRequest + 12, // 30: google.cloud.redis.cluster.v1.CloudRedisCluster.GetCluster:input_type -> google.cloud.redis.cluster.v1.GetClusterRequest + 11, // 31: google.cloud.redis.cluster.v1.CloudRedisCluster.UpdateCluster:input_type -> google.cloud.redis.cluster.v1.UpdateClusterRequest + 13, // 32: google.cloud.redis.cluster.v1.CloudRedisCluster.DeleteCluster:input_type -> google.cloud.redis.cluster.v1.DeleteClusterRequest + 8, // 33: google.cloud.redis.cluster.v1.CloudRedisCluster.CreateCluster:input_type -> google.cloud.redis.cluster.v1.CreateClusterRequest + 14, // 34: google.cloud.redis.cluster.v1.CloudRedisCluster.GetClusterCertificateAuthority:input_type -> google.cloud.redis.cluster.v1.GetClusterCertificateAuthorityRequest + 10, // 35: google.cloud.redis.cluster.v1.CloudRedisCluster.ListClusters:output_type -> google.cloud.redis.cluster.v1.ListClustersResponse + 15, // 36: google.cloud.redis.cluster.v1.CloudRedisCluster.GetCluster:output_type -> google.cloud.redis.cluster.v1.Cluster + 32, // 37: google.cloud.redis.cluster.v1.CloudRedisCluster.UpdateCluster:output_type -> google.longrunning.Operation + 32, // 38: google.cloud.redis.cluster.v1.CloudRedisCluster.DeleteCluster:output_type -> google.longrunning.Operation + 32, // 39: google.cloud.redis.cluster.v1.CloudRedisCluster.CreateCluster:output_type -> google.longrunning.Operation + 20, // 40: google.cloud.redis.cluster.v1.CloudRedisCluster.GetClusterCertificateAuthority:output_type -> google.cloud.redis.cluster.v1.CertificateAuthority + 35, // [35:41] is the sub-list for method output_type + 29, // [29:35] is the sub-list for method input_type + 29, // [29:29] is the sub-list for extension type_name + 29, // [29:29] is the sub-list for extension extendee + 0, // [0:29] is the sub-list for field type_name } func init() { file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_init() } @@ -1720,7 +2754,7 @@ func file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_init() { } } file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster); i { + switch v := v.(*GetClusterCertificateAuthorityRequest); i { case 0: return &v.state case 1: @@ -1732,7 +2766,7 @@ func file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_init() { } } file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PscConfig); i { + switch v := v.(*Cluster); i { case 0: return &v.state case 1: @@ -1744,7 +2778,7 @@ func file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_init() { } } file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiscoveryEndpoint); i { + switch v := v.(*PscConfig); i { case 0: return &v.state case 1: @@ -1756,7 +2790,7 @@ func file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_init() { } } file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PscConnection); i { + switch v := v.(*DiscoveryEndpoint); i { case 0: return &v.state case 1: @@ -1768,7 +2802,7 @@ func file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_init() { } } file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OperationMetadata); i { + switch v := v.(*PscConnection); i { case 0: return &v.state case 1: @@ -1780,7 +2814,7 @@ func file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_init() { } } file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_StateInfo); i { + switch v := v.(*OperationMetadata); i { case 0: return &v.state case 1: @@ -1792,6 +2826,54 @@ func file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_init() { } } file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CertificateAuthority); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterPersistenceConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ZoneDistributionConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cluster_StateInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Cluster_StateInfo_UpdateInfo); i { case 0: return &v.state @@ -1803,19 +2885,70 @@ func file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_init() { return nil } } + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CertificateAuthority_ManagedCertificateAuthority); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CertificateAuthority_ManagedCertificateAuthority_CertChain); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterPersistenceConfig_RDBConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterPersistenceConfig_AOFConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } - file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[6].OneofWrappers = []interface{}{} - file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[11].OneofWrappers = []interface{}{ + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[12].OneofWrappers = []interface{}{ + (*CertificateAuthority_ManagedServerCa)(nil), + } + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[15].OneofWrappers = []interface{}{ (*Cluster_StateInfo_UpdateInfo_)(nil), } - file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[12].OneofWrappers = []interface{}{} + file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_msgTypes[17].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_cloud_redis_cluster_v1_cloud_redis_cluster_proto_rawDesc, - NumEnums: 3, - NumMessages: 13, + NumEnums: 8, + NumMessages: 22, NumExtensions: 0, NumServices: 1, }, @@ -1872,6 +3005,8 @@ type CloudRedisClusterClient interface { // The returned operation is automatically deleted after a few hours, so there // is no need to call DeleteOperation. CreateCluster(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*longrunningpb.Operation, error) + // Gets the details of certificate authority information for Redis cluster. + GetClusterCertificateAuthority(ctx context.Context, in *GetClusterCertificateAuthorityRequest, opts ...grpc.CallOption) (*CertificateAuthority, error) } type cloudRedisClusterClient struct { @@ -1927,6 +3062,15 @@ func (c *cloudRedisClusterClient) CreateCluster(ctx context.Context, in *CreateC return out, nil } +func (c *cloudRedisClusterClient) GetClusterCertificateAuthority(ctx context.Context, in *GetClusterCertificateAuthorityRequest, opts ...grpc.CallOption) (*CertificateAuthority, error) { + out := new(CertificateAuthority) + err := c.cc.Invoke(ctx, "/google.cloud.redis.cluster.v1.CloudRedisCluster/GetClusterCertificateAuthority", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // CloudRedisClusterServer is the server API for CloudRedisCluster service. type CloudRedisClusterServer interface { // Lists all Redis clusters owned by a project in either the specified @@ -1959,6 +3103,8 @@ type CloudRedisClusterServer interface { // The returned operation is automatically deleted after a few hours, so there // is no need to call DeleteOperation. CreateCluster(context.Context, *CreateClusterRequest) (*longrunningpb.Operation, error) + // Gets the details of certificate authority information for Redis cluster. + GetClusterCertificateAuthority(context.Context, *GetClusterCertificateAuthorityRequest) (*CertificateAuthority, error) } // UnimplementedCloudRedisClusterServer can be embedded to have forward compatible implementations. @@ -1980,6 +3126,9 @@ func (*UnimplementedCloudRedisClusterServer) DeleteCluster(context.Context, *Del func (*UnimplementedCloudRedisClusterServer) CreateCluster(context.Context, *CreateClusterRequest) (*longrunningpb.Operation, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateCluster not implemented") } +func (*UnimplementedCloudRedisClusterServer) GetClusterCertificateAuthority(context.Context, *GetClusterCertificateAuthorityRequest) (*CertificateAuthority, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetClusterCertificateAuthority not implemented") +} func RegisterCloudRedisClusterServer(s *grpc.Server, srv CloudRedisClusterServer) { s.RegisterService(&_CloudRedisCluster_serviceDesc, srv) @@ -2075,6 +3224,24 @@ func _CloudRedisCluster_CreateCluster_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _CloudRedisCluster_GetClusterCertificateAuthority_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetClusterCertificateAuthorityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CloudRedisClusterServer).GetClusterCertificateAuthority(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.cloud.redis.cluster.v1.CloudRedisCluster/GetClusterCertificateAuthority", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CloudRedisClusterServer).GetClusterCertificateAuthority(ctx, req.(*GetClusterCertificateAuthorityRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _CloudRedisCluster_serviceDesc = grpc.ServiceDesc{ ServiceName: "google.cloud.redis.cluster.v1.CloudRedisCluster", HandlerType: (*CloudRedisClusterServer)(nil), @@ -2099,6 +3266,10 @@ var _CloudRedisCluster_serviceDesc = grpc.ServiceDesc{ MethodName: "CreateCluster", Handler: _CloudRedisCluster_CreateCluster_Handler, }, + { + MethodName: "GetClusterCertificateAuthority", + Handler: _CloudRedisCluster_GetClusterCertificateAuthority_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "google/cloud/redis/cluster/v1/cloud_redis_cluster.proto", diff --git a/redis/cluster/apiv1/gapic_metadata.json b/redis/cluster/apiv1/gapic_metadata.json index bad7a377a518..24f5ce2c14ef 100644 --- a/redis/cluster/apiv1/gapic_metadata.json +++ b/redis/cluster/apiv1/gapic_metadata.json @@ -35,6 +35,11 @@ "GetCluster" ] }, + "GetClusterCertificateAuthority": { + "methods": [ + "GetClusterCertificateAuthority" + ] + }, "GetLocation": { "methods": [ "GetLocation" @@ -95,6 +100,11 @@ "GetCluster" ] }, + "GetClusterCertificateAuthority": { + "methods": [ + "GetClusterCertificateAuthority" + ] + }, "GetLocation": { "methods": [ "GetLocation" diff --git a/shopping/merchant/accounts/apiv1beta/accountspb/businessinfo.pb.go b/shopping/merchant/accounts/apiv1beta/accountspb/businessinfo.pb.go index 0ac32d12eef0..a9a13f85ba84 100755 --- a/shopping/merchant/accounts/apiv1beta/accountspb/businessinfo.pb.go +++ b/shopping/merchant/accounts/apiv1beta/accountspb/businessinfo.pb.go @@ -54,7 +54,7 @@ type BusinessInfo struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Optional. The address of the business. Address *postaladdress.PostalAddress `protobuf:"bytes,2,opt,name=address,proto3,oneof" json:"address,omitempty"` - // Optional. The phone number of the business. + // Output only. The phone number of the business. Phone *phone_number.PhoneNumber `protobuf:"bytes,3,opt,name=phone,proto3,oneof" json:"phone,omitempty"` // Output only. The phone verification state of the business. PhoneVerificationState *PhoneVerificationState `protobuf:"varint,4,opt,name=phone_verification_state,json=phoneVerificationState,proto3,enum=google.shopping.merchant.accounts.v1beta.PhoneVerificationState,oneof" json:"phone_verification_state,omitempty"` @@ -277,7 +277,7 @@ var file_google_shopping_merchant_accounts_v1beta_businessinfo_proto_rawDesc = [ 0x01, 0x48, 0x00, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x68, 0x6f, - 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x48, 0x01, 0x52, + 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x48, 0x01, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x88, 0x01, 0x01, 0x12, 0x84, 0x01, 0x0a, 0x18, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x40, 0x2e, 0x67,