diff --git a/go.mod b/go.mod index 5f180629ca7..63e76869e3e 100644 --- a/go.mod +++ b/go.mod @@ -19,6 +19,7 @@ require ( github.com/MicahParks/keyfunc v1.9.0 github.com/NYTimes/gziphandler v1.1.1 github.com/XSAM/otelsql v0.27.0 + github.com/alecthomas/participle/v2 v2.1.1 github.com/alicebob/miniredis v2.5.0+incompatible github.com/apache/arrow/go/v15 v15.0.2 github.com/aws/aws-sdk-go v1.49.0 @@ -108,6 +109,7 @@ require ( go.opentelemetry.io/otel/sdk v1.31.0 go.opentelemetry.io/otel/sdk/metric v1.31.0 go.opentelemetry.io/otel/trace v1.33.0 + go.uber.org/atomic v1.11.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 go.uber.org/zap/exp v0.2.0 @@ -387,7 +389,6 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.42.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 // indirect go.opentelemetry.io/proto/otlp v1.2.0 // indirect - go.uber.org/atomic v1.11.0 // indirect go.uber.org/goleak v1.3.0 // indirect go.uber.org/mock v0.4.0 // indirect golang.org/x/crypto v0.31.0 // indirect diff --git a/go.sum b/go.sum index 6cc8167dae2..9bc94c559a7 100644 --- a/go.sum +++ b/go.sum @@ -739,6 +739,12 @@ github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0= +github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= +github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8= +github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c= +github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= +github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -1592,6 +1598,8 @@ github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0m github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/heetch/avro v0.4.4/go.mod h1:c0whqijPh/C+RwnXzAHFit01tdtf7gMeEHYSbICxJjU= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= diff --git a/proto/gen/rill/runtime/v1/queries.pb.go b/proto/gen/rill/runtime/v1/queries.pb.go index 0127975c18d..30599715246 100644 --- a/proto/gen/rill/runtime/v1/queries.pb.go +++ b/proto/gen/rill/runtime/v1/queries.pb.go @@ -2788,6 +2788,9 @@ type TimeRange struct { RoundToGrain TimeGrain `protobuf:"varint,5,opt,name=round_to_grain,json=roundToGrain,proto3,enum=rill.runtime.v1.TimeGrain" json:"round_to_grain,omitempty"` // Optional. IANA format, ie Europe/Copenhagen. Defaults to UTC TimeZone string `protobuf:"bytes,6,opt,name=time_zone,json=timeZone,proto3" json:"time_zone,omitempty"` + // Optional. Rill format time range. Should only be used for alerts and reports. + // For dashboard call ResolveTimeRanges. + Expression string `protobuf:"bytes,7,opt,name=expression,proto3" json:"expression,omitempty"` } func (x *TimeRange) Reset() { @@ -2864,6 +2867,13 @@ func (x *TimeRange) GetTimeZone() string { return "" } +func (x *TimeRange) GetExpression() string { + if x != nil { + return x.Expression + } + return "" +} + type MetricsViewComparisonSort struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4339,6 +4349,124 @@ func (x *MetricsViewSearchResponse) GetResults() []*MetricsViewSearchResponse_Se return nil } +type MetricsViewTimeRangesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + MetricsViewName string `protobuf:"bytes,2,opt,name=metrics_view_name,json=metricsViewName,proto3" json:"metrics_view_name,omitempty"` + Expressions []string `protobuf:"bytes,3,rep,name=expressions,proto3" json:"expressions,omitempty"` + Priority int32 `protobuf:"varint,4,opt,name=priority,proto3" json:"priority,omitempty"` +} + +func (x *MetricsViewTimeRangesRequest) Reset() { + *x = MetricsViewTimeRangesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_rill_runtime_v1_queries_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MetricsViewTimeRangesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MetricsViewTimeRangesRequest) ProtoMessage() {} + +func (x *MetricsViewTimeRangesRequest) ProtoReflect() protoreflect.Message { + mi := &file_rill_runtime_v1_queries_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MetricsViewTimeRangesRequest.ProtoReflect.Descriptor instead. +func (*MetricsViewTimeRangesRequest) Descriptor() ([]byte, []int) { + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{47} +} + +func (x *MetricsViewTimeRangesRequest) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *MetricsViewTimeRangesRequest) GetMetricsViewName() string { + if x != nil { + return x.MetricsViewName + } + return "" +} + +func (x *MetricsViewTimeRangesRequest) GetExpressions() []string { + if x != nil { + return x.Expressions + } + return nil +} + +func (x *MetricsViewTimeRangesRequest) GetPriority() int32 { + if x != nil { + return x.Priority + } + return 0 +} + +type MetricsViewTimeRangesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TimeRanges []*TimeRange `protobuf:"bytes,1,rep,name=time_ranges,json=timeRanges,proto3" json:"time_ranges,omitempty"` +} + +func (x *MetricsViewTimeRangesResponse) Reset() { + *x = MetricsViewTimeRangesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_rill_runtime_v1_queries_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MetricsViewTimeRangesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MetricsViewTimeRangesResponse) ProtoMessage() {} + +func (x *MetricsViewTimeRangesResponse) ProtoReflect() protoreflect.Message { + mi := &file_rill_runtime_v1_queries_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MetricsViewTimeRangesResponse.ProtoReflect.Descriptor instead. +func (*MetricsViewTimeRangesResponse) Descriptor() ([]byte, []int) { + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{48} +} + +func (x *MetricsViewTimeRangesResponse) GetTimeRanges() []*TimeRange { + if x != nil { + return x.TimeRanges + } + return nil +} + type ResolveCanvasRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4355,7 +4483,7 @@ type ResolveCanvasRequest struct { func (x *ResolveCanvasRequest) Reset() { *x = ResolveCanvasRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[47] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4368,7 +4496,7 @@ func (x *ResolveCanvasRequest) String() string { func (*ResolveCanvasRequest) ProtoMessage() {} func (x *ResolveCanvasRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[47] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4381,7 +4509,7 @@ func (x *ResolveCanvasRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveCanvasRequest.ProtoReflect.Descriptor instead. func (*ResolveCanvasRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{47} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{49} } func (x *ResolveCanvasRequest) GetInstanceId() string { @@ -4423,7 +4551,7 @@ type ResolveCanvasResponse struct { func (x *ResolveCanvasResponse) Reset() { *x = ResolveCanvasResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[48] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4436,7 +4564,7 @@ func (x *ResolveCanvasResponse) String() string { func (*ResolveCanvasResponse) ProtoMessage() {} func (x *ResolveCanvasResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[48] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4449,7 +4577,7 @@ func (x *ResolveCanvasResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveCanvasResponse.ProtoReflect.Descriptor instead. func (*ResolveCanvasResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{48} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{50} } func (x *ResolveCanvasResponse) GetCanvas() *Resource { @@ -4489,7 +4617,7 @@ type ResolveComponentRequest struct { func (x *ResolveComponentRequest) Reset() { *x = ResolveComponentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[49] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4502,7 +4630,7 @@ func (x *ResolveComponentRequest) String() string { func (*ResolveComponentRequest) ProtoMessage() {} func (x *ResolveComponentRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[49] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4515,7 +4643,7 @@ func (x *ResolveComponentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveComponentRequest.ProtoReflect.Descriptor instead. func (*ResolveComponentRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{49} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{51} } func (x *ResolveComponentRequest) GetInstanceId() string { @@ -4551,7 +4679,7 @@ type ResolveComponentResponse struct { func (x *ResolveComponentResponse) Reset() { *x = ResolveComponentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[50] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4564,7 +4692,7 @@ func (x *ResolveComponentResponse) String() string { func (*ResolveComponentResponse) ProtoMessage() {} func (x *ResolveComponentResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[50] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4577,7 +4705,7 @@ func (x *ResolveComponentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveComponentResponse.ProtoReflect.Descriptor instead. func (*ResolveComponentResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{50} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{52} } func (x *ResolveComponentResponse) GetRendererProperties() *structpb.Struct { @@ -4606,7 +4734,7 @@ type ColumnRollupIntervalRequest struct { func (x *ColumnRollupIntervalRequest) Reset() { *x = ColumnRollupIntervalRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[51] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4619,7 +4747,7 @@ func (x *ColumnRollupIntervalRequest) String() string { func (*ColumnRollupIntervalRequest) ProtoMessage() {} func (x *ColumnRollupIntervalRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[51] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4632,7 +4760,7 @@ func (x *ColumnRollupIntervalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnRollupIntervalRequest.ProtoReflect.Descriptor instead. func (*ColumnRollupIntervalRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{51} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{53} } func (x *ColumnRollupIntervalRequest) GetInstanceId() string { @@ -4700,7 +4828,7 @@ type ColumnRollupIntervalResponse struct { func (x *ColumnRollupIntervalResponse) Reset() { *x = ColumnRollupIntervalResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[52] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4713,7 +4841,7 @@ func (x *ColumnRollupIntervalResponse) String() string { func (*ColumnRollupIntervalResponse) ProtoMessage() {} func (x *ColumnRollupIntervalResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[52] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4726,7 +4854,7 @@ func (x *ColumnRollupIntervalResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnRollupIntervalResponse.ProtoReflect.Descriptor instead. func (*ColumnRollupIntervalResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{52} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{54} } func (x *ColumnRollupIntervalResponse) GetStart() *timestamppb.Timestamp { @@ -4771,7 +4899,7 @@ type ColumnTopKRequest struct { func (x *ColumnTopKRequest) Reset() { *x = ColumnTopKRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[53] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4784,7 +4912,7 @@ func (x *ColumnTopKRequest) String() string { func (*ColumnTopKRequest) ProtoMessage() {} func (x *ColumnTopKRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[53] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4797,7 +4925,7 @@ func (x *ColumnTopKRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnTopKRequest.ProtoReflect.Descriptor instead. func (*ColumnTopKRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{53} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{55} } func (x *ColumnTopKRequest) GetInstanceId() string { @@ -4874,7 +5002,7 @@ type ColumnTopKResponse struct { func (x *ColumnTopKResponse) Reset() { *x = ColumnTopKResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[54] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4887,7 +5015,7 @@ func (x *ColumnTopKResponse) String() string { func (*ColumnTopKResponse) ProtoMessage() {} func (x *ColumnTopKResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[54] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4900,7 +5028,7 @@ func (x *ColumnTopKResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnTopKResponse.ProtoReflect.Descriptor instead. func (*ColumnTopKResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{54} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{56} } func (x *ColumnTopKResponse) GetCategoricalSummary() *CategoricalSummary { @@ -4925,7 +5053,7 @@ type CategoricalSummary struct { func (x *CategoricalSummary) Reset() { *x = CategoricalSummary{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[55] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4938,7 +5066,7 @@ func (x *CategoricalSummary) String() string { func (*CategoricalSummary) ProtoMessage() {} func (x *CategoricalSummary) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[55] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4951,7 +5079,7 @@ func (x *CategoricalSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use CategoricalSummary.ProtoReflect.Descriptor instead. func (*CategoricalSummary) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{55} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{57} } func (m *CategoricalSummary) GetCase() isCategoricalSummary_Case { @@ -5003,7 +5131,7 @@ type TopK struct { func (x *TopK) Reset() { *x = TopK{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[56] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5016,7 +5144,7 @@ func (x *TopK) String() string { func (*TopK) ProtoMessage() {} func (x *TopK) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[56] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5029,7 +5157,7 @@ func (x *TopK) ProtoReflect() protoreflect.Message { // Deprecated: Use TopK.ProtoReflect.Descriptor instead. func (*TopK) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{56} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{58} } func (x *TopK) GetEntries() []*TopK_Entry { @@ -5058,7 +5186,7 @@ type ColumnNullCountRequest struct { func (x *ColumnNullCountRequest) Reset() { *x = ColumnNullCountRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[57] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5071,7 +5199,7 @@ func (x *ColumnNullCountRequest) String() string { func (*ColumnNullCountRequest) ProtoMessage() {} func (x *ColumnNullCountRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[57] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5084,7 +5212,7 @@ func (x *ColumnNullCountRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnNullCountRequest.ProtoReflect.Descriptor instead. func (*ColumnNullCountRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{57} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{59} } func (x *ColumnNullCountRequest) GetInstanceId() string { @@ -5148,7 +5276,7 @@ type ColumnNullCountResponse struct { func (x *ColumnNullCountResponse) Reset() { *x = ColumnNullCountResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[58] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5161,7 +5289,7 @@ func (x *ColumnNullCountResponse) String() string { func (*ColumnNullCountResponse) ProtoMessage() {} func (x *ColumnNullCountResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[58] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5174,7 +5302,7 @@ func (x *ColumnNullCountResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnNullCountResponse.ProtoReflect.Descriptor instead. func (*ColumnNullCountResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{58} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{60} } func (x *ColumnNullCountResponse) GetCount() float64 { @@ -5203,7 +5331,7 @@ type ColumnDescriptiveStatisticsRequest struct { func (x *ColumnDescriptiveStatisticsRequest) Reset() { *x = ColumnDescriptiveStatisticsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[59] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5216,7 +5344,7 @@ func (x *ColumnDescriptiveStatisticsRequest) String() string { func (*ColumnDescriptiveStatisticsRequest) ProtoMessage() {} func (x *ColumnDescriptiveStatisticsRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[59] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5229,7 +5357,7 @@ func (x *ColumnDescriptiveStatisticsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use ColumnDescriptiveStatisticsRequest.ProtoReflect.Descriptor instead. func (*ColumnDescriptiveStatisticsRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{59} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{61} } func (x *ColumnDescriptiveStatisticsRequest) GetInstanceId() string { @@ -5292,7 +5420,7 @@ type ColumnDescriptiveStatisticsResponse struct { func (x *ColumnDescriptiveStatisticsResponse) Reset() { *x = ColumnDescriptiveStatisticsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[60] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5305,7 +5433,7 @@ func (x *ColumnDescriptiveStatisticsResponse) String() string { func (*ColumnDescriptiveStatisticsResponse) ProtoMessage() {} func (x *ColumnDescriptiveStatisticsResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[60] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5318,7 +5446,7 @@ func (x *ColumnDescriptiveStatisticsResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use ColumnDescriptiveStatisticsResponse.ProtoReflect.Descriptor instead. func (*ColumnDescriptiveStatisticsResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{60} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{62} } func (x *ColumnDescriptiveStatisticsResponse) GetNumericSummary() *NumericSummary { @@ -5344,7 +5472,7 @@ type NumericSummary struct { func (x *NumericSummary) Reset() { *x = NumericSummary{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[61] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5357,7 +5485,7 @@ func (x *NumericSummary) String() string { func (*NumericSummary) ProtoMessage() {} func (x *NumericSummary) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[61] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5370,7 +5498,7 @@ func (x *NumericSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use NumericSummary.ProtoReflect.Descriptor instead. func (*NumericSummary) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{61} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{63} } func (m *NumericSummary) GetCase() isNumericSummary_Case { @@ -5435,7 +5563,7 @@ type NumericHistogramBins struct { func (x *NumericHistogramBins) Reset() { *x = NumericHistogramBins{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[62] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5448,7 +5576,7 @@ func (x *NumericHistogramBins) String() string { func (*NumericHistogramBins) ProtoMessage() {} func (x *NumericHistogramBins) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[62] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5461,7 +5589,7 @@ func (x *NumericHistogramBins) ProtoReflect() protoreflect.Message { // Deprecated: Use NumericHistogramBins.ProtoReflect.Descriptor instead. func (*NumericHistogramBins) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{62} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{64} } func (x *NumericHistogramBins) GetBins() []*NumericHistogramBins_Bin { @@ -5489,7 +5617,7 @@ type NumericStatistics struct { func (x *NumericStatistics) Reset() { *x = NumericStatistics{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[63] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5502,7 +5630,7 @@ func (x *NumericStatistics) String() string { func (*NumericStatistics) ProtoMessage() {} func (x *NumericStatistics) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[63] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5515,7 +5643,7 @@ func (x *NumericStatistics) ProtoReflect() protoreflect.Message { // Deprecated: Use NumericStatistics.ProtoReflect.Descriptor instead. func (*NumericStatistics) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{63} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{65} } func (x *NumericStatistics) GetMin() float64 { @@ -5579,7 +5707,7 @@ type NumericOutliers struct { func (x *NumericOutliers) Reset() { *x = NumericOutliers{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[64] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5592,7 +5720,7 @@ func (x *NumericOutliers) String() string { func (*NumericOutliers) ProtoMessage() {} func (x *NumericOutliers) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[64] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5605,7 +5733,7 @@ func (x *NumericOutliers) ProtoReflect() protoreflect.Message { // Deprecated: Use NumericOutliers.ProtoReflect.Descriptor instead. func (*NumericOutliers) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{64} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{66} } func (x *NumericOutliers) GetOutliers() []*NumericOutliers_Outlier { @@ -5634,7 +5762,7 @@ type ColumnTimeGrainRequest struct { func (x *ColumnTimeGrainRequest) Reset() { *x = ColumnTimeGrainRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[65] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5647,7 +5775,7 @@ func (x *ColumnTimeGrainRequest) String() string { func (*ColumnTimeGrainRequest) ProtoMessage() {} func (x *ColumnTimeGrainRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[65] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5660,7 +5788,7 @@ func (x *ColumnTimeGrainRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnTimeGrainRequest.ProtoReflect.Descriptor instead. func (*ColumnTimeGrainRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{65} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{67} } func (x *ColumnTimeGrainRequest) GetInstanceId() string { @@ -5723,7 +5851,7 @@ type ColumnTimeGrainResponse struct { func (x *ColumnTimeGrainResponse) Reset() { *x = ColumnTimeGrainResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[66] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5736,7 +5864,7 @@ func (x *ColumnTimeGrainResponse) String() string { func (*ColumnTimeGrainResponse) ProtoMessage() {} func (x *ColumnTimeGrainResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[66] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5749,7 +5877,7 @@ func (x *ColumnTimeGrainResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnTimeGrainResponse.ProtoReflect.Descriptor instead. func (*ColumnTimeGrainResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{66} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{68} } func (x *ColumnTimeGrainResponse) GetTimeGrain() TimeGrain { @@ -5777,7 +5905,7 @@ type ColumnNumericHistogramRequest struct { func (x *ColumnNumericHistogramRequest) Reset() { *x = ColumnNumericHistogramRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[67] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5790,7 +5918,7 @@ func (x *ColumnNumericHistogramRequest) String() string { func (*ColumnNumericHistogramRequest) ProtoMessage() {} func (x *ColumnNumericHistogramRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[67] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5803,7 +5931,7 @@ func (x *ColumnNumericHistogramRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnNumericHistogramRequest.ProtoReflect.Descriptor instead. func (*ColumnNumericHistogramRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{67} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{69} } func (x *ColumnNumericHistogramRequest) GetInstanceId() string { @@ -5873,7 +6001,7 @@ type ColumnNumericHistogramResponse struct { func (x *ColumnNumericHistogramResponse) Reset() { *x = ColumnNumericHistogramResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[68] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5886,7 +6014,7 @@ func (x *ColumnNumericHistogramResponse) String() string { func (*ColumnNumericHistogramResponse) ProtoMessage() {} func (x *ColumnNumericHistogramResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[68] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5899,7 +6027,7 @@ func (x *ColumnNumericHistogramResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnNumericHistogramResponse.ProtoReflect.Descriptor instead. func (*ColumnNumericHistogramResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{68} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{70} } func (x *ColumnNumericHistogramResponse) GetNumericSummary() *NumericSummary { @@ -5926,7 +6054,7 @@ type ColumnRugHistogramRequest struct { func (x *ColumnRugHistogramRequest) Reset() { *x = ColumnRugHistogramRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[69] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5939,7 +6067,7 @@ func (x *ColumnRugHistogramRequest) String() string { func (*ColumnRugHistogramRequest) ProtoMessage() {} func (x *ColumnRugHistogramRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[69] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5952,7 +6080,7 @@ func (x *ColumnRugHistogramRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnRugHistogramRequest.ProtoReflect.Descriptor instead. func (*ColumnRugHistogramRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{69} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{71} } func (x *ColumnRugHistogramRequest) GetInstanceId() string { @@ -6015,7 +6143,7 @@ type ColumnRugHistogramResponse struct { func (x *ColumnRugHistogramResponse) Reset() { *x = ColumnRugHistogramResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[70] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6028,7 +6156,7 @@ func (x *ColumnRugHistogramResponse) String() string { func (*ColumnRugHistogramResponse) ProtoMessage() {} func (x *ColumnRugHistogramResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[70] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6041,7 +6169,7 @@ func (x *ColumnRugHistogramResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnRugHistogramResponse.ProtoReflect.Descriptor instead. func (*ColumnRugHistogramResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{70} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{72} } func (x *ColumnRugHistogramResponse) GetNumericSummary() *NumericSummary { @@ -6068,7 +6196,7 @@ type ColumnTimeRangeRequest struct { func (x *ColumnTimeRangeRequest) Reset() { *x = ColumnTimeRangeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[71] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6081,7 +6209,7 @@ func (x *ColumnTimeRangeRequest) String() string { func (*ColumnTimeRangeRequest) ProtoMessage() {} func (x *ColumnTimeRangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[71] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6094,7 +6222,7 @@ func (x *ColumnTimeRangeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnTimeRangeRequest.ProtoReflect.Descriptor instead. func (*ColumnTimeRangeRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{71} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{73} } func (x *ColumnTimeRangeRequest) GetInstanceId() string { @@ -6157,7 +6285,7 @@ type ColumnTimeRangeResponse struct { func (x *ColumnTimeRangeResponse) Reset() { *x = ColumnTimeRangeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[72] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6170,7 +6298,7 @@ func (x *ColumnTimeRangeResponse) String() string { func (*ColumnTimeRangeResponse) ProtoMessage() {} func (x *ColumnTimeRangeResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[72] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6183,7 +6311,7 @@ func (x *ColumnTimeRangeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnTimeRangeResponse.ProtoReflect.Descriptor instead. func (*ColumnTimeRangeResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{72} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{74} } func (x *ColumnTimeRangeResponse) GetTimeRangeSummary() *TimeRangeSummary { @@ -6209,7 +6337,7 @@ type TimeRangeSummary struct { func (x *TimeRangeSummary) Reset() { *x = TimeRangeSummary{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[73] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6222,7 +6350,7 @@ func (x *TimeRangeSummary) String() string { func (*TimeRangeSummary) ProtoMessage() {} func (x *TimeRangeSummary) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[73] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6235,7 +6363,7 @@ func (x *TimeRangeSummary) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeRangeSummary.ProtoReflect.Descriptor instead. func (*TimeRangeSummary) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{73} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{75} } func (x *TimeRangeSummary) GetMin() *timestamppb.Timestamp { @@ -6279,7 +6407,7 @@ type ColumnCardinalityRequest struct { func (x *ColumnCardinalityRequest) Reset() { *x = ColumnCardinalityRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[74] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6292,7 +6420,7 @@ func (x *ColumnCardinalityRequest) String() string { func (*ColumnCardinalityRequest) ProtoMessage() {} func (x *ColumnCardinalityRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[74] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6305,7 +6433,7 @@ func (x *ColumnCardinalityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnCardinalityRequest.ProtoReflect.Descriptor instead. func (*ColumnCardinalityRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{74} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{76} } func (x *ColumnCardinalityRequest) GetInstanceId() string { @@ -6369,7 +6497,7 @@ type ColumnCardinalityResponse struct { func (x *ColumnCardinalityResponse) Reset() { *x = ColumnCardinalityResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[75] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6382,7 +6510,7 @@ func (x *ColumnCardinalityResponse) String() string { func (*ColumnCardinalityResponse) ProtoMessage() {} func (x *ColumnCardinalityResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[75] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6395,7 +6523,7 @@ func (x *ColumnCardinalityResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnCardinalityResponse.ProtoReflect.Descriptor instead. func (*ColumnCardinalityResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{75} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{77} } func (x *ColumnCardinalityResponse) GetCategoricalSummary() *CategoricalSummary { @@ -6434,7 +6562,7 @@ type ColumnTimeSeriesRequest struct { func (x *ColumnTimeSeriesRequest) Reset() { *x = ColumnTimeSeriesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[76] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6447,7 +6575,7 @@ func (x *ColumnTimeSeriesRequest) String() string { func (*ColumnTimeSeriesRequest) ProtoMessage() {} func (x *ColumnTimeSeriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[76] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6460,7 +6588,7 @@ func (x *ColumnTimeSeriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnTimeSeriesRequest.ProtoReflect.Descriptor instead. func (*ColumnTimeSeriesRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{76} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{78} } func (x *ColumnTimeSeriesRequest) GetInstanceId() string { @@ -6558,7 +6686,7 @@ type ColumnTimeSeriesResponse struct { func (x *ColumnTimeSeriesResponse) Reset() { *x = ColumnTimeSeriesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[77] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6571,7 +6699,7 @@ func (x *ColumnTimeSeriesResponse) String() string { func (*ColumnTimeSeriesResponse) ProtoMessage() {} func (x *ColumnTimeSeriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[77] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6584,7 +6712,7 @@ func (x *ColumnTimeSeriesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ColumnTimeSeriesResponse.ProtoReflect.Descriptor instead. func (*ColumnTimeSeriesResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{77} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{79} } func (x *ColumnTimeSeriesResponse) GetRollup() *TimeSeriesResponse { @@ -6611,7 +6739,7 @@ type TimeSeriesTimeRange struct { func (x *TimeSeriesTimeRange) Reset() { *x = TimeSeriesTimeRange{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[78] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6624,7 +6752,7 @@ func (x *TimeSeriesTimeRange) String() string { func (*TimeSeriesTimeRange) ProtoMessage() {} func (x *TimeSeriesTimeRange) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[78] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6637,7 +6765,7 @@ func (x *TimeSeriesTimeRange) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeSeriesTimeRange.ProtoReflect.Descriptor instead. func (*TimeSeriesTimeRange) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{78} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{80} } func (x *TimeSeriesTimeRange) GetStart() *timestamppb.Timestamp { @@ -6677,7 +6805,7 @@ type TimeSeriesResponse struct { func (x *TimeSeriesResponse) Reset() { *x = TimeSeriesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[79] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6690,7 +6818,7 @@ func (x *TimeSeriesResponse) String() string { func (*TimeSeriesResponse) ProtoMessage() {} func (x *TimeSeriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[79] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6703,7 +6831,7 @@ func (x *TimeSeriesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeSeriesResponse.ProtoReflect.Descriptor instead. func (*TimeSeriesResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{79} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{81} } func (x *TimeSeriesResponse) GetResults() []*TimeSeriesValue { @@ -6743,7 +6871,7 @@ type TimeSeriesValue struct { func (x *TimeSeriesValue) Reset() { *x = TimeSeriesValue{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[80] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6756,7 +6884,7 @@ func (x *TimeSeriesValue) String() string { func (*TimeSeriesValue) ProtoMessage() {} func (x *TimeSeriesValue) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[80] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6769,7 +6897,7 @@ func (x *TimeSeriesValue) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeSeriesValue.ProtoReflect.Descriptor instead. func (*TimeSeriesValue) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{80} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{82} } func (x *TimeSeriesValue) GetTs() *timestamppb.Timestamp { @@ -6810,7 +6938,7 @@ type TableCardinalityRequest struct { func (x *TableCardinalityRequest) Reset() { *x = TableCardinalityRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[81] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6823,7 +6951,7 @@ func (x *TableCardinalityRequest) String() string { func (*TableCardinalityRequest) ProtoMessage() {} func (x *TableCardinalityRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[81] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6836,7 +6964,7 @@ func (x *TableCardinalityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TableCardinalityRequest.ProtoReflect.Descriptor instead. func (*TableCardinalityRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{81} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{83} } func (x *TableCardinalityRequest) GetInstanceId() string { @@ -6893,7 +7021,7 @@ type TableCardinalityResponse struct { func (x *TableCardinalityResponse) Reset() { *x = TableCardinalityResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[82] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6906,7 +7034,7 @@ func (x *TableCardinalityResponse) String() string { func (*TableCardinalityResponse) ProtoMessage() {} func (x *TableCardinalityResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[82] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6919,7 +7047,7 @@ func (x *TableCardinalityResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TableCardinalityResponse.ProtoReflect.Descriptor instead. func (*TableCardinalityResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{82} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{84} } func (x *TableCardinalityResponse) GetCardinality() int64 { @@ -6945,7 +7073,7 @@ type TableColumnsRequest struct { func (x *TableColumnsRequest) Reset() { *x = TableColumnsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[83] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6958,7 +7086,7 @@ func (x *TableColumnsRequest) String() string { func (*TableColumnsRequest) ProtoMessage() {} func (x *TableColumnsRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[83] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6971,7 +7099,7 @@ func (x *TableColumnsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TableColumnsRequest.ProtoReflect.Descriptor instead. func (*TableColumnsRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{83} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{85} } func (x *TableColumnsRequest) GetInstanceId() string { @@ -7028,7 +7156,7 @@ type TableColumnsResponse struct { func (x *TableColumnsResponse) Reset() { *x = TableColumnsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[84] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7041,7 +7169,7 @@ func (x *TableColumnsResponse) String() string { func (*TableColumnsResponse) ProtoMessage() {} func (x *TableColumnsResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[84] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7054,7 +7182,7 @@ func (x *TableColumnsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TableColumnsResponse.ProtoReflect.Descriptor instead. func (*TableColumnsResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{84} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{86} } func (x *TableColumnsResponse) GetProfileColumns() []*ProfileColumn { @@ -7087,7 +7215,7 @@ type ProfileColumn struct { func (x *ProfileColumn) Reset() { *x = ProfileColumn{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[85] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7100,7 +7228,7 @@ func (x *ProfileColumn) String() string { func (*ProfileColumn) ProtoMessage() {} func (x *ProfileColumn) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[85] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7113,7 +7241,7 @@ func (x *ProfileColumn) ProtoReflect() protoreflect.Message { // Deprecated: Use ProfileColumn.ProtoReflect.Descriptor instead. func (*ProfileColumn) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{85} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{87} } func (x *ProfileColumn) GetName() string { @@ -7154,7 +7282,7 @@ type TableRowsRequest struct { func (x *TableRowsRequest) Reset() { *x = TableRowsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[86] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7167,7 +7295,7 @@ func (x *TableRowsRequest) String() string { func (*TableRowsRequest) ProtoMessage() {} func (x *TableRowsRequest) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[86] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7180,7 +7308,7 @@ func (x *TableRowsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TableRowsRequest.ProtoReflect.Descriptor instead. func (*TableRowsRequest) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{86} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{88} } func (x *TableRowsRequest) GetInstanceId() string { @@ -7243,7 +7371,7 @@ type TableRowsResponse struct { func (x *TableRowsResponse) Reset() { *x = TableRowsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[87] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7256,7 +7384,7 @@ func (x *TableRowsResponse) String() string { func (*TableRowsResponse) ProtoMessage() {} func (x *TableRowsResponse) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[87] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7269,7 +7397,7 @@ func (x *TableRowsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TableRowsResponse.ProtoReflect.Descriptor instead. func (*TableRowsResponse) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{87} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{89} } func (x *TableRowsResponse) GetData() []*structpb.Struct { @@ -7292,7 +7420,7 @@ type MetricsViewFilter_Cond struct { func (x *MetricsViewFilter_Cond) Reset() { *x = MetricsViewFilter_Cond{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[88] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7305,7 +7433,7 @@ func (x *MetricsViewFilter_Cond) String() string { func (*MetricsViewFilter_Cond) ProtoMessage() {} func (x *MetricsViewFilter_Cond) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[88] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7354,7 +7482,7 @@ type MetricsViewSearchResponse_SearchResult struct { func (x *MetricsViewSearchResponse_SearchResult) Reset() { *x = MetricsViewSearchResponse_SearchResult{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[89] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7367,7 +7495,7 @@ func (x *MetricsViewSearchResponse_SearchResult) String() string { func (*MetricsViewSearchResponse_SearchResult) ProtoMessage() {} func (x *MetricsViewSearchResponse_SearchResult) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[89] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7411,7 +7539,7 @@ type TopK_Entry struct { func (x *TopK_Entry) Reset() { *x = TopK_Entry{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[92] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7424,7 +7552,7 @@ func (x *TopK_Entry) String() string { func (*TopK_Entry) ProtoMessage() {} func (x *TopK_Entry) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[92] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7437,7 +7565,7 @@ func (x *TopK_Entry) ProtoReflect() protoreflect.Message { // Deprecated: Use TopK_Entry.ProtoReflect.Descriptor instead. func (*TopK_Entry) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{56, 0} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{58, 0} } func (x *TopK_Entry) GetValue() *structpb.Value { @@ -7469,7 +7597,7 @@ type NumericHistogramBins_Bin struct { func (x *NumericHistogramBins_Bin) Reset() { *x = NumericHistogramBins_Bin{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[93] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7482,7 +7610,7 @@ func (x *NumericHistogramBins_Bin) String() string { func (*NumericHistogramBins_Bin) ProtoMessage() {} func (x *NumericHistogramBins_Bin) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[93] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7495,7 +7623,7 @@ func (x *NumericHistogramBins_Bin) ProtoReflect() protoreflect.Message { // Deprecated: Use NumericHistogramBins_Bin.ProtoReflect.Descriptor instead. func (*NumericHistogramBins_Bin) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{62, 0} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{64, 0} } func (x *NumericHistogramBins_Bin) GetBucket() int32 { @@ -7548,7 +7676,7 @@ type NumericOutliers_Outlier struct { func (x *NumericOutliers_Outlier) Reset() { *x = NumericOutliers_Outlier{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[94] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7561,7 +7689,7 @@ func (x *NumericOutliers_Outlier) String() string { func (*NumericOutliers_Outlier) ProtoMessage() {} func (x *NumericOutliers_Outlier) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[94] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7574,7 +7702,7 @@ func (x *NumericOutliers_Outlier) ProtoReflect() protoreflect.Message { // Deprecated: Use NumericOutliers_Outlier.ProtoReflect.Descriptor instead. func (*NumericOutliers_Outlier) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{64, 0} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{66, 0} } func (x *NumericOutliers_Outlier) GetBucket() int32 { @@ -7625,7 +7753,7 @@ type TimeRangeSummary_Interval struct { func (x *TimeRangeSummary_Interval) Reset() { *x = TimeRangeSummary_Interval{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[95] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7638,7 +7766,7 @@ func (x *TimeRangeSummary_Interval) String() string { func (*TimeRangeSummary_Interval) ProtoMessage() {} func (x *TimeRangeSummary_Interval) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[95] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7651,7 +7779,7 @@ func (x *TimeRangeSummary_Interval) ProtoReflect() protoreflect.Message { // Deprecated: Use TimeRangeSummary_Interval.ProtoReflect.Descriptor instead. func (*TimeRangeSummary_Interval) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{73, 0} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{75, 0} } func (x *TimeRangeSummary_Interval) GetMonths() int32 { @@ -7691,7 +7819,7 @@ type ColumnTimeSeriesRequest_BasicMeasure struct { func (x *ColumnTimeSeriesRequest_BasicMeasure) Reset() { *x = ColumnTimeSeriesRequest_BasicMeasure{} if protoimpl.UnsafeEnabled { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[96] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7704,7 +7832,7 @@ func (x *ColumnTimeSeriesRequest_BasicMeasure) String() string { func (*ColumnTimeSeriesRequest_BasicMeasure) ProtoMessage() {} func (x *ColumnTimeSeriesRequest_BasicMeasure) ProtoReflect() protoreflect.Message { - mi := &file_rill_runtime_v1_queries_proto_msgTypes[96] + mi := &file_rill_runtime_v1_queries_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7717,7 +7845,7 @@ func (x *ColumnTimeSeriesRequest_BasicMeasure) ProtoReflect() protoreflect.Messa // Deprecated: Use ColumnTimeSeriesRequest_BasicMeasure.ProtoReflect.Descriptor instead. func (*ColumnTimeSeriesRequest_BasicMeasure) Descriptor() ([]byte, []int) { - return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{76, 0} + return file_rill_runtime_v1_queries_proto_rawDescGZIP(), []int{78, 0} } func (x *ColumnTimeSeriesRequest_BasicMeasure) GetId() string { @@ -8400,7 +8528,7 @@ var file_rill_runtime_v1_queries_proto_rawDesc = []byte{ 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x52, - 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x22, 0x8c, 0x02, 0x0a, 0x09, 0x54, 0x69, 0x6d, + 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x22, 0xac, 0x02, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, @@ -8417,7 +8545,9 @@ var file_rill_runtime_v1_queries_proto_rawDesc = []byte{ 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, - 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x22, 0xe0, 0x01, 0x0a, 0x19, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xe0, 0x01, 0x0a, 0x19, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, @@ -8698,231 +8828,81 @@ var file_rill_runtime_v1_queries_proto_rawDesc = []byte{ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7c, - 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x76, 0x61, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x12, - 0x2b, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, 0x81, 0x04, 0x0a, - 0x15, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x12, 0x6f, 0x0a, 0x13, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, - 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x7c, 0x0a, 0x18, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x72, - 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x1a, 0x60, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x1b, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, - 0x69, 0x65, 0x77, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x72, 0x69, 0x6c, - 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x85, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x61, - 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, 0x64, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x13, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x72, - 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x12, 0x72, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x8f, - 0x02, 0x0a, 0x1b, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x22, 0xb6, 0x01, 0x0a, 0x1c, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, - 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, - 0x64, 0x12, 0x36, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x52, - 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0xa5, 0x02, 0x0a, 0x11, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x6f, 0x70, 0x4b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb2, + 0x01, 0x0a, 0x1c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x69, + 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x67, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x61, 0x67, 0x67, 0x12, 0x0c, 0x0a, 0x01, 0x6b, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x01, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x22, 0x6a, 0x0a, 0x12, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x6f, 0x70, 0x4b, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x63, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, - 0x61, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x12, 0x63, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x6e, 0x0a, - 0x12, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x5f, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4b, 0x48, 0x00, 0x52, 0x04, 0x74, 0x6f, 0x70, - 0x4b, 0x12, 0x22, 0x0a, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x61, 0x73, 0x65, 0x22, 0x8a, 0x01, - 0x0a, 0x04, 0x54, 0x6f, 0x70, 0x4b, 0x12, 0x35, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4b, 0x2e, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x4b, 0x0a, - 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x16, 0x43, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x2f, 0x0a, 0x17, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x96, 0x02, 0x0a, 0x22, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x33, 0x0a, 0x11, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x0f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, + 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x22, 0x5c, 0x0a, 0x1d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, + 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x22, 0x7c, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, + 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, + 0x6e, 0x76, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x76, + 0x61, 0x73, 0x12, 0x2b, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, + 0x81, 0x04, 0x0a, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x61, 0x6e, + 0x76, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x12, 0x6f, 0x0a, 0x13, + 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x7c, 0x0a, + 0x18, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x42, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x1a, 0x60, 0x0a, 0x17, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, + 0x1b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x22, 0x6f, 0x0a, 0x23, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x22, 0x9b, 0x02, 0x0a, 0x0e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x5d, 0x0a, 0x16, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x62, 0x69, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x69, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x14, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x42, 0x69, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, - 0x74, 0x69, 0x63, 0x73, 0x48, 0x00, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, - 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x4d, 0x0a, 0x10, 0x6e, 0x75, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4f, 0x75, 0x74, - 0x6c, 0x69, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x61, 0x73, 0x65, - 0x22, 0xcc, 0x01, 0x0a, 0x14, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x69, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x04, 0x62, 0x69, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x69, 0x6e, 0x73, 0x2e, 0x42, - 0x69, 0x6e, 0x52, 0x04, 0x62, 0x69, 0x6e, 0x73, 0x1a, 0x75, 0x0a, 0x03, 0x42, 0x69, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x69, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6d, 0x69, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x91, 0x01, 0x0a, 0x11, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x61, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x6d, 0x65, 0x61, 0x6e, 0x12, 0x10, 0x0a, - 0x03, 0x71, 0x32, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x71, 0x32, 0x35, 0x12, - 0x10, 0x0a, 0x03, 0x71, 0x35, 0x30, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x71, 0x35, - 0x30, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x37, 0x35, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, - 0x71, 0x37, 0x35, 0x12, 0x0e, 0x0a, 0x02, 0x73, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x02, 0x73, 0x64, 0x22, 0xd0, 0x01, 0x0a, 0x0f, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4f, - 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, 0x12, 0x44, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x6c, 0x69, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x4f, 0x75, 0x74, 0x6c, - 0x69, 0x65, 0x72, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, 0x1a, 0x77, 0x0a, - 0x07, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, - 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6c, - 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x16, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x2b, + 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, 0x64, 0x0a, 0x18, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x13, 0x72, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x12, 0x72, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x22, 0x8f, 0x02, 0x0a, 0x1b, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x6f, 0x6c, 0x6c, + 0x75, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, @@ -8938,42 +8918,158 @@ var file_rill_runtime_v1_queries_proto_rawDesc = []byte{ 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x22, 0x54, 0x0a, 0x17, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, - 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, - 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x67, 0x72, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x22, 0xde, 0x02, 0x0a, 0x1d, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, - 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x4b, 0x0a, 0x10, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x72, 0x69, - 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x0f, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x6a, 0x0a, 0x1e, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0f, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x8d, 0x02, 0x0a, 0x19, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x52, 0x75, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, + 0x69, 0x74, 0x79, 0x22, 0xb6, 0x01, 0x0a, 0x1c, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x6f, + 0x6c, 0x6c, 0x75, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x03, 0x65, 0x6e, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, + 0x69, 0x6e, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0xa5, 0x02, 0x0a, + 0x11, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x6f, 0x70, 0x4b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, + 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, + 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x67, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x67, 0x67, 0x12, 0x0c, 0x0a, 0x01, 0x6b, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x01, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x22, 0x6a, 0x0a, 0x12, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x6f, + 0x70, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, + 0x72, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x12, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, + 0x22, 0x6e, 0x0a, 0x12, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x5f, 0x6b, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x4b, 0x48, 0x00, 0x52, 0x04, + 0x74, 0x6f, 0x70, 0x4b, 0x12, 0x22, 0x0a, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x61, 0x73, 0x65, + 0x22, 0x8a, 0x01, 0x0a, 0x04, 0x54, 0x6f, 0x70, 0x4b, 0x12, 0x35, 0x0a, 0x07, 0x65, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x69, 0x6c, + 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, + 0x4b, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x1a, 0x4b, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8a, 0x02, + 0x0a, 0x16, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x2f, 0x0a, 0x17, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x96, 0x02, 0x0a, 0x22, + 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x76, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, + 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, + 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, + 0x72, 0x69, 0x74, 0x79, 0x22, 0x6f, 0x0a, 0x23, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x9b, 0x02, 0x0a, 0x0e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x5d, 0x0a, 0x16, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x62, 0x69, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x69, 0x6e, 0x73, 0x48, + 0x00, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x42, 0x69, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x48, 0x00, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x4d, 0x0a, 0x10, + 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x63, + 0x61, 0x73, 0x65, 0x22, 0xcc, 0x01, 0x0a, 0x14, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x69, 0x6e, 0x73, 0x12, 0x3d, 0x0a, 0x04, + 0x62, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x72, 0x69, 0x6c, + 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x69, 0x6e, + 0x73, 0x2e, 0x42, 0x69, 0x6e, 0x52, 0x04, 0x62, 0x69, 0x6e, 0x73, 0x1a, 0x75, 0x0a, 0x03, 0x42, + 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, + 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x69, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, + 0x6d, 0x69, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x22, 0x91, 0x01, 0x0a, 0x11, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x74, + 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, + 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x12, 0x0a, 0x04, + 0x6d, 0x65, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x6d, 0x65, 0x61, 0x6e, + 0x12, 0x10, 0x0a, 0x03, 0x71, 0x32, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x71, + 0x32, 0x35, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x35, 0x30, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x03, 0x71, 0x35, 0x30, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x37, 0x35, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x03, 0x71, 0x37, 0x35, 0x12, 0x0e, 0x0a, 0x02, 0x73, 0x64, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x02, 0x73, 0x64, 0x22, 0xd0, 0x01, 0x0a, 0x0f, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, 0x12, 0x44, 0x0a, 0x08, 0x6f, 0x75, + 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x72, + 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x4f, + 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x73, + 0x1a, 0x77, 0x0a, 0x07, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x62, + 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x03, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x67, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x04, 0x68, 0x69, 0x67, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x70, 0x72, 0x65, 0x73, + 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x16, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, @@ -8989,621 +9085,685 @@ var file_rill_runtime_v1_queries_proto_rawDesc = []byte{ 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, - 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x66, 0x0a, 0x1a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x52, 0x75, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, - 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0e, - 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x8a, - 0x02, 0x0a, 0x16, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, - 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x6a, 0x0a, 0x17, 0x43, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x10, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x86, 0x02, 0x0a, 0x10, 0x54, 0x69, 0x6d, 0x65, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x03, - 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x03, 0x6d, 0x61, - 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x46, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x72, 0x69, 0x6c, - 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x1a, 0x4e, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, - 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x6f, - 0x6e, 0x74, 0x68, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x64, 0x61, 0x79, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x69, 0x63, 0x72, - 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, - 0x22, 0x8c, 0x02, 0x0a, 0x18, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, - 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, - 0x71, 0x0a, 0x19, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x13, - 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x72, 0x69, 0x6c, 0x6c, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x12, - 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x22, 0x8c, 0x05, 0x0a, 0x17, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, - 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, + 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x54, 0x0a, 0x17, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x67, 0x72, 0x61, 0x69, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, + 0x6e, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x22, 0xde, 0x02, 0x0a, + 0x1d, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x0b, 0x20, 0x01, + 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x0d, 0x20, 0x01, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5b, 0x0a, 0x08, 0x6d, 0x65, - 0x61, 0x73, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x72, - 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4d, 0x65, 0x61, 0x73, - 0x75, 0x72, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x6d, - 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x15, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x13, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, - 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x53, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x06, 0x70, 0x69, 0x78, - 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x1a, 0x02, - 0x28, 0x00, 0x52, 0x06, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x12, 0x28, 0x0a, 0x0b, 0x73, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x42, - 0x07, 0xfa, 0x42, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x52, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x1a, 0x62, 0x0a, - 0x0c, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, - 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x71, 0x6c, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x71, 0x6c, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x57, 0x0a, 0x18, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, - 0x06, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, 0x10, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, + 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x52, 0x0f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x6a, 0x0a, + 0x1e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x48, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, + 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x8d, 0x02, 0x0a, 0x19, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x75, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x66, 0x0a, 0x1a, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x52, 0x75, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x52, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x22, 0x8a, 0x02, 0x0a, 0x16, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, + 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x6a, + 0x0a, 0x17, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x12, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x10, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x61, + 0x6e, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x86, 0x02, 0x0a, 0x10, 0x54, + 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, + 0x2c, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x2c, 0x0a, + 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x46, 0x0a, 0x08, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x22, 0xb7, 0x01, 0x0a, 0x13, 0x54, - 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, - 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, - 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x22, 0xa9, 0x01, 0x0a, 0x12, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x72, - 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x73, 0x70, 0x61, 0x72, 0x6b, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x70, 0x61, 0x72, 0x6b, 0x12, - 0x1f, 0x0a, 0x0b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x22, 0x82, 0x01, 0x0a, 0x0f, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x02, 0x74, 0x73, - 0x12, 0x10, 0x0a, 0x03, 0x62, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x62, - 0x69, 0x6e, 0x12, 0x31, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0xe1, 0x01, 0x0a, 0x17, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, - 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x76, 0x61, 0x6c, 0x1a, 0x4e, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, + 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x79, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, 0x61, 0x79, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, + 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x69, 0x63, + 0x72, 0x6f, 0x73, 0x22, 0x8c, 0x02, 0x0a, 0x18, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x43, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, + 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0b, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x22, 0x71, 0x0a, 0x19, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x43, 0x61, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x54, 0x0a, 0x13, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x72, + 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x52, 0x12, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x8c, 0x05, 0x0a, 0x17, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, + 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3c, 0x0a, 0x18, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0xdd, 0x01, 0x0a, 0x13, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x96, 0x02, 0x0a, 0x14, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x47, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x6e, 0x0a, 0x13, 0x75, 0x6e, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x55, 0x6e, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x1a, 0x45, 0x0a, 0x17, 0x55, 0x6e, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x6b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x6c, 0x61, 0x72, - 0x67, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, - 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xf9, 0x01, - 0x0a, 0x10, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5b, 0x0a, + 0x08, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x35, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4d, + 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x08, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x15, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x13, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x72, 0x69, + 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x06, + 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x1a, 0x02, 0x28, 0x00, 0x52, 0x06, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x12, 0x28, 0x0a, + 0x0b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x05, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x52, 0x0a, 0x73, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, + 0x1a, 0x62, 0x0a, 0x0c, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x27, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x65, + 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x71, 0x6c, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x71, 0x6c, + 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x18, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x22, 0xb7, 0x01, + 0x0a, 0x13, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x40, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, + 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, + 0x61, 0x69, 0x6e, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0xa9, 0x01, 0x0a, 0x12, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, + 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x73, 0x70, + 0x61, 0x72, 0x6b, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x70, 0x61, + 0x72, 0x6b, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x0f, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x02, 0x74, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x03, 0x62, 0x69, 0x6e, 0x12, 0x31, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, + 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0xe1, 0x01, 0x0a, 0x17, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, + 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x3c, 0x0a, 0x18, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x61, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0xdd, 0x01, 0x0a, 0x13, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x06, 0x20, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, - 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x42, 0x07, 0xfa, - 0x42, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x40, 0x0a, 0x11, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x2a, 0x70, 0x0a, 0x0e, 0x42, - 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x12, 0x1f, 0x0a, - 0x1b, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, - 0x0a, 0x15, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, - 0x45, 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x55, 0x49, - 0x4c, 0x54, 0x49, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x4f, 0x55, - 0x4e, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x54, 0x49, 0x4e, 0x43, 0x54, 0x10, 0x02, 0x2a, 0x9e, 0x02, - 0x0a, 0x1d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x53, 0x6f, 0x72, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x31, 0x0a, 0x2d, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, - 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x52, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x30, 0x0a, 0x2c, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x96, 0x02, 0x0a, 0x14, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x72, + 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x0e, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x6e, 0x0a, 0x13, + 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x1a, 0x45, 0x0a, 0x17, + 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, + 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x6c, 0x61, 0x72, + 0x67, 0x65, 0x73, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x22, 0xf9, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x26, 0x0a, 0x0a, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, + 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1d, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x1a, 0x02, 0x28, 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x40, 0x0a, 0x11, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x2a, 0x70, + 0x0a, 0x0e, 0x42, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x12, 0x1f, 0x0a, 0x1b, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, + 0x55, 0x52, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x19, 0x0a, 0x15, 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x5f, 0x4d, 0x45, 0x41, + 0x53, 0x55, 0x52, 0x45, 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, + 0x42, 0x55, 0x49, 0x4c, 0x54, 0x49, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x5f, + 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x44, 0x49, 0x53, 0x54, 0x49, 0x4e, 0x43, 0x54, 0x10, 0x02, + 0x2a, 0x9e, 0x02, 0x0a, 0x1d, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x53, 0x6f, 0x72, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x31, 0x0a, 0x2d, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, - 0x52, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x56, 0x41, 0x4c, - 0x55, 0x45, 0x10, 0x01, 0x12, 0x36, 0x0a, 0x32, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, - 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, - 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, - 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x02, 0x12, 0x2f, 0x0a, 0x2b, - 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, - 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x41, 0x42, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x10, 0x03, 0x12, 0x2f, 0x0a, - 0x2b, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, - 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x10, 0x04, 0x2a, 0xb0, - 0x02, 0x0a, 0x20, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x30, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, - 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4d, - 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x33, 0x0a, 0x2f, 0x4d, 0x45, 0x54, - 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, - 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x39, - 0x0a, 0x35, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, - 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, - 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, - 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x02, 0x12, 0x32, 0x0a, 0x2e, 0x4d, 0x45, 0x54, - 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, - 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x41, 0x42, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x10, 0x03, 0x12, 0x32, 0x0a, - 0x2e, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, - 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, + 0x52, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x30, 0x0a, 0x2c, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, + 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, + 0x5f, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, + 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x36, 0x0a, 0x32, 0x4d, 0x45, 0x54, 0x52, 0x49, + 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, + 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, + 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x02, 0x12, + 0x2f, 0x0a, 0x2b, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, + 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x52, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x42, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x10, 0x03, + 0x12, 0x2f, 0x0a, 0x2b, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, + 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x10, - 0x04, 0x2a, 0x6d, 0x0a, 0x0f, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x0a, 0x1c, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x47, 0x52, 0x41, - 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x47, - 0x52, 0x41, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x46, 0x44, 0x10, 0x01, 0x12, - 0x1f, 0x0a, 0x1b, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x5f, 0x4d, 0x45, 0x54, - 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x49, 0x41, 0x47, 0x4e, 0x4f, 0x53, 0x54, 0x49, 0x43, 0x10, 0x02, - 0x32, 0xd6, 0x28, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x74, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x72, 0x69, 0x6c, - 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x04, 0x2a, 0xb0, 0x02, 0x0a, 0x20, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, + 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x4d, 0x65, 0x61, 0x73, 0x75, + 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x30, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, + 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, + 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x33, 0x0a, 0x2f, + 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, + 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, + 0x01, 0x12, 0x39, 0x0a, 0x35, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, + 0x57, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x41, + 0x53, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, + 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x02, 0x12, 0x32, 0x0a, 0x2e, + 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x43, 0x4f, 0x4d, + 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x42, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x10, 0x03, + 0x12, 0x32, 0x0a, 0x2e, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x5f, 0x56, 0x49, 0x45, 0x57, + 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x41, 0x53, + 0x55, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x4c, + 0x54, 0x41, 0x10, 0x04, 0x2a, 0x6d, 0x0a, 0x0f, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x0a, 0x1c, 0x48, 0x49, 0x53, 0x54, 0x4f, + 0x47, 0x52, 0x41, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x49, 0x53, + 0x54, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x46, 0x44, + 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x5f, + 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x49, 0x41, 0x47, 0x4e, 0x4f, 0x53, 0x54, 0x49, + 0x43, 0x10, 0x02, 0x32, 0xad, 0x2a, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x74, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1d, 0x2e, + 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x72, + 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x26, 0x3a, 0x01, 0x2a, 0x22, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x8b, 0x01, 0x0a, 0x0a, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x22, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x26, 0x3a, 0x01, 0x2a, 0x22, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x8b, 0x01, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x22, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x72, 0x69, 0x6c, - 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x76, 0x31, 0x2f, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x62, 0x61, - 0x74, 0x63, 0x68, 0x30, 0x01, 0x12, 0x80, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0x1e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, - 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x9b, 0x01, 0x0a, 0x0c, 0x45, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x2e, 0x72, 0x69, 0x6c, 0x6c, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x25, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x3a, 0x01, - 0x2a, 0x22, 0x33, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x7d, 0x2f, - 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0xd2, 0x01, 0x0a, 0x16, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x2e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x41, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x41, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x3a, 0x01, 0x2a, 0x22, 0x4c, 0x2f, + 0x79, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, + 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, - 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x7d, 0x2f, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xc7, 0x01, 0x0a, 0x12, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x6f, 0x70, 0x6c, 0x69, - 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, - 0x54, 0x6f, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, - 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x6f, 0x70, 0x6c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x58, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x52, 0x3a, 0x01, 0x2a, 0x22, 0x4d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x74, 0x6f, - 0x70, 0x6c, 0x69, 0x73, 0x74, 0x12, 0xd8, 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, - 0x2d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, - 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x60, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, 0x3a, 0x01, 0x2a, 0x22, 0x55, 0x2f, 0x76, 0x31, 0x2f, 0x69, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x30, 0x01, 0x12, 0x80, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, + 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x9b, 0x01, 0x0a, 0x0c, + 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x2e, 0x72, + 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x38, 0x3a, 0x01, 0x2a, 0x22, 0x33, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x7d, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0xd2, 0x01, 0x0a, 0x16, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, + 0x65, 0x77, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, + 0x65, 0x77, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x3a, 0x01, 0x2a, + 0x22, 0x4c, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, + 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, + 0x77, 0x7d, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xc7, + 0x01, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x6f, + 0x70, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, + 0x69, 0x65, 0x77, 0x54, 0x6f, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, + 0x6f, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x58, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x3a, 0x01, 0x2a, 0x22, 0x4d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2d, 0x74, 0x6f, 0x70, 0x6c, 0x69, 0x73, 0x74, - 0x12, 0xd3, 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, - 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x72, 0x69, 0x6c, + 0x2f, 0x74, 0x6f, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x12, 0xd8, 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, + 0x6f, 0x6e, 0x12, 0x2d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x43, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x60, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, 0x3a, 0x01, 0x2a, 0x22, 0x55, 0x2f, 0x76, + 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, 0x2f, + 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2d, 0x74, 0x6f, 0x70, 0x6c, + 0x69, 0x73, 0x74, 0x12, 0xd3, 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, + 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x2e, + 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x72, + 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x55, 0x3a, 0x01, 0x2a, 0x22, 0x50, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0xc3, 0x01, 0x0a, 0x11, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x73, 0x12, + 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x55, 0x3a, 0x01, 0x2a, 0x22, 0x50, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0xc3, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x73, 0x12, 0x29, 0x2e, 0x72, + 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x3a, 0x01, + 0x2a, 0x22, 0x4c, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, + 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, + 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, + 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x73, 0x12, + 0xbb, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, + 0x6f, 0x77, 0x73, 0x12, 0x27, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, + 0x77, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x3a, 0x01, 0x2a, 0x22, 0x4c, - 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, - 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x73, 0x12, 0xbb, 0x01, 0x0a, - 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x6f, 0x77, 0x73, - 0x12, 0x27, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x6f, - 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x3a, 0x01, 0x2a, 0x22, 0x4a, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x3a, 0x01, + 0x2a, 0x22, 0x4a, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, + 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, + 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, + 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x6f, 0x77, 0x73, 0x12, 0xd8, 0x01, + 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, + 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x2c, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x56, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, + 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x63, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x3a, 0x01, 0x2a, 0x22, 0x58, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x6f, 0x77, 0x73, 0x12, 0xd8, 0x01, 0x0a, 0x14, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x12, 0x2c, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, - 0x77, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, - 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x63, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x3a, 0x01, 0x2a, 0x22, 0x58, 0x2f, 0x76, 0x31, - 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x2d, 0x73, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0xc0, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x29, 0x2e, 0x72, 0x69, - 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x56, 0x69, 0x65, 0x77, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x12, 0x4c, 0x2f, 0x76, 0x31, 0x2f, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0xc3, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x29, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, + 0x2d, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0xc0, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x3a, 0x01, 0x2a, - 0x22, 0x4c, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, - 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, - 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0xa8, - 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, - 0x12, 0x25, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x3a, 0x01, 0x2a, 0x22, 0x3d, 0x2f, 0x76, 0x31, 0x2f, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, - 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, - 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0xb6, 0x01, 0x0a, 0x10, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x28, - 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, + 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x12, 0x4c, 0x2f, + 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, + 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0xc3, 0x01, 0x0a, 0x11, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x12, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, + 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, + 0x3a, 0x01, 0x2a, 0x22, 0x4c, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, + 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x12, 0xd4, 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, + 0x77, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x72, 0x69, + 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x72, 0x69, 0x6c, + 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x56, 0x69, 0x65, 0x77, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x56, 0x3a, 0x01, 0x2a, 0x22, 0x51, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x2d, 0x76, 0x69, 0x65, 0x77, 0x73, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0xa8, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x12, 0x25, 0x2e, 0x72, 0x69, 0x6c, + 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x26, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x61, 0x6e, 0x76, 0x61, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x42, 0x3a, 0x01, 0x2a, 0x22, 0x3d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, + 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x12, 0xb6, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x3a, 0x01, 0x2a, 0x22, 0x42, - 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x12, 0xc7, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x6f, 0x6c, - 0x6c, 0x75, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x2c, 0x2e, 0x72, 0x69, - 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x3a, 0x01, 0x2a, 0x22, 0x42, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0xc7, 0x01, 0x0a, + 0x14, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x2c, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x6f, + 0x6c, 0x6c, 0x75, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x6f, 0x6c, 0x6c, + 0x75, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x3a, 0x01, 0x2a, 0x22, 0x47, 0x2f, + 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, + 0x61, 0x6c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x54, 0x6f, 0x70, 0x4b, 0x12, 0x22, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x6f, + 0x70, 0x4b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, - 0x3a, 0x01, 0x2a, 0x22, 0x47, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x2d, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, - 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x9e, 0x01, 0x0a, - 0x0a, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x6f, 0x70, 0x4b, 0x12, 0x22, 0x2e, 0x72, 0x69, + 0x6d, 0x6e, 0x54, 0x6f, 0x70, 0x4b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x22, 0x3c, 0x2f, 0x76, 0x31, 0x2f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x74, + 0x6f, 0x70, 0x6b, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x6f, 0x70, 0x4b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x6f, 0x70, 0x4b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x22, - 0x3c, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x2f, 0x74, 0x6f, 0x70, 0x6b, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb0, 0x01, - 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x27, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x72, 0x69, 0x6c, - 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x12, 0x42, 0x2f, 0x76, - 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x2f, 0x6e, 0x75, 0x6c, 0x6c, 0x2d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x12, 0xe0, 0x01, 0x0a, 0x1b, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x12, 0x33, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, - 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x50, 0x12, 0x4e, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x76, 0x65, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x12, 0xb9, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, - 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x27, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, - 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x4d, 0x12, 0x4b, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x73, 0x74, - 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x67, 0x72, 0x61, 0x69, 0x6e, 0x2f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, - 0xcc, 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2e, 0x2e, 0x72, 0x69, 0x6c, - 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x72, 0x69, 0x6c, - 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x2d, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xbc, - 0x01, 0x0a, 0x12, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x75, 0x67, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x75, - 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x75, 0x67, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x12, 0x45, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, + 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6c, + 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x12, 0x42, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x72, 0x75, 0x67, 0x2d, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb8, 0x01, - 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x27, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x72, 0x69, 0x6c, + 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6e, 0x75, 0x6c, 0x6c, + 0x2d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe0, 0x01, 0x0a, 0x1b, 0x43, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x76, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x33, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, 0x76, + 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x34, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x12, 0x4e, 0x2f, + 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb9, 0x01, + 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, + 0x6e, 0x12, 0x27, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, + 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x72, 0x69, 0x6c, + 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x47, 0x72, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x12, 0x4b, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x2d, 0x73, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xbe, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x29, - 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, - 0x6d, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, + 0x73, 0x2f, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x73, 0x74, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x67, 0x72, 0x61, 0x69, 0x6e, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xcc, 0x01, 0x0a, 0x16, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2e, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x2d, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb6, 0x01, 0x0a, 0x10, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x28, - 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, + 0x65, 0x73, 0x2f, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x2d, 0x68, 0x69, 0x73, 0x74, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x12, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x52, 0x75, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, + 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x75, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x67, 0x72, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x72, 0x69, + 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x75, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, + 0x12, 0x45, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x72, 0x75, 0x67, 0x2d, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb8, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x27, 0x2e, 0x72, 0x69, + 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, + 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x2d, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2f, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0xbe, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x43, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x43, 0x61, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x2d, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0xb6, 0x01, 0x0a, 0x10, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x3a, 0x01, 0x2a, 0x22, 0x42, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x3a, 0x01, 0x2a, 0x22, 0x42, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xba, 0x01, 0x0a, + 0x10, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x69, + 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x12, 0xba, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x28, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, - 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, - 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, - 0xac, 0x01, 0x0a, 0x0c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x12, 0x24, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x0c, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x72, 0x69, 0x6c, + 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x25, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x22, 0x47, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x22, + 0x47, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x2d, 0x70, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x09, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x21, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, + 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x73, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x98, - 0x01, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x21, 0x2e, 0x72, - 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x22, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x76, 0x31, - 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x2f, 0x72, 0x6f, 0x77, 0x73, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x42, 0xbf, 0x01, 0x0a, 0x13, 0x63, 0x6f, - 0x6d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, - 0x31, 0x42, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x69, - 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x72, 0x69, 0x6c, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x72, 0x69, 0x6c, 0x6c, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x76, 0x31, 0xa2, - 0x02, 0x03, 0x52, 0x52, 0x58, 0xaa, 0x02, 0x0f, 0x52, 0x69, 0x6c, 0x6c, 0x2e, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0f, 0x52, 0x69, 0x6c, 0x6c, 0x5c, 0x52, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1b, 0x52, 0x69, 0x6c, 0x6c, - 0x5c, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x52, 0x69, 0x6c, 0x6c, 0x3a, 0x3a, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x72, 0x6f, 0x77, 0x73, 0x2f, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x42, 0xbf, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x69, 0x6c, 0x6c, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x51, 0x75, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x69, 0x6c, 0x6c, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x72, 0x69, 0x6c, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, + 0x72, 0x69, 0x6c, 0x6c, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x76, 0x31, 0x3b, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x52, 0x52, 0x58, 0xaa, + 0x02, 0x0f, 0x52, 0x69, 0x6c, 0x6c, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x56, + 0x31, 0xca, 0x02, 0x0f, 0x52, 0x69, 0x6c, 0x6c, 0x5c, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1b, 0x52, 0x69, 0x6c, 0x6c, 0x5c, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x11, 0x52, 0x69, 0x6c, 0x6c, 0x3a, 0x3a, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9619,7 +9779,7 @@ func file_rill_runtime_v1_queries_proto_rawDescGZIP() []byte { } var file_rill_runtime_v1_queries_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_rill_runtime_v1_queries_proto_msgTypes = make([]protoimpl.MessageInfo, 98) +var file_rill_runtime_v1_queries_proto_msgTypes = make([]protoimpl.MessageInfo, 100) var file_rill_runtime_v1_queries_proto_goTypes = []any{ (BuiltinMeasure)(0), // 0: rill.runtime.v1.BuiltinMeasure (MetricsViewComparisonSortType)(0), // 1: rill.runtime.v1.MetricsViewComparisonSortType @@ -9672,131 +9832,133 @@ var file_rill_runtime_v1_queries_proto_goTypes = []any{ (*MetricsViewSchemaResponse)(nil), // 48: rill.runtime.v1.MetricsViewSchemaResponse (*MetricsViewSearchRequest)(nil), // 49: rill.runtime.v1.MetricsViewSearchRequest (*MetricsViewSearchResponse)(nil), // 50: rill.runtime.v1.MetricsViewSearchResponse - (*ResolveCanvasRequest)(nil), // 51: rill.runtime.v1.ResolveCanvasRequest - (*ResolveCanvasResponse)(nil), // 52: rill.runtime.v1.ResolveCanvasResponse - (*ResolveComponentRequest)(nil), // 53: rill.runtime.v1.ResolveComponentRequest - (*ResolveComponentResponse)(nil), // 54: rill.runtime.v1.ResolveComponentResponse - (*ColumnRollupIntervalRequest)(nil), // 55: rill.runtime.v1.ColumnRollupIntervalRequest - (*ColumnRollupIntervalResponse)(nil), // 56: rill.runtime.v1.ColumnRollupIntervalResponse - (*ColumnTopKRequest)(nil), // 57: rill.runtime.v1.ColumnTopKRequest - (*ColumnTopKResponse)(nil), // 58: rill.runtime.v1.ColumnTopKResponse - (*CategoricalSummary)(nil), // 59: rill.runtime.v1.CategoricalSummary - (*TopK)(nil), // 60: rill.runtime.v1.TopK - (*ColumnNullCountRequest)(nil), // 61: rill.runtime.v1.ColumnNullCountRequest - (*ColumnNullCountResponse)(nil), // 62: rill.runtime.v1.ColumnNullCountResponse - (*ColumnDescriptiveStatisticsRequest)(nil), // 63: rill.runtime.v1.ColumnDescriptiveStatisticsRequest - (*ColumnDescriptiveStatisticsResponse)(nil), // 64: rill.runtime.v1.ColumnDescriptiveStatisticsResponse - (*NumericSummary)(nil), // 65: rill.runtime.v1.NumericSummary - (*NumericHistogramBins)(nil), // 66: rill.runtime.v1.NumericHistogramBins - (*NumericStatistics)(nil), // 67: rill.runtime.v1.NumericStatistics - (*NumericOutliers)(nil), // 68: rill.runtime.v1.NumericOutliers - (*ColumnTimeGrainRequest)(nil), // 69: rill.runtime.v1.ColumnTimeGrainRequest - (*ColumnTimeGrainResponse)(nil), // 70: rill.runtime.v1.ColumnTimeGrainResponse - (*ColumnNumericHistogramRequest)(nil), // 71: rill.runtime.v1.ColumnNumericHistogramRequest - (*ColumnNumericHistogramResponse)(nil), // 72: rill.runtime.v1.ColumnNumericHistogramResponse - (*ColumnRugHistogramRequest)(nil), // 73: rill.runtime.v1.ColumnRugHistogramRequest - (*ColumnRugHistogramResponse)(nil), // 74: rill.runtime.v1.ColumnRugHistogramResponse - (*ColumnTimeRangeRequest)(nil), // 75: rill.runtime.v1.ColumnTimeRangeRequest - (*ColumnTimeRangeResponse)(nil), // 76: rill.runtime.v1.ColumnTimeRangeResponse - (*TimeRangeSummary)(nil), // 77: rill.runtime.v1.TimeRangeSummary - (*ColumnCardinalityRequest)(nil), // 78: rill.runtime.v1.ColumnCardinalityRequest - (*ColumnCardinalityResponse)(nil), // 79: rill.runtime.v1.ColumnCardinalityResponse - (*ColumnTimeSeriesRequest)(nil), // 80: rill.runtime.v1.ColumnTimeSeriesRequest - (*ColumnTimeSeriesResponse)(nil), // 81: rill.runtime.v1.ColumnTimeSeriesResponse - (*TimeSeriesTimeRange)(nil), // 82: rill.runtime.v1.TimeSeriesTimeRange - (*TimeSeriesResponse)(nil), // 83: rill.runtime.v1.TimeSeriesResponse - (*TimeSeriesValue)(nil), // 84: rill.runtime.v1.TimeSeriesValue - (*TableCardinalityRequest)(nil), // 85: rill.runtime.v1.TableCardinalityRequest - (*TableCardinalityResponse)(nil), // 86: rill.runtime.v1.TableCardinalityResponse - (*TableColumnsRequest)(nil), // 87: rill.runtime.v1.TableColumnsRequest - (*TableColumnsResponse)(nil), // 88: rill.runtime.v1.TableColumnsResponse - (*ProfileColumn)(nil), // 89: rill.runtime.v1.ProfileColumn - (*TableRowsRequest)(nil), // 90: rill.runtime.v1.TableRowsRequest - (*TableRowsResponse)(nil), // 91: rill.runtime.v1.TableRowsResponse - (*MetricsViewFilter_Cond)(nil), // 92: rill.runtime.v1.MetricsViewFilter.Cond - (*MetricsViewSearchResponse_SearchResult)(nil), // 93: rill.runtime.v1.MetricsViewSearchResponse.SearchResult - nil, // 94: rill.runtime.v1.ResolveCanvasResponse.ResolvedComponentsEntry - nil, // 95: rill.runtime.v1.ResolveCanvasResponse.ReferencedMetricsViewsEntry - (*TopK_Entry)(nil), // 96: rill.runtime.v1.TopK.Entry - (*NumericHistogramBins_Bin)(nil), // 97: rill.runtime.v1.NumericHistogramBins.Bin - (*NumericOutliers_Outlier)(nil), // 98: rill.runtime.v1.NumericOutliers.Outlier - (*TimeRangeSummary_Interval)(nil), // 99: rill.runtime.v1.TimeRangeSummary.Interval - (*ColumnTimeSeriesRequest_BasicMeasure)(nil), // 100: rill.runtime.v1.ColumnTimeSeriesRequest.BasicMeasure - nil, // 101: rill.runtime.v1.TableColumnsResponse.UnsupportedColumnsEntry - (*structpb.Value)(nil), // 102: google.protobuf.Value - (*StructType)(nil), // 103: rill.runtime.v1.StructType - (*structpb.Struct)(nil), // 104: google.protobuf.Struct - (ExportFormat)(0), // 105: rill.runtime.v1.ExportFormat - (*timestamppb.Timestamp)(nil), // 106: google.protobuf.Timestamp - (*Expression)(nil), // 107: rill.runtime.v1.Expression - (TimeGrain)(0), // 108: rill.runtime.v1.TimeGrain - (*Resource)(nil), // 109: rill.runtime.v1.Resource + (*MetricsViewTimeRangesRequest)(nil), // 51: rill.runtime.v1.MetricsViewTimeRangesRequest + (*MetricsViewTimeRangesResponse)(nil), // 52: rill.runtime.v1.MetricsViewTimeRangesResponse + (*ResolveCanvasRequest)(nil), // 53: rill.runtime.v1.ResolveCanvasRequest + (*ResolveCanvasResponse)(nil), // 54: rill.runtime.v1.ResolveCanvasResponse + (*ResolveComponentRequest)(nil), // 55: rill.runtime.v1.ResolveComponentRequest + (*ResolveComponentResponse)(nil), // 56: rill.runtime.v1.ResolveComponentResponse + (*ColumnRollupIntervalRequest)(nil), // 57: rill.runtime.v1.ColumnRollupIntervalRequest + (*ColumnRollupIntervalResponse)(nil), // 58: rill.runtime.v1.ColumnRollupIntervalResponse + (*ColumnTopKRequest)(nil), // 59: rill.runtime.v1.ColumnTopKRequest + (*ColumnTopKResponse)(nil), // 60: rill.runtime.v1.ColumnTopKResponse + (*CategoricalSummary)(nil), // 61: rill.runtime.v1.CategoricalSummary + (*TopK)(nil), // 62: rill.runtime.v1.TopK + (*ColumnNullCountRequest)(nil), // 63: rill.runtime.v1.ColumnNullCountRequest + (*ColumnNullCountResponse)(nil), // 64: rill.runtime.v1.ColumnNullCountResponse + (*ColumnDescriptiveStatisticsRequest)(nil), // 65: rill.runtime.v1.ColumnDescriptiveStatisticsRequest + (*ColumnDescriptiveStatisticsResponse)(nil), // 66: rill.runtime.v1.ColumnDescriptiveStatisticsResponse + (*NumericSummary)(nil), // 67: rill.runtime.v1.NumericSummary + (*NumericHistogramBins)(nil), // 68: rill.runtime.v1.NumericHistogramBins + (*NumericStatistics)(nil), // 69: rill.runtime.v1.NumericStatistics + (*NumericOutliers)(nil), // 70: rill.runtime.v1.NumericOutliers + (*ColumnTimeGrainRequest)(nil), // 71: rill.runtime.v1.ColumnTimeGrainRequest + (*ColumnTimeGrainResponse)(nil), // 72: rill.runtime.v1.ColumnTimeGrainResponse + (*ColumnNumericHistogramRequest)(nil), // 73: rill.runtime.v1.ColumnNumericHistogramRequest + (*ColumnNumericHistogramResponse)(nil), // 74: rill.runtime.v1.ColumnNumericHistogramResponse + (*ColumnRugHistogramRequest)(nil), // 75: rill.runtime.v1.ColumnRugHistogramRequest + (*ColumnRugHistogramResponse)(nil), // 76: rill.runtime.v1.ColumnRugHistogramResponse + (*ColumnTimeRangeRequest)(nil), // 77: rill.runtime.v1.ColumnTimeRangeRequest + (*ColumnTimeRangeResponse)(nil), // 78: rill.runtime.v1.ColumnTimeRangeResponse + (*TimeRangeSummary)(nil), // 79: rill.runtime.v1.TimeRangeSummary + (*ColumnCardinalityRequest)(nil), // 80: rill.runtime.v1.ColumnCardinalityRequest + (*ColumnCardinalityResponse)(nil), // 81: rill.runtime.v1.ColumnCardinalityResponse + (*ColumnTimeSeriesRequest)(nil), // 82: rill.runtime.v1.ColumnTimeSeriesRequest + (*ColumnTimeSeriesResponse)(nil), // 83: rill.runtime.v1.ColumnTimeSeriesResponse + (*TimeSeriesTimeRange)(nil), // 84: rill.runtime.v1.TimeSeriesTimeRange + (*TimeSeriesResponse)(nil), // 85: rill.runtime.v1.TimeSeriesResponse + (*TimeSeriesValue)(nil), // 86: rill.runtime.v1.TimeSeriesValue + (*TableCardinalityRequest)(nil), // 87: rill.runtime.v1.TableCardinalityRequest + (*TableCardinalityResponse)(nil), // 88: rill.runtime.v1.TableCardinalityResponse + (*TableColumnsRequest)(nil), // 89: rill.runtime.v1.TableColumnsRequest + (*TableColumnsResponse)(nil), // 90: rill.runtime.v1.TableColumnsResponse + (*ProfileColumn)(nil), // 91: rill.runtime.v1.ProfileColumn + (*TableRowsRequest)(nil), // 92: rill.runtime.v1.TableRowsRequest + (*TableRowsResponse)(nil), // 93: rill.runtime.v1.TableRowsResponse + (*MetricsViewFilter_Cond)(nil), // 94: rill.runtime.v1.MetricsViewFilter.Cond + (*MetricsViewSearchResponse_SearchResult)(nil), // 95: rill.runtime.v1.MetricsViewSearchResponse.SearchResult + nil, // 96: rill.runtime.v1.ResolveCanvasResponse.ResolvedComponentsEntry + nil, // 97: rill.runtime.v1.ResolveCanvasResponse.ReferencedMetricsViewsEntry + (*TopK_Entry)(nil), // 98: rill.runtime.v1.TopK.Entry + (*NumericHistogramBins_Bin)(nil), // 99: rill.runtime.v1.NumericHistogramBins.Bin + (*NumericOutliers_Outlier)(nil), // 100: rill.runtime.v1.NumericOutliers.Outlier + (*TimeRangeSummary_Interval)(nil), // 101: rill.runtime.v1.TimeRangeSummary.Interval + (*ColumnTimeSeriesRequest_BasicMeasure)(nil), // 102: rill.runtime.v1.ColumnTimeSeriesRequest.BasicMeasure + nil, // 103: rill.runtime.v1.TableColumnsResponse.UnsupportedColumnsEntry + (*structpb.Value)(nil), // 104: google.protobuf.Value + (*StructType)(nil), // 105: rill.runtime.v1.StructType + (*structpb.Struct)(nil), // 106: google.protobuf.Struct + (ExportFormat)(0), // 107: rill.runtime.v1.ExportFormat + (*timestamppb.Timestamp)(nil), // 108: google.protobuf.Timestamp + (*Expression)(nil), // 109: rill.runtime.v1.Expression + (TimeGrain)(0), // 110: rill.runtime.v1.TimeGrain + (*Resource)(nil), // 111: rill.runtime.v1.Resource } var file_rill_runtime_v1_queries_proto_depIdxs = []int32{ - 102, // 0: rill.runtime.v1.QueryRequest.args:type_name -> google.protobuf.Value - 103, // 1: rill.runtime.v1.QueryResponse.meta:type_name -> rill.runtime.v1.StructType - 104, // 2: rill.runtime.v1.QueryResponse.data:type_name -> google.protobuf.Struct + 104, // 0: rill.runtime.v1.QueryRequest.args:type_name -> google.protobuf.Value + 105, // 1: rill.runtime.v1.QueryResponse.meta:type_name -> rill.runtime.v1.StructType + 106, // 2: rill.runtime.v1.QueryResponse.data:type_name -> google.protobuf.Struct 12, // 3: rill.runtime.v1.QueryBatchRequest.queries:type_name -> rill.runtime.v1.Query 13, // 4: rill.runtime.v1.QueryBatchResponse.result:type_name -> rill.runtime.v1.QueryResult - 105, // 5: rill.runtime.v1.ExportRequest.format:type_name -> rill.runtime.v1.ExportFormat + 107, // 5: rill.runtime.v1.ExportRequest.format:type_name -> rill.runtime.v1.ExportFormat 12, // 6: rill.runtime.v1.ExportRequest.query:type_name -> rill.runtime.v1.Query - 105, // 7: rill.runtime.v1.ExportReportRequest.format:type_name -> rill.runtime.v1.ExportFormat - 106, // 8: rill.runtime.v1.ExportReportRequest.execution_time:type_name -> google.protobuf.Timestamp + 107, // 7: rill.runtime.v1.ExportReportRequest.format:type_name -> rill.runtime.v1.ExportFormat + 108, // 8: rill.runtime.v1.ExportReportRequest.execution_time:type_name -> google.protobuf.Timestamp 14, // 9: rill.runtime.v1.Query.metrics_view_aggregation_request:type_name -> rill.runtime.v1.MetricsViewAggregationRequest 26, // 10: rill.runtime.v1.Query.metrics_view_toplist_request:type_name -> rill.runtime.v1.MetricsViewToplistRequest 28, // 11: rill.runtime.v1.Query.metrics_view_comparison_request:type_name -> rill.runtime.v1.MetricsViewComparisonRequest 35, // 12: rill.runtime.v1.Query.metrics_view_time_series_request:type_name -> rill.runtime.v1.MetricsViewTimeSeriesRequest 37, // 13: rill.runtime.v1.Query.metrics_view_totals_request:type_name -> rill.runtime.v1.MetricsViewTotalsRequest 39, // 14: rill.runtime.v1.Query.metrics_view_rows_request:type_name -> rill.runtime.v1.MetricsViewRowsRequest - 55, // 15: rill.runtime.v1.Query.column_rollup_interval_request:type_name -> rill.runtime.v1.ColumnRollupIntervalRequest - 57, // 16: rill.runtime.v1.Query.column_top_k_request:type_name -> rill.runtime.v1.ColumnTopKRequest - 61, // 17: rill.runtime.v1.Query.column_null_count_request:type_name -> rill.runtime.v1.ColumnNullCountRequest - 63, // 18: rill.runtime.v1.Query.column_descriptive_statistics_request:type_name -> rill.runtime.v1.ColumnDescriptiveStatisticsRequest - 69, // 19: rill.runtime.v1.Query.column_time_grain_request:type_name -> rill.runtime.v1.ColumnTimeGrainRequest - 71, // 20: rill.runtime.v1.Query.column_numeric_histogram_request:type_name -> rill.runtime.v1.ColumnNumericHistogramRequest - 73, // 21: rill.runtime.v1.Query.column_rug_histogram_request:type_name -> rill.runtime.v1.ColumnRugHistogramRequest - 75, // 22: rill.runtime.v1.Query.column_time_range_request:type_name -> rill.runtime.v1.ColumnTimeRangeRequest - 78, // 23: rill.runtime.v1.Query.column_cardinality_request:type_name -> rill.runtime.v1.ColumnCardinalityRequest - 80, // 24: rill.runtime.v1.Query.column_time_series_request:type_name -> rill.runtime.v1.ColumnTimeSeriesRequest - 85, // 25: rill.runtime.v1.Query.table_cardinality_request:type_name -> rill.runtime.v1.TableCardinalityRequest - 87, // 26: rill.runtime.v1.Query.table_columns_request:type_name -> rill.runtime.v1.TableColumnsRequest - 90, // 27: rill.runtime.v1.Query.table_rows_request:type_name -> rill.runtime.v1.TableRowsRequest + 57, // 15: rill.runtime.v1.Query.column_rollup_interval_request:type_name -> rill.runtime.v1.ColumnRollupIntervalRequest + 59, // 16: rill.runtime.v1.Query.column_top_k_request:type_name -> rill.runtime.v1.ColumnTopKRequest + 63, // 17: rill.runtime.v1.Query.column_null_count_request:type_name -> rill.runtime.v1.ColumnNullCountRequest + 65, // 18: rill.runtime.v1.Query.column_descriptive_statistics_request:type_name -> rill.runtime.v1.ColumnDescriptiveStatisticsRequest + 71, // 19: rill.runtime.v1.Query.column_time_grain_request:type_name -> rill.runtime.v1.ColumnTimeGrainRequest + 73, // 20: rill.runtime.v1.Query.column_numeric_histogram_request:type_name -> rill.runtime.v1.ColumnNumericHistogramRequest + 75, // 21: rill.runtime.v1.Query.column_rug_histogram_request:type_name -> rill.runtime.v1.ColumnRugHistogramRequest + 77, // 22: rill.runtime.v1.Query.column_time_range_request:type_name -> rill.runtime.v1.ColumnTimeRangeRequest + 80, // 23: rill.runtime.v1.Query.column_cardinality_request:type_name -> rill.runtime.v1.ColumnCardinalityRequest + 82, // 24: rill.runtime.v1.Query.column_time_series_request:type_name -> rill.runtime.v1.ColumnTimeSeriesRequest + 87, // 25: rill.runtime.v1.Query.table_cardinality_request:type_name -> rill.runtime.v1.TableCardinalityRequest + 89, // 26: rill.runtime.v1.Query.table_columns_request:type_name -> rill.runtime.v1.TableColumnsRequest + 92, // 27: rill.runtime.v1.Query.table_rows_request:type_name -> rill.runtime.v1.TableRowsRequest 15, // 28: rill.runtime.v1.QueryResult.metrics_view_aggregation_response:type_name -> rill.runtime.v1.MetricsViewAggregationResponse 27, // 29: rill.runtime.v1.QueryResult.metrics_view_toplist_response:type_name -> rill.runtime.v1.MetricsViewToplistResponse 29, // 30: rill.runtime.v1.QueryResult.metrics_view_comparison_response:type_name -> rill.runtime.v1.MetricsViewComparisonResponse 36, // 31: rill.runtime.v1.QueryResult.metrics_view_time_series_response:type_name -> rill.runtime.v1.MetricsViewTimeSeriesResponse 38, // 32: rill.runtime.v1.QueryResult.metrics_view_totals_response:type_name -> rill.runtime.v1.MetricsViewTotalsResponse 40, // 33: rill.runtime.v1.QueryResult.metrics_view_rows_response:type_name -> rill.runtime.v1.MetricsViewRowsResponse - 56, // 34: rill.runtime.v1.QueryResult.column_rollup_interval_response:type_name -> rill.runtime.v1.ColumnRollupIntervalResponse - 58, // 35: rill.runtime.v1.QueryResult.column_top_k_response:type_name -> rill.runtime.v1.ColumnTopKResponse - 62, // 36: rill.runtime.v1.QueryResult.column_null_count_response:type_name -> rill.runtime.v1.ColumnNullCountResponse - 64, // 37: rill.runtime.v1.QueryResult.column_descriptive_statistics_response:type_name -> rill.runtime.v1.ColumnDescriptiveStatisticsResponse - 70, // 38: rill.runtime.v1.QueryResult.column_time_grain_response:type_name -> rill.runtime.v1.ColumnTimeGrainResponse - 72, // 39: rill.runtime.v1.QueryResult.column_numeric_histogram_response:type_name -> rill.runtime.v1.ColumnNumericHistogramResponse - 74, // 40: rill.runtime.v1.QueryResult.column_rug_histogram_response:type_name -> rill.runtime.v1.ColumnRugHistogramResponse - 76, // 41: rill.runtime.v1.QueryResult.column_time_range_response:type_name -> rill.runtime.v1.ColumnTimeRangeResponse - 79, // 42: rill.runtime.v1.QueryResult.column_cardinality_response:type_name -> rill.runtime.v1.ColumnCardinalityResponse - 81, // 43: rill.runtime.v1.QueryResult.column_time_series_response:type_name -> rill.runtime.v1.ColumnTimeSeriesResponse - 86, // 44: rill.runtime.v1.QueryResult.table_cardinality_response:type_name -> rill.runtime.v1.TableCardinalityResponse - 88, // 45: rill.runtime.v1.QueryResult.table_columns_response:type_name -> rill.runtime.v1.TableColumnsResponse - 91, // 46: rill.runtime.v1.QueryResult.table_rows_response:type_name -> rill.runtime.v1.TableRowsResponse + 58, // 34: rill.runtime.v1.QueryResult.column_rollup_interval_response:type_name -> rill.runtime.v1.ColumnRollupIntervalResponse + 60, // 35: rill.runtime.v1.QueryResult.column_top_k_response:type_name -> rill.runtime.v1.ColumnTopKResponse + 64, // 36: rill.runtime.v1.QueryResult.column_null_count_response:type_name -> rill.runtime.v1.ColumnNullCountResponse + 66, // 37: rill.runtime.v1.QueryResult.column_descriptive_statistics_response:type_name -> rill.runtime.v1.ColumnDescriptiveStatisticsResponse + 72, // 38: rill.runtime.v1.QueryResult.column_time_grain_response:type_name -> rill.runtime.v1.ColumnTimeGrainResponse + 74, // 39: rill.runtime.v1.QueryResult.column_numeric_histogram_response:type_name -> rill.runtime.v1.ColumnNumericHistogramResponse + 76, // 40: rill.runtime.v1.QueryResult.column_rug_histogram_response:type_name -> rill.runtime.v1.ColumnRugHistogramResponse + 78, // 41: rill.runtime.v1.QueryResult.column_time_range_response:type_name -> rill.runtime.v1.ColumnTimeRangeResponse + 81, // 42: rill.runtime.v1.QueryResult.column_cardinality_response:type_name -> rill.runtime.v1.ColumnCardinalityResponse + 83, // 43: rill.runtime.v1.QueryResult.column_time_series_response:type_name -> rill.runtime.v1.ColumnTimeSeriesResponse + 88, // 44: rill.runtime.v1.QueryResult.table_cardinality_response:type_name -> rill.runtime.v1.TableCardinalityResponse + 90, // 45: rill.runtime.v1.QueryResult.table_columns_response:type_name -> rill.runtime.v1.TableColumnsResponse + 93, // 46: rill.runtime.v1.QueryResult.table_rows_response:type_name -> rill.runtime.v1.TableRowsResponse 16, // 47: rill.runtime.v1.MetricsViewAggregationRequest.dimensions:type_name -> rill.runtime.v1.MetricsViewAggregationDimension 17, // 48: rill.runtime.v1.MetricsViewAggregationRequest.measures:type_name -> rill.runtime.v1.MetricsViewAggregationMeasure 25, // 49: rill.runtime.v1.MetricsViewAggregationRequest.sort:type_name -> rill.runtime.v1.MetricsViewAggregationSort 30, // 50: rill.runtime.v1.MetricsViewAggregationRequest.time_range:type_name -> rill.runtime.v1.TimeRange 30, // 51: rill.runtime.v1.MetricsViewAggregationRequest.comparison_time_range:type_name -> rill.runtime.v1.TimeRange - 106, // 52: rill.runtime.v1.MetricsViewAggregationRequest.time_start:type_name -> google.protobuf.Timestamp - 106, // 53: rill.runtime.v1.MetricsViewAggregationRequest.time_end:type_name -> google.protobuf.Timestamp + 108, // 52: rill.runtime.v1.MetricsViewAggregationRequest.time_start:type_name -> google.protobuf.Timestamp + 108, // 53: rill.runtime.v1.MetricsViewAggregationRequest.time_end:type_name -> google.protobuf.Timestamp 34, // 54: rill.runtime.v1.MetricsViewAggregationRequest.aliases:type_name -> rill.runtime.v1.MetricsViewComparisonMeasureAlias - 107, // 55: rill.runtime.v1.MetricsViewAggregationRequest.where:type_name -> rill.runtime.v1.Expression - 107, // 56: rill.runtime.v1.MetricsViewAggregationRequest.having:type_name -> rill.runtime.v1.Expression + 109, // 55: rill.runtime.v1.MetricsViewAggregationRequest.where:type_name -> rill.runtime.v1.Expression + 109, // 56: rill.runtime.v1.MetricsViewAggregationRequest.having:type_name -> rill.runtime.v1.Expression 42, // 57: rill.runtime.v1.MetricsViewAggregationRequest.filter:type_name -> rill.runtime.v1.MetricsViewFilter - 103, // 58: rill.runtime.v1.MetricsViewAggregationResponse.schema:type_name -> rill.runtime.v1.StructType - 104, // 59: rill.runtime.v1.MetricsViewAggregationResponse.data:type_name -> google.protobuf.Struct - 108, // 60: rill.runtime.v1.MetricsViewAggregationDimension.time_grain:type_name -> rill.runtime.v1.TimeGrain + 105, // 58: rill.runtime.v1.MetricsViewAggregationResponse.schema:type_name -> rill.runtime.v1.StructType + 106, // 59: rill.runtime.v1.MetricsViewAggregationResponse.data:type_name -> google.protobuf.Struct + 110, // 60: rill.runtime.v1.MetricsViewAggregationDimension.time_grain:type_name -> rill.runtime.v1.TimeGrain 0, // 61: rill.runtime.v1.MetricsViewAggregationMeasure.builtin_measure:type_name -> rill.runtime.v1.BuiltinMeasure - 102, // 62: rill.runtime.v1.MetricsViewAggregationMeasure.builtin_measure_args:type_name -> google.protobuf.Value - 107, // 63: rill.runtime.v1.MetricsViewAggregationMeasure.filter:type_name -> rill.runtime.v1.Expression + 104, // 62: rill.runtime.v1.MetricsViewAggregationMeasure.builtin_measure_args:type_name -> google.protobuf.Value + 109, // 63: rill.runtime.v1.MetricsViewAggregationMeasure.filter:type_name -> rill.runtime.v1.Expression 18, // 64: rill.runtime.v1.MetricsViewAggregationMeasure.count:type_name -> rill.runtime.v1.MetricsViewAggregationMeasureComputeCount 19, // 65: rill.runtime.v1.MetricsViewAggregationMeasure.count_distinct:type_name -> rill.runtime.v1.MetricsViewAggregationMeasureComputeCountDistinct 20, // 66: rill.runtime.v1.MetricsViewAggregationMeasure.comparison_value:type_name -> rill.runtime.v1.MetricsViewAggregationMeasureComputeComparisonValue @@ -9804,172 +9966,175 @@ var file_rill_runtime_v1_queries_proto_depIdxs = []int32{ 22, // 68: rill.runtime.v1.MetricsViewAggregationMeasure.comparison_ratio:type_name -> rill.runtime.v1.MetricsViewAggregationMeasureComputeComparisonRatio 23, // 69: rill.runtime.v1.MetricsViewAggregationMeasure.percent_of_total:type_name -> rill.runtime.v1.MetricsViewAggregationMeasureComputePercentOfTotal 24, // 70: rill.runtime.v1.MetricsViewAggregationMeasure.uri:type_name -> rill.runtime.v1.MetricsViewAggregationMeasureComputeURI - 106, // 71: rill.runtime.v1.MetricsViewToplistRequest.time_start:type_name -> google.protobuf.Timestamp - 106, // 72: rill.runtime.v1.MetricsViewToplistRequest.time_end:type_name -> google.protobuf.Timestamp + 108, // 71: rill.runtime.v1.MetricsViewToplistRequest.time_start:type_name -> google.protobuf.Timestamp + 108, // 72: rill.runtime.v1.MetricsViewToplistRequest.time_end:type_name -> google.protobuf.Timestamp 41, // 73: rill.runtime.v1.MetricsViewToplistRequest.sort:type_name -> rill.runtime.v1.MetricsViewSort - 107, // 74: rill.runtime.v1.MetricsViewToplistRequest.where:type_name -> rill.runtime.v1.Expression - 107, // 75: rill.runtime.v1.MetricsViewToplistRequest.having:type_name -> rill.runtime.v1.Expression + 109, // 74: rill.runtime.v1.MetricsViewToplistRequest.where:type_name -> rill.runtime.v1.Expression + 109, // 75: rill.runtime.v1.MetricsViewToplistRequest.having:type_name -> rill.runtime.v1.Expression 42, // 76: rill.runtime.v1.MetricsViewToplistRequest.filter:type_name -> rill.runtime.v1.MetricsViewFilter 43, // 77: rill.runtime.v1.MetricsViewToplistResponse.meta:type_name -> rill.runtime.v1.MetricsViewColumn - 104, // 78: rill.runtime.v1.MetricsViewToplistResponse.data:type_name -> google.protobuf.Struct + 106, // 78: rill.runtime.v1.MetricsViewToplistResponse.data:type_name -> google.protobuf.Struct 16, // 79: rill.runtime.v1.MetricsViewComparisonRequest.dimension:type_name -> rill.runtime.v1.MetricsViewAggregationDimension 17, // 80: rill.runtime.v1.MetricsViewComparisonRequest.measures:type_name -> rill.runtime.v1.MetricsViewAggregationMeasure 31, // 81: rill.runtime.v1.MetricsViewComparisonRequest.sort:type_name -> rill.runtime.v1.MetricsViewComparisonSort 30, // 82: rill.runtime.v1.MetricsViewComparisonRequest.time_range:type_name -> rill.runtime.v1.TimeRange 30, // 83: rill.runtime.v1.MetricsViewComparisonRequest.comparison_time_range:type_name -> rill.runtime.v1.TimeRange - 107, // 84: rill.runtime.v1.MetricsViewComparisonRequest.where:type_name -> rill.runtime.v1.Expression - 107, // 85: rill.runtime.v1.MetricsViewComparisonRequest.having:type_name -> rill.runtime.v1.Expression + 109, // 84: rill.runtime.v1.MetricsViewComparisonRequest.where:type_name -> rill.runtime.v1.Expression + 109, // 85: rill.runtime.v1.MetricsViewComparisonRequest.having:type_name -> rill.runtime.v1.Expression 34, // 86: rill.runtime.v1.MetricsViewComparisonRequest.aliases:type_name -> rill.runtime.v1.MetricsViewComparisonMeasureAlias 42, // 87: rill.runtime.v1.MetricsViewComparisonRequest.filter:type_name -> rill.runtime.v1.MetricsViewFilter 32, // 88: rill.runtime.v1.MetricsViewComparisonResponse.rows:type_name -> rill.runtime.v1.MetricsViewComparisonRow - 106, // 89: rill.runtime.v1.TimeRange.start:type_name -> google.protobuf.Timestamp - 106, // 90: rill.runtime.v1.TimeRange.end:type_name -> google.protobuf.Timestamp - 108, // 91: rill.runtime.v1.TimeRange.round_to_grain:type_name -> rill.runtime.v1.TimeGrain + 108, // 89: rill.runtime.v1.TimeRange.start:type_name -> google.protobuf.Timestamp + 108, // 90: rill.runtime.v1.TimeRange.end:type_name -> google.protobuf.Timestamp + 110, // 91: rill.runtime.v1.TimeRange.round_to_grain:type_name -> rill.runtime.v1.TimeGrain 1, // 92: rill.runtime.v1.MetricsViewComparisonSort.type:type_name -> rill.runtime.v1.MetricsViewComparisonSortType 2, // 93: rill.runtime.v1.MetricsViewComparisonSort.sort_type:type_name -> rill.runtime.v1.MetricsViewComparisonMeasureType - 102, // 94: rill.runtime.v1.MetricsViewComparisonRow.dimension_value:type_name -> google.protobuf.Value + 104, // 94: rill.runtime.v1.MetricsViewComparisonRow.dimension_value:type_name -> google.protobuf.Value 33, // 95: rill.runtime.v1.MetricsViewComparisonRow.measure_values:type_name -> rill.runtime.v1.MetricsViewComparisonValue - 102, // 96: rill.runtime.v1.MetricsViewComparisonValue.base_value:type_name -> google.protobuf.Value - 102, // 97: rill.runtime.v1.MetricsViewComparisonValue.comparison_value:type_name -> google.protobuf.Value - 102, // 98: rill.runtime.v1.MetricsViewComparisonValue.delta_abs:type_name -> google.protobuf.Value - 102, // 99: rill.runtime.v1.MetricsViewComparisonValue.delta_rel:type_name -> google.protobuf.Value + 104, // 96: rill.runtime.v1.MetricsViewComparisonValue.base_value:type_name -> google.protobuf.Value + 104, // 97: rill.runtime.v1.MetricsViewComparisonValue.comparison_value:type_name -> google.protobuf.Value + 104, // 98: rill.runtime.v1.MetricsViewComparisonValue.delta_abs:type_name -> google.protobuf.Value + 104, // 99: rill.runtime.v1.MetricsViewComparisonValue.delta_rel:type_name -> google.protobuf.Value 2, // 100: rill.runtime.v1.MetricsViewComparisonMeasureAlias.type:type_name -> rill.runtime.v1.MetricsViewComparisonMeasureType - 106, // 101: rill.runtime.v1.MetricsViewTimeSeriesRequest.time_start:type_name -> google.protobuf.Timestamp - 106, // 102: rill.runtime.v1.MetricsViewTimeSeriesRequest.time_end:type_name -> google.protobuf.Timestamp - 108, // 103: rill.runtime.v1.MetricsViewTimeSeriesRequest.time_granularity:type_name -> rill.runtime.v1.TimeGrain - 107, // 104: rill.runtime.v1.MetricsViewTimeSeriesRequest.where:type_name -> rill.runtime.v1.Expression - 107, // 105: rill.runtime.v1.MetricsViewTimeSeriesRequest.having:type_name -> rill.runtime.v1.Expression + 108, // 101: rill.runtime.v1.MetricsViewTimeSeriesRequest.time_start:type_name -> google.protobuf.Timestamp + 108, // 102: rill.runtime.v1.MetricsViewTimeSeriesRequest.time_end:type_name -> google.protobuf.Timestamp + 110, // 103: rill.runtime.v1.MetricsViewTimeSeriesRequest.time_granularity:type_name -> rill.runtime.v1.TimeGrain + 109, // 104: rill.runtime.v1.MetricsViewTimeSeriesRequest.where:type_name -> rill.runtime.v1.Expression + 109, // 105: rill.runtime.v1.MetricsViewTimeSeriesRequest.having:type_name -> rill.runtime.v1.Expression 42, // 106: rill.runtime.v1.MetricsViewTimeSeriesRequest.filter:type_name -> rill.runtime.v1.MetricsViewFilter 43, // 107: rill.runtime.v1.MetricsViewTimeSeriesResponse.meta:type_name -> rill.runtime.v1.MetricsViewColumn - 84, // 108: rill.runtime.v1.MetricsViewTimeSeriesResponse.data:type_name -> rill.runtime.v1.TimeSeriesValue - 106, // 109: rill.runtime.v1.MetricsViewTotalsRequest.time_start:type_name -> google.protobuf.Timestamp - 106, // 110: rill.runtime.v1.MetricsViewTotalsRequest.time_end:type_name -> google.protobuf.Timestamp - 107, // 111: rill.runtime.v1.MetricsViewTotalsRequest.where:type_name -> rill.runtime.v1.Expression + 86, // 108: rill.runtime.v1.MetricsViewTimeSeriesResponse.data:type_name -> rill.runtime.v1.TimeSeriesValue + 108, // 109: rill.runtime.v1.MetricsViewTotalsRequest.time_start:type_name -> google.protobuf.Timestamp + 108, // 110: rill.runtime.v1.MetricsViewTotalsRequest.time_end:type_name -> google.protobuf.Timestamp + 109, // 111: rill.runtime.v1.MetricsViewTotalsRequest.where:type_name -> rill.runtime.v1.Expression 42, // 112: rill.runtime.v1.MetricsViewTotalsRequest.filter:type_name -> rill.runtime.v1.MetricsViewFilter 43, // 113: rill.runtime.v1.MetricsViewTotalsResponse.meta:type_name -> rill.runtime.v1.MetricsViewColumn - 104, // 114: rill.runtime.v1.MetricsViewTotalsResponse.data:type_name -> google.protobuf.Struct - 106, // 115: rill.runtime.v1.MetricsViewRowsRequest.time_start:type_name -> google.protobuf.Timestamp - 106, // 116: rill.runtime.v1.MetricsViewRowsRequest.time_end:type_name -> google.protobuf.Timestamp - 108, // 117: rill.runtime.v1.MetricsViewRowsRequest.time_granularity:type_name -> rill.runtime.v1.TimeGrain - 107, // 118: rill.runtime.v1.MetricsViewRowsRequest.where:type_name -> rill.runtime.v1.Expression + 106, // 114: rill.runtime.v1.MetricsViewTotalsResponse.data:type_name -> google.protobuf.Struct + 108, // 115: rill.runtime.v1.MetricsViewRowsRequest.time_start:type_name -> google.protobuf.Timestamp + 108, // 116: rill.runtime.v1.MetricsViewRowsRequest.time_end:type_name -> google.protobuf.Timestamp + 110, // 117: rill.runtime.v1.MetricsViewRowsRequest.time_granularity:type_name -> rill.runtime.v1.TimeGrain + 109, // 118: rill.runtime.v1.MetricsViewRowsRequest.where:type_name -> rill.runtime.v1.Expression 41, // 119: rill.runtime.v1.MetricsViewRowsRequest.sort:type_name -> rill.runtime.v1.MetricsViewSort 42, // 120: rill.runtime.v1.MetricsViewRowsRequest.filter:type_name -> rill.runtime.v1.MetricsViewFilter 43, // 121: rill.runtime.v1.MetricsViewRowsResponse.meta:type_name -> rill.runtime.v1.MetricsViewColumn - 104, // 122: rill.runtime.v1.MetricsViewRowsResponse.data:type_name -> google.protobuf.Struct - 92, // 123: rill.runtime.v1.MetricsViewFilter.include:type_name -> rill.runtime.v1.MetricsViewFilter.Cond - 92, // 124: rill.runtime.v1.MetricsViewFilter.exclude:type_name -> rill.runtime.v1.MetricsViewFilter.Cond - 77, // 125: rill.runtime.v1.MetricsViewTimeRangeResponse.time_range_summary:type_name -> rill.runtime.v1.TimeRangeSummary - 103, // 126: rill.runtime.v1.MetricsViewSchemaResponse.schema:type_name -> rill.runtime.v1.StructType + 106, // 122: rill.runtime.v1.MetricsViewRowsResponse.data:type_name -> google.protobuf.Struct + 94, // 123: rill.runtime.v1.MetricsViewFilter.include:type_name -> rill.runtime.v1.MetricsViewFilter.Cond + 94, // 124: rill.runtime.v1.MetricsViewFilter.exclude:type_name -> rill.runtime.v1.MetricsViewFilter.Cond + 79, // 125: rill.runtime.v1.MetricsViewTimeRangeResponse.time_range_summary:type_name -> rill.runtime.v1.TimeRangeSummary + 105, // 126: rill.runtime.v1.MetricsViewSchemaResponse.schema:type_name -> rill.runtime.v1.StructType 30, // 127: rill.runtime.v1.MetricsViewSearchRequest.time_range:type_name -> rill.runtime.v1.TimeRange - 107, // 128: rill.runtime.v1.MetricsViewSearchRequest.where:type_name -> rill.runtime.v1.Expression - 107, // 129: rill.runtime.v1.MetricsViewSearchRequest.having:type_name -> rill.runtime.v1.Expression - 93, // 130: rill.runtime.v1.MetricsViewSearchResponse.results:type_name -> rill.runtime.v1.MetricsViewSearchResponse.SearchResult - 104, // 131: rill.runtime.v1.ResolveCanvasRequest.args:type_name -> google.protobuf.Struct - 109, // 132: rill.runtime.v1.ResolveCanvasResponse.canvas:type_name -> rill.runtime.v1.Resource - 94, // 133: rill.runtime.v1.ResolveCanvasResponse.resolved_components:type_name -> rill.runtime.v1.ResolveCanvasResponse.ResolvedComponentsEntry - 95, // 134: rill.runtime.v1.ResolveCanvasResponse.referenced_metrics_views:type_name -> rill.runtime.v1.ResolveCanvasResponse.ReferencedMetricsViewsEntry - 104, // 135: rill.runtime.v1.ResolveComponentRequest.args:type_name -> google.protobuf.Struct - 104, // 136: rill.runtime.v1.ResolveComponentResponse.renderer_properties:type_name -> google.protobuf.Struct - 106, // 137: rill.runtime.v1.ColumnRollupIntervalResponse.start:type_name -> google.protobuf.Timestamp - 106, // 138: rill.runtime.v1.ColumnRollupIntervalResponse.end:type_name -> google.protobuf.Timestamp - 108, // 139: rill.runtime.v1.ColumnRollupIntervalResponse.interval:type_name -> rill.runtime.v1.TimeGrain - 59, // 140: rill.runtime.v1.ColumnTopKResponse.categorical_summary:type_name -> rill.runtime.v1.CategoricalSummary - 60, // 141: rill.runtime.v1.CategoricalSummary.top_k:type_name -> rill.runtime.v1.TopK - 96, // 142: rill.runtime.v1.TopK.entries:type_name -> rill.runtime.v1.TopK.Entry - 65, // 143: rill.runtime.v1.ColumnDescriptiveStatisticsResponse.numeric_summary:type_name -> rill.runtime.v1.NumericSummary - 66, // 144: rill.runtime.v1.NumericSummary.numeric_histogram_bins:type_name -> rill.runtime.v1.NumericHistogramBins - 67, // 145: rill.runtime.v1.NumericSummary.numeric_statistics:type_name -> rill.runtime.v1.NumericStatistics - 68, // 146: rill.runtime.v1.NumericSummary.numeric_outliers:type_name -> rill.runtime.v1.NumericOutliers - 97, // 147: rill.runtime.v1.NumericHistogramBins.bins:type_name -> rill.runtime.v1.NumericHistogramBins.Bin - 98, // 148: rill.runtime.v1.NumericOutliers.outliers:type_name -> rill.runtime.v1.NumericOutliers.Outlier - 108, // 149: rill.runtime.v1.ColumnTimeGrainResponse.time_grain:type_name -> rill.runtime.v1.TimeGrain - 3, // 150: rill.runtime.v1.ColumnNumericHistogramRequest.histogram_method:type_name -> rill.runtime.v1.HistogramMethod - 65, // 151: rill.runtime.v1.ColumnNumericHistogramResponse.numeric_summary:type_name -> rill.runtime.v1.NumericSummary - 65, // 152: rill.runtime.v1.ColumnRugHistogramResponse.numeric_summary:type_name -> rill.runtime.v1.NumericSummary - 77, // 153: rill.runtime.v1.ColumnTimeRangeResponse.time_range_summary:type_name -> rill.runtime.v1.TimeRangeSummary - 106, // 154: rill.runtime.v1.TimeRangeSummary.min:type_name -> google.protobuf.Timestamp - 106, // 155: rill.runtime.v1.TimeRangeSummary.max:type_name -> google.protobuf.Timestamp - 99, // 156: rill.runtime.v1.TimeRangeSummary.interval:type_name -> rill.runtime.v1.TimeRangeSummary.Interval - 59, // 157: rill.runtime.v1.ColumnCardinalityResponse.categorical_summary:type_name -> rill.runtime.v1.CategoricalSummary - 100, // 158: rill.runtime.v1.ColumnTimeSeriesRequest.measures:type_name -> rill.runtime.v1.ColumnTimeSeriesRequest.BasicMeasure - 82, // 159: rill.runtime.v1.ColumnTimeSeriesRequest.time_range:type_name -> rill.runtime.v1.TimeSeriesTimeRange - 83, // 160: rill.runtime.v1.ColumnTimeSeriesResponse.rollup:type_name -> rill.runtime.v1.TimeSeriesResponse - 106, // 161: rill.runtime.v1.TimeSeriesTimeRange.start:type_name -> google.protobuf.Timestamp - 106, // 162: rill.runtime.v1.TimeSeriesTimeRange.end:type_name -> google.protobuf.Timestamp - 108, // 163: rill.runtime.v1.TimeSeriesTimeRange.interval:type_name -> rill.runtime.v1.TimeGrain - 84, // 164: rill.runtime.v1.TimeSeriesResponse.results:type_name -> rill.runtime.v1.TimeSeriesValue - 84, // 165: rill.runtime.v1.TimeSeriesResponse.spark:type_name -> rill.runtime.v1.TimeSeriesValue - 106, // 166: rill.runtime.v1.TimeSeriesValue.ts:type_name -> google.protobuf.Timestamp - 104, // 167: rill.runtime.v1.TimeSeriesValue.records:type_name -> google.protobuf.Struct - 89, // 168: rill.runtime.v1.TableColumnsResponse.profile_columns:type_name -> rill.runtime.v1.ProfileColumn - 101, // 169: rill.runtime.v1.TableColumnsResponse.unsupported_columns:type_name -> rill.runtime.v1.TableColumnsResponse.UnsupportedColumnsEntry - 104, // 170: rill.runtime.v1.TableRowsResponse.data:type_name -> google.protobuf.Struct - 102, // 171: rill.runtime.v1.MetricsViewFilter.Cond.in:type_name -> google.protobuf.Value - 102, // 172: rill.runtime.v1.MetricsViewSearchResponse.SearchResult.value:type_name -> google.protobuf.Value - 109, // 173: rill.runtime.v1.ResolveCanvasResponse.ResolvedComponentsEntry.value:type_name -> rill.runtime.v1.Resource - 109, // 174: rill.runtime.v1.ResolveCanvasResponse.ReferencedMetricsViewsEntry.value:type_name -> rill.runtime.v1.Resource - 102, // 175: rill.runtime.v1.TopK.Entry.value:type_name -> google.protobuf.Value - 4, // 176: rill.runtime.v1.QueryService.Query:input_type -> rill.runtime.v1.QueryRequest - 6, // 177: rill.runtime.v1.QueryService.QueryBatch:input_type -> rill.runtime.v1.QueryBatchRequest - 8, // 178: rill.runtime.v1.QueryService.Export:input_type -> rill.runtime.v1.ExportRequest - 10, // 179: rill.runtime.v1.QueryService.ExportReport:input_type -> rill.runtime.v1.ExportReportRequest - 14, // 180: rill.runtime.v1.QueryService.MetricsViewAggregation:input_type -> rill.runtime.v1.MetricsViewAggregationRequest - 26, // 181: rill.runtime.v1.QueryService.MetricsViewToplist:input_type -> rill.runtime.v1.MetricsViewToplistRequest - 28, // 182: rill.runtime.v1.QueryService.MetricsViewComparison:input_type -> rill.runtime.v1.MetricsViewComparisonRequest - 35, // 183: rill.runtime.v1.QueryService.MetricsViewTimeSeries:input_type -> rill.runtime.v1.MetricsViewTimeSeriesRequest - 37, // 184: rill.runtime.v1.QueryService.MetricsViewTotals:input_type -> rill.runtime.v1.MetricsViewTotalsRequest - 39, // 185: rill.runtime.v1.QueryService.MetricsViewRows:input_type -> rill.runtime.v1.MetricsViewRowsRequest - 45, // 186: rill.runtime.v1.QueryService.MetricsViewTimeRange:input_type -> rill.runtime.v1.MetricsViewTimeRangeRequest - 47, // 187: rill.runtime.v1.QueryService.MetricsViewSchema:input_type -> rill.runtime.v1.MetricsViewSchemaRequest - 49, // 188: rill.runtime.v1.QueryService.MetricsViewSearch:input_type -> rill.runtime.v1.MetricsViewSearchRequest - 51, // 189: rill.runtime.v1.QueryService.ResolveCanvas:input_type -> rill.runtime.v1.ResolveCanvasRequest - 53, // 190: rill.runtime.v1.QueryService.ResolveComponent:input_type -> rill.runtime.v1.ResolveComponentRequest - 55, // 191: rill.runtime.v1.QueryService.ColumnRollupInterval:input_type -> rill.runtime.v1.ColumnRollupIntervalRequest - 57, // 192: rill.runtime.v1.QueryService.ColumnTopK:input_type -> rill.runtime.v1.ColumnTopKRequest - 61, // 193: rill.runtime.v1.QueryService.ColumnNullCount:input_type -> rill.runtime.v1.ColumnNullCountRequest - 63, // 194: rill.runtime.v1.QueryService.ColumnDescriptiveStatistics:input_type -> rill.runtime.v1.ColumnDescriptiveStatisticsRequest - 69, // 195: rill.runtime.v1.QueryService.ColumnTimeGrain:input_type -> rill.runtime.v1.ColumnTimeGrainRequest - 71, // 196: rill.runtime.v1.QueryService.ColumnNumericHistogram:input_type -> rill.runtime.v1.ColumnNumericHistogramRequest - 73, // 197: rill.runtime.v1.QueryService.ColumnRugHistogram:input_type -> rill.runtime.v1.ColumnRugHistogramRequest - 75, // 198: rill.runtime.v1.QueryService.ColumnTimeRange:input_type -> rill.runtime.v1.ColumnTimeRangeRequest - 78, // 199: rill.runtime.v1.QueryService.ColumnCardinality:input_type -> rill.runtime.v1.ColumnCardinalityRequest - 80, // 200: rill.runtime.v1.QueryService.ColumnTimeSeries:input_type -> rill.runtime.v1.ColumnTimeSeriesRequest - 85, // 201: rill.runtime.v1.QueryService.TableCardinality:input_type -> rill.runtime.v1.TableCardinalityRequest - 87, // 202: rill.runtime.v1.QueryService.TableColumns:input_type -> rill.runtime.v1.TableColumnsRequest - 90, // 203: rill.runtime.v1.QueryService.TableRows:input_type -> rill.runtime.v1.TableRowsRequest - 5, // 204: rill.runtime.v1.QueryService.Query:output_type -> rill.runtime.v1.QueryResponse - 7, // 205: rill.runtime.v1.QueryService.QueryBatch:output_type -> rill.runtime.v1.QueryBatchResponse - 9, // 206: rill.runtime.v1.QueryService.Export:output_type -> rill.runtime.v1.ExportResponse - 11, // 207: rill.runtime.v1.QueryService.ExportReport:output_type -> rill.runtime.v1.ExportReportResponse - 15, // 208: rill.runtime.v1.QueryService.MetricsViewAggregation:output_type -> rill.runtime.v1.MetricsViewAggregationResponse - 27, // 209: rill.runtime.v1.QueryService.MetricsViewToplist:output_type -> rill.runtime.v1.MetricsViewToplistResponse - 29, // 210: rill.runtime.v1.QueryService.MetricsViewComparison:output_type -> rill.runtime.v1.MetricsViewComparisonResponse - 36, // 211: rill.runtime.v1.QueryService.MetricsViewTimeSeries:output_type -> rill.runtime.v1.MetricsViewTimeSeriesResponse - 38, // 212: rill.runtime.v1.QueryService.MetricsViewTotals:output_type -> rill.runtime.v1.MetricsViewTotalsResponse - 40, // 213: rill.runtime.v1.QueryService.MetricsViewRows:output_type -> rill.runtime.v1.MetricsViewRowsResponse - 46, // 214: rill.runtime.v1.QueryService.MetricsViewTimeRange:output_type -> rill.runtime.v1.MetricsViewTimeRangeResponse - 48, // 215: rill.runtime.v1.QueryService.MetricsViewSchema:output_type -> rill.runtime.v1.MetricsViewSchemaResponse - 50, // 216: rill.runtime.v1.QueryService.MetricsViewSearch:output_type -> rill.runtime.v1.MetricsViewSearchResponse - 52, // 217: rill.runtime.v1.QueryService.ResolveCanvas:output_type -> rill.runtime.v1.ResolveCanvasResponse - 54, // 218: rill.runtime.v1.QueryService.ResolveComponent:output_type -> rill.runtime.v1.ResolveComponentResponse - 56, // 219: rill.runtime.v1.QueryService.ColumnRollupInterval:output_type -> rill.runtime.v1.ColumnRollupIntervalResponse - 58, // 220: rill.runtime.v1.QueryService.ColumnTopK:output_type -> rill.runtime.v1.ColumnTopKResponse - 62, // 221: rill.runtime.v1.QueryService.ColumnNullCount:output_type -> rill.runtime.v1.ColumnNullCountResponse - 64, // 222: rill.runtime.v1.QueryService.ColumnDescriptiveStatistics:output_type -> rill.runtime.v1.ColumnDescriptiveStatisticsResponse - 70, // 223: rill.runtime.v1.QueryService.ColumnTimeGrain:output_type -> rill.runtime.v1.ColumnTimeGrainResponse - 72, // 224: rill.runtime.v1.QueryService.ColumnNumericHistogram:output_type -> rill.runtime.v1.ColumnNumericHistogramResponse - 74, // 225: rill.runtime.v1.QueryService.ColumnRugHistogram:output_type -> rill.runtime.v1.ColumnRugHistogramResponse - 76, // 226: rill.runtime.v1.QueryService.ColumnTimeRange:output_type -> rill.runtime.v1.ColumnTimeRangeResponse - 79, // 227: rill.runtime.v1.QueryService.ColumnCardinality:output_type -> rill.runtime.v1.ColumnCardinalityResponse - 81, // 228: rill.runtime.v1.QueryService.ColumnTimeSeries:output_type -> rill.runtime.v1.ColumnTimeSeriesResponse - 86, // 229: rill.runtime.v1.QueryService.TableCardinality:output_type -> rill.runtime.v1.TableCardinalityResponse - 88, // 230: rill.runtime.v1.QueryService.TableColumns:output_type -> rill.runtime.v1.TableColumnsResponse - 91, // 231: rill.runtime.v1.QueryService.TableRows:output_type -> rill.runtime.v1.TableRowsResponse - 204, // [204:232] is the sub-list for method output_type - 176, // [176:204] is the sub-list for method input_type - 176, // [176:176] is the sub-list for extension type_name - 176, // [176:176] is the sub-list for extension extendee - 0, // [0:176] is the sub-list for field type_name + 109, // 128: rill.runtime.v1.MetricsViewSearchRequest.where:type_name -> rill.runtime.v1.Expression + 109, // 129: rill.runtime.v1.MetricsViewSearchRequest.having:type_name -> rill.runtime.v1.Expression + 95, // 130: rill.runtime.v1.MetricsViewSearchResponse.results:type_name -> rill.runtime.v1.MetricsViewSearchResponse.SearchResult + 30, // 131: rill.runtime.v1.MetricsViewTimeRangesResponse.time_ranges:type_name -> rill.runtime.v1.TimeRange + 106, // 132: rill.runtime.v1.ResolveCanvasRequest.args:type_name -> google.protobuf.Struct + 111, // 133: rill.runtime.v1.ResolveCanvasResponse.canvas:type_name -> rill.runtime.v1.Resource + 96, // 134: rill.runtime.v1.ResolveCanvasResponse.resolved_components:type_name -> rill.runtime.v1.ResolveCanvasResponse.ResolvedComponentsEntry + 97, // 135: rill.runtime.v1.ResolveCanvasResponse.referenced_metrics_views:type_name -> rill.runtime.v1.ResolveCanvasResponse.ReferencedMetricsViewsEntry + 106, // 136: rill.runtime.v1.ResolveComponentRequest.args:type_name -> google.protobuf.Struct + 106, // 137: rill.runtime.v1.ResolveComponentResponse.renderer_properties:type_name -> google.protobuf.Struct + 108, // 138: rill.runtime.v1.ColumnRollupIntervalResponse.start:type_name -> google.protobuf.Timestamp + 108, // 139: rill.runtime.v1.ColumnRollupIntervalResponse.end:type_name -> google.protobuf.Timestamp + 110, // 140: rill.runtime.v1.ColumnRollupIntervalResponse.interval:type_name -> rill.runtime.v1.TimeGrain + 61, // 141: rill.runtime.v1.ColumnTopKResponse.categorical_summary:type_name -> rill.runtime.v1.CategoricalSummary + 62, // 142: rill.runtime.v1.CategoricalSummary.top_k:type_name -> rill.runtime.v1.TopK + 98, // 143: rill.runtime.v1.TopK.entries:type_name -> rill.runtime.v1.TopK.Entry + 67, // 144: rill.runtime.v1.ColumnDescriptiveStatisticsResponse.numeric_summary:type_name -> rill.runtime.v1.NumericSummary + 68, // 145: rill.runtime.v1.NumericSummary.numeric_histogram_bins:type_name -> rill.runtime.v1.NumericHistogramBins + 69, // 146: rill.runtime.v1.NumericSummary.numeric_statistics:type_name -> rill.runtime.v1.NumericStatistics + 70, // 147: rill.runtime.v1.NumericSummary.numeric_outliers:type_name -> rill.runtime.v1.NumericOutliers + 99, // 148: rill.runtime.v1.NumericHistogramBins.bins:type_name -> rill.runtime.v1.NumericHistogramBins.Bin + 100, // 149: rill.runtime.v1.NumericOutliers.outliers:type_name -> rill.runtime.v1.NumericOutliers.Outlier + 110, // 150: rill.runtime.v1.ColumnTimeGrainResponse.time_grain:type_name -> rill.runtime.v1.TimeGrain + 3, // 151: rill.runtime.v1.ColumnNumericHistogramRequest.histogram_method:type_name -> rill.runtime.v1.HistogramMethod + 67, // 152: rill.runtime.v1.ColumnNumericHistogramResponse.numeric_summary:type_name -> rill.runtime.v1.NumericSummary + 67, // 153: rill.runtime.v1.ColumnRugHistogramResponse.numeric_summary:type_name -> rill.runtime.v1.NumericSummary + 79, // 154: rill.runtime.v1.ColumnTimeRangeResponse.time_range_summary:type_name -> rill.runtime.v1.TimeRangeSummary + 108, // 155: rill.runtime.v1.TimeRangeSummary.min:type_name -> google.protobuf.Timestamp + 108, // 156: rill.runtime.v1.TimeRangeSummary.max:type_name -> google.protobuf.Timestamp + 101, // 157: rill.runtime.v1.TimeRangeSummary.interval:type_name -> rill.runtime.v1.TimeRangeSummary.Interval + 61, // 158: rill.runtime.v1.ColumnCardinalityResponse.categorical_summary:type_name -> rill.runtime.v1.CategoricalSummary + 102, // 159: rill.runtime.v1.ColumnTimeSeriesRequest.measures:type_name -> rill.runtime.v1.ColumnTimeSeriesRequest.BasicMeasure + 84, // 160: rill.runtime.v1.ColumnTimeSeriesRequest.time_range:type_name -> rill.runtime.v1.TimeSeriesTimeRange + 85, // 161: rill.runtime.v1.ColumnTimeSeriesResponse.rollup:type_name -> rill.runtime.v1.TimeSeriesResponse + 108, // 162: rill.runtime.v1.TimeSeriesTimeRange.start:type_name -> google.protobuf.Timestamp + 108, // 163: rill.runtime.v1.TimeSeriesTimeRange.end:type_name -> google.protobuf.Timestamp + 110, // 164: rill.runtime.v1.TimeSeriesTimeRange.interval:type_name -> rill.runtime.v1.TimeGrain + 86, // 165: rill.runtime.v1.TimeSeriesResponse.results:type_name -> rill.runtime.v1.TimeSeriesValue + 86, // 166: rill.runtime.v1.TimeSeriesResponse.spark:type_name -> rill.runtime.v1.TimeSeriesValue + 108, // 167: rill.runtime.v1.TimeSeriesValue.ts:type_name -> google.protobuf.Timestamp + 106, // 168: rill.runtime.v1.TimeSeriesValue.records:type_name -> google.protobuf.Struct + 91, // 169: rill.runtime.v1.TableColumnsResponse.profile_columns:type_name -> rill.runtime.v1.ProfileColumn + 103, // 170: rill.runtime.v1.TableColumnsResponse.unsupported_columns:type_name -> rill.runtime.v1.TableColumnsResponse.UnsupportedColumnsEntry + 106, // 171: rill.runtime.v1.TableRowsResponse.data:type_name -> google.protobuf.Struct + 104, // 172: rill.runtime.v1.MetricsViewFilter.Cond.in:type_name -> google.protobuf.Value + 104, // 173: rill.runtime.v1.MetricsViewSearchResponse.SearchResult.value:type_name -> google.protobuf.Value + 111, // 174: rill.runtime.v1.ResolveCanvasResponse.ResolvedComponentsEntry.value:type_name -> rill.runtime.v1.Resource + 111, // 175: rill.runtime.v1.ResolveCanvasResponse.ReferencedMetricsViewsEntry.value:type_name -> rill.runtime.v1.Resource + 104, // 176: rill.runtime.v1.TopK.Entry.value:type_name -> google.protobuf.Value + 4, // 177: rill.runtime.v1.QueryService.Query:input_type -> rill.runtime.v1.QueryRequest + 6, // 178: rill.runtime.v1.QueryService.QueryBatch:input_type -> rill.runtime.v1.QueryBatchRequest + 8, // 179: rill.runtime.v1.QueryService.Export:input_type -> rill.runtime.v1.ExportRequest + 10, // 180: rill.runtime.v1.QueryService.ExportReport:input_type -> rill.runtime.v1.ExportReportRequest + 14, // 181: rill.runtime.v1.QueryService.MetricsViewAggregation:input_type -> rill.runtime.v1.MetricsViewAggregationRequest + 26, // 182: rill.runtime.v1.QueryService.MetricsViewToplist:input_type -> rill.runtime.v1.MetricsViewToplistRequest + 28, // 183: rill.runtime.v1.QueryService.MetricsViewComparison:input_type -> rill.runtime.v1.MetricsViewComparisonRequest + 35, // 184: rill.runtime.v1.QueryService.MetricsViewTimeSeries:input_type -> rill.runtime.v1.MetricsViewTimeSeriesRequest + 37, // 185: rill.runtime.v1.QueryService.MetricsViewTotals:input_type -> rill.runtime.v1.MetricsViewTotalsRequest + 39, // 186: rill.runtime.v1.QueryService.MetricsViewRows:input_type -> rill.runtime.v1.MetricsViewRowsRequest + 45, // 187: rill.runtime.v1.QueryService.MetricsViewTimeRange:input_type -> rill.runtime.v1.MetricsViewTimeRangeRequest + 47, // 188: rill.runtime.v1.QueryService.MetricsViewSchema:input_type -> rill.runtime.v1.MetricsViewSchemaRequest + 49, // 189: rill.runtime.v1.QueryService.MetricsViewSearch:input_type -> rill.runtime.v1.MetricsViewSearchRequest + 51, // 190: rill.runtime.v1.QueryService.MetricsViewTimeRanges:input_type -> rill.runtime.v1.MetricsViewTimeRangesRequest + 53, // 191: rill.runtime.v1.QueryService.ResolveCanvas:input_type -> rill.runtime.v1.ResolveCanvasRequest + 55, // 192: rill.runtime.v1.QueryService.ResolveComponent:input_type -> rill.runtime.v1.ResolveComponentRequest + 57, // 193: rill.runtime.v1.QueryService.ColumnRollupInterval:input_type -> rill.runtime.v1.ColumnRollupIntervalRequest + 59, // 194: rill.runtime.v1.QueryService.ColumnTopK:input_type -> rill.runtime.v1.ColumnTopKRequest + 63, // 195: rill.runtime.v1.QueryService.ColumnNullCount:input_type -> rill.runtime.v1.ColumnNullCountRequest + 65, // 196: rill.runtime.v1.QueryService.ColumnDescriptiveStatistics:input_type -> rill.runtime.v1.ColumnDescriptiveStatisticsRequest + 71, // 197: rill.runtime.v1.QueryService.ColumnTimeGrain:input_type -> rill.runtime.v1.ColumnTimeGrainRequest + 73, // 198: rill.runtime.v1.QueryService.ColumnNumericHistogram:input_type -> rill.runtime.v1.ColumnNumericHistogramRequest + 75, // 199: rill.runtime.v1.QueryService.ColumnRugHistogram:input_type -> rill.runtime.v1.ColumnRugHistogramRequest + 77, // 200: rill.runtime.v1.QueryService.ColumnTimeRange:input_type -> rill.runtime.v1.ColumnTimeRangeRequest + 80, // 201: rill.runtime.v1.QueryService.ColumnCardinality:input_type -> rill.runtime.v1.ColumnCardinalityRequest + 82, // 202: rill.runtime.v1.QueryService.ColumnTimeSeries:input_type -> rill.runtime.v1.ColumnTimeSeriesRequest + 87, // 203: rill.runtime.v1.QueryService.TableCardinality:input_type -> rill.runtime.v1.TableCardinalityRequest + 89, // 204: rill.runtime.v1.QueryService.TableColumns:input_type -> rill.runtime.v1.TableColumnsRequest + 92, // 205: rill.runtime.v1.QueryService.TableRows:input_type -> rill.runtime.v1.TableRowsRequest + 5, // 206: rill.runtime.v1.QueryService.Query:output_type -> rill.runtime.v1.QueryResponse + 7, // 207: rill.runtime.v1.QueryService.QueryBatch:output_type -> rill.runtime.v1.QueryBatchResponse + 9, // 208: rill.runtime.v1.QueryService.Export:output_type -> rill.runtime.v1.ExportResponse + 11, // 209: rill.runtime.v1.QueryService.ExportReport:output_type -> rill.runtime.v1.ExportReportResponse + 15, // 210: rill.runtime.v1.QueryService.MetricsViewAggregation:output_type -> rill.runtime.v1.MetricsViewAggregationResponse + 27, // 211: rill.runtime.v1.QueryService.MetricsViewToplist:output_type -> rill.runtime.v1.MetricsViewToplistResponse + 29, // 212: rill.runtime.v1.QueryService.MetricsViewComparison:output_type -> rill.runtime.v1.MetricsViewComparisonResponse + 36, // 213: rill.runtime.v1.QueryService.MetricsViewTimeSeries:output_type -> rill.runtime.v1.MetricsViewTimeSeriesResponse + 38, // 214: rill.runtime.v1.QueryService.MetricsViewTotals:output_type -> rill.runtime.v1.MetricsViewTotalsResponse + 40, // 215: rill.runtime.v1.QueryService.MetricsViewRows:output_type -> rill.runtime.v1.MetricsViewRowsResponse + 46, // 216: rill.runtime.v1.QueryService.MetricsViewTimeRange:output_type -> rill.runtime.v1.MetricsViewTimeRangeResponse + 48, // 217: rill.runtime.v1.QueryService.MetricsViewSchema:output_type -> rill.runtime.v1.MetricsViewSchemaResponse + 50, // 218: rill.runtime.v1.QueryService.MetricsViewSearch:output_type -> rill.runtime.v1.MetricsViewSearchResponse + 52, // 219: rill.runtime.v1.QueryService.MetricsViewTimeRanges:output_type -> rill.runtime.v1.MetricsViewTimeRangesResponse + 54, // 220: rill.runtime.v1.QueryService.ResolveCanvas:output_type -> rill.runtime.v1.ResolveCanvasResponse + 56, // 221: rill.runtime.v1.QueryService.ResolveComponent:output_type -> rill.runtime.v1.ResolveComponentResponse + 58, // 222: rill.runtime.v1.QueryService.ColumnRollupInterval:output_type -> rill.runtime.v1.ColumnRollupIntervalResponse + 60, // 223: rill.runtime.v1.QueryService.ColumnTopK:output_type -> rill.runtime.v1.ColumnTopKResponse + 64, // 224: rill.runtime.v1.QueryService.ColumnNullCount:output_type -> rill.runtime.v1.ColumnNullCountResponse + 66, // 225: rill.runtime.v1.QueryService.ColumnDescriptiveStatistics:output_type -> rill.runtime.v1.ColumnDescriptiveStatisticsResponse + 72, // 226: rill.runtime.v1.QueryService.ColumnTimeGrain:output_type -> rill.runtime.v1.ColumnTimeGrainResponse + 74, // 227: rill.runtime.v1.QueryService.ColumnNumericHistogram:output_type -> rill.runtime.v1.ColumnNumericHistogramResponse + 76, // 228: rill.runtime.v1.QueryService.ColumnRugHistogram:output_type -> rill.runtime.v1.ColumnRugHistogramResponse + 78, // 229: rill.runtime.v1.QueryService.ColumnTimeRange:output_type -> rill.runtime.v1.ColumnTimeRangeResponse + 81, // 230: rill.runtime.v1.QueryService.ColumnCardinality:output_type -> rill.runtime.v1.ColumnCardinalityResponse + 83, // 231: rill.runtime.v1.QueryService.ColumnTimeSeries:output_type -> rill.runtime.v1.ColumnTimeSeriesResponse + 88, // 232: rill.runtime.v1.QueryService.TableCardinality:output_type -> rill.runtime.v1.TableCardinalityResponse + 90, // 233: rill.runtime.v1.QueryService.TableColumns:output_type -> rill.runtime.v1.TableColumnsResponse + 93, // 234: rill.runtime.v1.QueryService.TableRows:output_type -> rill.runtime.v1.TableRowsResponse + 206, // [206:235] is the sub-list for method output_type + 177, // [177:206] is the sub-list for method input_type + 177, // [177:177] is the sub-list for extension type_name + 177, // [177:177] is the sub-list for extension extendee + 0, // [0:177] is the sub-list for field type_name } func init() { file_rill_runtime_v1_queries_proto_init() } @@ -10548,7 +10713,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[47].Exporter = func(v any, i int) any { - switch v := v.(*ResolveCanvasRequest); i { + switch v := v.(*MetricsViewTimeRangesRequest); i { case 0: return &v.state case 1: @@ -10560,7 +10725,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[48].Exporter = func(v any, i int) any { - switch v := v.(*ResolveCanvasResponse); i { + switch v := v.(*MetricsViewTimeRangesResponse); i { case 0: return &v.state case 1: @@ -10572,7 +10737,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[49].Exporter = func(v any, i int) any { - switch v := v.(*ResolveComponentRequest); i { + switch v := v.(*ResolveCanvasRequest); i { case 0: return &v.state case 1: @@ -10584,7 +10749,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[50].Exporter = func(v any, i int) any { - switch v := v.(*ResolveComponentResponse); i { + switch v := v.(*ResolveCanvasResponse); i { case 0: return &v.state case 1: @@ -10596,7 +10761,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[51].Exporter = func(v any, i int) any { - switch v := v.(*ColumnRollupIntervalRequest); i { + switch v := v.(*ResolveComponentRequest); i { case 0: return &v.state case 1: @@ -10608,7 +10773,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[52].Exporter = func(v any, i int) any { - switch v := v.(*ColumnRollupIntervalResponse); i { + switch v := v.(*ResolveComponentResponse); i { case 0: return &v.state case 1: @@ -10620,7 +10785,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[53].Exporter = func(v any, i int) any { - switch v := v.(*ColumnTopKRequest); i { + switch v := v.(*ColumnRollupIntervalRequest); i { case 0: return &v.state case 1: @@ -10632,7 +10797,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[54].Exporter = func(v any, i int) any { - switch v := v.(*ColumnTopKResponse); i { + switch v := v.(*ColumnRollupIntervalResponse); i { case 0: return &v.state case 1: @@ -10644,7 +10809,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[55].Exporter = func(v any, i int) any { - switch v := v.(*CategoricalSummary); i { + switch v := v.(*ColumnTopKRequest); i { case 0: return &v.state case 1: @@ -10656,7 +10821,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[56].Exporter = func(v any, i int) any { - switch v := v.(*TopK); i { + switch v := v.(*ColumnTopKResponse); i { case 0: return &v.state case 1: @@ -10668,7 +10833,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[57].Exporter = func(v any, i int) any { - switch v := v.(*ColumnNullCountRequest); i { + switch v := v.(*CategoricalSummary); i { case 0: return &v.state case 1: @@ -10680,7 +10845,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[58].Exporter = func(v any, i int) any { - switch v := v.(*ColumnNullCountResponse); i { + switch v := v.(*TopK); i { case 0: return &v.state case 1: @@ -10692,7 +10857,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[59].Exporter = func(v any, i int) any { - switch v := v.(*ColumnDescriptiveStatisticsRequest); i { + switch v := v.(*ColumnNullCountRequest); i { case 0: return &v.state case 1: @@ -10704,7 +10869,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[60].Exporter = func(v any, i int) any { - switch v := v.(*ColumnDescriptiveStatisticsResponse); i { + switch v := v.(*ColumnNullCountResponse); i { case 0: return &v.state case 1: @@ -10716,7 +10881,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[61].Exporter = func(v any, i int) any { - switch v := v.(*NumericSummary); i { + switch v := v.(*ColumnDescriptiveStatisticsRequest); i { case 0: return &v.state case 1: @@ -10728,7 +10893,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[62].Exporter = func(v any, i int) any { - switch v := v.(*NumericHistogramBins); i { + switch v := v.(*ColumnDescriptiveStatisticsResponse); i { case 0: return &v.state case 1: @@ -10740,7 +10905,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[63].Exporter = func(v any, i int) any { - switch v := v.(*NumericStatistics); i { + switch v := v.(*NumericSummary); i { case 0: return &v.state case 1: @@ -10752,7 +10917,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[64].Exporter = func(v any, i int) any { - switch v := v.(*NumericOutliers); i { + switch v := v.(*NumericHistogramBins); i { case 0: return &v.state case 1: @@ -10764,7 +10929,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[65].Exporter = func(v any, i int) any { - switch v := v.(*ColumnTimeGrainRequest); i { + switch v := v.(*NumericStatistics); i { case 0: return &v.state case 1: @@ -10776,7 +10941,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[66].Exporter = func(v any, i int) any { - switch v := v.(*ColumnTimeGrainResponse); i { + switch v := v.(*NumericOutliers); i { case 0: return &v.state case 1: @@ -10788,7 +10953,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[67].Exporter = func(v any, i int) any { - switch v := v.(*ColumnNumericHistogramRequest); i { + switch v := v.(*ColumnTimeGrainRequest); i { case 0: return &v.state case 1: @@ -10800,7 +10965,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[68].Exporter = func(v any, i int) any { - switch v := v.(*ColumnNumericHistogramResponse); i { + switch v := v.(*ColumnTimeGrainResponse); i { case 0: return &v.state case 1: @@ -10812,7 +10977,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[69].Exporter = func(v any, i int) any { - switch v := v.(*ColumnRugHistogramRequest); i { + switch v := v.(*ColumnNumericHistogramRequest); i { case 0: return &v.state case 1: @@ -10824,7 +10989,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[70].Exporter = func(v any, i int) any { - switch v := v.(*ColumnRugHistogramResponse); i { + switch v := v.(*ColumnNumericHistogramResponse); i { case 0: return &v.state case 1: @@ -10836,7 +11001,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[71].Exporter = func(v any, i int) any { - switch v := v.(*ColumnTimeRangeRequest); i { + switch v := v.(*ColumnRugHistogramRequest); i { case 0: return &v.state case 1: @@ -10848,7 +11013,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[72].Exporter = func(v any, i int) any { - switch v := v.(*ColumnTimeRangeResponse); i { + switch v := v.(*ColumnRugHistogramResponse); i { case 0: return &v.state case 1: @@ -10860,7 +11025,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[73].Exporter = func(v any, i int) any { - switch v := v.(*TimeRangeSummary); i { + switch v := v.(*ColumnTimeRangeRequest); i { case 0: return &v.state case 1: @@ -10872,7 +11037,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[74].Exporter = func(v any, i int) any { - switch v := v.(*ColumnCardinalityRequest); i { + switch v := v.(*ColumnTimeRangeResponse); i { case 0: return &v.state case 1: @@ -10884,7 +11049,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[75].Exporter = func(v any, i int) any { - switch v := v.(*ColumnCardinalityResponse); i { + switch v := v.(*TimeRangeSummary); i { case 0: return &v.state case 1: @@ -10896,7 +11061,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[76].Exporter = func(v any, i int) any { - switch v := v.(*ColumnTimeSeriesRequest); i { + switch v := v.(*ColumnCardinalityRequest); i { case 0: return &v.state case 1: @@ -10908,7 +11073,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[77].Exporter = func(v any, i int) any { - switch v := v.(*ColumnTimeSeriesResponse); i { + switch v := v.(*ColumnCardinalityResponse); i { case 0: return &v.state case 1: @@ -10920,7 +11085,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[78].Exporter = func(v any, i int) any { - switch v := v.(*TimeSeriesTimeRange); i { + switch v := v.(*ColumnTimeSeriesRequest); i { case 0: return &v.state case 1: @@ -10932,7 +11097,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[79].Exporter = func(v any, i int) any { - switch v := v.(*TimeSeriesResponse); i { + switch v := v.(*ColumnTimeSeriesResponse); i { case 0: return &v.state case 1: @@ -10944,7 +11109,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[80].Exporter = func(v any, i int) any { - switch v := v.(*TimeSeriesValue); i { + switch v := v.(*TimeSeriesTimeRange); i { case 0: return &v.state case 1: @@ -10956,7 +11121,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[81].Exporter = func(v any, i int) any { - switch v := v.(*TableCardinalityRequest); i { + switch v := v.(*TimeSeriesResponse); i { case 0: return &v.state case 1: @@ -10968,7 +11133,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[82].Exporter = func(v any, i int) any { - switch v := v.(*TableCardinalityResponse); i { + switch v := v.(*TimeSeriesValue); i { case 0: return &v.state case 1: @@ -10980,7 +11145,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[83].Exporter = func(v any, i int) any { - switch v := v.(*TableColumnsRequest); i { + switch v := v.(*TableCardinalityRequest); i { case 0: return &v.state case 1: @@ -10992,7 +11157,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[84].Exporter = func(v any, i int) any { - switch v := v.(*TableColumnsResponse); i { + switch v := v.(*TableCardinalityResponse); i { case 0: return &v.state case 1: @@ -11004,7 +11169,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[85].Exporter = func(v any, i int) any { - switch v := v.(*ProfileColumn); i { + switch v := v.(*TableColumnsRequest); i { case 0: return &v.state case 1: @@ -11016,7 +11181,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[86].Exporter = func(v any, i int) any { - switch v := v.(*TableRowsRequest); i { + switch v := v.(*TableColumnsResponse); i { case 0: return &v.state case 1: @@ -11028,7 +11193,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[87].Exporter = func(v any, i int) any { - switch v := v.(*TableRowsResponse); i { + switch v := v.(*ProfileColumn); i { case 0: return &v.state case 1: @@ -11040,7 +11205,7 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[88].Exporter = func(v any, i int) any { - switch v := v.(*MetricsViewFilter_Cond); i { + switch v := v.(*TableRowsRequest); i { case 0: return &v.state case 1: @@ -11052,6 +11217,30 @@ func file_rill_runtime_v1_queries_proto_init() { } } file_rill_runtime_v1_queries_proto_msgTypes[89].Exporter = func(v any, i int) any { + switch v := v.(*TableRowsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rill_runtime_v1_queries_proto_msgTypes[90].Exporter = func(v any, i int) any { + switch v := v.(*MetricsViewFilter_Cond); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rill_runtime_v1_queries_proto_msgTypes[91].Exporter = func(v any, i int) any { switch v := v.(*MetricsViewSearchResponse_SearchResult); i { case 0: return &v.state @@ -11063,7 +11252,7 @@ func file_rill_runtime_v1_queries_proto_init() { return nil } } - file_rill_runtime_v1_queries_proto_msgTypes[92].Exporter = func(v any, i int) any { + file_rill_runtime_v1_queries_proto_msgTypes[94].Exporter = func(v any, i int) any { switch v := v.(*TopK_Entry); i { case 0: return &v.state @@ -11075,7 +11264,7 @@ func file_rill_runtime_v1_queries_proto_init() { return nil } } - file_rill_runtime_v1_queries_proto_msgTypes[93].Exporter = func(v any, i int) any { + file_rill_runtime_v1_queries_proto_msgTypes[95].Exporter = func(v any, i int) any { switch v := v.(*NumericHistogramBins_Bin); i { case 0: return &v.state @@ -11087,7 +11276,7 @@ func file_rill_runtime_v1_queries_proto_init() { return nil } } - file_rill_runtime_v1_queries_proto_msgTypes[94].Exporter = func(v any, i int) any { + file_rill_runtime_v1_queries_proto_msgTypes[96].Exporter = func(v any, i int) any { switch v := v.(*NumericOutliers_Outlier); i { case 0: return &v.state @@ -11099,7 +11288,7 @@ func file_rill_runtime_v1_queries_proto_init() { return nil } } - file_rill_runtime_v1_queries_proto_msgTypes[95].Exporter = func(v any, i int) any { + file_rill_runtime_v1_queries_proto_msgTypes[97].Exporter = func(v any, i int) any { switch v := v.(*TimeRangeSummary_Interval); i { case 0: return &v.state @@ -11111,7 +11300,7 @@ func file_rill_runtime_v1_queries_proto_init() { return nil } } - file_rill_runtime_v1_queries_proto_msgTypes[96].Exporter = func(v any, i int) any { + file_rill_runtime_v1_queries_proto_msgTypes[98].Exporter = func(v any, i int) any { switch v := v.(*ColumnTimeSeriesRequest_BasicMeasure); i { case 0: return &v.state @@ -11175,11 +11364,11 @@ func file_rill_runtime_v1_queries_proto_init() { (*MetricsViewAggregationMeasure_PercentOfTotal)(nil), (*MetricsViewAggregationMeasure_Uri)(nil), } - file_rill_runtime_v1_queries_proto_msgTypes[55].OneofWrappers = []any{ + file_rill_runtime_v1_queries_proto_msgTypes[57].OneofWrappers = []any{ (*CategoricalSummary_TopK)(nil), (*CategoricalSummary_Cardinality)(nil), } - file_rill_runtime_v1_queries_proto_msgTypes[61].OneofWrappers = []any{ + file_rill_runtime_v1_queries_proto_msgTypes[63].OneofWrappers = []any{ (*NumericSummary_NumericHistogramBins)(nil), (*NumericSummary_NumericStatistics)(nil), (*NumericSummary_NumericOutliers)(nil), @@ -11190,7 +11379,7 @@ func file_rill_runtime_v1_queries_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rill_runtime_v1_queries_proto_rawDesc, NumEnums: 4, - NumMessages: 98, + NumMessages: 100, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/gen/rill/runtime/v1/queries.pb.gw.go b/proto/gen/rill/runtime/v1/queries.pb.gw.go index 8ba885d3f79..9270e829fb8 100644 --- a/proto/gen/rill/runtime/v1/queries.pb.gw.go +++ b/proto/gen/rill/runtime/v1/queries.pb.gw.go @@ -999,6 +999,86 @@ func local_request_QueryService_MetricsViewSearch_0(ctx context.Context, marshal } +func request_QueryService_MetricsViewTimeRanges_0(ctx context.Context, marshaler runtime.Marshaler, client QueryServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MetricsViewTimeRangesRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["instance_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "instance_id") + } + + protoReq.InstanceId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "instance_id", err) + } + + val, ok = pathParams["metrics_view_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "metrics_view_name") + } + + protoReq.MetricsViewName, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "metrics_view_name", err) + } + + msg, err := client.MetricsViewTimeRanges(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_QueryService_MetricsViewTimeRanges_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MetricsViewTimeRangesRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["instance_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "instance_id") + } + + protoReq.InstanceId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "instance_id", err) + } + + val, ok = pathParams["metrics_view_name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "metrics_view_name") + } + + protoReq.MetricsViewName, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "metrics_view_name", err) + } + + msg, err := server.MetricsViewTimeRanges(ctx, &protoReq) + return msg, metadata, err + +} + func request_QueryService_ResolveCanvas_0(ctx context.Context, marshaler runtime.Marshaler, client QueryServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ResolveCanvasRequest var metadata runtime.ServerMetadata @@ -2613,6 +2693,31 @@ func RegisterQueryServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_QueryService_MetricsViewTimeRanges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/rill.runtime.v1.QueryService/MetricsViewTimeRanges", runtime.WithHTTPPathPattern("/v1/instances/{instance_id}/queries/metrics-views/{metrics_view_name}/time-ranges")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_QueryService_MetricsViewTimeRanges_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_QueryService_MetricsViewTimeRanges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_QueryService_ResolveCanvas_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3315,6 +3420,28 @@ func RegisterQueryServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu }) + mux.Handle("POST", pattern_QueryService_MetricsViewTimeRanges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/rill.runtime.v1.QueryService/MetricsViewTimeRanges", runtime.WithHTTPPathPattern("/v1/instances/{instance_id}/queries/metrics-views/{metrics_view_name}/time-ranges")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_QueryService_MetricsViewTimeRanges_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_QueryService_MetricsViewTimeRanges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_QueryService_ResolveCanvas_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3675,6 +3802,8 @@ var ( pattern_QueryService_MetricsViewSearch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "instances", "instance_id", "queries", "metrics-views", "metrics_view_name", "search"}, "")) + pattern_QueryService_MetricsViewTimeRanges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "instances", "instance_id", "queries", "metrics-views", "metrics_view_name", "time-ranges"}, "")) + pattern_QueryService_ResolveCanvas_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "instances", "instance_id", "queries", "canvases", "canvas", "resolve"}, "")) pattern_QueryService_ResolveComponent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"v1", "instances", "instance_id", "queries", "components", "component", "resolve"}, "")) @@ -3733,6 +3862,8 @@ var ( forward_QueryService_MetricsViewSearch_0 = runtime.ForwardResponseMessage + forward_QueryService_MetricsViewTimeRanges_0 = runtime.ForwardResponseMessage + forward_QueryService_ResolveCanvas_0 = runtime.ForwardResponseMessage forward_QueryService_ResolveComponent_0 = runtime.ForwardResponseMessage diff --git a/proto/gen/rill/runtime/v1/queries.pb.validate.go b/proto/gen/rill/runtime/v1/queries.pb.validate.go index d8d2761a185..840707901fd 100644 --- a/proto/gen/rill/runtime/v1/queries.pb.validate.go +++ b/proto/gen/rill/runtime/v1/queries.pb.validate.go @@ -6178,6 +6178,8 @@ func (m *TimeRange) validate(all bool) error { // no validation rules for TimeZone + // no validation rules for Expression + if len(errors) > 0 { return TimeRangeMultiError(errors) } @@ -9574,6 +9576,261 @@ var _ interface { ErrorName() string } = MetricsViewSearchResponseValidationError{} +// Validate checks the field values on MetricsViewTimeRangesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *MetricsViewTimeRangesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MetricsViewTimeRangesRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// MetricsViewTimeRangesRequestMultiError, or nil if none found. +func (m *MetricsViewTimeRangesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *MetricsViewTimeRangesRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for InstanceId + + if utf8.RuneCountInString(m.GetMetricsViewName()) < 1 { + err := MetricsViewTimeRangesRequestValidationError{ + field: "MetricsViewName", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + // no validation rules for Priority + + if len(errors) > 0 { + return MetricsViewTimeRangesRequestMultiError(errors) + } + + return nil +} + +// MetricsViewTimeRangesRequestMultiError is an error wrapping multiple +// validation errors returned by MetricsViewTimeRangesRequest.ValidateAll() if +// the designated constraints aren't met. +type MetricsViewTimeRangesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MetricsViewTimeRangesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MetricsViewTimeRangesRequestMultiError) AllErrors() []error { return m } + +// MetricsViewTimeRangesRequestValidationError is the validation error returned +// by MetricsViewTimeRangesRequest.Validate if the designated constraints +// aren't met. +type MetricsViewTimeRangesRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetricsViewTimeRangesRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetricsViewTimeRangesRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetricsViewTimeRangesRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetricsViewTimeRangesRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetricsViewTimeRangesRequestValidationError) ErrorName() string { + return "MetricsViewTimeRangesRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e MetricsViewTimeRangesRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetricsViewTimeRangesRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetricsViewTimeRangesRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetricsViewTimeRangesRequestValidationError{} + +// Validate checks the field values on MetricsViewTimeRangesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *MetricsViewTimeRangesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MetricsViewTimeRangesResponse with +// the rules defined in the proto definition for this message. If any rules +// are violated, the result is a list of violation errors wrapped in +// MetricsViewTimeRangesResponseMultiError, or nil if none found. +func (m *MetricsViewTimeRangesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *MetricsViewTimeRangesResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetTimeRanges() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MetricsViewTimeRangesResponseValidationError{ + field: fmt.Sprintf("TimeRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MetricsViewTimeRangesResponseValidationError{ + field: fmt.Sprintf("TimeRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return MetricsViewTimeRangesResponseValidationError{ + field: fmt.Sprintf("TimeRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return MetricsViewTimeRangesResponseMultiError(errors) + } + + return nil +} + +// MetricsViewTimeRangesResponseMultiError is an error wrapping multiple +// validation errors returned by MetricsViewTimeRangesResponse.ValidateAll() +// if the designated constraints aren't met. +type MetricsViewTimeRangesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MetricsViewTimeRangesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m MetricsViewTimeRangesResponseMultiError) AllErrors() []error { return m } + +// MetricsViewTimeRangesResponseValidationError is the validation error +// returned by MetricsViewTimeRangesResponse.Validate if the designated +// constraints aren't met. +type MetricsViewTimeRangesResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e MetricsViewTimeRangesResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e MetricsViewTimeRangesResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e MetricsViewTimeRangesResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e MetricsViewTimeRangesResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e MetricsViewTimeRangesResponseValidationError) ErrorName() string { + return "MetricsViewTimeRangesResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e MetricsViewTimeRangesResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sMetricsViewTimeRangesResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = MetricsViewTimeRangesResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = MetricsViewTimeRangesResponseValidationError{} + // Validate checks the field values on ResolveCanvasRequest with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. diff --git a/proto/gen/rill/runtime/v1/queries_grpc.pb.go b/proto/gen/rill/runtime/v1/queries_grpc.pb.go index 3f7d42326af..79ba7f515b7 100644 --- a/proto/gen/rill/runtime/v1/queries_grpc.pb.go +++ b/proto/gen/rill/runtime/v1/queries_grpc.pb.go @@ -32,6 +32,7 @@ const ( QueryService_MetricsViewTimeRange_FullMethodName = "/rill.runtime.v1.QueryService/MetricsViewTimeRange" QueryService_MetricsViewSchema_FullMethodName = "/rill.runtime.v1.QueryService/MetricsViewSchema" QueryService_MetricsViewSearch_FullMethodName = "/rill.runtime.v1.QueryService/MetricsViewSearch" + QueryService_MetricsViewTimeRanges_FullMethodName = "/rill.runtime.v1.QueryService/MetricsViewTimeRanges" QueryService_ResolveCanvas_FullMethodName = "/rill.runtime.v1.QueryService/ResolveCanvas" QueryService_ResolveComponent_FullMethodName = "/rill.runtime.v1.QueryService/ResolveComponent" QueryService_ColumnRollupInterval_FullMethodName = "/rill.runtime.v1.QueryService/ColumnRollupInterval" @@ -112,6 +113,7 @@ type QueryServiceClient interface { MetricsViewSchema(ctx context.Context, in *MetricsViewSchemaRequest, opts ...grpc.CallOption) (*MetricsViewSchemaResponse, error) // MetricsViewSearch Get the data types of measures and dimensions MetricsViewSearch(ctx context.Context, in *MetricsViewSearchRequest, opts ...grpc.CallOption) (*MetricsViewSearchResponse, error) + MetricsViewTimeRanges(ctx context.Context, in *MetricsViewTimeRangesRequest, opts ...grpc.CallOption) (*MetricsViewTimeRangesResponse, error) // ResolveCanvas is a convenience API that returns a canvas and all its referenced components and metrics views. ResolveCanvas(ctx context.Context, in *ResolveCanvasRequest, opts ...grpc.CallOption) (*ResolveCanvasResponse, error) // ResolveComponent resolves renderer for a Component resource. @@ -292,6 +294,16 @@ func (c *queryServiceClient) MetricsViewSearch(ctx context.Context, in *MetricsV return out, nil } +func (c *queryServiceClient) MetricsViewTimeRanges(ctx context.Context, in *MetricsViewTimeRangesRequest, opts ...grpc.CallOption) (*MetricsViewTimeRangesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(MetricsViewTimeRangesResponse) + err := c.cc.Invoke(ctx, QueryService_MetricsViewTimeRanges_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryServiceClient) ResolveCanvas(ctx context.Context, in *ResolveCanvasRequest, opts ...grpc.CallOption) (*ResolveCanvasResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ResolveCanvasResponse) @@ -505,6 +517,7 @@ type QueryServiceServer interface { MetricsViewSchema(context.Context, *MetricsViewSchemaRequest) (*MetricsViewSchemaResponse, error) // MetricsViewSearch Get the data types of measures and dimensions MetricsViewSearch(context.Context, *MetricsViewSearchRequest) (*MetricsViewSearchResponse, error) + MetricsViewTimeRanges(context.Context, *MetricsViewTimeRangesRequest) (*MetricsViewTimeRangesResponse, error) // ResolveCanvas is a convenience API that returns a canvas and all its referenced components and metrics views. ResolveCanvas(context.Context, *ResolveCanvasRequest) (*ResolveCanvasResponse, error) // ResolveComponent resolves renderer for a Component resource. @@ -585,6 +598,9 @@ func (UnimplementedQueryServiceServer) MetricsViewSchema(context.Context, *Metri func (UnimplementedQueryServiceServer) MetricsViewSearch(context.Context, *MetricsViewSearchRequest) (*MetricsViewSearchResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method MetricsViewSearch not implemented") } +func (UnimplementedQueryServiceServer) MetricsViewTimeRanges(context.Context, *MetricsViewTimeRangesRequest) (*MetricsViewTimeRangesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method MetricsViewTimeRanges not implemented") +} func (UnimplementedQueryServiceServer) ResolveCanvas(context.Context, *ResolveCanvasRequest) (*ResolveCanvasResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ResolveCanvas not implemented") } @@ -878,6 +894,24 @@ func _QueryService_MetricsViewSearch_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _QueryService_MetricsViewTimeRanges_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MetricsViewTimeRangesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServiceServer).MetricsViewTimeRanges(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: QueryService_MetricsViewTimeRanges_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServiceServer).MetricsViewTimeRanges(ctx, req.(*MetricsViewTimeRangesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _QueryService_ResolveCanvas_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ResolveCanvasRequest) if err := dec(in); err != nil { @@ -1203,6 +1237,10 @@ var QueryService_ServiceDesc = grpc.ServiceDesc{ MethodName: "MetricsViewSearch", Handler: _QueryService_MetricsViewSearch_Handler, }, + { + MethodName: "MetricsViewTimeRanges", + Handler: _QueryService_MetricsViewTimeRanges_Handler, + }, { MethodName: "ResolveCanvas", Handler: _QueryService_ResolveCanvas_Handler, diff --git a/proto/gen/rill/runtime/v1/runtime.swagger.yaml b/proto/gen/rill/runtime/v1/runtime.swagger.yaml index 8c4fcb081cb..487591af77b 100644 --- a/proto/gen/rill/runtime/v1/runtime.swagger.yaml +++ b/proto/gen/rill/runtime/v1/runtime.swagger.yaml @@ -1664,6 +1664,42 @@ paths: format: int32 tags: - QueryService + /v1/instances/{instanceId}/queries/metrics-views/{metricsViewName}/time-ranges: + post: + operationId: QueryService_MetricsViewTimeRanges + responses: + "200": + description: A successful response. + schema: + $ref: '#/definitions/v1MetricsViewTimeRangesResponse' + default: + description: An unexpected error response. + schema: + $ref: '#/definitions/rpcStatus' + parameters: + - name: instanceId + in: path + required: true + type: string + - name: metricsViewName + in: path + required: true + type: string + - name: body + in: body + required: true + schema: + type: object + properties: + expressions: + type: array + items: + type: string + priority: + type: integer + format: int32 + tags: + - QueryService /v1/instances/{instanceId}/queries/metrics-views/{metricsViewName}/timeseries: post: summary: |- @@ -5275,6 +5311,14 @@ definitions: timeRangeSummary: $ref: '#/definitions/v1TimeRangeSummary' title: Not optional, not null + v1MetricsViewTimeRangesResponse: + type: object + properties: + timeRanges: + type: array + items: + type: object + $ref: '#/definitions/v1TimeRange' v1MetricsViewTimeSeriesRequest: type: object properties: @@ -6416,6 +6460,11 @@ definitions: timeZone: type: string title: Optional. IANA format, ie Europe/Copenhagen. Defaults to UTC + expression: + type: string + description: |- + Optional. Rill format time range. Should only be used for alerts and reports. + For dashboard call ResolveTimeRanges. title: 2 of the (start, end, iso_duration) should be set v1TimeRangeSummary: type: object diff --git a/proto/rill/runtime/v1/queries.proto b/proto/rill/runtime/v1/queries.proto index d3c1375ae8b..0f00c71a32f 100644 --- a/proto/rill/runtime/v1/queries.proto +++ b/proto/rill/runtime/v1/queries.proto @@ -154,6 +154,13 @@ service QueryService { }; } + rpc MetricsViewTimeRanges(MetricsViewTimeRangesRequest) returns (MetricsViewTimeRangesResponse) { + option (google.api.http) = { + post: "/v1/instances/{instance_id}/queries/metrics-views/{metrics_view_name}/time-ranges", + body: "*" + }; + } + // Canvas APIs // ResolveCanvas is a convenience API that returns a canvas and all its referenced components and metrics views. @@ -560,6 +567,9 @@ message TimeRange { TimeGrain round_to_grain = 5; // Optional. IANA format, ie Europe/Copenhagen. Defaults to UTC string time_zone = 6; + // Optional. Rill format time range. Should only be used for alerts and reports. + // For dashboard call ResolveTimeRanges. + string expression = 7; } // Present for backwards compatibility @@ -779,6 +789,17 @@ message MetricsViewSearchResponse { repeated SearchResult results = 1; } +message MetricsViewTimeRangesRequest { + string instance_id = 1; + string metrics_view_name = 2 [(validate.rules).string.min_len = 1]; + repeated string expressions = 3; + int32 priority = 4; +} + +message MetricsViewTimeRangesResponse { + repeated TimeRange time_ranges = 1; +} + // ********** // Canvas APIs // ********** diff --git a/runtime/compilers/rillv1/parse_alert.go b/runtime/compilers/rillv1/parse_alert.go index 53e02b879da..a7874f3f981 100644 --- a/runtime/compilers/rillv1/parse_alert.go +++ b/runtime/compilers/rillv1/parse_alert.go @@ -10,6 +10,7 @@ import ( runtimev1 "github.com/rilldata/rill/proto/gen/rill/runtime/v1" "github.com/rilldata/rill/runtime/drivers/slack" + "github.com/rilldata/rill/runtime/pkg/duration" "github.com/rilldata/rill/runtime/pkg/pbutil" "google.golang.org/protobuf/types/known/structpb" ) @@ -113,7 +114,7 @@ func (p *Parser) parseAlert(node *Node) error { // Validate the interval duration as a standard ISO8601 duration (without Rill extensions) with only one component if tmp.Intervals.Duration != "" { - err := validateISO8601(tmp.Intervals.Duration, true, true) + err := duration.ValidateISO8601(tmp.Intervals.Duration, true, true) if err != nil { return fmt.Errorf(`invalid value %q for property "intervals.duration"`, tmp.Intervals.Duration) } diff --git a/runtime/compilers/rillv1/parse_canvas.go b/runtime/compilers/rillv1/parse_canvas.go index c520097b78f..3f902ef5469 100644 --- a/runtime/compilers/rillv1/parse_canvas.go +++ b/runtime/compilers/rillv1/parse_canvas.go @@ -8,6 +8,7 @@ import ( "github.com/google/uuid" runtimev1 "github.com/rilldata/rill/proto/gen/rill/runtime/v1" + "github.com/rilldata/rill/runtime/pkg/rilltime" "golang.org/x/exp/maps" "gopkg.in/yaml.v3" ) @@ -72,18 +73,14 @@ func (p *Parser) parseCanvas(node *Node) error { // Build and validate time ranges var timeRanges []*runtimev1.ExploreTimeRange for _, tr := range tmp.TimeRanges { - if err := validateISO8601(tr.Range, false, false); err != nil { + if _, err := rilltime.Parse(tr.Range); err != nil { return fmt.Errorf("invalid time range %q: %w", tr.Range, err) } res := &runtimev1.ExploreTimeRange{Range: tr.Range} for _, ctr := range tr.ComparisonTimeRanges { - if err := validateISO8601(ctr.Offset, false, false); err != nil { - return fmt.Errorf("invalid comparison offset %q: %w", ctr.Offset, err) - } - if ctr.Range != "" { - if err := validateISO8601(ctr.Range, false, false); err != nil { - return fmt.Errorf("invalid comparison range %q: %w", ctr.Range, err) - } + err = rilltime.ParseCompatibility(ctr.Range, ctr.Offset) + if err != nil { + return err } res.ComparisonTimeRanges = append(res.ComparisonTimeRanges, &runtimev1.ExploreComparisonTimeRange{ Offset: ctr.Offset, @@ -148,7 +145,7 @@ func (p *Parser) parseCanvas(node *Node) error { var defaultPreset *runtimev1.CanvasPreset if tmp.Defaults != nil { if tmp.Defaults.TimeRange != "" { - if err := validateISO8601(tmp.Defaults.TimeRange, false, false); err != nil { + if _, err := rilltime.Parse(tmp.Defaults.TimeRange); err != nil { return fmt.Errorf("invalid time range %q: %w", tmp.Defaults.TimeRange, err) } } diff --git a/runtime/compilers/rillv1/parse_explore.go b/runtime/compilers/rillv1/parse_explore.go index a8f27b6acf9..8aa9efbdd32 100644 --- a/runtime/compilers/rillv1/parse_explore.go +++ b/runtime/compilers/rillv1/parse_explore.go @@ -7,6 +7,7 @@ import ( "time" runtimev1 "github.com/rilldata/rill/proto/gen/rill/runtime/v1" + "github.com/rilldata/rill/runtime/pkg/rilltime" "golang.org/x/exp/maps" "gopkg.in/yaml.v3" ) @@ -165,18 +166,14 @@ func (p *Parser) parseExplore(node *Node) error { // Build and validate time ranges var timeRanges []*runtimev1.ExploreTimeRange for _, tr := range tmp.TimeRanges { - if err := validateISO8601(tr.Range, false, false); err != nil { + if _, err := rilltime.Parse(tr.Range); err != nil { return fmt.Errorf("invalid time range %q: %w", tr.Range, err) } res := &runtimev1.ExploreTimeRange{Range: tr.Range} for _, ctr := range tr.ComparisonTimeRanges { - if err := validateISO8601(ctr.Offset, false, false); err != nil { - return fmt.Errorf("invalid comparison offset %q: %w", ctr.Offset, err) - } - if ctr.Range != "" { - if err := validateISO8601(ctr.Range, false, false); err != nil { - return fmt.Errorf("invalid comparison range %q: %w", ctr.Range, err) - } + err = rilltime.ParseCompatibility(ctr.Range, ctr.Offset) + if err != nil { + return err } res.ComparisonTimeRanges = append(res.ComparisonTimeRanges, &runtimev1.ExploreComparisonTimeRange{ Offset: ctr.Offset, @@ -198,7 +195,7 @@ func (p *Parser) parseExplore(node *Node) error { var defaultPreset *runtimev1.ExplorePreset if tmp.Defaults != nil { if tmp.Defaults.TimeRange != "" { - if err := validateISO8601(tmp.Defaults.TimeRange, false, false); err != nil { + if _, err := rilltime.Parse(tmp.Defaults.TimeRange); err != nil { return fmt.Errorf("invalid time range %q: %w", tmp.Defaults.TimeRange, err) } } diff --git a/runtime/compilers/rillv1/parse_metrics_view.go b/runtime/compilers/rillv1/parse_metrics_view.go index 3b8ef2fbcb4..b9c7453a937 100644 --- a/runtime/compilers/rillv1/parse_metrics_view.go +++ b/runtime/compilers/rillv1/parse_metrics_view.go @@ -6,7 +6,7 @@ import ( "time" runtimev1 "github.com/rilldata/rill/proto/gen/rill/runtime/v1" - "github.com/rilldata/rill/runtime/pkg/duration" + "github.com/rilldata/rill/runtime/pkg/rilltime" "google.golang.org/protobuf/types/known/structpb" "gopkg.in/yaml.v3" @@ -495,7 +495,7 @@ func (p *Parser) parseMetricsView(node *Node) error { } if tmp.DefaultTimeRange != "" { - err := validateISO8601(tmp.DefaultTimeRange, false, false) + _, err := rilltime.Parse(tmp.DefaultTimeRange) if err != nil { return fmt.Errorf(`invalid "default_time_range": %w`, err) } @@ -742,22 +742,15 @@ func (p *Parser) parseMetricsView(node *Node) error { if tmp.AvailableTimeRanges != nil { for _, r := range tmp.AvailableTimeRanges { - err := validateISO8601(r.Range, false, false) + _, err := rilltime.Parse(r.Range) if err != nil { return fmt.Errorf("invalid range in available_time_ranges: %w", err) } for _, o := range r.ComparisonTimeRanges { - err := validateISO8601(o.Offset, false, false) + err = rilltime.ParseCompatibility(o.Range, o.Offset) if err != nil { - return fmt.Errorf("invalid offset in comparison_offsets: %w", err) - } - - if o.Range != "" { - err := validateISO8601(o.Range, false, false) - if err != nil { - return fmt.Errorf("invalid range in comparison_offsets: %w", err) - } + return err } } } @@ -975,59 +968,6 @@ func parseTimeGrain(s string) (runtimev1.TimeGrain, error) { } } -// validateISO8601 is a wrapper around duration.ParseISO8601 with additional validation: -// a) that the duration does not have seconds granularity, -// b) if onlyStandard is true, that the duration does not use any of the Rill-specific extensions (such as year-to-date). -// c) if onlySingular is true, that the duration does not consist of more than one component (e.g. P2Y is valid, P2Y3M is not). -func validateISO8601(isoDuration string, onlyStandard, onlyOneComponent bool) error { - d, err := duration.ParseISO8601(isoDuration) - if err != nil { - return err - } - - sd, ok := d.(duration.StandardDuration) - if !ok { - if onlyStandard { - return fmt.Errorf("only standard durations are allowed") - } - return nil - } - - if sd.Second != 0 { - return fmt.Errorf("durations with seconds are not allowed") - } - - if onlyOneComponent { - n := 0 - if sd.Year != 0 { - n++ - } - if sd.Month != 0 { - n++ - } - if sd.Week != 0 { - n++ - } - if sd.Day != 0 { - n++ - } - if sd.Hour != 0 { - n++ - } - if sd.Minute != 0 { - n++ - } - if sd.Second != 0 { - n++ - } - if n > 1 { - return fmt.Errorf("only one component is allowed") - } - } - - return nil -} - var validationTemplateData = TemplateData{ Environment: "dev", User: map[string]interface{}{ diff --git a/runtime/compilers/rillv1/parse_report.go b/runtime/compilers/rillv1/parse_report.go index d65b70a5d9a..9679168f713 100644 --- a/runtime/compilers/rillv1/parse_report.go +++ b/runtime/compilers/rillv1/parse_report.go @@ -10,6 +10,7 @@ import ( runtimev1 "github.com/rilldata/rill/proto/gen/rill/runtime/v1" "github.com/rilldata/rill/runtime/drivers/slack" + "github.com/rilldata/rill/runtime/pkg/duration" "github.com/rilldata/rill/runtime/pkg/pbutil" "google.golang.org/protobuf/types/known/structpb" ) @@ -95,7 +96,7 @@ func (p *Parser) parseReport(node *Node) error { // Validate the interval duration as a standard ISO8601 duration (without Rill extensions) with only one component if tmp.Intervals.Duration != "" { - err := validateISO8601(tmp.Intervals.Duration, true, true) + err := duration.ValidateISO8601(tmp.Intervals.Duration, true, true) if err != nil { return fmt.Errorf(`invalid value %q for property "intervals.duration"`, tmp.Intervals.Duration) } diff --git a/runtime/metricsview/executor.go b/runtime/metricsview/executor.go index f703c08bbb7..ba1b81d6c95 100644 --- a/runtime/metricsview/executor.go +++ b/runtime/metricsview/executor.go @@ -133,6 +133,70 @@ func (e *Executor) Watermark(ctx context.Context) (time.Time, error) { return e.loadWatermark(ctx, nil) } +// MinTime is a temporary function that fetches min time. Will be replaced with metrics_time_range resolver in a future PR. +func (e *Executor) MinTime(ctx context.Context, colName string) (time.Time, error) { + if colName == "" { + // we cannot get min time without a time dimension or a column name specified. return a 0 time + return time.Time{}, nil + } + + dialect := e.olap.Dialect() + sql := fmt.Sprintf("SELECT MIN(%s) FROM %s", dialect.EscapeIdentifier(colName), dialect.EscapeTable(e.metricsView.Database, e.metricsView.DatabaseSchema, e.metricsView.Table)) + + res, err := e.olap.Execute(ctx, &drivers.Statement{ + Query: sql, + Priority: e.priority, + ExecutionTimeout: defaultInteractiveTimeout, + }) + if err != nil { + return time.Time{}, err + } + defer res.Close() + + var t time.Time + if res.Next() { + if err := res.Scan(&t); err != nil { + return time.Time{}, fmt.Errorf("failed to scan time anchor: %w", err) + } + } + if res.Err() != nil { + return time.Time{}, fmt.Errorf("failed to scan time anchor: %w", res.Err()) + } + return t, nil +} + +// MaxTime is a temporary function that fetches max time. Will be replaced with metrics_time_range resolver in a future PR. +func (e *Executor) MaxTime(ctx context.Context, colName string) (time.Time, error) { + if colName == "" { + // we cannot get min time without a time dimension or a column name specified. return a 0 time + return time.Time{}, nil + } + + dialect := e.olap.Dialect() + sql := fmt.Sprintf("SELECT MAX(%s) FROM %s", dialect.EscapeIdentifier(colName), dialect.EscapeTable(e.metricsView.Database, e.metricsView.DatabaseSchema, e.metricsView.Table)) + + res, err := e.olap.Execute(ctx, &drivers.Statement{ + Query: sql, + Priority: e.priority, + ExecutionTimeout: defaultInteractiveTimeout, + }) + if err != nil { + return time.Time{}, err + } + defer res.Close() + + var t time.Time + if res.Next() { + if err := res.Scan(&t); err != nil { + return time.Time{}, fmt.Errorf("failed to scan time anchor: %w", err) + } + } + if res.Err() != nil { + return time.Time{}, fmt.Errorf("failed to scan time anchor: %w", res.Err()) + } + return t, nil +} + // Schema returns a schema for the metrics view's dimensions and measures. func (e *Executor) Schema(ctx context.Context) (*runtimev1.StructType, error) { if !e.security.CanAccess() { diff --git a/runtime/metricsview/executor_rewrite_time.go b/runtime/metricsview/executor_rewrite_time.go index e18c426b968..bb5a9fcfcdf 100644 --- a/runtime/metricsview/executor_rewrite_time.go +++ b/runtime/metricsview/executor_rewrite_time.go @@ -8,6 +8,7 @@ import ( "github.com/rilldata/rill/runtime/drivers" "github.com/rilldata/rill/runtime/pkg/duration" + "github.com/rilldata/rill/runtime/pkg/rilltime" "github.com/rilldata/rill/runtime/pkg/timeutil" ) @@ -41,6 +42,56 @@ func (e *Executor) resolveTimeRange(ctx context.Context, tr *TimeRange, tz *time return nil } + if tr.Expression == "" { + return e.resolveISOTimeRange(ctx, tr, tz, executionTime) + } + if !tr.Start.IsZero() || !tr.End.IsZero() || tr.IsoDuration != "" || tr.IsoOffset != "" || tr.RoundToGrain != TimeGrainUnspecified { + return errors.New("other fields are not supported when expression is provided") + } + + rillTime, err := rilltime.Parse(tr.Expression) + if err != nil { + return err + } + + watermark, err := e.loadWatermark(ctx, executionTime) + if err != nil { + return err + } + + minTime, err := e.MinTime(ctx, e.metricsView.TimeDimension) + if err != nil { + return err + } + + maxTime, err := e.MaxTime(ctx, e.metricsView.TimeDimension) + if err != nil { + return err + } + + tr.Start, tr.End, err = rillTime.Eval(rilltime.EvalOptions{ + Now: time.Now(), + MinTime: minTime, + MaxTime: maxTime, + Watermark: watermark, + FirstDay: int(e.metricsView.FirstDayOfWeek), + FirstMonth: int(e.metricsView.FirstMonthOfYear), + }) + if err != nil { + return err + } + + // Clear all other fields than Start and End + tr.Expression = "" + tr.IsoDuration = "" + tr.IsoOffset = "" + tr.RoundToGrain = TimeGrainUnspecified + + return nil +} + +// resolveISOTimeRange resolves the given time range where either only start/end is specified along with ISO duration/offset, ensuring only its Start and End properties are populated. +func (e *Executor) resolveISOTimeRange(ctx context.Context, tr *TimeRange, tz *time.Location, executionTime *time.Time) error { if tr.Start.IsZero() && tr.End.IsZero() { t, err := e.loadWatermark(ctx, executionTime) if err != nil { diff --git a/runtime/metricsview/query.go b/runtime/metricsview/query.go index 9f767409d8e..594d74159d7 100644 --- a/runtime/metricsview/query.go +++ b/runtime/metricsview/query.go @@ -134,13 +134,14 @@ type Sort struct { type TimeRange struct { Start time.Time `mapstructure:"start"` End time.Time `mapstructure:"end"` + Expression string `mapstructure:"expression"` IsoDuration string `mapstructure:"iso_duration"` IsoOffset string `mapstructure:"iso_offset"` RoundToGrain TimeGrain `mapstructure:"round_to_grain"` } func (tr *TimeRange) IsZero() bool { - return tr.Start.IsZero() && tr.End.IsZero() && tr.IsoDuration == "" && tr.IsoOffset == "" && tr.RoundToGrain == TimeGrainUnspecified + return tr.Start.IsZero() && tr.End.IsZero() && tr.Expression == "" && tr.IsoDuration == "" && tr.IsoOffset == "" && tr.RoundToGrain == TimeGrainUnspecified } type Expression struct { diff --git a/runtime/pkg/duration/duration.go b/runtime/pkg/duration/duration.go index 1104773a54b..c5eb3bf7db7 100644 --- a/runtime/pkg/duration/duration.go +++ b/runtime/pkg/duration/duration.go @@ -114,6 +114,59 @@ func ParseISO8601(from string) (Duration, error) { return d, nil } +// ValidateISO8601 is a wrapper around ParseISO8601 with additional validation: +// a) that the duration does not have seconds granularity, +// b) if onlyStandard is true, that the duration does not use any of the Rill-specific extensions (such as year-to-date). +// c) if onlySingular is true, that the duration does not consist of more than one component (e.g. P2Y is valid, P2Y3M is not). +func ValidateISO8601(isoDuration string, onlyStandard, onlyOneComponent bool) error { + d, err := ParseISO8601(isoDuration) + if err != nil { + return err + } + + sd, ok := d.(StandardDuration) + if !ok { + if onlyStandard { + return fmt.Errorf("only standard durations are allowed") + } + return nil + } + + if sd.Second != 0 { + return fmt.Errorf("durations with seconds are not allowed") + } + + if onlyOneComponent { + n := 0 + if sd.Year != 0 { + n++ + } + if sd.Month != 0 { + n++ + } + if sd.Week != 0 { + n++ + } + if sd.Day != 0 { + n++ + } + if sd.Hour != 0 { + n++ + } + if sd.Minute != 0 { + n++ + } + if sd.Second != 0 { + n++ + } + if n > 1 { + return fmt.Errorf("only one component is allowed") + } + } + + return nil +} + // StandardDuration represents an ISO8601 duration with Rill-specific extensions. // See ParseISO8601 for details. type StandardDuration struct { diff --git a/runtime/pkg/metricssql/parser.go b/runtime/pkg/metricssql/parser.go index a44322b9ff4..ab4ff92f6e3 100644 --- a/runtime/pkg/metricssql/parser.go +++ b/runtime/pkg/metricssql/parser.go @@ -50,11 +50,13 @@ type query struct { q *metricsview.Query controller *runtime.Controller + claims *runtime.SecurityClaims instanceID string priority int // fields available after parsing FROM clause metricsViewSpec *runtimev1.MetricsViewSpec + executor *metricsview.Executor dims map[string]any measures map[string]any } @@ -82,6 +84,7 @@ func (c *Compiler) Rewrite(ctx context.Context, sql string) (*metricsview.Query, q := &query{ q: &metricsview.Query{}, controller: c.controller, + claims: c.claims, instanceID: c.instanceID, priority: c.priority, } @@ -90,6 +93,9 @@ func (c *Compiler) Rewrite(ctx context.Context, sql string) (*metricsview.Query, if err := q.parseFrom(ctx, stmt.From); err != nil { return nil, err } + if q.executor != nil { + defer q.executor.Close() + } // parse select fields if err := q.parseSelect(stmt.Fields); err != nil { @@ -160,6 +166,17 @@ func (q *query) parseFrom(ctx context.Context, node *ast.TableRefsClause) error return fmt.Errorf("metrics view %q is not valid: (status: %q, error: %q)", mv.Meta.GetName(), mv.Meta.ReconcileStatus, mv.Meta.ReconcileError) } q.metricsViewSpec = spec + security, err := q.controller.Runtime.ResolveSecurity(q.instanceID, q.claims, mv) + if err != nil { + return fmt.Errorf("metrics sql: failed to resolve security: %w", err) + } + + ex, err := metricsview.NewExecutor(ctx, q.controller.Runtime, q.instanceID, q.metricsViewSpec, false, security, q.priority) + if err != nil { + return fmt.Errorf("metrics sql: failed to create executor: %w", err) + } + q.executor = ex + q.measures = make(map[string]any, len(spec.Measures)) for _, measure := range spec.Measures { q.measures[measure.Name] = nil diff --git a/runtime/pkg/metricssql/time_range_parser.go b/runtime/pkg/metricssql/time_range_parser.go index e0e3c97e22e..35df8f6fd20 100644 --- a/runtime/pkg/metricssql/time_range_parser.go +++ b/runtime/pkg/metricssql/time_range_parser.go @@ -3,18 +3,17 @@ package metricssqlparser import ( "context" "fmt" - "strconv" "strings" "time" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/rilldata/rill/runtime/drivers" "github.com/rilldata/rill/runtime/metricsview" - "github.com/rilldata/rill/runtime/pkg/duration" + "github.com/rilldata/rill/runtime/pkg/rilltime" ) func (q *query) parseTimeRangeStart(ctx context.Context, node *ast.FuncCallExpr) (*metricsview.Expression, error) { - d, unit, colName, err := parseTimeRangeArgs(node.Args) + rillTime, colName, err := parseTimeRangeArgs(node.Args) if err != nil { return nil, err } @@ -24,20 +23,37 @@ func (q *query) parseTimeRangeStart(ctx context.Context, node *ast.FuncCallExpr) return nil, err } - if t, ok := d.(duration.TruncToDateDuration); ok { - watermark = t.SubWithUnit(watermark, unit) - } else { - for i := 1; i <= unit; i++ { - watermark = d.Sub(watermark) - } + if colName == "" { + colName = q.metricsViewSpec.TimeDimension + } + minTime, err := q.executor.MinTime(ctx, colName) + if err != nil { + return nil, err + } + maxTime, err := q.executor.MaxTime(ctx, colName) + if err != nil { + return nil, err } + + watermark, _, err = rillTime.Eval(rilltime.EvalOptions{ + Now: time.Now(), + MinTime: minTime, + MaxTime: maxTime, + Watermark: watermark, + FirstDay: int(q.metricsViewSpec.FirstDayOfWeek), + FirstMonth: int(q.metricsViewSpec.FirstMonthOfYear), + }) + if err != nil { + return nil, err + } + return &metricsview.Expression{ Value: watermark, }, nil } func (q *query) parseTimeRangeEnd(ctx context.Context, node *ast.FuncCallExpr) (*metricsview.Expression, error) { - d, unit, colName, err := parseTimeRangeArgs(node.Args) + rillTime, colName, err := parseTimeRangeArgs(node.Args) if err != nil { return nil, err } @@ -47,23 +63,32 @@ func (q *query) parseTimeRangeEnd(ctx context.Context, node *ast.FuncCallExpr) ( return nil, err } - if t, ok := d.(duration.TruncToDateDuration); ok { - watermark = t.SubWithUnit(watermark, unit-1) - } else { - for i := 1; i < unit; i++ { - watermark = d.Sub(watermark) - } + if colName == "" { + colName = q.metricsViewSpec.TimeDimension + } + minTime, err := q.executor.MinTime(ctx, colName) + if err != nil { + return nil, err + } + maxTime, err := q.executor.MaxTime(ctx, colName) + if err != nil { + return nil, err } - var end time.Time - if std, ok := d.(duration.StandardDuration); ok { - end = std.EndTime(watermark) - } else { - end = watermark + _, watermark, err = rillTime.Eval(rilltime.EvalOptions{ + Now: time.Now(), + MinTime: minTime, + MaxTime: maxTime, + Watermark: watermark, + FirstDay: int(q.metricsViewSpec.FirstDayOfWeek), + FirstMonth: int(q.metricsViewSpec.FirstMonthOfYear), + }) + if err != nil { + return nil, err } return &metricsview.Expression{ - Value: end, + Value: watermark, }, nil } @@ -102,49 +127,35 @@ func (q *query) getWatermark(ctx context.Context, colName string) (watermark tim return watermark, nil } -func parseTimeRangeArgs(args []ast.ExprNode) (duration.Duration, int, string, error) { +func parseTimeRangeArgs(args []ast.ExprNode) (*rilltime.Expression, string, error) { if len(args) == 0 { - return nil, 0, "", fmt.Errorf("metrics sql: mandatory arg duration missing for time_range_end() function") + return nil, "", fmt.Errorf("metrics sql: mandatory arg duration missing for time_range_end() function") } - if len(args) > 3 { - return nil, 0, "", fmt.Errorf("metrics sql: time_range_end() function expects at most 3 arguments") + if len(args) > 2 { + return nil, "", fmt.Errorf("metrics sql: time_range_end() function expects at most 2 arguments") } // identify optional args var ( - col string - unit int - err error + col string + err error ) - // identify unit - if len(args) == 1 { - unit = 1 - } else { - val, err := parseValueExpr(args[1]) - if err != nil { - return nil, 0, "", err - } - unit, err = strconv.Atoi(val) - if err != nil { - return nil, 0, "", err - } - } // identify column name - if len(args) == 3 { - col, err = parseColumnNameExpr(args[2]) + if len(args) == 2 { + col, err = parseColumnNameExpr(args[1]) if err != nil { - return nil, 0, "", err + return nil, "", err } } du, err := parseValueExpr(args[0]) if err != nil { - return nil, 0, "", err + return nil, "", err } - d, err := duration.ParseISO8601(strings.TrimSuffix(strings.TrimPrefix(du, "'"), "'")) + rt, err := rilltime.Parse(strings.TrimSuffix(strings.TrimPrefix(du, "'"), "'")) if err != nil { - return nil, 0, "", fmt.Errorf("metrics sql: invalid ISO8601 duration %s", du) + return nil, "", fmt.Errorf("metrics sql: invalid ISO8601 duration %s", du) } - return d, unit, col, nil + return rt, col, nil } diff --git a/runtime/pkg/rilltime/rilltime.go b/runtime/pkg/rilltime/rilltime.go new file mode 100644 index 00000000000..de39edbac5c --- /dev/null +++ b/runtime/pkg/rilltime/rilltime.go @@ -0,0 +1,389 @@ +package rilltime + +import ( + "fmt" + "regexp" + "strings" + "time" + + "github.com/alecthomas/participle/v2" + "github.com/alecthomas/participle/v2/lexer" + "github.com/rilldata/rill/runtime/pkg/duration" + "github.com/rilldata/rill/runtime/pkg/timeutil" +) + +var ( + infPattern = regexp.MustCompile("^(?i)inf$") + durationPattern = regexp.MustCompile(`^P((?P\d+)Y)?((?P\d+)M)?((?P\d+)W)?((?P\d+)D)?(T((?P\d+)H)?((?P\d+)M)?((?P\d+)S)?)?$`) + // nolint:govet // This is suggested usage by the docs. + rillTimeLexer = lexer.MustSimple([]lexer.SimpleRule{ + {"Earliest", "earliest"}, + {"Now", "now"}, + {"Latest", "latest"}, + {"Watermark", "watermark"}, + // this needs to be after Now and Latest to match to them + {"Grain", `[smhdDWQMY]`}, + // this has to be at the end + {"TimeZone", `{.+?}`}, + {"AbsoluteTime", `\d{4}-\d{2}-\d{2} \d{2}:\d{2}`}, + {"AbsoluteDate", `\d{4}-\d{2}-\d{2}`}, + {"Number", `[-+]?\d+`}, + // needed for misc. direct character references used + {"Punct", `[-[!@#$%^&*()+_={}\|:;"'<,>.?/]|]`}, + {"Whitespace", `[ \t\n\r]+`}, + }) + daxNotations = map[string]string{ + // Mapping for our old rill- syntax + "TD": "0d,latest", + "WTD": "0W,latest", + "MTD": "0M,latest", + "QTD": "0Q,latest", + "YTD": "0Y,latest", + "PDC": "-1d,0d", + "PWC": "-1W,0W", + "PMC": "-1M,0M", + "PQC": "-1Q,0Q", + "PYC": "-1Y,0Y", + // TODO: previous period is contextual. should be handled in UI + "PP": "", + "PD": "-1d,0d", + "PW": "-1W,0W", + "PM": "-1M,0M", + "PQ": "-1Q,0Q", + "PY": "-1Y,0Y", + } + rillTimeParser = participle.MustBuild[Expression]( + participle.Lexer(rillTimeLexer), + participle.Elide("Whitespace"), + ) + grainMap = map[string]timeutil.TimeGrain{ + "s": timeutil.TimeGrainSecond, + "m": timeutil.TimeGrainMinute, + "h": timeutil.TimeGrainHour, + "d": timeutil.TimeGrainDay, + "D": timeutil.TimeGrainDay, + "W": timeutil.TimeGrainWeek, + "Q": timeutil.TimeGrainQuarter, + "M": timeutil.TimeGrainMonth, + "Y": timeutil.TimeGrainYear, + } +) + +type Expression struct { + Start *TimeAnchor `parser:" @@"` + End *TimeAnchor `parser:"(',' @@)?"` + Modifiers *Modifiers `parser:"(':' @@)?"` + AtModifiers *AtModifiers `parser:"('@' @@)?"` + isNewFormat bool + grain *Grain + truncateGrain timeutil.TimeGrain + isComplete bool + timeZone *time.Location +} + +type TimeAnchor struct { + Grain *Grain `parser:"( @@"` + AbsDate *string `parser:"| @AbsoluteDate"` + AbsTime *string `parser:"| @AbsoluteTime"` + Earliest bool `parser:"| @Earliest"` + Now bool `parser:"| @Now"` + Latest bool `parser:"| @Latest"` + Watermark bool `parser:"| @Watermark)"` + Offset *Grain `parser:"@@?"` + Trunc *string `parser:" ('/' @Grain)?"` + isoDuration *duration.StandardDuration +} + +type Modifiers struct { + Grain *Grain `parser:"( @@"` + CompleteGrain *Grain `parser:"| '|' @@ '|')?"` +} + +type Grain struct { + Num *int `parser:"@Number?"` + Grain string `parser:"@Grain"` +} + +type AtModifiers struct { + Offset *TimeAnchor `parser:"@@?"` + TimeZone *string `parser:"@TimeZone?"` +} + +type EvalOptions struct { + Now time.Time + MinTime time.Time + MaxTime time.Time + Watermark time.Time + FirstDay int + FirstMonth int +} + +func Parse(from string) (*Expression, error) { + var rt *Expression + var err error + + rt, err = ParseISO(from, false) + if err != nil { + return nil, err + } + + if rt == nil { + rt, err = rillTimeParser.ParseString("", from) + if err != nil { + return nil, err + } + rt.isNewFormat = true + } + + rt.timeZone = time.UTC + if rt.Modifiers != nil { + if rt.Modifiers.Grain != nil { + rt.truncateGrain = grainMap[rt.Modifiers.Grain.Grain] + rt.grain = rt.Modifiers.Grain + // TODO: non-1 grains + } else if rt.Modifiers.CompleteGrain != nil { + rt.truncateGrain = grainMap[rt.Modifiers.CompleteGrain.Grain] + rt.grain = rt.Modifiers.CompleteGrain + // TODO: non-1 grains + rt.isComplete = true + } + } + if rt.AtModifiers != nil && rt.AtModifiers.TimeZone != nil { + var err error + rt.timeZone, err = time.LoadLocation(strings.Trim(*rt.AtModifiers.TimeZone, "{}")) + if err != nil { + return nil, fmt.Errorf("invalid time zone %q: %w", *rt.AtModifiers.TimeZone, err) + } + } + + if rt.End == nil { + rt.End = &TimeAnchor{ + Now: true, + } + } + + return rt, nil +} + +func ParseISO(from string, strict bool) (*Expression, error) { + // Try parsing for "inf" + if infPattern.MatchString(from) { + return &Expression{ + Start: &TimeAnchor{Earliest: true}, + End: &TimeAnchor{Latest: true}, + }, nil + } + + if strings.HasPrefix(from, "rill-") { + // We are using "rill-" as a prefix to DAX notation so that it doesn't interfere with ISO8601 standard. + // Pulled from https://www.daxpatterns.com/standard-time-related-calculations/ + rillDur := strings.Replace(from, "rill-", "", 1) + if t, ok := daxNotations[rillDur]; ok { + return Parse(t) + } + } + + // Parse as a regular ISO8601 duration + if !durationPattern.MatchString(from) { + if !strict { + return nil, nil + } + return nil, fmt.Errorf("string %q is not a valid ISO 8601 duration", from) + } + + rt := &Expression{ + Start: &TimeAnchor{}, + End: &TimeAnchor{Latest: true}, + // mirrors old UI behaviour + isComplete: false, + } + d, err := duration.ParseISO8601(from) + if err != nil { + if !strict { + return nil, nil + } + return nil, err + } + sd, ok := d.(duration.StandardDuration) + if !ok { + if !strict { + return nil, nil + } + return nil, fmt.Errorf("duration %q is invalid iso format", from) + } + rt.Start.isoDuration = &sd + minGrain := getMinGrain(sd) + if minGrain != "" { + rt.grain = &Grain{ + Grain: minGrain, + } + } + + return rt, nil +} + +func ParseCompatibility(timeRange, offset string) error { + isNewFormat := false + if timeRange != "" { + rt, err := Parse(timeRange) + if err != nil { + return fmt.Errorf("invalid comparison range %q: %w", timeRange, err) + } + isNewFormat = rt.isNewFormat + } + if offset != "" { + if isNewFormat { + return fmt.Errorf("offset cannot be provided along with rill time range") + } + if err := duration.ValidateISO8601(offset, false, false); err != nil { + return fmt.Errorf("invalid comparison offset %q: %w", offset, err) + } + } + return nil +} + +func (e *Expression) Eval(evalOpts EvalOptions) (time.Time, time.Time, error) { + start := evalOpts.Now + if e.End != nil && e.End.Latest { + // if end has latest mentioned then start also should be relative to latest. + start = evalOpts.MaxTime + } + + if e.Start != nil { + start = e.Modify(evalOpts, e.Start, start, true) + } + + end := evalOpts.Now + if e.End != nil { + end = e.Modify(evalOpts, e.End, end, true) + } + + return start, end, nil +} + +func (e *Expression) Modify(evalOpts EvalOptions, ta *TimeAnchor, tm time.Time, addOffset bool) time.Time { + isTruncate := true + truncateGrain := e.truncateGrain + isBoundary := false + + if ta.isoDuration != nil { + // handling for old iso format + tm = ta.isoDuration.Sub(evalOpts.MaxTime.In(e.timeZone)) + isTruncate = true + if e.grain != nil && e.grain.Grain != "" { + truncateGrain = grainMap[e.grain.Grain] + } + } else if ta.Now { + tm = evalOpts.Now.In(e.timeZone) + isTruncate = e.isComplete + isBoundary = true + } else if ta.Earliest { + tm = evalOpts.MinTime.In(e.timeZone) + isTruncate = true + } else if ta.Latest { + tm = evalOpts.MaxTime.In(e.timeZone) + isTruncate = e.isComplete + isBoundary = true + } else if ta.Watermark { + tm = evalOpts.Watermark.In(e.timeZone) + isTruncate = e.isComplete + isBoundary = true + } else if ta.AbsDate != nil { + absTm, _ := time.Parse(time.DateOnly, *ta.AbsDate) + tm = absTm.In(e.timeZone) + } else if ta.AbsTime != nil { + absTm, _ := time.Parse("2006-01-02 15:04", *ta.AbsTime) + tm = absTm.In(e.timeZone) + } else if ta.Grain != nil { + tm = ta.Grain.offset(tm.In(e.timeZone)) + + truncateGrain = grainMap[ta.Grain.Grain] + isTruncate = true + } else { + return tm.In(e.timeZone) + } + + timeBeforeOffset := tm + if ta.Offset != nil { + tm = ta.Offset.offset(tm) + } + if addOffset && e.AtModifiers != nil && e.AtModifiers.Offset != nil { + tm = e.Modify(evalOpts, e.AtModifiers.Offset, tm, false) + } + + if ta.Trunc != nil { + truncateGrain = grainMap[*ta.Trunc] + isTruncate = true + } + + modifiedTime := tm + if isTruncate { + modifiedTime = timeutil.TruncateTime(tm, truncateGrain, e.timeZone, evalOpts.FirstDay, evalOpts.FirstMonth) + } else { + modifiedTime = timeutil.CeilTime(tm, truncateGrain, e.timeZone, evalOpts.FirstDay, evalOpts.FirstMonth) + } + + if isBoundary && modifiedTime.Equal(timeBeforeOffset) { + // edge case where the end time falls on a boundary. add +1grain to make sure the last data point is included + n := 1 + g := &Grain{ + Num: &n, + Grain: "s", + } + if e.grain != nil { + g.Grain = e.grain.Grain + } + modifiedTime = g.offset(modifiedTime) + } + + return modifiedTime +} + +func (g *Grain) offset(tm time.Time) time.Time { + n := 0 + if g.Num != nil { + n = *g.Num + } + + switch g.Grain { + case "s": + tm = tm.Add(time.Duration(n) * time.Second) + case "m": + tm = tm.Add(time.Duration(n) * time.Minute) + case "h": + tm = tm.Add(time.Duration(n) * time.Hour) + case "d": + tm = tm.AddDate(0, 0, n) + case "D": + tm = tm.AddDate(0, 0, n) + case "W": + tm = tm.AddDate(0, 0, n*7) + case "M": + tm = tm.AddDate(0, n, 0) + case "Q": + tm = tm.AddDate(0, n*3, 0) + case "Y": + tm = tm.AddDate(n, 0, 0) + } + + return tm +} + +func getMinGrain(d duration.StandardDuration) string { + if d.Second != 0 { + return "s" + } else if d.Minute != 0 { + return "m" + } else if d.Hour != 0 { + return "h" + } else if d.Day != 0 { + return "D" + } else if d.Week != 0 { + return "W" + } else if d.Month != 0 { + return "M" + } else if d.Year != 0 { + return "Y" + } + return "" +} diff --git a/runtime/pkg/rilltime/rilltime_test.go b/runtime/pkg/rilltime/rilltime_test.go new file mode 100644 index 00000000000..c859a661011 --- /dev/null +++ b/runtime/pkg/rilltime/rilltime_test.go @@ -0,0 +1,82 @@ +package rilltime + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func Test_Resolve(t *testing.T) { + now := parseTestTime(t, "2024-08-09T10:32:36Z") + maxTime := parseTestTime(t, "2024-08-06T06:32:36Z") + watermark := parseTestTime(t, "2024-08-05T06:32:36Z") + testCases := []struct { + timeRange string + start string + end string + }{ + // Earliest = 2023-08-09T10:32:36Z, Latest = 2024-08-06T06:32:36Z, = Now = 2024-08-09T10:32:36Z + {`m : |s|`, "2024-08-09T10:32:00Z", "2024-08-09T10:32:37Z"}, + {`m : s`, "2024-08-09T10:32:00Z", "2024-08-09T10:32:37Z"}, + {`-5m : |m|`, "2024-08-09T10:27:00Z", "2024-08-09T10:32:00Z"}, + {`-5m, 0m : |m|`, "2024-08-09T10:27:00Z", "2024-08-09T10:32:00Z"}, + {`h : m`, "2024-08-09T10:00:00Z", "2024-08-09T10:33:00Z"}, + {`-7d, 0d : |h|`, "2024-08-02T00:00:00Z", "2024-08-09T00:00:00Z"}, + {`-7d, now/d : |h|`, "2024-08-02T00:00:00Z", "2024-08-09T00:00:00Z"}, + {`-6d, now : |h|`, "2024-08-03T00:00:00Z", "2024-08-09T10:00:00Z"}, + {`-6d, now : h`, "2024-08-03T00:00:00Z", "2024-08-09T11:00:00Z"}, + + {`-7d, -5d : h`, "2024-08-02T00:00:00Z", "2024-08-04T00:00:00Z"}, + {`-2d, now/d : h @ -5d`, "2024-08-02T00:00:00Z", "2024-08-04T00:00:00Z"}, + {`-2d, now/d @ -5d`, "2024-08-02T00:00:00Z", "2024-08-04T00:00:00Z"}, + + {`watermark-7D, watermark : h`, "2024-07-29T07:00:00Z", "2024-08-05T07:00:00Z"}, + + {`-7d, now/d : h @ {Asia/Kathmandu}`, "2024-08-01T18:15:00Z", "2024-08-08T18:15:00Z"}, + {`-7d, now/d : |h| @ {Asia/Kathmandu}`, "2024-08-01T18:15:00Z", "2024-08-08T18:15:00Z"}, + {`-7d, now/d : |h| @ -5d {Asia/Kathmandu}`, "2024-07-27T18:15:00Z", "2024-08-03T18:15:00Z"}, + + {`-7d, latest/d : |h|`, "2024-07-30T00:00:00Z", "2024-08-06T00:00:00Z"}, + {`-6d, latest : |h|`, "2024-07-31T00:00:00Z", "2024-08-06T06:00:00Z"}, + {`-6d, latest : h`, "2024-07-31T00:00:00Z", "2024-08-06T07:00:00Z"}, + {`2024-03-01-7d, 2024-03-01`, "2024-02-23T00:00:00Z", "2024-03-01T00:00:00Z"}, + {`2024-03-01-7d, 2024-03-01 @-2d`, "2024-02-21T00:00:00Z", "2024-02-28T00:00:00Z"}, + + {`2024-01-01, latest : h`, "2024-01-01T00:00:00Z", "2024-08-06T07:00:00Z"}, + {`2024-01-01 12:00, latest : h`, "2024-01-01T12:00:00Z", "2024-08-06T07:00:00Z"}, + + {`2024-01-01+5d, latest : h`, "2024-01-06T00:00:00Z", "2024-08-06T07:00:00Z"}, + {`-7W+5d, latest : h`, "2024-06-17T00:00:00Z", "2024-08-06T07:00:00Z"}, + {`-7W+8d, latest : h`, "2024-06-24T00:00:00Z", "2024-08-06T07:00:00Z"}, + + {"P2DT10H", "2024-08-03T20:00:00Z", "2024-08-06T07:32:36Z"}, + {"rill-MTD", "2024-08-01T00:00:00Z", "2024-08-06T06:32:37Z"}, + {"rill-PW", "2024-07-29T00:00:00Z", "2024-08-05T00:00:00Z"}, + } + + for _, tc := range testCases { + t.Run(tc.timeRange, func(t *testing.T) { + rillTime, err := Parse(tc.timeRange) + require.NoError(t, err) + + start, end, err := rillTime.Eval(EvalOptions{ + Now: now, + MinTime: now.AddDate(-1, 0, 0), + MaxTime: maxTime, + Watermark: watermark, + FirstDay: 1, + FirstMonth: 1, + }) + require.NoError(t, err) + require.Equal(t, parseTestTime(t, tc.start), start) + require.Equal(t, parseTestTime(t, tc.end), end) + }) + } +} + +func parseTestTime(tst *testing.T, t string) time.Time { + ts, err := time.Parse(time.RFC3339, t) + require.NoError(tst, err) + return ts +} diff --git a/runtime/pkg/timeutil/timeutil.go b/runtime/pkg/timeutil/timeutil.go index ad90faa4761..5fff1d60bdf 100644 --- a/runtime/pkg/timeutil/timeutil.go +++ b/runtime/pkg/timeutil/timeutil.go @@ -91,3 +91,33 @@ func TruncateTime(start time.Time, tg TimeGrain, tz *time.Location, firstDay, fi return start } + +func CeilTime(start time.Time, tg TimeGrain, tz *time.Location, firstDay, firstMonth int) time.Time { + truncated := TruncateTime(start, tg, tz, firstDay, firstMonth) + if start.Equal(truncated) { + return start + } + + switch tg { + case TimeGrainUnspecified, TimeGrainMillisecond: + return start + case TimeGrainSecond: + start = start.Add(time.Second) + case TimeGrainMinute: + start = start.Add(time.Minute) + case TimeGrainHour: + start = start.Add(time.Hour) + case TimeGrainDay: + start = start.AddDate(0, 0, 1) + case TimeGrainWeek: + start = start.AddDate(0, 0, 7) + case TimeGrainMonth: + start = start.AddDate(0, 1, 0) + case TimeGrainQuarter: + start = start.AddDate(0, 3, 0) + case TimeGrainYear: + start = start.AddDate(1, 0, 0) + } + + return TruncateTime(start, tg, tz, firstDay, firstMonth) +} diff --git a/runtime/queries/metricsview_aggregation.go b/runtime/queries/metricsview_aggregation.go index 6b5ff7a81c7..8012a7bdfb3 100644 --- a/runtime/queries/metricsview_aggregation.go +++ b/runtime/queries/metricsview_aggregation.go @@ -253,6 +253,7 @@ func (q *MetricsViewAggregation) rewriteToMetricsViewQuery(export bool) (*metric if q.TimeRange.End != nil { res.End = q.TimeRange.End.AsTime() } + res.Expression = q.TimeRange.Expression res.IsoDuration = q.TimeRange.IsoDuration res.IsoOffset = q.TimeRange.IsoOffset res.RoundToGrain = metricsview.TimeGrainFromProto(q.TimeRange.RoundToGrain) @@ -267,6 +268,7 @@ func (q *MetricsViewAggregation) rewriteToMetricsViewQuery(export bool) (*metric if q.ComparisonTimeRange.End != nil { res.End = q.ComparisonTimeRange.End.AsTime() } + res.Expression = q.ComparisonTimeRange.Expression res.IsoDuration = q.ComparisonTimeRange.IsoDuration res.IsoOffset = q.ComparisonTimeRange.IsoOffset res.RoundToGrain = metricsview.TimeGrainFromProto(q.ComparisonTimeRange.RoundToGrain) diff --git a/runtime/queries/metricsview_aggregation_test.go b/runtime/queries/metricsview_aggregation_test.go index 275ba972407..533333ccdd8 100644 --- a/runtime/queries/metricsview_aggregation_test.go +++ b/runtime/queries/metricsview_aggregation_test.go @@ -104,6 +104,9 @@ func TestMetricViewAggregationAgainstDuckDB(t *testing.T) { t.Run("testMetricsViewsAggregation_comparison_with_offset_and_limit_and_delta", func(t *testing.T) { testMetricsViewsAggregation_comparison_with_offset_and_limit_and_delta(t, rt, instanceID) }) + t.Run("testMetricsViewsAggregation_comparison_using_rill_time", func(t *testing.T) { + testMetricsViewsAggregation_comparison_using_rill_time(t, rt, instanceID) + }) } func testClaims() *runtime.SecurityClaims { @@ -4919,6 +4922,68 @@ func testMetricsViewAggregation_percent_of_totals_with_limit(t *testing.T, rt *r require.Equal(t, "news.google.com,256.00,0.23", fieldsToString2digits(rows[i], "domain", "total_records", "total_records__pt")) } +func testMetricsViewsAggregation_comparison_using_rill_time(t *testing.T, rt *runtime.Runtime, instanceID string) { + q := &queries.MetricsViewAggregation{ + MetricsViewName: "ad_bids_metrics", + Dimensions: []*runtimev1.MetricsViewAggregationDimension{ + { + Name: "dom", + }, + }, + Measures: []*runtimev1.MetricsViewAggregationMeasure{ + { + Name: "m1", + }, + { + Name: "m1__p", + Compute: &runtimev1.MetricsViewAggregationMeasure_ComparisonValue{ + ComparisonValue: &runtimev1.MetricsViewAggregationMeasureComputeComparisonValue{ + Measure: "m1", + }, + }, + }, + }, + Sort: []*runtimev1.MetricsViewAggregationSort{ + { + Name: "dom", + Desc: true, + }, + }, + + TimeRange: &runtimev1.TimeRange{ + Expression: "2022-03-01-7d,2022-03-01", + }, + ComparisonTimeRange: &runtimev1.TimeRange{ + Expression: "2022-03-01-7d,2022-03-01 @-7d", + }, + SecurityClaims: testClaims(), + } + err := q.Resolve(context.Background(), rt, instanceID, 0) + require.NoError(t, err) + require.NotEmpty(t, q.Result) + fields := q.Result.Schema.Fields + require.Equal(t, "dom,m1,m1__p", columnNames(fields)) + i := 0 + + rows := q.Result.Data + require.Equal(t, 7, len(rows)) + + i = 0 + require.Equal(t, "sports.yahoo.com,1.51,1.50", fieldsToString2digits(rows[i], "dom", "m1", "m1__p")) + i++ + require.Equal(t, "news.yahoo.com,3.81,3.85", fieldsToString2digits(rows[i], "dom", "m1", "m1__p")) + i++ + require.Equal(t, "news.google.com,1.50,1.50", fieldsToString2digits(rows[i], "dom", "m1", "m1__p")) + i++ + require.Equal(t, "msn.com,1.84,1.48", fieldsToString2digits(rows[i], "dom", "m1", "m1__p")) + i++ + require.Equal(t, "instagram.com,1.49,1.50", fieldsToString2digits(rows[i], "dom", "m1", "m1__p")) + i++ + require.Equal(t, "google.com,3.83,3.82", fieldsToString2digits(rows[i], "dom", "m1", "m1__p")) + i++ + require.Equal(t, "facebook.com,1.84,1.51", fieldsToString2digits(rows[i], "dom", "m1", "m1__p")) +} + func fieldsToString2digits(row *structpb.Struct, args ...string) string { s := make([]string, 0, len(args)) for _, arg := range args { diff --git a/runtime/queries/metricsview_resolve_time_ranges.go b/runtime/queries/metricsview_resolve_time_ranges.go new file mode 100644 index 00000000000..03d1fea3f8f --- /dev/null +++ b/runtime/queries/metricsview_resolve_time_ranges.go @@ -0,0 +1,116 @@ +package queries + +import ( + "context" + "encoding/json" + "fmt" + "io" + "time" + + runtimev1 "github.com/rilldata/rill/proto/gen/rill/runtime/v1" + "github.com/rilldata/rill/runtime" + "github.com/rilldata/rill/runtime/metricsview" + "github.com/rilldata/rill/runtime/pkg/rilltime" + "google.golang.org/protobuf/types/known/timestamppb" +) + +type MetricsViewTimeRanges struct { + MetricsViewName string `json:"metrics_view_name,omitempty"` + MinTime time.Time `json:"min_time,omitempty"` + MaxTime time.Time `json:"max_time,omitempty"` + Expressions []string `json:"expressions,omitempty"` + SecurityClaims *runtime.SecurityClaims `json:"security_claims,omitempty"` + + Result *runtimev1.MetricsViewTimeRangesResponse `json:"-"` +} + +var _ runtime.Query = &MetricsViewTimeRanges{} + +func (q *MetricsViewTimeRanges) Key() string { + r, err := json.Marshal(q) + if err != nil { + panic(err) + } + return fmt.Sprintf("MetricsViewTimeRanges:%s", string(r)) +} + +func (q *MetricsViewTimeRanges) Deps() []*runtimev1.ResourceName { + return []*runtimev1.ResourceName{ + {Kind: runtime.ResourceKindMetricsView, Name: q.MetricsViewName}, + } +} + +func (q *MetricsViewTimeRanges) MarshalResult() *runtime.QueryResult { + return &runtime.QueryResult{ + Value: q.Result, + Bytes: sizeProtoMessage(q.Result), + } +} + +func (q *MetricsViewTimeRanges) UnmarshalResult(v any) error { + res, ok := v.(*runtimev1.MetricsViewTimeRangesResponse) + if !ok { + return fmt.Errorf("MetricsViewTimeRanges: mismatched unmarshal input") + } + q.Result = res + return nil +} + +func (q *MetricsViewTimeRanges) Resolve(ctx context.Context, rt *runtime.Runtime, instanceID string, priority int) error { + // Resolve metrics view + mv, sec, err := resolveMVAndSecurityFromAttributes(ctx, rt, instanceID, q.MetricsViewName, q.SecurityClaims) + if err != nil { + return err + } + + e, err := metricsview.NewExecutor(ctx, rt, instanceID, mv.ValidSpec, false, sec, priority) + if err != nil { + return err + } + defer e.Close() + + watermark, err := e.Watermark(ctx) + if err != nil { + return err + } + + // to keep results consistent + now := time.Now() + + timeRanges := make([]*runtimev1.TimeRange, len(q.Expressions)) + for i, tr := range q.Expressions { + rillTime, err := rilltime.Parse(tr) + if err != nil { + return fmt.Errorf("error parsing time range %s: %w", tr, err) + } + + start, end, err := rillTime.Eval(rilltime.EvalOptions{ + Now: now, + MinTime: q.MinTime, + MaxTime: q.MaxTime, + Watermark: watermark, + FirstDay: int(mv.ValidSpec.FirstDayOfWeek), + FirstMonth: int(mv.ValidSpec.FirstMonthOfYear), + }) + if err != nil { + return err + } + + timeRanges[i] = &runtimev1.TimeRange{ + Start: timestamppb.New(start), + End: timestamppb.New(end), + // for a reference + Expression: tr, + } + } + + q.Result = &runtimev1.MetricsViewTimeRangesResponse{ + TimeRanges: timeRanges, + } + + return nil +} + +func (q *MetricsViewTimeRanges) Export(ctx context.Context, rt *runtime.Runtime, instanceID string, w io.Writer, opts *runtime.ExportOptions) error { + return nil +} diff --git a/runtime/server/queries_metrics.go b/runtime/server/queries_metrics.go index 9ac6321e3f4..42afee74997 100644 --- a/runtime/server/queries_metrics.go +++ b/runtime/server/queries_metrics.go @@ -401,6 +401,48 @@ func (s *Server) MetricsViewSearch(ctx context.Context, req *runtimev1.MetricsVi return q.Result, nil } +func (s *Server) MetricsViewTimeRanges(ctx context.Context, req *runtimev1.MetricsViewTimeRangesRequest) (*runtimev1.MetricsViewTimeRangesResponse, error) { + observability.AddRequestAttributes(ctx, + attribute.String("args.instance_id", req.InstanceId), + attribute.String("args.metric_view", req.MetricsViewName), + attribute.StringSlice("args.expressions", req.Expressions), + ) + + if !auth.GetClaims(ctx).CanInstance(req.InstanceId, auth.ReadMetrics) { + return nil, ErrForbidden + } + s.addInstanceRequestAttributes(ctx, req.InstanceId) + + mv, security, err := resolveMVAndSecurity(ctx, s.runtime, req.InstanceId, req.MetricsViewName) + if err != nil { + return nil, err + } + + timeRangeQuery := &queries.MetricsViewTimeRange{ + MetricsViewName: req.MetricsViewName, + MetricsView: mv.ValidSpec, + ResolvedMVSecurity: security, + } + err = s.runtime.Query(ctx, req.InstanceId, timeRangeQuery, int(req.Priority)) + if err != nil { + return nil, err + } + + q := &queries.MetricsViewTimeRanges{ + MetricsViewName: req.MetricsViewName, + MinTime: timeRangeQuery.Result.TimeRangeSummary.Min.AsTime(), + MaxTime: timeRangeQuery.Result.TimeRangeSummary.Max.AsTime(), + Expressions: req.Expressions, + SecurityClaims: auth.GetClaims(ctx).SecurityClaims(), + } + err = s.runtime.Query(ctx, req.InstanceId, q, int(req.Priority)) + if err != nil { + return nil, err + } + + return q.Result, nil +} + func resolveMVAndSecurity(ctx context.Context, rt *runtime.Runtime, instanceID, metricsViewName string) (*runtimev1.MetricsViewState, *runtime.ResolvedSecurity, error) { res, mv, err := lookupMetricsView(ctx, rt, instanceID, metricsViewName) if err != nil { diff --git a/web-common/src/proto/gen/rill/runtime/v1/queries_pb.ts b/web-common/src/proto/gen/rill/runtime/v1/queries_pb.ts index 6f70d1f8fc9..804ec85853b 100644 --- a/web-common/src/proto/gen/rill/runtime/v1/queries_pb.ts +++ b/web-common/src/proto/gen/rill/runtime/v1/queries_pb.ts @@ -2033,6 +2033,14 @@ export class TimeRange extends Message { */ timeZone = ""; + /** + * Optional. Rill format time range. Should only be used for alerts and reports. + * For dashboard call ResolveTimeRanges. + * + * @generated from field: string expression = 7; + */ + expression = ""; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -2047,6 +2055,7 @@ export class TimeRange extends Message { { no: 4, name: "iso_offset", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 5, name: "round_to_grain", kind: "enum", T: proto3.getEnumType(TimeGrain) }, { no: 6, name: "time_zone", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 7, name: "expression", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): TimeRange { @@ -3366,6 +3375,98 @@ export class MetricsViewSearchResponse_SearchResult extends Message { + /** + * @generated from field: string instance_id = 1; + */ + instanceId = ""; + + /** + * @generated from field: string metrics_view_name = 2; + */ + metricsViewName = ""; + + /** + * @generated from field: repeated string expressions = 3; + */ + expressions: string[] = []; + + /** + * @generated from field: int32 priority = 4; + */ + priority = 0; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "rill.runtime.v1.MetricsViewTimeRangesRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "metrics_view_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "expressions", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 4, name: "priority", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): MetricsViewTimeRangesRequest { + return new MetricsViewTimeRangesRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): MetricsViewTimeRangesRequest { + return new MetricsViewTimeRangesRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): MetricsViewTimeRangesRequest { + return new MetricsViewTimeRangesRequest().fromJsonString(jsonString, options); + } + + static equals(a: MetricsViewTimeRangesRequest | PlainMessage | undefined, b: MetricsViewTimeRangesRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(MetricsViewTimeRangesRequest, a, b); + } +} + +/** + * @generated from message rill.runtime.v1.MetricsViewTimeRangesResponse + */ +export class MetricsViewTimeRangesResponse extends Message { + /** + * @generated from field: repeated rill.runtime.v1.TimeRange time_ranges = 1; + */ + timeRanges: TimeRange[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "rill.runtime.v1.MetricsViewTimeRangesResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "time_ranges", kind: "message", T: TimeRange, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): MetricsViewTimeRangesResponse { + return new MetricsViewTimeRangesResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): MetricsViewTimeRangesResponse { + return new MetricsViewTimeRangesResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): MetricsViewTimeRangesResponse { + return new MetricsViewTimeRangesResponse().fromJsonString(jsonString, options); + } + + static equals(a: MetricsViewTimeRangesResponse | PlainMessage | undefined, b: MetricsViewTimeRangesResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(MetricsViewTimeRangesResponse, a, b); + } +} + /** * @generated from message rill.runtime.v1.ResolveCanvasRequest */ diff --git a/web-common/src/runtime-client/gen/index.schemas.ts b/web-common/src/runtime-client/gen/index.schemas.ts index f73d49de513..a208388beb0 100644 --- a/web-common/src/runtime-client/gen/index.schemas.ts +++ b/web-common/src/runtime-client/gen/index.schemas.ts @@ -240,6 +240,11 @@ export type QueryServiceMetricsViewTimeSeriesBody = { filter?: V1MetricsViewFilter; }; +export type QueryServiceMetricsViewTimeRangesBody = { + expressions?: string[]; + priority?: number; +}; + export type QueryServiceMetricsViewTimeRangeBody = { priority?: number; }; @@ -588,6 +593,12 @@ export interface V1TimeSeriesValue { records?: V1TimeSeriesValueRecords; } +export interface V1TimeSeriesTimeRange { + start?: string; + end?: string; + interval?: V1TimeGrain; +} + export interface V1TimeSeriesResponse { results?: V1TimeSeriesValue[]; spark?: V1TimeSeriesValue[]; @@ -616,12 +627,6 @@ export const V1TimeGrain = { TIME_GRAIN_YEAR: "TIME_GRAIN_YEAR", } as const; -export interface V1TimeSeriesTimeRange { - start?: string; - end?: string; - interval?: V1TimeGrain; -} - export interface V1TimeRange { start?: string; end?: string; @@ -629,6 +634,9 @@ export interface V1TimeRange { isoOffset?: string; roundToGrain?: V1TimeGrain; timeZone?: string; + /** Optional. Rill format time range. Should only be used for alerts and reports. +For dashboard call ResolveTimeRanges. */ + expression?: string; } export interface V1ThemeState { @@ -835,26 +843,6 @@ export const V1ResourceEvent = { RESOURCE_EVENT_DELETE: "RESOURCE_EVENT_DELETE", } as const; -export interface V1Resource { - meta?: V1ResourceMeta; - projectParser?: V1ProjectParser; - source?: V1SourceV2; - model?: V1ModelV2; - metricsView?: V1MetricsViewV2; - explore?: V1Explore; - migration?: V1Migration; - report?: V1Report; - alert?: V1Alert; - pullTrigger?: V1PullTrigger; - refreshTrigger?: V1RefreshTrigger; - bucketPlanner?: V1BucketPlanner; - theme?: V1Theme; - component?: V1Component; - canvas?: V1Canvas; - api?: V1API; - connector?: V1ConnectorV2; -} - export type V1ResolveComponentResponseRendererProperties = { [key: string]: any; }; @@ -889,6 +877,13 @@ The resources state.valid_spec.renderer_properties will have templating resolved referencedMetricsViews?: V1ResolveCanvasResponseReferencedMetricsViews; } +export interface V1ReportState { + nextRunOn?: string; + currentExecution?: V1ReportExecution; + executionHistory?: V1ReportExecution[]; + executionCount?: number; +} + export type V1ReportSpecAnnotations = { [key: string]: string }; export interface V1ReportSpec { @@ -917,18 +912,31 @@ export interface V1ReportExecution { finishedOn?: string; } -export interface V1ReportState { - nextRunOn?: string; - currentExecution?: V1ReportExecution; - executionHistory?: V1ReportExecution[]; - executionCount?: number; -} - export interface V1Report { spec?: V1ReportSpec; state?: V1ReportState; } +export interface V1Resource { + meta?: V1ResourceMeta; + projectParser?: V1ProjectParser; + source?: V1SourceV2; + model?: V1ModelV2; + metricsView?: V1MetricsViewV2; + explore?: V1Explore; + migration?: V1Migration; + report?: V1Report; + alert?: V1Alert; + pullTrigger?: V1PullTrigger; + refreshTrigger?: V1RefreshTrigger; + bucketPlanner?: V1BucketPlanner; + theme?: V1Theme; + component?: V1Component; + canvas?: V1Canvas; + api?: V1API; + connector?: V1ConnectorV2; +} + export interface V1RenameFileResponse { [key: string]: any; } @@ -937,6 +945,14 @@ export interface V1RefreshTriggerState { [key: string]: any; } +export interface V1RefreshTriggerSpec { + /** Resources to refresh. The refreshable types are sources, models, alerts, reports, and the project parser. +If a model is specified, a normal incremental refresh is triggered. Use the "models" field to trigger other kinds of model refreshes. */ + resources?: V1ResourceName[]; + /** Models to refresh. These are specified separately to enable more fine-grained configuration. */ + models?: V1RefreshModelTrigger[]; +} + export interface V1RefreshTrigger { spec?: V1RefreshTriggerSpec; state?: V1RefreshTriggerState; @@ -954,14 +970,6 @@ For non-incremental models, this is equivalent to a normal refresh. */ allErroredPartitions?: boolean; } -export interface V1RefreshTriggerSpec { - /** Resources to refresh. The refreshable types are sources, models, alerts, reports, and the project parser. -If a model is specified, a normal incremental refresh is triggered. Use the "models" field to trigger other kinds of model refreshes. */ - resources?: V1ResourceName[]; - /** Models to refresh. These are specified separately to enable more fine-grained configuration. */ - models?: V1RefreshModelTrigger[]; -} - export type V1ReconcileStatus = (typeof V1ReconcileStatus)[keyof typeof V1ReconcileStatus]; @@ -1318,6 +1326,10 @@ export interface V1MetricsViewTimeSeriesRequest { filter?: V1MetricsViewFilter; } +export interface V1MetricsViewTimeRangesResponse { + timeRanges?: V1TimeRange[]; +} + export interface V1MetricsViewTimeRangeResponse { timeRangeSummary?: V1TimeRangeSummary; } @@ -1382,12 +1394,21 @@ export interface V1MetricsViewSort { ascending?: boolean; } +export interface V1MetricsViewSearchResponse { + results?: MetricsViewSearchResponseSearchResult[]; +} + export interface V1MetricsViewSchemaResponse { schema?: V1StructType; } export type V1MetricsViewRowsResponseDataItem = { [key: string]: any }; +export interface V1MetricsViewRowsResponse { + meta?: V1MetricsViewColumn[]; + data?: V1MetricsViewRowsResponseDataItem[]; +} + export interface V1MetricsViewFilter { include?: MetricsViewFilterCond[]; exclude?: MetricsViewFilterCond[]; @@ -1501,11 +1522,6 @@ export interface V1MetricsViewColumn { nullable?: boolean; } -export interface V1MetricsViewRowsResponse { - meta?: V1MetricsViewColumn[]; - data?: V1MetricsViewRowsResponseDataItem[]; -} - export interface V1MetricsViewAggregationSort { name?: string; desc?: boolean; @@ -1518,6 +1534,31 @@ export interface V1MetricsViewAggregationResponse { data?: V1MetricsViewAggregationResponseDataItem[]; } +export interface V1MetricsViewAggregationRequest { + instanceId?: string; + metricsView?: string; + dimensions?: V1MetricsViewAggregationDimension[]; + measures?: V1MetricsViewAggregationMeasure[]; + sort?: V1MetricsViewAggregationSort[]; + timeRange?: V1TimeRange; + comparisonTimeRange?: V1TimeRange; + timeStart?: string; + timeEnd?: string; + pivotOn?: string[]; + aliases?: V1MetricsViewComparisonMeasureAlias[]; + where?: V1Expression; + /** Optional. If both where and where_sql are set, both will be applied with an AND between them. */ + whereSql?: string; + having?: V1Expression; + /** Optional. If both having and having_sql are set, both will be applied with an AND between them. */ + havingSql?: string; + limit?: string; + offset?: string; + priority?: number; + filter?: V1MetricsViewFilter; + exact?: boolean; +} + export interface V1MetricsViewAggregationMeasureComputeURI { dimension?: string; } @@ -1567,31 +1608,6 @@ export interface V1MetricsViewAggregationDimension { alias?: string; } -export interface V1MetricsViewAggregationRequest { - instanceId?: string; - metricsView?: string; - dimensions?: V1MetricsViewAggregationDimension[]; - measures?: V1MetricsViewAggregationMeasure[]; - sort?: V1MetricsViewAggregationSort[]; - timeRange?: V1TimeRange; - comparisonTimeRange?: V1TimeRange; - timeStart?: string; - timeEnd?: string; - pivotOn?: string[]; - aliases?: V1MetricsViewComparisonMeasureAlias[]; - where?: V1Expression; - /** Optional. If both where and where_sql are set, both will be applied with an AND between them. */ - whereSql?: string; - having?: V1Expression; - /** Optional. If both having and having_sql are set, both will be applied with an AND between them. */ - havingSql?: string; - limit?: string; - offset?: string; - priority?: number; - filter?: V1MetricsViewFilter; - exact?: boolean; -} - export interface V1MapType { keyType?: Runtimev1Type; valueType?: Runtimev1Type; @@ -1862,6 +1878,11 @@ export const V1ExploreWebView = { EXPLORE_WEB_VIEW_CANVAS: "EXPLORE_WEB_VIEW_CANVAS", } as const; +export interface V1ExploreTimeRange { + range?: string; + comparisonTimeRanges?: V1ExploreComparisonTimeRange[]; +} + export interface V1ExploreSpec { displayName?: string; description?: string; @@ -1914,11 +1935,6 @@ If not specified, it should fallback to the range of the base time range. */ range?: string; } -export interface V1ExploreTimeRange { - range?: string; - comparisonTimeRanges?: V1ExploreComparisonTimeRange[]; -} - export type V1ExploreComparisonMode = (typeof V1ExploreComparisonMode)[keyof typeof V1ExploreComparisonMode]; @@ -2727,10 +2743,6 @@ export interface MetricsViewSearchResponseSearchResult { value?: unknown; } -export interface V1MetricsViewSearchResponse { - results?: MetricsViewSearchResponseSearchResult[]; -} - export interface MetricsViewFilterCond { name?: string; in?: unknown[]; diff --git a/web-common/src/runtime-client/gen/query-service/query-service.ts b/web-common/src/runtime-client/gen/query-service/query-service.ts index bdd42107fae..d3efc2fe00d 100644 --- a/web-common/src/runtime-client/gen/query-service/query-service.ts +++ b/web-common/src/runtime-client/gen/query-service/query-service.ts @@ -39,6 +39,8 @@ import type { QueryServiceMetricsViewSearchBody, V1MetricsViewTimeRangeResponse, QueryServiceMetricsViewTimeRangeBody, + V1MetricsViewTimeRangesResponse, + QueryServiceMetricsViewTimeRangesBody, V1MetricsViewTimeSeriesResponse, QueryServiceMetricsViewTimeSeriesBody, V1MetricsViewToplistResponse, @@ -1073,6 +1075,68 @@ export const createQueryServiceMetricsViewTimeRange = < return query; }; +export const queryServiceMetricsViewTimeRanges = ( + instanceId: string, + metricsViewName: string, + queryServiceMetricsViewTimeRangesBody: QueryServiceMetricsViewTimeRangesBody, +) => { + return httpClient({ + url: `/v1/instances/${instanceId}/queries/metrics-views/${metricsViewName}/time-ranges`, + method: "post", + headers: { "Content-Type": "application/json" }, + data: queryServiceMetricsViewTimeRangesBody, + }); +}; + +export type QueryServiceMetricsViewTimeRangesMutationResult = NonNullable< + Awaited> +>; +export type QueryServiceMetricsViewTimeRangesMutationBody = + QueryServiceMetricsViewTimeRangesBody; +export type QueryServiceMetricsViewTimeRangesMutationError = + ErrorType; + +export const createQueryServiceMetricsViewTimeRanges = < + TError = ErrorType, + TContext = unknown, +>(options?: { + mutation?: CreateMutationOptions< + Awaited>, + TError, + { + instanceId: string; + metricsViewName: string; + data: QueryServiceMetricsViewTimeRangesBody; + }, + TContext + >; +}) => { + const { mutation: mutationOptions } = options ?? {}; + + const mutationFn: MutationFunction< + Awaited>, + { + instanceId: string; + metricsViewName: string; + data: QueryServiceMetricsViewTimeRangesBody; + } + > = (props) => { + const { instanceId, metricsViewName, data } = props ?? {}; + + return queryServiceMetricsViewTimeRanges(instanceId, metricsViewName, data); + }; + + return createMutation< + Awaited>, + TError, + { + instanceId: string; + metricsViewName: string; + data: QueryServiceMetricsViewTimeRangesBody; + }, + TContext + >(mutationFn, mutationOptions); +}; /** * @summary MetricsViewTimeSeries returns time series for the measures in the metrics view. It's a convenience API for querying a metrics view.