diff --git a/.github/workflows/buf.yml b/.github/workflows/buf.yml index 7d7e36648f..84b41b283f 100644 --- a/.github/workflows/buf.yml +++ b/.github/workflows/buf.yml @@ -47,6 +47,10 @@ jobs: - name: Buf – lint, format & breaking uses: bufbuild/buf-action@v1 with: + # Pin to the repo's canonical buf version (see taskfiles/proto.yaml install-buf) + # so CI formatting matches `task proto:generate`; buf-action defaults to latest, + # whose formatter reformats single-field messages and produces spurious diffs. + version: 1.65.0 lint: true format: true breaking: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'Buf Skip Breaking') }} @@ -79,6 +83,7 @@ jobs: - name: Buf – push to registry uses: bufbuild/buf-action@v1 with: + version: 1.65.0 # No validation - already done in validate job lint: false format: false @@ -112,6 +117,7 @@ jobs: - name: Buf – archive label (ignore if not found) uses: bufbuild/buf-action@v1 with: + version: 1.65.0 # Only archive - no other operations push: true token: ${{ env.BUF_TOKEN }} diff --git a/backend/pkg/api/connect/service/topic/v1/mapper.go b/backend/pkg/api/connect/service/topic/v1/mapper.go index ab56bd23cd..a7590fd2b9 100644 --- a/backend/pkg/api/connect/service/topic/v1/mapper.go +++ b/backend/pkg/api/connect/service/topic/v1/mapper.go @@ -15,6 +15,7 @@ import ( "github.com/twmb/franz-go/pkg/kmsg" common "github.com/redpanda-data/console/backend/pkg/api/connect/service/common/v1" + "github.com/redpanda-data/console/backend/pkg/console" v1 "github.com/redpanda-data/console/backend/pkg/protogen/redpanda/api/dataplane/v1" ) @@ -170,30 +171,39 @@ func (k *mapper) updateTopicConfigsToKafka(req *v1.UpdateTopicConfigurationsRequ return &kafkaReq, nil } -func (k *mapper) kafkaMetadataToProto(metadata *kmsg.MetadataResponse) []*v1.ListTopicsResponse_Topic { - topics := make([]*v1.ListTopicsResponse_Topic, len(metadata.Topics)) - for i, topicMetadata := range metadata.Topics { - topics[i] = k.kafkaTopicMetadataToProto(topicMetadata) +func (k *mapper) topicSummariesToProto(summaries []*console.TopicSummary) []*v1.ListTopicsResponse_Topic { + topics := make([]*v1.ListTopicsResponse_Topic, len(summaries)) + for i, summary := range summaries { + topics[i] = k.topicSummaryToProto(summary) } return topics } -func (*mapper) kafkaTopicMetadataToProto(topicMetadata kmsg.MetadataResponseTopic) *v1.ListTopicsResponse_Topic { - // We iterate through all partitions to figure out the replication factor, - // in case we get an error for the first partitions - replicationFactor := -1 - for _, partition := range topicMetadata.Partitions { - if len(partition.Replicas) > replicationFactor { - replicationFactor = len(partition.Replicas) +func (k *mapper) topicSummaryToProto(summary *console.TopicSummary) *v1.ListTopicsResponse_Topic { + return &v1.ListTopicsResponse_Topic{ + Name: summary.TopicName, + Internal: summary.IsInternal, + PartitionCount: int32(summary.PartitionCount), + ReplicationFactor: int32(summary.ReplicationFactor), + CleanupPolicy: summary.CleanupPolicy, + LogDirSummary: k.topicLogDirSummaryToProto(summary.LogDirSummary), + } +} + +func (*mapper) topicLogDirSummaryToProto(summary console.TopicLogDirSummary) *v1.ListTopicsResponse_LogDirSummary { + replicaErrors := make([]*v1.ListTopicsResponse_ReplicaError, len(summary.ReplicaErrors)) + for i, replicaError := range summary.ReplicaErrors { + replicaErrors[i] = &v1.ListTopicsResponse_ReplicaError{ + BrokerId: replicaError.BrokerID, + Error: replicaError.Error, } } - return &v1.ListTopicsResponse_Topic{ - Name: *topicMetadata.Topic, - Internal: topicMetadata.IsInternal, - PartitionCount: int32(len(topicMetadata.Partitions)), - ReplicationFactor: int32(replicationFactor), + return &v1.ListTopicsResponse_LogDirSummary{ + TotalSizeBytes: summary.TotalSizeBytes, + ReplicaErrors: replicaErrors, + Hint: summary.Hint, } } diff --git a/backend/pkg/api/connect/service/topic/v1/mapper_test.go b/backend/pkg/api/connect/service/topic/v1/mapper_test.go index 7bee1fb41c..256303beec 100644 --- a/backend/pkg/api/connect/service/topic/v1/mapper_test.go +++ b/backend/pkg/api/connect/service/topic/v1/mapper_test.go @@ -16,6 +16,7 @@ import ( "github.com/stretchr/testify/require" "github.com/twmb/franz-go/pkg/kmsg" + "github.com/redpanda-data/console/backend/pkg/console" v1 "github.com/redpanda-data/console/backend/pkg/protogen/redpanda/api/dataplane/v1" ) @@ -78,3 +79,83 @@ func TestDescribeTopicConfigsToKafka(t *testing.T) { }) } } + +// TestTopicSummariesToProto guards the ListTopics gRPC response shape: the +// cleanup policy and the aggregated log dir summary (size, hint, per-broker +// replica errors) must survive the mapping from console.TopicSummary. A +// regression here surfaces as empty cleanup-policy / size columns in the UI. +func TestTopicSummariesToProto(t *testing.T) { + testCases := []struct { + name string + input []*console.TopicSummary + validateFn func(t *testing.T, result []*v1.ListTopicsResponse_Topic) + }{ + { + name: "maps cleanup policy and log dir summary", + input: []*console.TopicSummary{ + { + TopicName: "orders", + IsInternal: false, + PartitionCount: 3, + ReplicationFactor: 2, + CleanupPolicy: "compact", + LogDirSummary: console.TopicLogDirSummary{ + TotalSizeBytes: 2048, + Hint: "partial result", + ReplicaErrors: []console.TopicLogDirSummaryReplicaError{ + {BrokerID: 1, Error: "broker down"}, + }, + }, + }, + }, + validateFn: func(t *testing.T, result []*v1.ListTopicsResponse_Topic) { + require.Len(t, result, 1) + topic := result[0] + assert.Equal(t, "orders", topic.GetName()) + assert.False(t, topic.GetInternal()) + assert.Equal(t, int32(3), topic.GetPartitionCount()) + assert.Equal(t, int32(2), topic.GetReplicationFactor()) + assert.Equal(t, "compact", topic.GetCleanupPolicy()) + + summary := topic.GetLogDirSummary() + require.NotNil(t, summary) + assert.Equal(t, int64(2048), summary.GetTotalSizeBytes()) + assert.Equal(t, "partial result", summary.GetHint()) + require.Len(t, summary.GetReplicaErrors(), 1) + assert.Equal(t, int32(1), summary.GetReplicaErrors()[0].GetBrokerId()) + assert.Equal(t, "broker down", summary.GetReplicaErrors()[0].GetError()) + }, + }, + { + name: "preserves order and the N/A cleanup policy fallback", + input: []*console.TopicSummary{ + {TopicName: "a", CleanupPolicy: "delete", LogDirSummary: console.TopicLogDirSummary{TotalSizeBytes: 1}}, + {TopicName: "b", CleanupPolicy: "N/A", LogDirSummary: console.TopicLogDirSummary{TotalSizeBytes: 2}}, + }, + validateFn: func(t *testing.T, result []*v1.ListTopicsResponse_Topic) { + require.Len(t, result, 2) + assert.Equal(t, "a", result[0].GetName()) + assert.Equal(t, "delete", result[0].GetCleanupPolicy()) + assert.Equal(t, "b", result[1].GetName()) + assert.Equal(t, "N/A", result[1].GetCleanupPolicy()) + assert.Empty(t, result[1].GetLogDirSummary().GetReplicaErrors()) + }, + }, + { + name: "empty input yields empty slice", + input: []*console.TopicSummary{}, + validateFn: func(t *testing.T, result []*v1.ListTopicsResponse_Topic) { + assert.Empty(t, result) + }, + }, + } + + kafkaMapper := mapper{} + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + out := kafkaMapper.topicSummariesToProto(tc.input) + tc.validateFn(t, out) + }) + } +} diff --git a/backend/pkg/api/connect/service/topic/v1/service.go b/backend/pkg/api/connect/service/topic/v1/service.go index ab0ef68f0e..41ab001b06 100644 --- a/backend/pkg/api/connect/service/topic/v1/service.go +++ b/backend/pkg/api/connect/service/topic/v1/service.go @@ -22,7 +22,6 @@ import ( "connectrpc.com/connect" "github.com/redpanda-data/common-go/api/pagination" - "github.com/twmb/franz-go/pkg/kmsg" apierrors "github.com/redpanda-data/console/backend/pkg/api/connect/errors" "github.com/redpanda-data/console/backend/pkg/config" @@ -46,8 +45,10 @@ type Service struct { // ListTopics lists all Kafka topics with their most important metadata. func (s *Service) ListTopics(ctx context.Context, req *connect.Request[v1.ListTopicsRequest]) (*connect.Response[v1.ListTopicsResponse], error) { s.defaulter.applyListTopicsRequest(req.Msg) - kafkaReq := kmsg.NewMetadataRequest() - kafkaRes, err := s.consoleSvc.GetMetadata(ctx, &kafkaReq) + + // We reuse the console GetTopicsOverview so the gRPC response reaches parity with the + // legacy REST /topics endpoint (cleanup policy and log dir size on top of the metadata). + topicSummaries, err := s.consoleSvc.GetTopicsOverview(ctx) if err != nil { return nil, apierrors.NewConnectError( connect.CodeInternal, @@ -58,16 +59,16 @@ func (s *Service) ListTopics(ctx context.Context, req *connect.Request[v1.ListTo // Filter topics if a filter is set if req.Msg.Filter != nil && req.Msg.Filter.NameContains != "" { - filteredTopics := make([]kmsg.MetadataResponseTopic, 0, len(kafkaRes.Topics)) - for _, topic := range kafkaRes.Topics { - if strings.Contains(*topic.Topic, req.Msg.Filter.NameContains) { + filteredTopics := make([]*console.TopicSummary, 0, len(topicSummaries)) + for _, topic := range topicSummaries { + if strings.Contains(topic.TopicName, req.Msg.Filter.NameContains) { filteredTopics = append(filteredTopics, topic) } } - kafkaRes.Topics = filteredTopics + topicSummaries = filteredTopics } - topics := s.mapper.kafkaMetadataToProto(kafkaRes) + topics := s.mapper.topicSummariesToProto(topicSummaries) // Add pagination var nextPageToken string diff --git a/backend/pkg/protogen/redpanda/api/dataplane/v1/topic.pb.go b/backend/pkg/protogen/redpanda/api/dataplane/v1/topic.pb.go index 7b148905af..6a4035961a 100644 --- a/backend/pkg/protogen/redpanda/api/dataplane/v1/topic.pb.go +++ b/backend/pkg/protogen/redpanda/api/dataplane/v1/topic.pb.go @@ -1503,8 +1503,12 @@ type ListTopicsResponse_Topic struct { PartitionCount int32 `protobuf:"varint,3,opt,name=partition_count,json=partitionCount,proto3" json:"partition_count,omitempty"` // Topic replication factor. ReplicationFactor int32 `protobuf:"varint,4,opt,name=replication_factor,json=replicationFactor,proto3" json:"replication_factor,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Topic cleanup policy (e.g. `delete`, `compact`). + CleanupPolicy string `protobuf:"bytes,5,opt,name=cleanup_policy,json=cleanupPolicy,proto3" json:"cleanup_policy,omitempty"` + // Aggregated log directory size for the topic across all replicas. + LogDirSummary *ListTopicsResponse_LogDirSummary `protobuf:"bytes,6,opt,name=log_dir_summary,json=logDirSummary,proto3" json:"log_dir_summary,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ListTopicsResponse_Topic) Reset() { @@ -1565,6 +1569,139 @@ func (x *ListTopicsResponse_Topic) GetReplicationFactor() int32 { return 0 } +func (x *ListTopicsResponse_Topic) GetCleanupPolicy() string { + if x != nil { + return x.CleanupPolicy + } + return "" +} + +func (x *ListTopicsResponse_Topic) GetLogDirSummary() *ListTopicsResponse_LogDirSummary { + if x != nil { + return x.LogDirSummary + } + return nil +} + +// LogDirSummary describes the aggregated on-disk size of a topic. +type ListTopicsResponse_LogDirSummary struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Total size of the topic in bytes across all replicas. + TotalSizeBytes int64 `protobuf:"varint,1,opt,name=total_size_bytes,json=totalSizeBytes,proto3" json:"total_size_bytes,omitempty"` + // Errors encountered while querying log dirs from individual brokers. + ReplicaErrors []*ListTopicsResponse_ReplicaError `protobuf:"bytes,2,rep,name=replica_errors,json=replicaErrors,proto3" json:"replica_errors,omitempty"` + // Optional human-readable hint explaining a partial or missing result. + Hint string `protobuf:"bytes,3,opt,name=hint,proto3" json:"hint,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListTopicsResponse_LogDirSummary) Reset() { + *x = ListTopicsResponse_LogDirSummary{} + mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListTopicsResponse_LogDirSummary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTopicsResponse_LogDirSummary) ProtoMessage() {} + +func (x *ListTopicsResponse_LogDirSummary) ProtoReflect() protoreflect.Message { + mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTopicsResponse_LogDirSummary.ProtoReflect.Descriptor instead. +func (*ListTopicsResponse_LogDirSummary) Descriptor() ([]byte, []int) { + return file_redpanda_api_dataplane_v1_topic_proto_rawDescGZIP(), []int{4, 1} +} + +func (x *ListTopicsResponse_LogDirSummary) GetTotalSizeBytes() int64 { + if x != nil { + return x.TotalSizeBytes + } + return 0 +} + +func (x *ListTopicsResponse_LogDirSummary) GetReplicaErrors() []*ListTopicsResponse_ReplicaError { + if x != nil { + return x.ReplicaErrors + } + return nil +} + +func (x *ListTopicsResponse_LogDirSummary) GetHint() string { + if x != nil { + return x.Hint + } + return "" +} + +// ReplicaError describes a log dir query error for a single broker. +type ListTopicsResponse_ReplicaError struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Broker that returned the error. + BrokerId int32 `protobuf:"varint,1,opt,name=broker_id,json=brokerId,proto3" json:"broker_id,omitempty"` + // Error message returned by the broker. + Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListTopicsResponse_ReplicaError) Reset() { + *x = ListTopicsResponse_ReplicaError{} + mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListTopicsResponse_ReplicaError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTopicsResponse_ReplicaError) ProtoMessage() {} + +func (x *ListTopicsResponse_ReplicaError) ProtoReflect() protoreflect.Message { + mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTopicsResponse_ReplicaError.ProtoReflect.Descriptor instead. +func (*ListTopicsResponse_ReplicaError) Descriptor() ([]byte, []int) { + return file_redpanda_api_dataplane_v1_topic_proto_rawDescGZIP(), []int{4, 2} +} + +func (x *ListTopicsResponse_ReplicaError) GetBrokerId() int32 { + if x != nil { + return x.BrokerId + } + return 0 +} + +func (x *ListTopicsResponse_ReplicaError) GetError() string { + if x != nil { + return x.Error + } + return "" +} + type UpdateTopicConfigurationsRequest_UpdateConfiguration struct { state protoimpl.MessageState `protogen:"open.v1"` // A topic-level config key (e.g. `segment.bytes`). @@ -1579,7 +1716,7 @@ type UpdateTopicConfigurationsRequest_UpdateConfiguration struct { func (x *UpdateTopicConfigurationsRequest_UpdateConfiguration) Reset() { *x = UpdateTopicConfigurationsRequest_UpdateConfiguration{} - mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[28] + mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1591,7 +1728,7 @@ func (x *UpdateTopicConfigurationsRequest_UpdateConfiguration) String() string { func (*UpdateTopicConfigurationsRequest_UpdateConfiguration) ProtoMessage() {} func (x *UpdateTopicConfigurationsRequest_UpdateConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[28] + mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1640,7 +1777,7 @@ type SetTopicConfigurationsRequest_SetConfiguration struct { func (x *SetTopicConfigurationsRequest_SetConfiguration) Reset() { *x = SetTopicConfigurationsRequest_SetConfiguration{} - mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[29] + mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1652,7 +1789,7 @@ func (x *SetTopicConfigurationsRequest_SetConfiguration) String() string { func (*SetTopicConfigurationsRequest_SetConfiguration) ProtoMessage() {} func (x *SetTopicConfigurationsRequest_SetConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[29] + mi := &file_redpanda_api_dataplane_v1_topic_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1807,7 +1944,7 @@ var file_redpanda_api_dataplane_v1_topic_proto_rawDesc = []byte{ 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xba, 0x48, 0x19, 0x72, 0x17, 0x18, 0xf9, 0x01, 0x32, 0x12, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, 0x24, 0x52, 0x0c, - 0x6e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x9b, 0x02, 0x0a, + 0x6e, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x9d, 0x05, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, @@ -1816,7 +1953,7 @@ var file_redpanda_api_dataplane_v1_topic_proto_rawDesc = []byte{ 0x73, 0x65, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, - 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0x8f, 0x01, 0x0a, 0x05, 0x54, 0x6f, 0x70, + 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0x9b, 0x02, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, @@ -1825,452 +1962,476 @@ var file_redpanda_api_dataplane_v1_topic_proto_rawDesc = []byte{ 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x56, 0x0a, 0x12, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x40, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0xba, 0x48, 0x1e, 0xc8, 0x01, 0x01, 0x72, 0x19, 0x10, 0x01, - 0x18, 0xf9, 0x01, 0x32, 0x12, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, - 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, 0x24, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a, 0x1d, 0x47, 0x65, 0x74, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, - 0xba, 0x48, 0x1e, 0xc8, 0x01, 0x01, 0x72, 0x19, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x32, 0x12, 0x5e, - 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, - 0x24, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x78, 0x0a, 0x1e, - 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, - 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, - 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa9, 0x03, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x21, 0xba, 0x48, 0x1e, 0xc8, 0x01, 0x01, 0x72, 0x19, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x32, 0x12, - 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, - 0x2a, 0x24, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x84, 0x01, - 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, - 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xbb, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xba, 0x48, 0x0a, 0xc8, - 0x01, 0x01, 0x72, 0x05, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x12, 0x5c, 0x0a, 0x09, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, - 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x41, 0x6c, 0x74, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0d, - 0xba, 0x48, 0x0a, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x04, 0x10, 0x01, 0x20, 0x00, 0x52, 0x09, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x7b, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0xfe, 0x01, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x71, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, - 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x1a, 0x4b, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x78, 0x0a, 0x1e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x72, 0x65, 0x64, + 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, + 0x65, 0x61, 0x6e, 0x75, 0x70, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x63, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x5f, 0x64, 0x69, 0x72, 0x5f, 0x73, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x1c, 0x0a, 0x1a, 0x41, 0x64, - 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x19, 0x41, 0x64, 0x64, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0xba, 0x48, 0x1e, 0xc8, - 0x01, 0x01, 0x72, 0x19, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x32, 0x12, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, - 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, 0x24, 0x52, 0x09, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x22, - 0xb4, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, + 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x44, 0x69, 0x72, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x44, 0x69, 0x72, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x1a, 0xb0, 0x01, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x44, 0x69, + 0x72, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x12, 0x61, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x72, 0x65, 0x64, + 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x69, 0x6e, 0x74, 0x1a, 0x41, 0x0a, 0x0c, 0x52, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x72, 0x6f, + 0x6b, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x72, + 0x6f, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x56, 0x0a, 0x12, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0xba, 0x48, 0x1e, 0xc8, 0x01, 0x01, 0x72, 0x19, + 0x10, 0x01, 0x18, 0xf9, 0x01, 0x32, 0x12, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, + 0x2d, 0x39, 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, 0x24, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a, 0x1d, 0x47, + 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x21, 0xba, 0x48, 0x1e, 0xc8, 0x01, 0x01, 0x72, 0x19, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x32, + 0x12, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x5c, 0x2d, + 0x5d, 0x2a, 0x24, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x78, + 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, + 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa9, 0x03, 0x0a, 0x20, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0xba, 0x48, 0x1e, 0xc8, 0x01, 0x01, 0x72, 0x19, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x32, 0x12, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, 0x24, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x30, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, 0x02, 0x28, - 0x00, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x6e, - 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x0a, 0x19, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x22, 0xc0, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x49, 0x0a, 0x0b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x28, 0xba, 0x48, 0x25, 0xc8, 0x01, 0x01, 0x92, 0x01, - 0x1f, 0x08, 0x01, 0x22, 0x1b, 0x72, 0x19, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x32, 0x12, 0x5e, 0x5b, - 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, 0x24, - 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x0f, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x52, 0x0e, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, - 0x6e, 0x6c, 0x79, 0x22, 0x71, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, - 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x50, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x0b, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x28, 0xba, 0x48, - 0x25, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x1f, 0x08, 0x01, 0x22, 0x1b, 0x72, 0x19, 0x10, 0x01, 0x18, + 0x84, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, + 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, + 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xbb, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xba, 0x48, + 0x0a, 0xc8, 0x01, 0x01, 0x72, 0x05, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x12, 0x5c, 0x0a, 0x09, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2f, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x0d, 0xba, 0x48, 0x0a, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x04, 0x10, 0x01, 0x20, 0x00, 0x52, + 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7b, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x71, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x72, 0x65, 0x64, + 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x4b, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x78, 0x0a, 0x1e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x72, + 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x1c, 0x0a, 0x1a, + 0x41, 0x64, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x19, 0x41, + 0x64, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0xba, 0x48, + 0x1e, 0xc8, 0x01, 0x01, 0x72, 0x19, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x32, 0x12, 0x5e, 0x5b, 0x61, + 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, 0x24, 0x52, + 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x0f, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x52, 0x0e, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x6c, + 0x79, 0x22, 0xb4, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x40, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x21, 0xba, 0x48, 0x1e, 0xc8, 0x01, 0x01, 0x72, 0x19, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x32, 0x12, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2e, - 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, 0x24, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x12, 0x30, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, 0x48, 0x04, - 0x1a, 0x02, 0x28, 0x00, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x71, 0x0a, 0x1d, 0x41, 0x64, 0x64, + 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, 0x24, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x30, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, + 0x02, 0x28, 0x00, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x54, + 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x0a, 0x19, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x54, + 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0xc0, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x0b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x28, 0xba, 0x48, 0x25, 0xc8, 0x01, 0x01, + 0x92, 0x01, 0x1f, 0x08, 0x01, 0x22, 0x1b, 0x72, 0x19, 0x10, 0x01, 0x18, 0xf9, 0x01, 0x32, 0x12, + 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, + 0x2a, 0x24, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x30, + 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, 0x48, 0x04, 0x1a, 0x02, 0x28, 0x00, + 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x71, 0x0a, 0x1d, 0x53, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, + 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x08, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x72, - 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x32, 0xb9, 0x22, 0x0a, - 0x0c, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc5, 0x02, - 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x2d, 0x2e, - 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x72, + 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x0b, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x28, + 0xba, 0x48, 0x25, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x1f, 0x08, 0x01, 0x22, 0x1b, 0x72, 0x19, 0x10, + 0x01, 0x18, 0xf9, 0x01, 0x32, 0x12, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, + 0x39, 0x2e, 0x5f, 0x5c, 0x2d, 0x5d, 0x2a, 0x24, 0x52, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xba, + 0x48, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x71, 0x0a, 0x1d, 0x41, + 0x64, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x08, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x74, 0x65, 0x72, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x32, 0xb9, + 0x22, 0x0a, 0x0c, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0xc5, 0x02, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, + 0x2d, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd6, + 0x01, 0x92, 0x41, 0xb1, 0x01, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x1a, 0x55, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x5b, 0x74, + 0x6f, 0x70, 0x69, 0x63, 0x5d, 0x28, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x6f, + 0x63, 0x73, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x67, + 0x65, 0x74, 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x2d, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2f, 0x29, 0x2e, 0x4a, 0x4a, 0x0a, 0x03, 0x32, 0x30, + 0x31, 0x12, 0x43, 0x0a, 0x0d, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x32, 0x0a, 0x30, 0x1a, 0x2e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, 0x0a, 0x2f, 0x76, 0x31, + 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0xb8, 0x02, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xcc, 0x01, 0x92, 0x41, 0xae, 0x01, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, + 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x1a, 0x5f, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x73, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x63, 0x74, 0x6f, + 0x72, 0x2e, 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x3a, 0x20, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x4a, 0x3e, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, + 0x37, 0x0a, 0x02, 0x4f, 0x4b, 0x12, 0x31, 0x0a, 0x2f, 0x1a, 0x2d, 0x2e, 0x72, 0x65, 0x64, 0x70, + 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x01, 0x10, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x73, 0x12, 0xc1, 0x02, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, + 0x69, 0x63, 0x12, 0x2d, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0xd2, 0x01, 0x92, 0x41, 0xa7, 0x01, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x1a, 0x2f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x4a, 0x25, 0x0a, 0x03, 0x32, 0x30, 0x34, 0x12, 0x1e, + 0x0a, 0x1a, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x12, 0x00, 0x4a, 0x3f, + 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x38, 0x0a, 0x1e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, + 0xa6, 0x1d, 0x04, 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, + 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x80, 0x03, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x38, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x72, 0x65, + 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf0, 0x01, 0x92, 0x41, 0xb6, 0x01, 0x12, 0x18, 0x47, + 0x65, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x22, 0x47, 0x65, 0x74, 0x20, 0x6b, 0x65, 0x79, + 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x4a, 0x4a, 0x0a, 0x03, 0x32, + 0x30, 0x30, 0x12, 0x43, 0x0a, 0x02, 0x4f, 0x4b, 0x12, 0x3d, 0x0a, 0x3b, 0x1a, 0x39, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd6, 0x01, 0x92, - 0x41, 0xb1, 0x01, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x1a, 0x55, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x5b, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x5d, 0x28, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x6f, 0x63, 0x73, - 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x65, - 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x67, 0x65, 0x74, - 0x2d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2d, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2f, 0x29, 0x2e, 0x4a, 0x4a, 0x0a, 0x03, 0x32, 0x30, 0x31, 0x12, - 0x43, 0x0a, 0x0d, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x12, 0x32, 0x0a, 0x30, 0x1a, 0x2e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, + 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, + 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x01, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, + 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa8, 0x03, 0x0a, 0x19, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, + 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x3a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0xb8, 0x02, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x8f, 0x02, 0x92, 0x41, 0xc5, 0x01, 0x12, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x2c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, + 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x4a, 0x4d, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x46, 0x0a, 0x02, 0x4f, 0x4b, + 0x12, 0x40, 0x0a, 0x3e, 0x1a, 0x3c, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xcc, 0x01, 0x92, 0x41, 0xae, 0x01, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x73, 0x1a, 0x5f, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x73, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x2e, - 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x3a, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x4a, 0x3e, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x37, 0x0a, - 0x02, 0x4f, 0x4b, 0x12, 0x31, 0x0a, 0x2f, 0x1a, 0x2d, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, - 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x01, 0x10, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, - 0x12, 0xc1, 0x02, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x12, 0x2d, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2e, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xd2, 0x01, 0x92, 0x41, 0xa7, 0x01, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x1a, 0x2f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, - 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x4a, 0x25, 0x0a, 0x03, 0x32, 0x30, 0x34, 0x12, 0x1e, 0x0a, 0x1a, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x12, 0x00, 0x4a, 0x3f, 0x0a, 0x03, - 0x34, 0x30, 0x34, 0x12, 0x38, 0x0a, 0x1e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, - 0x04, 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, - 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x80, 0x03, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, + 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, + 0x1d, 0x04, 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x3a, 0x0e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0x26, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x99, 0x04, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, + 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf0, 0x01, 0x92, 0x41, 0xb6, 0x01, 0x12, 0x18, 0x47, 0x65, 0x74, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x89, 0x03, 0x92, 0x41, 0xbf, 0x02, 0x12, 0x18, 0x53, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x22, 0x47, 0x65, 0x74, 0x20, 0x6b, 0x65, 0x79, 0x2d, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x4a, 0x4a, 0x0a, 0x03, 0x32, 0x30, 0x30, - 0x12, 0x43, 0x0a, 0x02, 0x4f, 0x4b, 0x12, 0x3d, 0x0a, 0x3b, 0x1a, 0x39, 0x2e, 0x72, 0x65, 0x64, - 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, - 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x01, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, - 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa8, 0x03, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x8f, 0x02, 0x92, 0x41, 0xc5, 0x01, 0x12, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0x2c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x73, 0x75, - 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x4a, 0x4d, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x46, 0x0a, 0x02, 0x4f, 0x4b, 0x12, 0x40, - 0x0a, 0x3e, 0x1a, 0x3c, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, - 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, - 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x3a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0x26, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x99, 0x04, 0x0a, 0x16, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, - 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, - 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x89, 0x03, 0x92, 0x41, 0xbf, 0x02, 0x12, 0x18, 0x53, 0x65, 0x74, 0x20, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x1a, 0xaa, 0x01, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6b, - 0x65, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x2e, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x65, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x66, 0x61, - 0x6c, 0x6c, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, - 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, - 0x4a, 0x4a, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x43, 0x0a, 0x02, 0x4f, 0x4b, 0x12, 0x3d, 0x0a, - 0x3b, 0x1a, 0x39, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, - 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, - 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x02, 0x10, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x3a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xbf, - 0x03, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x72, 0x65, - 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0xbb, 0x02, 0x92, 0x41, 0x82, 0x02, 0x12, 0x14, 0x41, 0x64, 0x64, 0x20, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x76, 0x41, 0x64, 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x20, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x69, 0x6e, 0x67, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x20, 0x75, 0x73, 0x65, - 0x64, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6d, 0x70, 0x61, - 0x63, 0x74, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x75, 0x61, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x65, 0x73, 0x2e, 0x4a, 0x46, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x3f, - 0x0a, 0x02, 0x4f, 0x4b, 0x12, 0x39, 0x0a, 0x37, 0x1a, 0x35, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, - 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, - 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, - 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, 0x08, - 0x02, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x32, 0x22, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x98, 0x04, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xaa, 0x01, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, + 0x20, 0x6b, 0x65, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x65, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, + 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, + 0x69, 0x72, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x2e, 0x4a, 0x4a, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x43, 0x0a, 0x02, 0x4f, 0x4b, 0x12, + 0x3d, 0x0a, 0x3b, 0x1a, 0x39, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, + 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, + 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x02, + 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x3a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0xbf, 0x03, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, + 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x03, 0x92, 0x41, 0xdb, 0x02, 0x12, 0x14, 0x53, 0x65, 0x74, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xbb, 0x02, 0x92, 0x41, 0x82, 0x02, 0x12, 0x14, 0x41, 0x64, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0xce, 0x01, 0x53, 0x65, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2e, - 0x20, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, - 0x73, 0x2e, 0x4a, 0x46, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x3f, 0x0a, 0x02, 0x4f, 0x4b, 0x12, - 0x39, 0x0a, 0x37, 0x1a, 0x35, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, - 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, - 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x1a, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xbc, 0x03, 0x0a, 0x15, - 0x41, 0x64, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x37, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, + 0x73, 0x1a, 0x76, 0x41, 0x64, 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x20, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x20, 0x75, + 0x73, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6d, + 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x75, + 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x73, 0x2e, 0x4a, 0x46, 0x0a, 0x03, 0x32, 0x30, 0x30, + 0x12, 0x3f, 0x0a, 0x02, 0x4f, 0x4b, 0x12, 0x39, 0x0a, 0x37, 0x1a, 0x35, 0x2e, 0x72, 0x65, 0x64, + 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, + 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, + 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, + 0x04, 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x32, 0x22, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x98, 0x04, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x72, 0x65, 0x64, 0x70, + 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x35, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, + 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x03, 0x92, 0x41, 0xdb, 0x02, 0x12, 0x14, 0x53, + 0x65, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x1a, 0xce, 0x01, 0x53, 0x65, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x71, 0x75, + 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, + 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x2e, 0x20, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, + 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, + 0x65, 0x65, 0x73, 0x2e, 0x4a, 0x46, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x3f, 0x0a, 0x02, 0x4f, + 0x4b, 0x12, 0x39, 0x0a, 0x37, 0x1a, 0x35, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, - 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, + 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, + 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x02, 0x10, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x1a, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xbc, 0x03, + 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, + 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x37, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, + 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x38, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xaf, 0x02, 0x92, 0x41, 0x83, + 0x02, 0x12, 0x14, 0x41, 0x64, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x74, 0x41, 0x64, 0x64, 0x20, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2e, 0x20, 0x44, 0x65, 0x70, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x67, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x61, + 0x79, 0x20, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, + 0x67, 0x20, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x73, 0x2e, 0x4a, 0x49, 0x0a, + 0x03, 0x32, 0x30, 0x30, 0x12, 0x42, 0x0a, 0x02, 0x4f, 0x4b, 0x12, 0x3c, 0x0a, 0x3a, 0x1a, 0x38, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xaf, 0x02, 0x92, 0x41, 0x83, 0x02, 0x12, - 0x14, 0x41, 0x64, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x74, 0x41, 0x64, 0x64, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2e, 0x20, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, - 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, - 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x73, 0x2e, 0x4a, 0x49, 0x0a, 0x03, 0x32, - 0x30, 0x30, 0x12, 0x42, 0x0a, 0x02, 0x4f, 0x4b, 0x12, 0x3c, 0x0a, 0x3a, 0x1a, 0x38, 0x2e, 0x72, - 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, - 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, - 0x3a, 0x01, 0x2a, 0x32, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2d, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd5, 0x04, 0x0a, 0x15, 0x53, - 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x73, 0x12, 0x37, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, - 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc8, 0x03, 0x92, 0x41, 0x9c, 0x03, 0x12, 0x14, - 0x53, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x8c, 0x02, 0x53, 0x65, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2e, - 0x20, 0x4e, 0x65, 0x77, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x72, 0x20, 0x6c, - 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x20, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x20, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, - 0x65, 0x73, 0x2e, 0x4a, 0x49, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x42, 0x0a, 0x02, 0x4f, 0x4b, - 0x12, 0x3c, 0x0a, 0x3a, 0x1a, 0x38, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, - 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, - 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x02, - 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x1a, 0x15, 0x2f, 0x76, 0x31, - 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x1a, 0x24, 0x92, 0x41, 0x21, 0x0a, 0x06, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, - 0x17, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x20, 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, - 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2e, 0x42, 0x8f, 0x02, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, - 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2d, 0x64, 0x61, - 0x74, 0x61, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, - 0x6e, 0x64, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x67, 0x65, 0x6e, 0x2f, - 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x52, 0x41, 0x44, 0xaa, 0x02, 0x19, 0x52, 0x65, - 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x19, 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, - 0x64, 0x61, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x25, 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x5c, 0x41, - 0x70, 0x69, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5c, 0x56, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1c, 0x52, 0x65, - 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x44, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, + 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, + 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x32, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x73, 0x2d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd5, 0x04, 0x0a, + 0x15, 0x53, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x37, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x38, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc8, 0x03, 0x92, 0x41, 0x9c, 0x03, + 0x12, 0x14, 0x53, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x20, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x8c, 0x02, 0x53, 0x65, 0x74, 0x20, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x73, 0x2e, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x72, + 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, + 0x66, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x74, + 0x6f, 0x70, 0x69, 0x63, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x20, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, + 0x67, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, + 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, + 0x74, 0x65, 0x65, 0x73, 0x2e, 0x4a, 0x49, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x42, 0x0a, 0x02, + 0x4f, 0x4b, 0x12, 0x3c, 0x0a, 0x3a, 0x1a, 0x38, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x54, 0x6f, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4a, 0x2a, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x23, 0x0a, 0x09, 0x4e, 0x6f, 0x74, 0x20, 0x46, + 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x14, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x8a, 0xa6, 0x1d, 0x04, + 0x08, 0x02, 0x10, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x1a, 0x15, 0x2f, + 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x24, 0x92, 0x41, 0x21, 0x0a, 0x06, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x73, 0x12, 0x17, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x20, 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, + 0x64, 0x61, 0x20, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2e, 0x42, 0x8f, 0x02, 0x0a, 0x1d, 0x63, + 0x6f, 0x6d, 0x2e, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5b, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2f, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x67, 0x65, + 0x6e, 0x2f, 0x72, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x52, 0x41, 0x44, 0xaa, 0x02, 0x19, + 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x19, 0x52, 0x65, 0x64, 0x70, + 0x61, 0x6e, 0x64, 0x61, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x25, 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, + 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5c, 0x56, + 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1c, + 0x52, 0x65, 0x64, 0x70, 0x61, 0x6e, 0x64, 0x61, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x44, + 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2285,7 +2446,7 @@ func file_redpanda_api_dataplane_v1_topic_proto_rawDescGZIP() []byte { return file_redpanda_api_dataplane_v1_topic_proto_rawDescData } -var file_redpanda_api_dataplane_v1_topic_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_redpanda_api_dataplane_v1_topic_proto_msgTypes = make([]protoimpl.MessageInfo, 32) var file_redpanda_api_dataplane_v1_topic_proto_goTypes = []any{ (*Topic)(nil), // 0: redpanda.api.dataplane.v1.Topic (*CreateTopicRequest)(nil), // 1: redpanda.api.dataplane.v1.CreateTopicRequest @@ -2315,55 +2476,59 @@ var file_redpanda_api_dataplane_v1_topic_proto_goTypes = []any{ (*CreateTopicRequest_Topic_ReplicaAssignment)(nil), // 25: redpanda.api.dataplane.v1.CreateTopicRequest.Topic.ReplicaAssignment (*ListTopicsRequest_Filter)(nil), // 26: redpanda.api.dataplane.v1.ListTopicsRequest.Filter (*ListTopicsResponse_Topic)(nil), // 27: redpanda.api.dataplane.v1.ListTopicsResponse.Topic - (*UpdateTopicConfigurationsRequest_UpdateConfiguration)(nil), // 28: redpanda.api.dataplane.v1.UpdateTopicConfigurationsRequest.UpdateConfiguration - (*SetTopicConfigurationsRequest_SetConfiguration)(nil), // 29: redpanda.api.dataplane.v1.SetTopicConfigurationsRequest.SetConfiguration - (ConfigType)(0), // 30: redpanda.api.dataplane.v1.ConfigType - (ConfigSource)(0), // 31: redpanda.api.dataplane.v1.ConfigSource - (*ConfigSynonym)(nil), // 32: redpanda.api.dataplane.v1.ConfigSynonym - (ConfigAlterOperation)(0), // 33: redpanda.api.dataplane.v1.ConfigAlterOperation + (*ListTopicsResponse_LogDirSummary)(nil), // 28: redpanda.api.dataplane.v1.ListTopicsResponse.LogDirSummary + (*ListTopicsResponse_ReplicaError)(nil), // 29: redpanda.api.dataplane.v1.ListTopicsResponse.ReplicaError + (*UpdateTopicConfigurationsRequest_UpdateConfiguration)(nil), // 30: redpanda.api.dataplane.v1.UpdateTopicConfigurationsRequest.UpdateConfiguration + (*SetTopicConfigurationsRequest_SetConfiguration)(nil), // 31: redpanda.api.dataplane.v1.SetTopicConfigurationsRequest.SetConfiguration + (ConfigType)(0), // 32: redpanda.api.dataplane.v1.ConfigType + (ConfigSource)(0), // 33: redpanda.api.dataplane.v1.ConfigSource + (*ConfigSynonym)(nil), // 34: redpanda.api.dataplane.v1.ConfigSynonym + (ConfigAlterOperation)(0), // 35: redpanda.api.dataplane.v1.ConfigAlterOperation } var file_redpanda_api_dataplane_v1_topic_proto_depIdxs = []int32{ 23, // 0: redpanda.api.dataplane.v1.CreateTopicRequest.topic:type_name -> redpanda.api.dataplane.v1.CreateTopicRequest.Topic 26, // 1: redpanda.api.dataplane.v1.ListTopicsRequest.filter:type_name -> redpanda.api.dataplane.v1.ListTopicsRequest.Filter 27, // 2: redpanda.api.dataplane.v1.ListTopicsResponse.topics:type_name -> redpanda.api.dataplane.v1.ListTopicsResponse.Topic 22, // 3: redpanda.api.dataplane.v1.GetTopicConfigurationsResponse.configurations:type_name -> redpanda.api.dataplane.v1.Topic.Configuration - 28, // 4: redpanda.api.dataplane.v1.UpdateTopicConfigurationsRequest.configurations:type_name -> redpanda.api.dataplane.v1.UpdateTopicConfigurationsRequest.UpdateConfiguration + 30, // 4: redpanda.api.dataplane.v1.UpdateTopicConfigurationsRequest.configurations:type_name -> redpanda.api.dataplane.v1.UpdateTopicConfigurationsRequest.UpdateConfiguration 22, // 5: redpanda.api.dataplane.v1.UpdateTopicConfigurationsResponse.configurations:type_name -> redpanda.api.dataplane.v1.Topic.Configuration - 29, // 6: redpanda.api.dataplane.v1.SetTopicConfigurationsRequest.configurations:type_name -> redpanda.api.dataplane.v1.SetTopicConfigurationsRequest.SetConfiguration + 31, // 6: redpanda.api.dataplane.v1.SetTopicConfigurationsRequest.configurations:type_name -> redpanda.api.dataplane.v1.SetTopicConfigurationsRequest.SetConfiguration 22, // 7: redpanda.api.dataplane.v1.SetTopicConfigurationsResponse.configurations:type_name -> redpanda.api.dataplane.v1.Topic.Configuration 17, // 8: redpanda.api.dataplane.v1.SetPartitionsToTopicsResponse.statuses:type_name -> redpanda.api.dataplane.v1.AlterTopicPartitionStatus 17, // 9: redpanda.api.dataplane.v1.AddPartitionsToTopicsResponse.statuses:type_name -> redpanda.api.dataplane.v1.AlterTopicPartitionStatus - 30, // 10: redpanda.api.dataplane.v1.Topic.Configuration.type:type_name -> redpanda.api.dataplane.v1.ConfigType - 31, // 11: redpanda.api.dataplane.v1.Topic.Configuration.source:type_name -> redpanda.api.dataplane.v1.ConfigSource - 32, // 12: redpanda.api.dataplane.v1.Topic.Configuration.config_synonyms:type_name -> redpanda.api.dataplane.v1.ConfigSynonym + 32, // 10: redpanda.api.dataplane.v1.Topic.Configuration.type:type_name -> redpanda.api.dataplane.v1.ConfigType + 33, // 11: redpanda.api.dataplane.v1.Topic.Configuration.source:type_name -> redpanda.api.dataplane.v1.ConfigSource + 34, // 12: redpanda.api.dataplane.v1.Topic.Configuration.config_synonyms:type_name -> redpanda.api.dataplane.v1.ConfigSynonym 25, // 13: redpanda.api.dataplane.v1.CreateTopicRequest.Topic.replica_assignments:type_name -> redpanda.api.dataplane.v1.CreateTopicRequest.Topic.ReplicaAssignment 24, // 14: redpanda.api.dataplane.v1.CreateTopicRequest.Topic.configs:type_name -> redpanda.api.dataplane.v1.CreateTopicRequest.Topic.Config - 33, // 15: redpanda.api.dataplane.v1.UpdateTopicConfigurationsRequest.UpdateConfiguration.operation:type_name -> redpanda.api.dataplane.v1.ConfigAlterOperation - 1, // 16: redpanda.api.dataplane.v1.TopicService.CreateTopic:input_type -> redpanda.api.dataplane.v1.CreateTopicRequest - 3, // 17: redpanda.api.dataplane.v1.TopicService.ListTopics:input_type -> redpanda.api.dataplane.v1.ListTopicsRequest - 5, // 18: redpanda.api.dataplane.v1.TopicService.DeleteTopic:input_type -> redpanda.api.dataplane.v1.DeleteTopicRequest - 7, // 19: redpanda.api.dataplane.v1.TopicService.GetTopicConfigurations:input_type -> redpanda.api.dataplane.v1.GetTopicConfigurationsRequest - 9, // 20: redpanda.api.dataplane.v1.TopicService.UpdateTopicConfigurations:input_type -> redpanda.api.dataplane.v1.UpdateTopicConfigurationsRequest - 11, // 21: redpanda.api.dataplane.v1.TopicService.SetTopicConfigurations:input_type -> redpanda.api.dataplane.v1.SetTopicConfigurationsRequest - 14, // 22: redpanda.api.dataplane.v1.TopicService.AddTopicPartitions:input_type -> redpanda.api.dataplane.v1.AddTopicPartitionsRequest - 15, // 23: redpanda.api.dataplane.v1.TopicService.SetTopicPartitions:input_type -> redpanda.api.dataplane.v1.SetTopicPartitionsRequest - 20, // 24: redpanda.api.dataplane.v1.TopicService.AddPartitionsToTopics:input_type -> redpanda.api.dataplane.v1.AddPartitionsToTopicsRequest - 18, // 25: redpanda.api.dataplane.v1.TopicService.SetPartitionsToTopics:input_type -> redpanda.api.dataplane.v1.SetPartitionsToTopicsRequest - 2, // 26: redpanda.api.dataplane.v1.TopicService.CreateTopic:output_type -> redpanda.api.dataplane.v1.CreateTopicResponse - 4, // 27: redpanda.api.dataplane.v1.TopicService.ListTopics:output_type -> redpanda.api.dataplane.v1.ListTopicsResponse - 6, // 28: redpanda.api.dataplane.v1.TopicService.DeleteTopic:output_type -> redpanda.api.dataplane.v1.DeleteTopicResponse - 8, // 29: redpanda.api.dataplane.v1.TopicService.GetTopicConfigurations:output_type -> redpanda.api.dataplane.v1.GetTopicConfigurationsResponse - 10, // 30: redpanda.api.dataplane.v1.TopicService.UpdateTopicConfigurations:output_type -> redpanda.api.dataplane.v1.UpdateTopicConfigurationsResponse - 12, // 31: redpanda.api.dataplane.v1.TopicService.SetTopicConfigurations:output_type -> redpanda.api.dataplane.v1.SetTopicConfigurationsResponse - 13, // 32: redpanda.api.dataplane.v1.TopicService.AddTopicPartitions:output_type -> redpanda.api.dataplane.v1.AddTopicPartitionsResponse - 16, // 33: redpanda.api.dataplane.v1.TopicService.SetTopicPartitions:output_type -> redpanda.api.dataplane.v1.SetTopicPartitionsResponse - 21, // 34: redpanda.api.dataplane.v1.TopicService.AddPartitionsToTopics:output_type -> redpanda.api.dataplane.v1.AddPartitionsToTopicsResponse - 19, // 35: redpanda.api.dataplane.v1.TopicService.SetPartitionsToTopics:output_type -> redpanda.api.dataplane.v1.SetPartitionsToTopicsResponse - 26, // [26:36] is the sub-list for method output_type - 16, // [16:26] 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 + 28, // 15: redpanda.api.dataplane.v1.ListTopicsResponse.Topic.log_dir_summary:type_name -> redpanda.api.dataplane.v1.ListTopicsResponse.LogDirSummary + 29, // 16: redpanda.api.dataplane.v1.ListTopicsResponse.LogDirSummary.replica_errors:type_name -> redpanda.api.dataplane.v1.ListTopicsResponse.ReplicaError + 35, // 17: redpanda.api.dataplane.v1.UpdateTopicConfigurationsRequest.UpdateConfiguration.operation:type_name -> redpanda.api.dataplane.v1.ConfigAlterOperation + 1, // 18: redpanda.api.dataplane.v1.TopicService.CreateTopic:input_type -> redpanda.api.dataplane.v1.CreateTopicRequest + 3, // 19: redpanda.api.dataplane.v1.TopicService.ListTopics:input_type -> redpanda.api.dataplane.v1.ListTopicsRequest + 5, // 20: redpanda.api.dataplane.v1.TopicService.DeleteTopic:input_type -> redpanda.api.dataplane.v1.DeleteTopicRequest + 7, // 21: redpanda.api.dataplane.v1.TopicService.GetTopicConfigurations:input_type -> redpanda.api.dataplane.v1.GetTopicConfigurationsRequest + 9, // 22: redpanda.api.dataplane.v1.TopicService.UpdateTopicConfigurations:input_type -> redpanda.api.dataplane.v1.UpdateTopicConfigurationsRequest + 11, // 23: redpanda.api.dataplane.v1.TopicService.SetTopicConfigurations:input_type -> redpanda.api.dataplane.v1.SetTopicConfigurationsRequest + 14, // 24: redpanda.api.dataplane.v1.TopicService.AddTopicPartitions:input_type -> redpanda.api.dataplane.v1.AddTopicPartitionsRequest + 15, // 25: redpanda.api.dataplane.v1.TopicService.SetTopicPartitions:input_type -> redpanda.api.dataplane.v1.SetTopicPartitionsRequest + 20, // 26: redpanda.api.dataplane.v1.TopicService.AddPartitionsToTopics:input_type -> redpanda.api.dataplane.v1.AddPartitionsToTopicsRequest + 18, // 27: redpanda.api.dataplane.v1.TopicService.SetPartitionsToTopics:input_type -> redpanda.api.dataplane.v1.SetPartitionsToTopicsRequest + 2, // 28: redpanda.api.dataplane.v1.TopicService.CreateTopic:output_type -> redpanda.api.dataplane.v1.CreateTopicResponse + 4, // 29: redpanda.api.dataplane.v1.TopicService.ListTopics:output_type -> redpanda.api.dataplane.v1.ListTopicsResponse + 6, // 30: redpanda.api.dataplane.v1.TopicService.DeleteTopic:output_type -> redpanda.api.dataplane.v1.DeleteTopicResponse + 8, // 31: redpanda.api.dataplane.v1.TopicService.GetTopicConfigurations:output_type -> redpanda.api.dataplane.v1.GetTopicConfigurationsResponse + 10, // 32: redpanda.api.dataplane.v1.TopicService.UpdateTopicConfigurations:output_type -> redpanda.api.dataplane.v1.UpdateTopicConfigurationsResponse + 12, // 33: redpanda.api.dataplane.v1.TopicService.SetTopicConfigurations:output_type -> redpanda.api.dataplane.v1.SetTopicConfigurationsResponse + 13, // 34: redpanda.api.dataplane.v1.TopicService.AddTopicPartitions:output_type -> redpanda.api.dataplane.v1.AddTopicPartitionsResponse + 16, // 35: redpanda.api.dataplane.v1.TopicService.SetTopicPartitions:output_type -> redpanda.api.dataplane.v1.SetTopicPartitionsResponse + 21, // 36: redpanda.api.dataplane.v1.TopicService.AddPartitionsToTopics:output_type -> redpanda.api.dataplane.v1.AddPartitionsToTopicsResponse + 19, // 37: redpanda.api.dataplane.v1.TopicService.SetPartitionsToTopics:output_type -> redpanda.api.dataplane.v1.SetPartitionsToTopicsResponse + 28, // [28:38] is the sub-list for method output_type + 18, // [18:28] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_redpanda_api_dataplane_v1_topic_proto_init() } @@ -2375,15 +2540,15 @@ func file_redpanda_api_dataplane_v1_topic_proto_init() { file_redpanda_api_dataplane_v1_topic_proto_msgTypes[22].OneofWrappers = []any{} file_redpanda_api_dataplane_v1_topic_proto_msgTypes[23].OneofWrappers = []any{} file_redpanda_api_dataplane_v1_topic_proto_msgTypes[24].OneofWrappers = []any{} - file_redpanda_api_dataplane_v1_topic_proto_msgTypes[28].OneofWrappers = []any{} - file_redpanda_api_dataplane_v1_topic_proto_msgTypes[29].OneofWrappers = []any{} + file_redpanda_api_dataplane_v1_topic_proto_msgTypes[30].OneofWrappers = []any{} + file_redpanda_api_dataplane_v1_topic_proto_msgTypes[31].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_redpanda_api_dataplane_v1_topic_proto_rawDesc, NumEnums: 0, - NumMessages: 30, + NumMessages: 32, NumExtensions: 0, NumServices: 1, }, diff --git a/frontend/src/components/misc/common.tsx b/frontend/src/components/misc/common.tsx index 1a2c674c33..f21f2f71a2 100644 --- a/frontend/src/components/misc/common.tsx +++ b/frontend/src/components/misc/common.tsx @@ -13,7 +13,6 @@ import { Button, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, Modal import { AlertIcon } from 'components/icons'; import React, { type PropsWithChildren, useState } from 'react'; -import type { TopicLogDirSummary } from '../../state/rest-interfaces'; import { uiState } from '../../state/ui-state'; import env, { IsDev } from '../../utils/env'; import { ZeroSizeWrapper } from '../../utils/tsx-utils'; @@ -122,14 +121,17 @@ export const UpdatePopup = () => { ); }; -export function renderLogDirSummary(summary: TopicLogDirSummary): JSX.Element { - if (!summary.hint) { - return <>{prettyBytesOrNA(summary.totalSizeBytes)}; +// Accepts both the REST `TopicLogDirSummary` (number) and the gRPC `ListTopicsResponse_LogDirSummary` +// (bigint, optional) shapes — only `totalSizeBytes` and `hint` are rendered. +export function renderLogDirSummary(summary?: { totalSizeBytes: number | bigint; hint?: string | null }): JSX.Element { + const totalSizeBytes = Number(summary?.totalSizeBytes ?? 0); + if (!summary?.hint) { + return <>{prettyBytesOrNA(totalSizeBytes)}; } return ( <> - {prettyBytesOrNA(summary.totalSizeBytes)} + {prettyBytesOrNA(totalSizeBytes)} ); } diff --git a/frontend/src/components/pages/mcp-servers/details/remote-mcp-inspector-tab.browser.test.tsx b/frontend/src/components/pages/mcp-servers/details/remote-mcp-inspector-tab.browser.test.tsx index 68ca7b2c7a..b1f41692e5 100644 --- a/frontend/src/components/pages/mcp-servers/details/remote-mcp-inspector-tab.browser.test.tsx +++ b/frontend/src/components/pages/mcp-servers/details/remote-mcp-inspector-tab.browser.test.tsx @@ -101,7 +101,7 @@ vi.mock('react-query/api/remote-mcp', () => ({ })); vi.mock('react-query/api/topic', () => ({ - useLegacyListTopicsQuery: () => mocks.listTopics(), + useListTopicsQuery: () => mocks.listTopics(), useCreateTopicMutation: () => ({ mutateAsync: mocks.createTopic }), })); diff --git a/frontend/src/components/pages/mcp-servers/details/remote-mcp-inspector-tab.tsx b/frontend/src/components/pages/mcp-servers/details/remote-mcp-inspector-tab.tsx index 6d7d76fd9a..b48cd5166c 100644 --- a/frontend/src/components/pages/mcp-servers/details/remote-mcp-inspector-tab.tsx +++ b/frontend/src/components/pages/mcp-servers/details/remote-mcp-inspector-tab.tsx @@ -42,7 +42,7 @@ import { useListMCPServerTools, useStreamMCPServerToolMutation, } from 'react-query/api/remote-mcp'; -import { useCreateTopicMutation, useLegacyListTopicsQuery } from 'react-query/api/topic'; +import { useCreateTopicMutation, useListTopicsQuery } from 'react-query/api/topic'; import { toast } from 'sonner'; import { RemoteMCPToolButton } from './remote-mcp-tool-button'; @@ -197,7 +197,7 @@ export const RemoteMCPInspectorTab = () => { mcpServer: mcpServerData?.mcpServer, }); - const { data: topicsData, refetch: refetchTopics } = useLegacyListTopicsQuery(undefined, { + const { data: topicsData, refetch: refetchTopics } = useListTopicsQuery({ pageSize: -1 }, undefined, { hideInternalTopics: true, }); const { mutateAsync: createTopic } = useCreateTopicMutation(); @@ -262,7 +262,7 @@ export const RemoteMCPInspectorTab = () => { Array.isArray(topicsData.topics) ) { // Validate that the topic_name exists in the available topics - const topicExists = topicsData.topics.some((topic: { topicName: string }) => topic.topicName === value); + const topicExists = topicsData.topics.some((topic: { name: string }) => topic.name === value); if (!topicExists) { errors[requiredField] = `Topic '${value}' does not exist. Select a valid topic name or create a new one.`; continue; @@ -293,7 +293,7 @@ export const RemoteMCPInspectorTab = () => { (mcpServerData.mcpServer.tools[selectedTool].componentType || getComponentTypeFromToolName(selectedTool)) === MCPServer_Tool_ComponentType.OUTPUT ) { - const availableTopic = topicsData.topics[0].topicName; + const availableTopic = topicsData.topics[0].name; const params = toolParameters as { topic_name?: string; messages?: Array<{ topic_name?: string }> }; // Check if topic_name needs to be set - auto-select for messages without topic_name @@ -549,8 +549,8 @@ export const RemoteMCPInspectorTab = () => { { fieldName: 'topic_name', options: topicsData.topics.map((topic) => ({ - value: topic.topicName, - label: topic.topicName, + value: topic.name, + label: topic.name, })), placeholder: 'Select a topic or create a new one...', onCreateOption: async ( diff --git a/frontend/src/components/pages/rp-connect/onboarding/add-topic-step.test.tsx b/frontend/src/components/pages/rp-connect/onboarding/add-topic-step.test.tsx index d5150992ce..54fdb1cf9c 100644 --- a/frontend/src/components/pages/rp-connect/onboarding/add-topic-step.test.tsx +++ b/frontend/src/components/pages/rp-connect/onboarding/add-topic-step.test.tsx @@ -12,8 +12,8 @@ import { create } from '@bufbuild/protobuf'; import { ConnectError, createRouterTransport } from '@connectrpc/connect'; import userEvent from '@testing-library/user-event'; -import { CreateTopicResponseSchema } from 'protogen/redpanda/api/dataplane/v1/topic_pb'; -import { createTopic } from 'protogen/redpanda/api/dataplane/v1/topic-TopicService_connectquery'; +import { CreateTopicResponseSchema, ListTopicsResponseSchema } from 'protogen/redpanda/api/dataplane/v1/topic_pb'; +import { createTopic, listTopics } from 'protogen/redpanda/api/dataplane/v1/topic-TopicService_connectquery'; import type { ComponentProps } from 'react'; import { useRef } from 'react'; import { render, screen, waitFor } from 'test-utils'; @@ -60,23 +60,7 @@ import { AddTopicStep } from './add-topic-step'; // ── Helpers ──────────────────────────────────────────────────────────── -/** REST response for useLegacyListTopicsQuery */ -function createTopicsResponse(topicNames: string[]) { - return { - topics: topicNames.map((name) => ({ - topicName: name, - isInternal: false, - partitionCount: 1, - replicationFactor: 3, - cleanupPolicy: 'delete', - documentation: 'UNKNOWN' as const, - logDirSummary: { totalSizeBytes: 0, partitionCount: 0, replicaErrors: [] }, - allowedActions: undefined, - })), - }; -} - -function createTransport(overrides?: { createTopicMock?: ReturnType }) { +function createTransport(overrides?: { createTopicMock?: ReturnType; topicNames?: string[] }) { return createRouterTransport(({ rpc }) => { rpc( createTopic, @@ -89,6 +73,20 @@ function createTransport(overrides?: { createTopicMock?: ReturnType + create(ListTopicsResponseSchema, { + topics: (overrides?.topicNames ?? []).map((name) => ({ + name, + internal: false, + partitionCount: 1, + replicationFactor: 3, + cleanupPolicy: 'delete', + logDirSummary: { totalSizeBytes: 0n, replicaErrors: [], hint: '' }, + })), + nextPageToken: '', + }) + ); }); } @@ -113,22 +111,13 @@ function TestHarness({ onResult, ...props }: HarnessProps) { describe('AddTopicStep', () => { beforeEach(() => { mockFetch.mockReset(); - // Default: return empty topic list - mockFetch.mockResolvedValue({ - ok: true, - json: () => Promise.resolve(createTopicsResponse([])), - }); }); it('existing topic returns name via triggerSubmit', async () => { const user = userEvent.setup(); - mockFetch.mockResolvedValue({ - ok: true, - json: () => Promise.resolve(createTopicsResponse(['my-topic', 'other-topic'])), - }); let result: unknown; - const transport = createTransport(); + const transport = createTransport({ topicNames: ['my-topic', 'other-topic'] }); render( { { transport } ); - // Wait for topics to load so the combobox has options - await waitFor(() => { - expect(mockFetch).toHaveBeenCalled(); - }); - // The component starts in "Existing" mode when topics exist. // Open the combobox, type to filter, then click the matching option. // (Pressing Enter races cmdk's highlighted-value bookkeeping in CI under @@ -285,11 +269,7 @@ describe('AddTopicStep', () => { }); it('selectionMode=existing shows combobox', async () => { - mockFetch.mockResolvedValue({ - ok: true, - json: () => Promise.resolve(createTopicsResponse(['topic-a'])), - }); - const transport = createTransport(); + const transport = createTransport({ topicNames: ['topic-a'] }); render( {}} selectionMode="existing" />, { transport }); @@ -299,19 +279,10 @@ describe('AddTopicStep', () => { it('existing topic alert shown in create mode when name matches', async () => { const user = userEvent.setup(); - mockFetch.mockResolvedValue({ - ok: true, - json: () => Promise.resolve(createTopicsResponse(['existing-topic'])), - }); - const transport = createTransport(); + const transport = createTransport({ topicNames: ['existing-topic'] }); render( {}} selectionMode="both" />, { transport }); - // Wait for topics to load - await waitFor(() => { - expect(mockFetch).toHaveBeenCalled(); - }); - // Switch to "New" tab (single-select ToggleGroupItem renders as role="radio") const newButton = await screen.findByRole('radio', { name: 'New' }); await user.click(newButton); @@ -359,11 +330,7 @@ describe('AddTopicStep', () => { }); it('selectionMode=both renders toggle group', async () => { - mockFetch.mockResolvedValue({ - ok: true, - json: () => Promise.resolve(createTopicsResponse(['t1'])), - }); - const transport = createTransport(); + const transport = createTransport({ topicNames: ['t1'] }); render( {}} selectionMode="both" />, { transport }); diff --git a/frontend/src/components/pages/rp-connect/onboarding/add-topic-step.tsx b/frontend/src/components/pages/rp-connect/onboarding/add-topic-step.tsx index e8382d5c9d..e1961c7503 100644 --- a/frontend/src/components/pages/rp-connect/onboarding/add-topic-step.tsx +++ b/frontend/src/components/pages/rp-connect/onboarding/add-topic-step.tsx @@ -26,7 +26,6 @@ import { listTopics } from 'protogen/redpanda/api/dataplane/v1/topic-TopicServic import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useState } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { useGetKafkaInfoQuery } from 'react-query/api/cluster-status'; -import { useLegacyListTopicsQuery } from 'react-query/api/topic'; import { LONG_LIVED_CACHE_STALE_TIME } from 'react-query/react-query.utils'; import { isFalsy } from 'utils/falsy'; @@ -36,7 +35,7 @@ import { CreateTopicRequest_TopicSchema, CreateTopicRequestSchema, } from '../../../../protogen/redpanda/api/dataplane/v1/topic_pb'; -import { useCreateTopicMutation, useTopicConfigQuery } from '../../../../react-query/api/topic'; +import { useCreateTopicMutation, useListTopicsQuery, useTopicConfigQuery } from '../../../../react-query/api/topic'; import { convertRetentionSizeToBytes, convertRetentionTimeToMs } from '../../../../utils/topic-utils'; import { type AddTopicFormData, @@ -77,21 +76,21 @@ export const AddTopicStep = forwardRef, AddTopicSt ) => { const queryClient = useQueryClient(); - const { data: topicList } = useLegacyListTopicsQuery(create(ListTopicsRequestSchema, {}), { - hideInternalTopics: true, - staleTime: LONG_LIVED_CACHE_STALE_TIME, - refetchOnWindowFocus: false, - }); + const { data: topicList } = useListTopicsQuery( + create(ListTopicsRequestSchema, { pageSize: -1 }), + { staleTime: LONG_LIVED_CACHE_STALE_TIME, refetchOnWindowFocus: false }, + { hideInternalTopics: true } + ); const [showAdvancedSettings, setShowAdvancedSettings] = useState(false); const topicOptions = useMemo( () => topicList?.topics - ?.filter((topic) => !(hideInternal && topic.topicName.startsWith('__'))) + ?.filter((topic) => !(hideInternal && topic.name.startsWith('__'))) .map((topic) => ({ - value: topic.topicName, - label: topic.topicName, + value: topic.name, + label: topic.name, })) ?? [], [topicList, hideInternal] ); @@ -156,12 +155,12 @@ export const AddTopicStep = forwardRef, AddTopicSt if (!watchedTopicName) { return; } - return topicList?.topics?.find((topic) => topic.topicName === watchedTopicName); + return topicList?.topics?.find((topic) => topic.name === watchedTopicName); }, [watchedTopicName, topicList]); const { data: topicConfig } = useTopicConfigQuery( - existingTopicSelected?.topicName || '', - !isFalsy(existingTopicSelected?.topicName) + existingTopicSelected?.name || '', + !isFalsy(existingTopicSelected?.name) ); useEffect(() => { @@ -169,13 +168,20 @@ export const AddTopicStep = forwardRef, AddTopicSt return; } if (topicConfig && !topicConfig.error) { - const allTopicValues = parseTopicConfigFromExisting(existingTopicSelected, topicConfig); + const allTopicValues = parseTopicConfigFromExisting( + { + topicName: existingTopicSelected.name, + partitionCount: existingTopicSelected.partitionCount, + replicationFactor: existingTopicSelected.replicationFactor, + }, + topicConfig + ); // Override the form-level `keepDirtyValues: true` default — when a user // selects an existing topic, its config must fully replace any partial // input they've made. form.reset(allTopicValues, { keepDefaultValues: false, keepDirtyValues: false }); } else { - form.setValue('topicName', existingTopicSelected.topicName, { + form.setValue('topicName', existingTopicSelected.name, { shouldDirty: false, }); } diff --git a/frontend/src/components/pages/topics/create-topic-modal.tsx b/frontend/src/components/pages/topics/create-topic-modal.tsx index 0b937ca499..af283a762e 100644 --- a/frontend/src/components/pages/topics/create-topic-modal.tsx +++ b/frontend/src/components/pages/topics/create-topic-modal.tsx @@ -21,7 +21,7 @@ import { ListTopicsRequestSchema, } from 'protogen/redpanda/api/dataplane/v1/topic_pb'; import { useGetKafkaInfoQuery } from 'react-query/api/cluster-status'; -import { useCreateTopicMutation, useLegacyListTopicsQuery } from 'react-query/api/topic'; +import { useCreateTopicMutation, useListTopicsQuery } from 'react-query/api/topic'; import { z } from 'zod'; export const topicSchema = z.object({ @@ -41,7 +41,7 @@ export const DEFAULT_TOPIC_PARTITION_COUNT = 1; export const DEFAULT_TOPIC_REPLICATION_FACTOR = 3; export const CreateTopicModal = ({ isOpen, onClose }: CreateTopicModalProps) => { - const { data: topicList } = useLegacyListTopicsQuery(create(ListTopicsRequestSchema, {}), { + const { data: topicList } = useListTopicsQuery(create(ListTopicsRequestSchema, { pageSize: -1 }), undefined, { hideInternalTopics: true, }); const { mutateAsync: createTopic, isPending: isCreateTopicPending } = useCreateTopicMutation(); @@ -104,7 +104,7 @@ export const CreateTopicModal = ({ isOpen, onClose }: CreateTopicModalProps) => name="name" validators={{ onChange: ({ value }) => - topicList?.topics?.some((topic) => topic?.topicName === value) + topicList?.topics?.some((topic) => topic?.name === value) ? { message: 'Name is already in use', path: 'name' } : undefined, }} diff --git a/frontend/src/components/pages/topics/topic-list-new.tsx b/frontend/src/components/pages/topics/topic-list-new.tsx index 7961954792..11b5aea2da 100644 --- a/frontend/src/components/pages/topics/topic-list-new.tsx +++ b/frontend/src/components/pages/topics/topic-list-new.tsx @@ -39,18 +39,18 @@ import { ListLayoutPagination, ListLayoutSearchInput, } from 'components/redpanda-ui/components/list-layout'; -import { AlertCircle, AlertTriangle, DatabaseIcon, EyeOff, Search, X } from 'lucide-react'; +import { AlertCircle, AlertTriangle, DatabaseIcon, Search, X } from 'lucide-react'; import { parseAsBoolean, parseAsInteger, parseAsString, useQueryState } from 'nuqs'; +import type { ListTopicsResponse_Topic } from 'protogen/redpanda/api/dataplane/v1/topic_pb'; import type { FC } from 'react'; import { useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react'; -import { useLegacyListTopicsQuery } from 'react-query/api/topic'; +import { useListTopicsQuery } from 'react-query/api/topic'; import { toast } from 'sonner'; import { CreateTopicDialog } from './create-topic-dialog'; import { useQueryStateWithCallback } from '../../../hooks/use-query-state-with-callback'; import { appGlobal } from '../../../state/app-global'; import { api } from '../../../state/backend-api'; -import { type Topic, TopicActions } from '../../../state/rest-interfaces'; import { uiSettings } from '../../../state/ui'; import { setPageHeader } from '../../../state/ui-state'; import { DEFAULT_TABLE_PAGE_SIZE } from '../../constants'; @@ -71,7 +71,7 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ import { Text } from '../../redpanda-ui/components/typography'; import { DeleteResourceAlertDialog } from '../../ui/delete-resource-alert-dialog'; -const nameFilterFn = (row: Row, columnId: string, filterValue: string) => { +const nameFilterFn = (row: Row, columnId: string, filterValue: string) => { if (!filterValue) { return true; } @@ -99,8 +99,9 @@ const TopicList: FC = () => { parseAsBoolean ); - const { data, isLoading, isError, error, refetch: refetchTopics } = useLegacyListTopicsQuery(); - const [topicToDelete, setTopicToDelete] = useState(null); + // pageSize -1 disables server-side pagination so the full topic list is returned for client-side filtering. + const { data, isLoading, isError, error, refetch: refetchTopics } = useListTopicsQuery({ pageSize: -1 }); + const [topicToDelete, setTopicToDelete] = useState(null); const [deletionPending, setDeletionPending] = useState(false); const [isCreateTopicModalOpen, setIsCreateTopicModalOpen] = useState(false); @@ -134,7 +135,7 @@ const TopicList: FC = () => { const allTopics = useMemo(() => { let filtered = data.topics ?? []; if (!showInternalTopics) { - filtered = filtered.filter((x) => !(x.isInternal || x.topicName.startsWith('_'))); + filtered = filtered.filter((x) => !(x.internal || x.name.startsWith('_'))); } return filtered; }, [data.topics, showInternalTopics]); @@ -197,7 +198,7 @@ const TopicList: FC = () => { void setPageIndex(0); }; const [columnFilters, setColumnFilters] = useState( - searchValue ? [{ id: 'topicName', value: searchValue }] : [] + searchValue ? [{ id: 'name', value: searchValue }] : [] ); const pagination: PaginationState = { pageIndex, pageSize }; @@ -212,13 +213,13 @@ const TopicList: FC = () => { const next = typeof updater === 'function' ? updater(columnFilters) : updater; setColumnFilters(next); void setPageIndex(0); - const nameFilter = next.find((f) => f.id === 'topicName'); + const nameFilter = next.find((f) => f.id === 'name'); setSearchValue((nameFilter?.value as string) || null); }; - const columns: ColumnDef[] = [ + const columns: ColumnDef[] = [ { - accessorKey: 'topicName', + accessorKey: 'name', header: ({ column }) => , filterFn: nameFilterFn, meta: { headWidth: 'full' as const }, @@ -226,8 +227,8 @@ const TopicList: FC = () => {
@@ -256,7 +257,7 @@ const TopicList: FC = () => { }, { id: 'size', - accessorFn: (topic) => topic.logDirSummary?.totalSizeBytes ?? 0, + accessorFn: (topic) => Number(topic.logDirSummary?.totalSizeBytes ?? 0), header: ({ column }) => , meta: { headWidth: 'sm' as const }, cell: ({ row: { original: topic } }) => renderLogDirSummary(topic.logDirSummary), @@ -271,7 +272,7 @@ const TopicList: FC = () => {