go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/proto/v1/test_history.pb.go (about)

     1  // Copyright 2022 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // Code generated by protoc-gen-go. DO NOT EDIT.
    16  // versions:
    17  // 	protoc-gen-go v1.32.0
    18  // 	protoc        v3.21.7
    19  // source: go.chromium.org/luci/analysis/proto/v1/test_history.proto
    20  
    21  package analysispb
    22  
    23  import prpc "go.chromium.org/luci/grpc/prpc"
    24  
    25  import (
    26  	context "context"
    27  	_ "google.golang.org/genproto/googleapis/api/annotations"
    28  	grpc "google.golang.org/grpc"
    29  	codes "google.golang.org/grpc/codes"
    30  	status "google.golang.org/grpc/status"
    31  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    32  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    33  	durationpb "google.golang.org/protobuf/types/known/durationpb"
    34  	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
    35  	reflect "reflect"
    36  	sync "sync"
    37  )
    38  
    39  const (
    40  	// Verify that this generated code is sufficiently up-to-date.
    41  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    42  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    43  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    44  )
    45  
    46  // A request message for `TestHistory.Query` RPC.
    47  type QueryTestHistoryRequest struct {
    48  	state         protoimpl.MessageState
    49  	sizeCache     protoimpl.SizeCache
    50  	unknownFields protoimpl.UnknownFields
    51  
    52  	// Required. The LUCI Project of the test results.
    53  	// I.e. For a result to be part of the history, it needs to be contained
    54  	// transitively by an invocation in this project.
    55  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
    56  	// Required. The test ID to query the history from.
    57  	TestId string `protobuf:"bytes,2,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"`
    58  	// Required. A test verdict in the response must satisfy this predicate.
    59  	Predicate *TestVerdictPredicate `protobuf:"bytes,3,opt,name=predicate,proto3" json:"predicate,omitempty"`
    60  	// The maximum number of entries to return.
    61  	//
    62  	// The service may return fewer than this value.
    63  	// If unspecified, at most 100 variants will be returned.
    64  	// The maximum value is 1000; values above 1000 will be coerced to 1000.
    65  	PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
    66  	// A page token, received from a previous call.
    67  	// Provide this to retrieve the subsequent page.
    68  	//
    69  	// When paginating, all other parameters provided to the next call MUST
    70  	// match the call that provided the page token.
    71  	PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
    72  }
    73  
    74  func (x *QueryTestHistoryRequest) Reset() {
    75  	*x = QueryTestHistoryRequest{}
    76  	if protoimpl.UnsafeEnabled {
    77  		mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[0]
    78  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
    79  		ms.StoreMessageInfo(mi)
    80  	}
    81  }
    82  
    83  func (x *QueryTestHistoryRequest) String() string {
    84  	return protoimpl.X.MessageStringOf(x)
    85  }
    86  
    87  func (*QueryTestHistoryRequest) ProtoMessage() {}
    88  
    89  func (x *QueryTestHistoryRequest) ProtoReflect() protoreflect.Message {
    90  	mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[0]
    91  	if protoimpl.UnsafeEnabled && x != nil {
    92  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
    93  		if ms.LoadMessageInfo() == nil {
    94  			ms.StoreMessageInfo(mi)
    95  		}
    96  		return ms
    97  	}
    98  	return mi.MessageOf(x)
    99  }
   100  
   101  // Deprecated: Use QueryTestHistoryRequest.ProtoReflect.Descriptor instead.
   102  func (*QueryTestHistoryRequest) Descriptor() ([]byte, []int) {
   103  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP(), []int{0}
   104  }
   105  
   106  func (x *QueryTestHistoryRequest) GetProject() string {
   107  	if x != nil {
   108  		return x.Project
   109  	}
   110  	return ""
   111  }
   112  
   113  func (x *QueryTestHistoryRequest) GetTestId() string {
   114  	if x != nil {
   115  		return x.TestId
   116  	}
   117  	return ""
   118  }
   119  
   120  func (x *QueryTestHistoryRequest) GetPredicate() *TestVerdictPredicate {
   121  	if x != nil {
   122  		return x.Predicate
   123  	}
   124  	return nil
   125  }
   126  
   127  func (x *QueryTestHistoryRequest) GetPageSize() int32 {
   128  	if x != nil {
   129  		return x.PageSize
   130  	}
   131  	return 0
   132  }
   133  
   134  func (x *QueryTestHistoryRequest) GetPageToken() string {
   135  	if x != nil {
   136  		return x.PageToken
   137  	}
   138  	return ""
   139  }
   140  
   141  // A response message for `TestHistory.Query` RPC.
   142  type QueryTestHistoryResponse struct {
   143  	state         protoimpl.MessageState
   144  	sizeCache     protoimpl.SizeCache
   145  	unknownFields protoimpl.UnknownFields
   146  
   147  	// The list of test verdicts.
   148  	// Test verdicts will be ordered by `partition_time` DESC, `variant_hash` ASC,
   149  	// `invocation_id` ASC.
   150  	Verdicts []*TestVerdict `protobuf:"bytes,1,rep,name=verdicts,proto3" json:"verdicts,omitempty"`
   151  	// This field will be set if there are more results to return.
   152  	// To get the next page of data, send the same request again, but include this
   153  	// token.
   154  	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
   155  }
   156  
   157  func (x *QueryTestHistoryResponse) Reset() {
   158  	*x = QueryTestHistoryResponse{}
   159  	if protoimpl.UnsafeEnabled {
   160  		mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[1]
   161  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   162  		ms.StoreMessageInfo(mi)
   163  	}
   164  }
   165  
   166  func (x *QueryTestHistoryResponse) String() string {
   167  	return protoimpl.X.MessageStringOf(x)
   168  }
   169  
   170  func (*QueryTestHistoryResponse) ProtoMessage() {}
   171  
   172  func (x *QueryTestHistoryResponse) ProtoReflect() protoreflect.Message {
   173  	mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[1]
   174  	if protoimpl.UnsafeEnabled && x != nil {
   175  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   176  		if ms.LoadMessageInfo() == nil {
   177  			ms.StoreMessageInfo(mi)
   178  		}
   179  		return ms
   180  	}
   181  	return mi.MessageOf(x)
   182  }
   183  
   184  // Deprecated: Use QueryTestHistoryResponse.ProtoReflect.Descriptor instead.
   185  func (*QueryTestHistoryResponse) Descriptor() ([]byte, []int) {
   186  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP(), []int{1}
   187  }
   188  
   189  func (x *QueryTestHistoryResponse) GetVerdicts() []*TestVerdict {
   190  	if x != nil {
   191  		return x.Verdicts
   192  	}
   193  	return nil
   194  }
   195  
   196  func (x *QueryTestHistoryResponse) GetNextPageToken() string {
   197  	if x != nil {
   198  		return x.NextPageToken
   199  	}
   200  	return ""
   201  }
   202  
   203  // A request message for `TestHistory.QueryStats` RPC.
   204  type QueryTestHistoryStatsRequest struct {
   205  	state         protoimpl.MessageState
   206  	sizeCache     protoimpl.SizeCache
   207  	unknownFields protoimpl.UnknownFields
   208  
   209  	// Required. The LUCI Project of the test results.
   210  	// I.e. For a result to be part of the history, it needs to be contained
   211  	// transitively by an invocation in this project.
   212  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
   213  	// Required. The test ID to query the history from.
   214  	TestId string `protobuf:"bytes,2,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"`
   215  	// Required. A test verdict in the response must satisfy this predicate.
   216  	Predicate *TestVerdictPredicate `protobuf:"bytes,3,opt,name=predicate,proto3" json:"predicate,omitempty"`
   217  	// The maximum number of entries to return.
   218  	//
   219  	// The service may return fewer than this value.
   220  	// If unspecified, at most 100 variants will be returned.
   221  	// The maximum value is 1000; values above 1000 will be coerced to 1000.
   222  	PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
   223  	// A page token, received from a previous call.
   224  	// Provide this to retrieve the subsequent page.
   225  	//
   226  	// When paginating, all other parameters provided to the next call
   227  	// MUST match the call that provided the page token.
   228  	PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
   229  }
   230  
   231  func (x *QueryTestHistoryStatsRequest) Reset() {
   232  	*x = QueryTestHistoryStatsRequest{}
   233  	if protoimpl.UnsafeEnabled {
   234  		mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[2]
   235  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   236  		ms.StoreMessageInfo(mi)
   237  	}
   238  }
   239  
   240  func (x *QueryTestHistoryStatsRequest) String() string {
   241  	return protoimpl.X.MessageStringOf(x)
   242  }
   243  
   244  func (*QueryTestHistoryStatsRequest) ProtoMessage() {}
   245  
   246  func (x *QueryTestHistoryStatsRequest) ProtoReflect() protoreflect.Message {
   247  	mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[2]
   248  	if protoimpl.UnsafeEnabled && x != nil {
   249  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   250  		if ms.LoadMessageInfo() == nil {
   251  			ms.StoreMessageInfo(mi)
   252  		}
   253  		return ms
   254  	}
   255  	return mi.MessageOf(x)
   256  }
   257  
   258  // Deprecated: Use QueryTestHistoryStatsRequest.ProtoReflect.Descriptor instead.
   259  func (*QueryTestHistoryStatsRequest) Descriptor() ([]byte, []int) {
   260  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP(), []int{2}
   261  }
   262  
   263  func (x *QueryTestHistoryStatsRequest) GetProject() string {
   264  	if x != nil {
   265  		return x.Project
   266  	}
   267  	return ""
   268  }
   269  
   270  func (x *QueryTestHistoryStatsRequest) GetTestId() string {
   271  	if x != nil {
   272  		return x.TestId
   273  	}
   274  	return ""
   275  }
   276  
   277  func (x *QueryTestHistoryStatsRequest) GetPredicate() *TestVerdictPredicate {
   278  	if x != nil {
   279  		return x.Predicate
   280  	}
   281  	return nil
   282  }
   283  
   284  func (x *QueryTestHistoryStatsRequest) GetPageSize() int32 {
   285  	if x != nil {
   286  		return x.PageSize
   287  	}
   288  	return 0
   289  }
   290  
   291  func (x *QueryTestHistoryStatsRequest) GetPageToken() string {
   292  	if x != nil {
   293  		return x.PageToken
   294  	}
   295  	return ""
   296  }
   297  
   298  // A response message for `TestHistory.QueryStats` RPC.
   299  type QueryTestHistoryStatsResponse struct {
   300  	state         protoimpl.MessageState
   301  	sizeCache     protoimpl.SizeCache
   302  	unknownFields protoimpl.UnknownFields
   303  
   304  	// The list of test verdict groups. Test verdicts will be grouped and ordered
   305  	// by `partition_date` DESC, `variant_hash` ASC.
   306  	Groups []*QueryTestHistoryStatsResponse_Group `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"`
   307  	// This field will be set if there are more results to return.
   308  	// To get the next page of data, send the same request again, but include this
   309  	// token.
   310  	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
   311  }
   312  
   313  func (x *QueryTestHistoryStatsResponse) Reset() {
   314  	*x = QueryTestHistoryStatsResponse{}
   315  	if protoimpl.UnsafeEnabled {
   316  		mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[3]
   317  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   318  		ms.StoreMessageInfo(mi)
   319  	}
   320  }
   321  
   322  func (x *QueryTestHistoryStatsResponse) String() string {
   323  	return protoimpl.X.MessageStringOf(x)
   324  }
   325  
   326  func (*QueryTestHistoryStatsResponse) ProtoMessage() {}
   327  
   328  func (x *QueryTestHistoryStatsResponse) ProtoReflect() protoreflect.Message {
   329  	mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[3]
   330  	if protoimpl.UnsafeEnabled && x != nil {
   331  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   332  		if ms.LoadMessageInfo() == nil {
   333  			ms.StoreMessageInfo(mi)
   334  		}
   335  		return ms
   336  	}
   337  	return mi.MessageOf(x)
   338  }
   339  
   340  // Deprecated: Use QueryTestHistoryStatsResponse.ProtoReflect.Descriptor instead.
   341  func (*QueryTestHistoryStatsResponse) Descriptor() ([]byte, []int) {
   342  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP(), []int{3}
   343  }
   344  
   345  func (x *QueryTestHistoryStatsResponse) GetGroups() []*QueryTestHistoryStatsResponse_Group {
   346  	if x != nil {
   347  		return x.Groups
   348  	}
   349  	return nil
   350  }
   351  
   352  func (x *QueryTestHistoryStatsResponse) GetNextPageToken() string {
   353  	if x != nil {
   354  		return x.NextPageToken
   355  	}
   356  	return ""
   357  }
   358  
   359  // A request message for the `QueryVariants` RPC.
   360  type QueryVariantsRequest struct {
   361  	state         protoimpl.MessageState
   362  	sizeCache     protoimpl.SizeCache
   363  	unknownFields protoimpl.UnknownFields
   364  
   365  	// Required. The LUCI project to query the variants from.
   366  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
   367  	// Required. The test ID to query the variants from.
   368  	TestId string `protobuf:"bytes,2,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"`
   369  	// Optional. The project-scoped realm to query the variants from.
   370  	// This is the realm without the "<project>:" prefix.
   371  	//
   372  	// When specified, only the test variants found in the matching realm will be
   373  	// returned.
   374  	SubRealm string `protobuf:"bytes,3,opt,name=sub_realm,json=subRealm,proto3" json:"sub_realm,omitempty"`
   375  	// Optional. When specified, only variant matches this predicate will be
   376  	// returned.
   377  	VariantPredicate *VariantPredicate `protobuf:"bytes,6,opt,name=variant_predicate,json=variantPredicate,proto3" json:"variant_predicate,omitempty"`
   378  	// The maximum number of variants to return.
   379  	//
   380  	// The service may return fewer than this value.
   381  	// If unspecified, at most 100 variants will be returned.
   382  	// The maximum value is 1000; values above 1000 will be coerced to 1000.
   383  	PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
   384  	// A page token, received from a previous `QueryVariants` call.
   385  	// Provide this to retrieve the subsequent page.
   386  	//
   387  	// When paginating, all other parameters provided to `QueryVariants` MUST
   388  	// match the call that provided the page token.
   389  	PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
   390  }
   391  
   392  func (x *QueryVariantsRequest) Reset() {
   393  	*x = QueryVariantsRequest{}
   394  	if protoimpl.UnsafeEnabled {
   395  		mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[4]
   396  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   397  		ms.StoreMessageInfo(mi)
   398  	}
   399  }
   400  
   401  func (x *QueryVariantsRequest) String() string {
   402  	return protoimpl.X.MessageStringOf(x)
   403  }
   404  
   405  func (*QueryVariantsRequest) ProtoMessage() {}
   406  
   407  func (x *QueryVariantsRequest) ProtoReflect() protoreflect.Message {
   408  	mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[4]
   409  	if protoimpl.UnsafeEnabled && x != nil {
   410  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   411  		if ms.LoadMessageInfo() == nil {
   412  			ms.StoreMessageInfo(mi)
   413  		}
   414  		return ms
   415  	}
   416  	return mi.MessageOf(x)
   417  }
   418  
   419  // Deprecated: Use QueryVariantsRequest.ProtoReflect.Descriptor instead.
   420  func (*QueryVariantsRequest) Descriptor() ([]byte, []int) {
   421  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP(), []int{4}
   422  }
   423  
   424  func (x *QueryVariantsRequest) GetProject() string {
   425  	if x != nil {
   426  		return x.Project
   427  	}
   428  	return ""
   429  }
   430  
   431  func (x *QueryVariantsRequest) GetTestId() string {
   432  	if x != nil {
   433  		return x.TestId
   434  	}
   435  	return ""
   436  }
   437  
   438  func (x *QueryVariantsRequest) GetSubRealm() string {
   439  	if x != nil {
   440  		return x.SubRealm
   441  	}
   442  	return ""
   443  }
   444  
   445  func (x *QueryVariantsRequest) GetVariantPredicate() *VariantPredicate {
   446  	if x != nil {
   447  		return x.VariantPredicate
   448  	}
   449  	return nil
   450  }
   451  
   452  func (x *QueryVariantsRequest) GetPageSize() int32 {
   453  	if x != nil {
   454  		return x.PageSize
   455  	}
   456  	return 0
   457  }
   458  
   459  func (x *QueryVariantsRequest) GetPageToken() string {
   460  	if x != nil {
   461  		return x.PageToken
   462  	}
   463  	return ""
   464  }
   465  
   466  // A response message for the `QueryVariants` RPC.
   467  type QueryVariantsResponse struct {
   468  	state         protoimpl.MessageState
   469  	sizeCache     protoimpl.SizeCache
   470  	unknownFields protoimpl.UnknownFields
   471  
   472  	// A list of variants. Ordered by variant hash.
   473  	Variants []*QueryVariantsResponse_VariantInfo `protobuf:"bytes,1,rep,name=variants,proto3" json:"variants,omitempty"`
   474  	// A token, which can be sent as `page_token` to retrieve the next page.
   475  	// If this field is omitted, there were no subsequent pages at the time of
   476  	// request.
   477  	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
   478  }
   479  
   480  func (x *QueryVariantsResponse) Reset() {
   481  	*x = QueryVariantsResponse{}
   482  	if protoimpl.UnsafeEnabled {
   483  		mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[5]
   484  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   485  		ms.StoreMessageInfo(mi)
   486  	}
   487  }
   488  
   489  func (x *QueryVariantsResponse) String() string {
   490  	return protoimpl.X.MessageStringOf(x)
   491  }
   492  
   493  func (*QueryVariantsResponse) ProtoMessage() {}
   494  
   495  func (x *QueryVariantsResponse) ProtoReflect() protoreflect.Message {
   496  	mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[5]
   497  	if protoimpl.UnsafeEnabled && x != nil {
   498  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   499  		if ms.LoadMessageInfo() == nil {
   500  			ms.StoreMessageInfo(mi)
   501  		}
   502  		return ms
   503  	}
   504  	return mi.MessageOf(x)
   505  }
   506  
   507  // Deprecated: Use QueryVariantsResponse.ProtoReflect.Descriptor instead.
   508  func (*QueryVariantsResponse) Descriptor() ([]byte, []int) {
   509  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP(), []int{5}
   510  }
   511  
   512  func (x *QueryVariantsResponse) GetVariants() []*QueryVariantsResponse_VariantInfo {
   513  	if x != nil {
   514  		return x.Variants
   515  	}
   516  	return nil
   517  }
   518  
   519  func (x *QueryVariantsResponse) GetNextPageToken() string {
   520  	if x != nil {
   521  		return x.NextPageToken
   522  	}
   523  	return ""
   524  }
   525  
   526  // A request message for the `QueryTests` RPC.
   527  type QueryTestsRequest struct {
   528  	state         protoimpl.MessageState
   529  	sizeCache     protoimpl.SizeCache
   530  	unknownFields protoimpl.UnknownFields
   531  
   532  	// Required. The LUCI project to query the tests from.
   533  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
   534  	// Required. Only tests that contain the substring will be returned.
   535  	TestIdSubstring string `protobuf:"bytes,2,opt,name=test_id_substring,json=testIdSubstring,proto3" json:"test_id_substring,omitempty"`
   536  	// Optional. The project-scoped realm to query the variants from.
   537  	// This is the realm without the "<project>:" prefix.
   538  	//
   539  	// When specified, only the tests found in the matching realm will be
   540  	// returned.
   541  	SubRealm string `protobuf:"bytes,3,opt,name=sub_realm,json=subRealm,proto3" json:"sub_realm,omitempty"`
   542  	// The maximum number of test IDs to return.
   543  	//
   544  	// The service may return fewer than this value.
   545  	// If unspecified, at most 100 test IDs will be returned.
   546  	// The maximum value is 1000; values above 1000 will be coerced to 1000.
   547  	PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
   548  	// A page token, received from a previous `QueryTests` call.
   549  	// Provide this to retrieve the subsequent page.
   550  	//
   551  	// When paginating, all other parameters provided to `QueryTests` MUST
   552  	// match the call that provided the page token.
   553  	PageToken string `protobuf:"bytes,5,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
   554  }
   555  
   556  func (x *QueryTestsRequest) Reset() {
   557  	*x = QueryTestsRequest{}
   558  	if protoimpl.UnsafeEnabled {
   559  		mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[6]
   560  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   561  		ms.StoreMessageInfo(mi)
   562  	}
   563  }
   564  
   565  func (x *QueryTestsRequest) String() string {
   566  	return protoimpl.X.MessageStringOf(x)
   567  }
   568  
   569  func (*QueryTestsRequest) ProtoMessage() {}
   570  
   571  func (x *QueryTestsRequest) ProtoReflect() protoreflect.Message {
   572  	mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[6]
   573  	if protoimpl.UnsafeEnabled && x != nil {
   574  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   575  		if ms.LoadMessageInfo() == nil {
   576  			ms.StoreMessageInfo(mi)
   577  		}
   578  		return ms
   579  	}
   580  	return mi.MessageOf(x)
   581  }
   582  
   583  // Deprecated: Use QueryTestsRequest.ProtoReflect.Descriptor instead.
   584  func (*QueryTestsRequest) Descriptor() ([]byte, []int) {
   585  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP(), []int{6}
   586  }
   587  
   588  func (x *QueryTestsRequest) GetProject() string {
   589  	if x != nil {
   590  		return x.Project
   591  	}
   592  	return ""
   593  }
   594  
   595  func (x *QueryTestsRequest) GetTestIdSubstring() string {
   596  	if x != nil {
   597  		return x.TestIdSubstring
   598  	}
   599  	return ""
   600  }
   601  
   602  func (x *QueryTestsRequest) GetSubRealm() string {
   603  	if x != nil {
   604  		return x.SubRealm
   605  	}
   606  	return ""
   607  }
   608  
   609  func (x *QueryTestsRequest) GetPageSize() int32 {
   610  	if x != nil {
   611  		return x.PageSize
   612  	}
   613  	return 0
   614  }
   615  
   616  func (x *QueryTestsRequest) GetPageToken() string {
   617  	if x != nil {
   618  		return x.PageToken
   619  	}
   620  	return ""
   621  }
   622  
   623  // A response message for the `QueryTests` RPC.
   624  type QueryTestsResponse struct {
   625  	state         protoimpl.MessageState
   626  	sizeCache     protoimpl.SizeCache
   627  	unknownFields protoimpl.UnknownFields
   628  
   629  	// A list of test Ids. Ordered alphabetically.
   630  	TestIds []string `protobuf:"bytes,1,rep,name=test_ids,json=testIds,proto3" json:"test_ids,omitempty"`
   631  	// A token, which can be sent as `page_token` to retrieve the next page.
   632  	// If this field is omitted, there were no subsequent pages at the time of
   633  	// request.
   634  	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
   635  }
   636  
   637  func (x *QueryTestsResponse) Reset() {
   638  	*x = QueryTestsResponse{}
   639  	if protoimpl.UnsafeEnabled {
   640  		mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[7]
   641  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   642  		ms.StoreMessageInfo(mi)
   643  	}
   644  }
   645  
   646  func (x *QueryTestsResponse) String() string {
   647  	return protoimpl.X.MessageStringOf(x)
   648  }
   649  
   650  func (*QueryTestsResponse) ProtoMessage() {}
   651  
   652  func (x *QueryTestsResponse) ProtoReflect() protoreflect.Message {
   653  	mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[7]
   654  	if protoimpl.UnsafeEnabled && x != nil {
   655  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   656  		if ms.LoadMessageInfo() == nil {
   657  			ms.StoreMessageInfo(mi)
   658  		}
   659  		return ms
   660  	}
   661  	return mi.MessageOf(x)
   662  }
   663  
   664  // Deprecated: Use QueryTestsResponse.ProtoReflect.Descriptor instead.
   665  func (*QueryTestsResponse) Descriptor() ([]byte, []int) {
   666  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP(), []int{7}
   667  }
   668  
   669  func (x *QueryTestsResponse) GetTestIds() []string {
   670  	if x != nil {
   671  		return x.TestIds
   672  	}
   673  	return nil
   674  }
   675  
   676  func (x *QueryTestsResponse) GetNextPageToken() string {
   677  	if x != nil {
   678  		return x.NextPageToken
   679  	}
   680  	return ""
   681  }
   682  
   683  type QueryTestHistoryStatsResponse_Group struct {
   684  	state         protoimpl.MessageState
   685  	sizeCache     protoimpl.SizeCache
   686  	unknownFields protoimpl.UnknownFields
   687  
   688  	// The start time of this group.
   689  	// Test verdicts that are paritioned in the 24 hours following this
   690  	// timestamp are captured in this group.
   691  	PartitionTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=partition_time,json=partitionTime,proto3" json:"partition_time,omitempty"`
   692  	// The hash of the variant.
   693  	VariantHash string `protobuf:"bytes,2,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"`
   694  	// The number of unexpected test verdicts in the group.
   695  	UnexpectedCount int32 `protobuf:"varint,3,opt,name=unexpected_count,json=unexpectedCount,proto3" json:"unexpected_count,omitempty"`
   696  	// The number of unexpectedly skipped test verdicts in the group.
   697  	UnexpectedlySkippedCount int32 `protobuf:"varint,4,opt,name=unexpectedly_skipped_count,json=unexpectedlySkippedCount,proto3" json:"unexpectedly_skipped_count,omitempty"`
   698  	// The number of flaky test verdicts in the group.
   699  	FlakyCount int32 `protobuf:"varint,5,opt,name=flaky_count,json=flakyCount,proto3" json:"flaky_count,omitempty"`
   700  	// The number of exonerated test verdicts in the group.
   701  	ExoneratedCount int32 `protobuf:"varint,6,opt,name=exonerated_count,json=exoneratedCount,proto3" json:"exonerated_count,omitempty"`
   702  	// The number of expected test verdicts in the group.
   703  	ExpectedCount int32 `protobuf:"varint,7,opt,name=expected_count,json=expectedCount,proto3" json:"expected_count,omitempty"`
   704  	// The average duration of passing test results in the group.
   705  	PassedAvgDuration *durationpb.Duration `protobuf:"bytes,8,opt,name=passed_avg_duration,json=passedAvgDuration,proto3" json:"passed_avg_duration,omitempty"`
   706  }
   707  
   708  func (x *QueryTestHistoryStatsResponse_Group) Reset() {
   709  	*x = QueryTestHistoryStatsResponse_Group{}
   710  	if protoimpl.UnsafeEnabled {
   711  		mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[8]
   712  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   713  		ms.StoreMessageInfo(mi)
   714  	}
   715  }
   716  
   717  func (x *QueryTestHistoryStatsResponse_Group) String() string {
   718  	return protoimpl.X.MessageStringOf(x)
   719  }
   720  
   721  func (*QueryTestHistoryStatsResponse_Group) ProtoMessage() {}
   722  
   723  func (x *QueryTestHistoryStatsResponse_Group) ProtoReflect() protoreflect.Message {
   724  	mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[8]
   725  	if protoimpl.UnsafeEnabled && x != nil {
   726  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   727  		if ms.LoadMessageInfo() == nil {
   728  			ms.StoreMessageInfo(mi)
   729  		}
   730  		return ms
   731  	}
   732  	return mi.MessageOf(x)
   733  }
   734  
   735  // Deprecated: Use QueryTestHistoryStatsResponse_Group.ProtoReflect.Descriptor instead.
   736  func (*QueryTestHistoryStatsResponse_Group) Descriptor() ([]byte, []int) {
   737  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP(), []int{3, 0}
   738  }
   739  
   740  func (x *QueryTestHistoryStatsResponse_Group) GetPartitionTime() *timestamppb.Timestamp {
   741  	if x != nil {
   742  		return x.PartitionTime
   743  	}
   744  	return nil
   745  }
   746  
   747  func (x *QueryTestHistoryStatsResponse_Group) GetVariantHash() string {
   748  	if x != nil {
   749  		return x.VariantHash
   750  	}
   751  	return ""
   752  }
   753  
   754  func (x *QueryTestHistoryStatsResponse_Group) GetUnexpectedCount() int32 {
   755  	if x != nil {
   756  		return x.UnexpectedCount
   757  	}
   758  	return 0
   759  }
   760  
   761  func (x *QueryTestHistoryStatsResponse_Group) GetUnexpectedlySkippedCount() int32 {
   762  	if x != nil {
   763  		return x.UnexpectedlySkippedCount
   764  	}
   765  	return 0
   766  }
   767  
   768  func (x *QueryTestHistoryStatsResponse_Group) GetFlakyCount() int32 {
   769  	if x != nil {
   770  		return x.FlakyCount
   771  	}
   772  	return 0
   773  }
   774  
   775  func (x *QueryTestHistoryStatsResponse_Group) GetExoneratedCount() int32 {
   776  	if x != nil {
   777  		return x.ExoneratedCount
   778  	}
   779  	return 0
   780  }
   781  
   782  func (x *QueryTestHistoryStatsResponse_Group) GetExpectedCount() int32 {
   783  	if x != nil {
   784  		return x.ExpectedCount
   785  	}
   786  	return 0
   787  }
   788  
   789  func (x *QueryTestHistoryStatsResponse_Group) GetPassedAvgDuration() *durationpb.Duration {
   790  	if x != nil {
   791  		return x.PassedAvgDuration
   792  	}
   793  	return nil
   794  }
   795  
   796  // Contains the variant definition and its hash.
   797  type QueryVariantsResponse_VariantInfo struct {
   798  	state         protoimpl.MessageState
   799  	sizeCache     protoimpl.SizeCache
   800  	unknownFields protoimpl.UnknownFields
   801  
   802  	// The hash of the variant.
   803  	VariantHash string `protobuf:"bytes,1,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"`
   804  	// The definition of the variant.
   805  	Variant *Variant `protobuf:"bytes,2,opt,name=variant,proto3" json:"variant,omitempty"`
   806  }
   807  
   808  func (x *QueryVariantsResponse_VariantInfo) Reset() {
   809  	*x = QueryVariantsResponse_VariantInfo{}
   810  	if protoimpl.UnsafeEnabled {
   811  		mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[9]
   812  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   813  		ms.StoreMessageInfo(mi)
   814  	}
   815  }
   816  
   817  func (x *QueryVariantsResponse_VariantInfo) String() string {
   818  	return protoimpl.X.MessageStringOf(x)
   819  }
   820  
   821  func (*QueryVariantsResponse_VariantInfo) ProtoMessage() {}
   822  
   823  func (x *QueryVariantsResponse_VariantInfo) ProtoReflect() protoreflect.Message {
   824  	mi := &file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[9]
   825  	if protoimpl.UnsafeEnabled && x != nil {
   826  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   827  		if ms.LoadMessageInfo() == nil {
   828  			ms.StoreMessageInfo(mi)
   829  		}
   830  		return ms
   831  	}
   832  	return mi.MessageOf(x)
   833  }
   834  
   835  // Deprecated: Use QueryVariantsResponse_VariantInfo.ProtoReflect.Descriptor instead.
   836  func (*QueryVariantsResponse_VariantInfo) Descriptor() ([]byte, []int) {
   837  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP(), []int{5, 0}
   838  }
   839  
   840  func (x *QueryVariantsResponse_VariantInfo) GetVariantHash() string {
   841  	if x != nil {
   842  		return x.VariantHash
   843  	}
   844  	return ""
   845  }
   846  
   847  func (x *QueryVariantsResponse_VariantInfo) GetVariant() *Variant {
   848  	if x != nil {
   849  		return x.Variant
   850  	}
   851  	return nil
   852  }
   853  
   854  var File_go_chromium_org_luci_analysis_proto_v1_test_history_proto protoreflect.FileDescriptor
   855  
   856  var file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDesc = []byte{
   857  	0x0a, 0x39, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
   858  	0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f,
   859  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x69,
   860  	0x73, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x6c, 0x75, 0x63,
   861  	0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67,
   862  	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f,
   863  	0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e,
   864  	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
   865  	0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f,
   866  	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
   867  	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
   868  	0x33, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67,
   869  	0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70,
   870  	0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70,
   871  	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
   872  	0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79,
   873  	0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x65,
   874  	0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x39, 0x67, 0x6f,
   875  	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75,
   876  	0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74,
   877  	0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63,
   878  	0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdd, 0x01, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72,
   879  	0x79, 0x54, 0x65, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75,
   880  	0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01,
   881  	0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65,
   882  	0x63, 0x74, 0x12, 0x1c, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
   883  	0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64,
   884  	0x12, 0x49, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20,
   885  	0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79,
   886  	0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x64, 0x69,
   887  	0x63, 0x74, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x02,
   888  	0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70,
   889  	0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08,
   890  	0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65,
   891  	0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61,
   892  	0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x7d, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79,
   893  	0x54, 0x65, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
   894  	0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x18,
   895  	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61,
   896  	0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72,
   897  	0x64, 0x69, 0x63, 0x74, 0x52, 0x08, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x12, 0x26,
   898  	0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65,
   899  	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67,
   900  	0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xe2, 0x01, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79,
   901  	0x54, 0x65, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73,
   902  	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65,
   903  	0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x70,
   904  	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69,
   905  	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x74, 0x65,
   906  	0x73, 0x74, 0x49, 0x64, 0x12, 0x49, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74,
   907  	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61,
   908  	0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56,
   909  	0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x42,
   910  	0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12,
   911  	0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01,
   912  	0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a,
   913  	0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
   914  	0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xad, 0x04, 0x0a, 0x1d,
   915  	0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79,
   916  	0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a,
   917  	0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e,
   918  	0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31,
   919  	0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
   920  	0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x47,
   921  	0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x26, 0x0a, 0x0f,
   922  	0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18,
   923  	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54,
   924  	0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0x94, 0x03, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x41,
   925  	0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65,
   926  	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
   927  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
   928  	0x6d, 0x70, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d,
   929  	0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73,
   930  	0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
   931  	0x48, 0x61, 0x73, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
   932  	0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f,
   933  	0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12,
   934  	0x3c, 0x0a, 0x1a, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x6c, 0x79, 0x5f,
   935  	0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20,
   936  	0x01, 0x28, 0x05, 0x52, 0x18, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x6c,
   937  	0x79, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a,
   938  	0x0b, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01,
   939  	0x28, 0x05, 0x52, 0x0a, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29,
   940  	0x0a, 0x10, 0x65, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75,
   941  	0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x65, 0x78, 0x6f, 0x6e, 0x65, 0x72,
   942  	0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70,
   943  	0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28,
   944  	0x05, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74,
   945  	0x12, 0x49, 0x0a, 0x13, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x64,
   946  	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
   947  	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
   948  	0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64,
   949  	0x41, 0x76, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xfd, 0x01, 0x0a, 0x14,
   950  	0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71,
   951  	0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18,
   952  	0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a,
   953  	0x65, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02,
   954  	0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49,
   955  	0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x18, 0x03,
   956  	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x52, 0x65, 0x61, 0x6c, 0x6d, 0x12, 0x4f,
   957  	0x0a, 0x11, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63,
   958  	0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6c, 0x75, 0x63, 0x69,
   959  	0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72,
   960  	0x69, 0x61, 0x6e, 0x74, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x10, 0x76,
   961  	0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12,
   962  	0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01,
   963  	0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a,
   964  	0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
   965  	0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xf7, 0x01, 0x0a, 0x15,
   966  	0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73,
   967  	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
   968  	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61,
   969  	0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
   970  	0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
   971  	0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x76, 0x61,
   972  	0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70,
   973  	0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
   974  	0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0x65,
   975  	0x0a, 0x0b, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a,
   976  	0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20,
   977  	0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68,
   978  	0x12, 0x33, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
   979  	0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69,
   980  	0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x07, 0x76, 0x61,
   981  	0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0xbc, 0x01, 0x0a, 0x11, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54,
   982  	0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x07, 0x70,
   983  	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41,
   984  	0x02, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x0a, 0x11, 0x74, 0x65,
   985  	0x73, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18,
   986  	0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0f, 0x74, 0x65, 0x73, 0x74,
   987  	0x49, 0x64, 0x53, 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x73,
   988  	0x75, 0x62, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
   989  	0x73, 0x75, 0x62, 0x52, 0x65, 0x61, 0x6c, 0x6d, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65,
   990  	0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67,
   991  	0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f,
   992  	0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54,
   993  	0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x57, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x73,
   994  	0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x65,
   995  	0x73, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x65,
   996  	0x73, 0x74, 0x49, 0x64, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61,
   997  	0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
   998  	0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x32, 0x9f, 0x03,
   999  	0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x60, 0x0a,
  1000  	0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x29, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e,
  1001  	0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54,
  1002  	0x65, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
  1003  	0x74, 0x1a, 0x2a, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69,
  1004  	0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x48, 0x69,
  1005  	0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
  1006  	0x6f, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2e, 0x2e,
  1007  	0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31,
  1008  	0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
  1009  	0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e,
  1010  	0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31,
  1011  	0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
  1012  	0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
  1013  	0x12, 0x62, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
  1014  	0x73, 0x12, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69,
  1015  	0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e,
  1016  	0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6c, 0x75, 0x63, 0x69,
  1017  	0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65,
  1018  	0x72, 0x79, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
  1019  	0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x73,
  1020  	0x74, 0x73, 0x12, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73,
  1021  	0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x65, 0x73, 0x74, 0x73,
  1022  	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61,
  1023  	0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
  1024  	0x54, 0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42,
  1025  	0x33, 0x5a, 0x31, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f,
  1026  	0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
  1027  	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73,
  1028  	0x69, 0x73, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
  1029  }
  1030  
  1031  var (
  1032  	file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescOnce sync.Once
  1033  	file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescData = file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDesc
  1034  )
  1035  
  1036  func file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescGZIP() []byte {
  1037  	file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescOnce.Do(func() {
  1038  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescData)
  1039  	})
  1040  	return file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDescData
  1041  }
  1042  
  1043  var file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
  1044  var file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_goTypes = []interface{}{
  1045  	(*QueryTestHistoryRequest)(nil),             // 0: luci.analysis.v1.QueryTestHistoryRequest
  1046  	(*QueryTestHistoryResponse)(nil),            // 1: luci.analysis.v1.QueryTestHistoryResponse
  1047  	(*QueryTestHistoryStatsRequest)(nil),        // 2: luci.analysis.v1.QueryTestHistoryStatsRequest
  1048  	(*QueryTestHistoryStatsResponse)(nil),       // 3: luci.analysis.v1.QueryTestHistoryStatsResponse
  1049  	(*QueryVariantsRequest)(nil),                // 4: luci.analysis.v1.QueryVariantsRequest
  1050  	(*QueryVariantsResponse)(nil),               // 5: luci.analysis.v1.QueryVariantsResponse
  1051  	(*QueryTestsRequest)(nil),                   // 6: luci.analysis.v1.QueryTestsRequest
  1052  	(*QueryTestsResponse)(nil),                  // 7: luci.analysis.v1.QueryTestsResponse
  1053  	(*QueryTestHistoryStatsResponse_Group)(nil), // 8: luci.analysis.v1.QueryTestHistoryStatsResponse.Group
  1054  	(*QueryVariantsResponse_VariantInfo)(nil),   // 9: luci.analysis.v1.QueryVariantsResponse.VariantInfo
  1055  	(*TestVerdictPredicate)(nil),                // 10: luci.analysis.v1.TestVerdictPredicate
  1056  	(*TestVerdict)(nil),                         // 11: luci.analysis.v1.TestVerdict
  1057  	(*VariantPredicate)(nil),                    // 12: luci.analysis.v1.VariantPredicate
  1058  	(*timestamppb.Timestamp)(nil),               // 13: google.protobuf.Timestamp
  1059  	(*durationpb.Duration)(nil),                 // 14: google.protobuf.Duration
  1060  	(*Variant)(nil),                             // 15: luci.analysis.v1.Variant
  1061  }
  1062  var file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_depIdxs = []int32{
  1063  	10, // 0: luci.analysis.v1.QueryTestHistoryRequest.predicate:type_name -> luci.analysis.v1.TestVerdictPredicate
  1064  	11, // 1: luci.analysis.v1.QueryTestHistoryResponse.verdicts:type_name -> luci.analysis.v1.TestVerdict
  1065  	10, // 2: luci.analysis.v1.QueryTestHistoryStatsRequest.predicate:type_name -> luci.analysis.v1.TestVerdictPredicate
  1066  	8,  // 3: luci.analysis.v1.QueryTestHistoryStatsResponse.groups:type_name -> luci.analysis.v1.QueryTestHistoryStatsResponse.Group
  1067  	12, // 4: luci.analysis.v1.QueryVariantsRequest.variant_predicate:type_name -> luci.analysis.v1.VariantPredicate
  1068  	9,  // 5: luci.analysis.v1.QueryVariantsResponse.variants:type_name -> luci.analysis.v1.QueryVariantsResponse.VariantInfo
  1069  	13, // 6: luci.analysis.v1.QueryTestHistoryStatsResponse.Group.partition_time:type_name -> google.protobuf.Timestamp
  1070  	14, // 7: luci.analysis.v1.QueryTestHistoryStatsResponse.Group.passed_avg_duration:type_name -> google.protobuf.Duration
  1071  	15, // 8: luci.analysis.v1.QueryVariantsResponse.VariantInfo.variant:type_name -> luci.analysis.v1.Variant
  1072  	0,  // 9: luci.analysis.v1.TestHistory.Query:input_type -> luci.analysis.v1.QueryTestHistoryRequest
  1073  	2,  // 10: luci.analysis.v1.TestHistory.QueryStats:input_type -> luci.analysis.v1.QueryTestHistoryStatsRequest
  1074  	4,  // 11: luci.analysis.v1.TestHistory.QueryVariants:input_type -> luci.analysis.v1.QueryVariantsRequest
  1075  	6,  // 12: luci.analysis.v1.TestHistory.QueryTests:input_type -> luci.analysis.v1.QueryTestsRequest
  1076  	1,  // 13: luci.analysis.v1.TestHistory.Query:output_type -> luci.analysis.v1.QueryTestHistoryResponse
  1077  	3,  // 14: luci.analysis.v1.TestHistory.QueryStats:output_type -> luci.analysis.v1.QueryTestHistoryStatsResponse
  1078  	5,  // 15: luci.analysis.v1.TestHistory.QueryVariants:output_type -> luci.analysis.v1.QueryVariantsResponse
  1079  	7,  // 16: luci.analysis.v1.TestHistory.QueryTests:output_type -> luci.analysis.v1.QueryTestsResponse
  1080  	13, // [13:17] is the sub-list for method output_type
  1081  	9,  // [9:13] is the sub-list for method input_type
  1082  	9,  // [9:9] is the sub-list for extension type_name
  1083  	9,  // [9:9] is the sub-list for extension extendee
  1084  	0,  // [0:9] is the sub-list for field type_name
  1085  }
  1086  
  1087  func init() { file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_init() }
  1088  func file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_init() {
  1089  	if File_go_chromium_org_luci_analysis_proto_v1_test_history_proto != nil {
  1090  		return
  1091  	}
  1092  	file_go_chromium_org_luci_analysis_proto_v1_common_proto_init()
  1093  	file_go_chromium_org_luci_analysis_proto_v1_predicate_proto_init()
  1094  	file_go_chromium_org_luci_analysis_proto_v1_test_verdict_proto_init()
  1095  	if !protoimpl.UnsafeEnabled {
  1096  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
  1097  			switch v := v.(*QueryTestHistoryRequest); i {
  1098  			case 0:
  1099  				return &v.state
  1100  			case 1:
  1101  				return &v.sizeCache
  1102  			case 2:
  1103  				return &v.unknownFields
  1104  			default:
  1105  				return nil
  1106  			}
  1107  		}
  1108  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
  1109  			switch v := v.(*QueryTestHistoryResponse); i {
  1110  			case 0:
  1111  				return &v.state
  1112  			case 1:
  1113  				return &v.sizeCache
  1114  			case 2:
  1115  				return &v.unknownFields
  1116  			default:
  1117  				return nil
  1118  			}
  1119  		}
  1120  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
  1121  			switch v := v.(*QueryTestHistoryStatsRequest); i {
  1122  			case 0:
  1123  				return &v.state
  1124  			case 1:
  1125  				return &v.sizeCache
  1126  			case 2:
  1127  				return &v.unknownFields
  1128  			default:
  1129  				return nil
  1130  			}
  1131  		}
  1132  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
  1133  			switch v := v.(*QueryTestHistoryStatsResponse); i {
  1134  			case 0:
  1135  				return &v.state
  1136  			case 1:
  1137  				return &v.sizeCache
  1138  			case 2:
  1139  				return &v.unknownFields
  1140  			default:
  1141  				return nil
  1142  			}
  1143  		}
  1144  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
  1145  			switch v := v.(*QueryVariantsRequest); i {
  1146  			case 0:
  1147  				return &v.state
  1148  			case 1:
  1149  				return &v.sizeCache
  1150  			case 2:
  1151  				return &v.unknownFields
  1152  			default:
  1153  				return nil
  1154  			}
  1155  		}
  1156  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
  1157  			switch v := v.(*QueryVariantsResponse); i {
  1158  			case 0:
  1159  				return &v.state
  1160  			case 1:
  1161  				return &v.sizeCache
  1162  			case 2:
  1163  				return &v.unknownFields
  1164  			default:
  1165  				return nil
  1166  			}
  1167  		}
  1168  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
  1169  			switch v := v.(*QueryTestsRequest); i {
  1170  			case 0:
  1171  				return &v.state
  1172  			case 1:
  1173  				return &v.sizeCache
  1174  			case 2:
  1175  				return &v.unknownFields
  1176  			default:
  1177  				return nil
  1178  			}
  1179  		}
  1180  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
  1181  			switch v := v.(*QueryTestsResponse); i {
  1182  			case 0:
  1183  				return &v.state
  1184  			case 1:
  1185  				return &v.sizeCache
  1186  			case 2:
  1187  				return &v.unknownFields
  1188  			default:
  1189  				return nil
  1190  			}
  1191  		}
  1192  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
  1193  			switch v := v.(*QueryTestHistoryStatsResponse_Group); i {
  1194  			case 0:
  1195  				return &v.state
  1196  			case 1:
  1197  				return &v.sizeCache
  1198  			case 2:
  1199  				return &v.unknownFields
  1200  			default:
  1201  				return nil
  1202  			}
  1203  		}
  1204  		file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
  1205  			switch v := v.(*QueryVariantsResponse_VariantInfo); i {
  1206  			case 0:
  1207  				return &v.state
  1208  			case 1:
  1209  				return &v.sizeCache
  1210  			case 2:
  1211  				return &v.unknownFields
  1212  			default:
  1213  				return nil
  1214  			}
  1215  		}
  1216  	}
  1217  	type x struct{}
  1218  	out := protoimpl.TypeBuilder{
  1219  		File: protoimpl.DescBuilder{
  1220  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
  1221  			RawDescriptor: file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDesc,
  1222  			NumEnums:      0,
  1223  			NumMessages:   10,
  1224  			NumExtensions: 0,
  1225  			NumServices:   1,
  1226  		},
  1227  		GoTypes:           file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_goTypes,
  1228  		DependencyIndexes: file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_depIdxs,
  1229  		MessageInfos:      file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_msgTypes,
  1230  	}.Build()
  1231  	File_go_chromium_org_luci_analysis_proto_v1_test_history_proto = out.File
  1232  	file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_rawDesc = nil
  1233  	file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_goTypes = nil
  1234  	file_go_chromium_org_luci_analysis_proto_v1_test_history_proto_depIdxs = nil
  1235  }
  1236  
  1237  // Reference imports to suppress errors if they are not otherwise used.
  1238  var _ context.Context
  1239  var _ grpc.ClientConnInterface
  1240  
  1241  // This is a compile-time assertion to ensure that this generated file
  1242  // is compatible with the grpc package it is being compiled against.
  1243  const _ = grpc.SupportPackageIsVersion6
  1244  
  1245  // TestHistoryClient is the client API for TestHistory service.
  1246  //
  1247  // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
  1248  type TestHistoryClient interface {
  1249  	// Retrieves test verdicts for a given test ID in a given project and in a
  1250  	// given range of time.
  1251  	// Accepts a test variant predicate to filter the verdicts.
  1252  	Query(ctx context.Context, in *QueryTestHistoryRequest, opts ...grpc.CallOption) (*QueryTestHistoryResponse, error)
  1253  	// Retrieves a summary of test verdicts for a given test ID in a given project
  1254  	// and in a given range of times.
  1255  	// Accepts a test variant predicate to filter the verdicts.
  1256  	QueryStats(ctx context.Context, in *QueryTestHistoryStatsRequest, opts ...grpc.CallOption) (*QueryTestHistoryStatsResponse, error)
  1257  	// Retrieves variants for a given test ID in a given project that were
  1258  	// recorded in the past 90 days.
  1259  	QueryVariants(ctx context.Context, in *QueryVariantsRequest, opts ...grpc.CallOption) (*QueryVariantsResponse, error)
  1260  	// Finds test IDs that contain the given substring in a given project that
  1261  	// were recorded in the past 90 days.
  1262  	QueryTests(ctx context.Context, in *QueryTestsRequest, opts ...grpc.CallOption) (*QueryTestsResponse, error)
  1263  }
  1264  type testHistoryPRPCClient struct {
  1265  	client *prpc.Client
  1266  }
  1267  
  1268  func NewTestHistoryPRPCClient(client *prpc.Client) TestHistoryClient {
  1269  	return &testHistoryPRPCClient{client}
  1270  }
  1271  
  1272  func (c *testHistoryPRPCClient) Query(ctx context.Context, in *QueryTestHistoryRequest, opts ...grpc.CallOption) (*QueryTestHistoryResponse, error) {
  1273  	out := new(QueryTestHistoryResponse)
  1274  	err := c.client.Call(ctx, "luci.analysis.v1.TestHistory", "Query", in, out, opts...)
  1275  	if err != nil {
  1276  		return nil, err
  1277  	}
  1278  	return out, nil
  1279  }
  1280  
  1281  func (c *testHistoryPRPCClient) QueryStats(ctx context.Context, in *QueryTestHistoryStatsRequest, opts ...grpc.CallOption) (*QueryTestHistoryStatsResponse, error) {
  1282  	out := new(QueryTestHistoryStatsResponse)
  1283  	err := c.client.Call(ctx, "luci.analysis.v1.TestHistory", "QueryStats", in, out, opts...)
  1284  	if err != nil {
  1285  		return nil, err
  1286  	}
  1287  	return out, nil
  1288  }
  1289  
  1290  func (c *testHistoryPRPCClient) QueryVariants(ctx context.Context, in *QueryVariantsRequest, opts ...grpc.CallOption) (*QueryVariantsResponse, error) {
  1291  	out := new(QueryVariantsResponse)
  1292  	err := c.client.Call(ctx, "luci.analysis.v1.TestHistory", "QueryVariants", in, out, opts...)
  1293  	if err != nil {
  1294  		return nil, err
  1295  	}
  1296  	return out, nil
  1297  }
  1298  
  1299  func (c *testHistoryPRPCClient) QueryTests(ctx context.Context, in *QueryTestsRequest, opts ...grpc.CallOption) (*QueryTestsResponse, error) {
  1300  	out := new(QueryTestsResponse)
  1301  	err := c.client.Call(ctx, "luci.analysis.v1.TestHistory", "QueryTests", in, out, opts...)
  1302  	if err != nil {
  1303  		return nil, err
  1304  	}
  1305  	return out, nil
  1306  }
  1307  
  1308  type testHistoryClient struct {
  1309  	cc grpc.ClientConnInterface
  1310  }
  1311  
  1312  func NewTestHistoryClient(cc grpc.ClientConnInterface) TestHistoryClient {
  1313  	return &testHistoryClient{cc}
  1314  }
  1315  
  1316  func (c *testHistoryClient) Query(ctx context.Context, in *QueryTestHistoryRequest, opts ...grpc.CallOption) (*QueryTestHistoryResponse, error) {
  1317  	out := new(QueryTestHistoryResponse)
  1318  	err := c.cc.Invoke(ctx, "/luci.analysis.v1.TestHistory/Query", in, out, opts...)
  1319  	if err != nil {
  1320  		return nil, err
  1321  	}
  1322  	return out, nil
  1323  }
  1324  
  1325  func (c *testHistoryClient) QueryStats(ctx context.Context, in *QueryTestHistoryStatsRequest, opts ...grpc.CallOption) (*QueryTestHistoryStatsResponse, error) {
  1326  	out := new(QueryTestHistoryStatsResponse)
  1327  	err := c.cc.Invoke(ctx, "/luci.analysis.v1.TestHistory/QueryStats", in, out, opts...)
  1328  	if err != nil {
  1329  		return nil, err
  1330  	}
  1331  	return out, nil
  1332  }
  1333  
  1334  func (c *testHistoryClient) QueryVariants(ctx context.Context, in *QueryVariantsRequest, opts ...grpc.CallOption) (*QueryVariantsResponse, error) {
  1335  	out := new(QueryVariantsResponse)
  1336  	err := c.cc.Invoke(ctx, "/luci.analysis.v1.TestHistory/QueryVariants", in, out, opts...)
  1337  	if err != nil {
  1338  		return nil, err
  1339  	}
  1340  	return out, nil
  1341  }
  1342  
  1343  func (c *testHistoryClient) QueryTests(ctx context.Context, in *QueryTestsRequest, opts ...grpc.CallOption) (*QueryTestsResponse, error) {
  1344  	out := new(QueryTestsResponse)
  1345  	err := c.cc.Invoke(ctx, "/luci.analysis.v1.TestHistory/QueryTests", in, out, opts...)
  1346  	if err != nil {
  1347  		return nil, err
  1348  	}
  1349  	return out, nil
  1350  }
  1351  
  1352  // TestHistoryServer is the server API for TestHistory service.
  1353  type TestHistoryServer interface {
  1354  	// Retrieves test verdicts for a given test ID in a given project and in a
  1355  	// given range of time.
  1356  	// Accepts a test variant predicate to filter the verdicts.
  1357  	Query(context.Context, *QueryTestHistoryRequest) (*QueryTestHistoryResponse, error)
  1358  	// Retrieves a summary of test verdicts for a given test ID in a given project
  1359  	// and in a given range of times.
  1360  	// Accepts a test variant predicate to filter the verdicts.
  1361  	QueryStats(context.Context, *QueryTestHistoryStatsRequest) (*QueryTestHistoryStatsResponse, error)
  1362  	// Retrieves variants for a given test ID in a given project that were
  1363  	// recorded in the past 90 days.
  1364  	QueryVariants(context.Context, *QueryVariantsRequest) (*QueryVariantsResponse, error)
  1365  	// Finds test IDs that contain the given substring in a given project that
  1366  	// were recorded in the past 90 days.
  1367  	QueryTests(context.Context, *QueryTestsRequest) (*QueryTestsResponse, error)
  1368  }
  1369  
  1370  // UnimplementedTestHistoryServer can be embedded to have forward compatible implementations.
  1371  type UnimplementedTestHistoryServer struct {
  1372  }
  1373  
  1374  func (*UnimplementedTestHistoryServer) Query(context.Context, *QueryTestHistoryRequest) (*QueryTestHistoryResponse, error) {
  1375  	return nil, status.Errorf(codes.Unimplemented, "method Query not implemented")
  1376  }
  1377  func (*UnimplementedTestHistoryServer) QueryStats(context.Context, *QueryTestHistoryStatsRequest) (*QueryTestHistoryStatsResponse, error) {
  1378  	return nil, status.Errorf(codes.Unimplemented, "method QueryStats not implemented")
  1379  }
  1380  func (*UnimplementedTestHistoryServer) QueryVariants(context.Context, *QueryVariantsRequest) (*QueryVariantsResponse, error) {
  1381  	return nil, status.Errorf(codes.Unimplemented, "method QueryVariants not implemented")
  1382  }
  1383  func (*UnimplementedTestHistoryServer) QueryTests(context.Context, *QueryTestsRequest) (*QueryTestsResponse, error) {
  1384  	return nil, status.Errorf(codes.Unimplemented, "method QueryTests not implemented")
  1385  }
  1386  
  1387  func RegisterTestHistoryServer(s prpc.Registrar, srv TestHistoryServer) {
  1388  	s.RegisterService(&_TestHistory_serviceDesc, srv)
  1389  }
  1390  
  1391  func _TestHistory_Query_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
  1392  	in := new(QueryTestHistoryRequest)
  1393  	if err := dec(in); err != nil {
  1394  		return nil, err
  1395  	}
  1396  	if interceptor == nil {
  1397  		return srv.(TestHistoryServer).Query(ctx, in)
  1398  	}
  1399  	info := &grpc.UnaryServerInfo{
  1400  		Server:     srv,
  1401  		FullMethod: "/luci.analysis.v1.TestHistory/Query",
  1402  	}
  1403  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
  1404  		return srv.(TestHistoryServer).Query(ctx, req.(*QueryTestHistoryRequest))
  1405  	}
  1406  	return interceptor(ctx, in, info, handler)
  1407  }
  1408  
  1409  func _TestHistory_QueryStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
  1410  	in := new(QueryTestHistoryStatsRequest)
  1411  	if err := dec(in); err != nil {
  1412  		return nil, err
  1413  	}
  1414  	if interceptor == nil {
  1415  		return srv.(TestHistoryServer).QueryStats(ctx, in)
  1416  	}
  1417  	info := &grpc.UnaryServerInfo{
  1418  		Server:     srv,
  1419  		FullMethod: "/luci.analysis.v1.TestHistory/QueryStats",
  1420  	}
  1421  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
  1422  		return srv.(TestHistoryServer).QueryStats(ctx, req.(*QueryTestHistoryStatsRequest))
  1423  	}
  1424  	return interceptor(ctx, in, info, handler)
  1425  }
  1426  
  1427  func _TestHistory_QueryVariants_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
  1428  	in := new(QueryVariantsRequest)
  1429  	if err := dec(in); err != nil {
  1430  		return nil, err
  1431  	}
  1432  	if interceptor == nil {
  1433  		return srv.(TestHistoryServer).QueryVariants(ctx, in)
  1434  	}
  1435  	info := &grpc.UnaryServerInfo{
  1436  		Server:     srv,
  1437  		FullMethod: "/luci.analysis.v1.TestHistory/QueryVariants",
  1438  	}
  1439  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
  1440  		return srv.(TestHistoryServer).QueryVariants(ctx, req.(*QueryVariantsRequest))
  1441  	}
  1442  	return interceptor(ctx, in, info, handler)
  1443  }
  1444  
  1445  func _TestHistory_QueryTests_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
  1446  	in := new(QueryTestsRequest)
  1447  	if err := dec(in); err != nil {
  1448  		return nil, err
  1449  	}
  1450  	if interceptor == nil {
  1451  		return srv.(TestHistoryServer).QueryTests(ctx, in)
  1452  	}
  1453  	info := &grpc.UnaryServerInfo{
  1454  		Server:     srv,
  1455  		FullMethod: "/luci.analysis.v1.TestHistory/QueryTests",
  1456  	}
  1457  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
  1458  		return srv.(TestHistoryServer).QueryTests(ctx, req.(*QueryTestsRequest))
  1459  	}
  1460  	return interceptor(ctx, in, info, handler)
  1461  }
  1462  
  1463  var _TestHistory_serviceDesc = grpc.ServiceDesc{
  1464  	ServiceName: "luci.analysis.v1.TestHistory",
  1465  	HandlerType: (*TestHistoryServer)(nil),
  1466  	Methods: []grpc.MethodDesc{
  1467  		{
  1468  			MethodName: "Query",
  1469  			Handler:    _TestHistory_Query_Handler,
  1470  		},
  1471  		{
  1472  			MethodName: "QueryStats",
  1473  			Handler:    _TestHistory_QueryStats_Handler,
  1474  		},
  1475  		{
  1476  			MethodName: "QueryVariants",
  1477  			Handler:    _TestHistory_QueryVariants_Handler,
  1478  		},
  1479  		{
  1480  			MethodName: "QueryTests",
  1481  			Handler:    _TestHistory_QueryTests_Handler,
  1482  		},
  1483  	},
  1484  	Streams:  []grpc.StreamDesc{},
  1485  	Metadata: "go.chromium.org/luci/analysis/proto/v1/test_history.proto",
  1486  }