// Copyright 2018 The LUCI Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.27.1
// 	protoc        v3.17.3
// source: go.chromium.org/luci/buildbucket/proto/build.proto

package buildbucketpb

import (
	api "go.chromium.org/luci/swarming/proto/api"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	durationpb "google.golang.org/protobuf/types/known/durationpb"
	structpb "google.golang.org/protobuf/types/known/structpb"
	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

type BuildInfra_Buildbucket_ExperimentReason int32

const (
	// This value is unused (i.e. if you see this, it's a bug).
	BuildInfra_Buildbucket_EXPERIMENT_REASON_UNSET BuildInfra_Buildbucket_ExperimentReason = 0
	// This experiment was configured from the 'default_value' of a global
	// experiment.
	//
	// See go/buildbucket-settings.cfg for the list of global experiments.
	BuildInfra_Buildbucket_EXPERIMENT_REASON_GLOBAL_DEFAULT BuildInfra_Buildbucket_ExperimentReason = 1
	// This experiment was configured from the Builder configuration.
	BuildInfra_Buildbucket_EXPERIMENT_REASON_BUILDER_CONFIG BuildInfra_Buildbucket_ExperimentReason = 2
	// This experiment was configured from the 'minimum_value' of a global
	// experiment.
	//
	// See go/buildbucket-settings.cfg for the list of global experiments.
	BuildInfra_Buildbucket_EXPERIMENT_REASON_GLOBAL_MINIMUM BuildInfra_Buildbucket_ExperimentReason = 3
	// This experiment was explicitly set from the ScheduleBuildRequest.
	BuildInfra_Buildbucket_EXPERIMENT_REASON_REQUESTED BuildInfra_Buildbucket_ExperimentReason = 4
	// This experiment is inactive and so was removed from the Build.
	//
	// See go/buildbucket-settings.cfg for the list of global experiments.
	BuildInfra_Buildbucket_EXPERIMENT_REASON_GLOBAL_INACTIVE BuildInfra_Buildbucket_ExperimentReason = 5
)

// Enum value maps for BuildInfra_Buildbucket_ExperimentReason.
var (
	BuildInfra_Buildbucket_ExperimentReason_name = map[int32]string{
		0: "EXPERIMENT_REASON_UNSET",
		1: "EXPERIMENT_REASON_GLOBAL_DEFAULT",
		2: "EXPERIMENT_REASON_BUILDER_CONFIG",
		3: "EXPERIMENT_REASON_GLOBAL_MINIMUM",
		4: "EXPERIMENT_REASON_REQUESTED",
		5: "EXPERIMENT_REASON_GLOBAL_INACTIVE",
	}
	BuildInfra_Buildbucket_ExperimentReason_value = map[string]int32{
		"EXPERIMENT_REASON_UNSET":           0,
		"EXPERIMENT_REASON_GLOBAL_DEFAULT":  1,
		"EXPERIMENT_REASON_BUILDER_CONFIG":  2,
		"EXPERIMENT_REASON_GLOBAL_MINIMUM":  3,
		"EXPERIMENT_REASON_REQUESTED":       4,
		"EXPERIMENT_REASON_GLOBAL_INACTIVE": 5,
	}
)

func (x BuildInfra_Buildbucket_ExperimentReason) Enum() *BuildInfra_Buildbucket_ExperimentReason {
	p := new(BuildInfra_Buildbucket_ExperimentReason)
	*p = x
	return p
}

func (x BuildInfra_Buildbucket_ExperimentReason) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuildInfra_Buildbucket_ExperimentReason) Descriptor() protoreflect.EnumDescriptor {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_enumTypes[0].Descriptor()
}

func (BuildInfra_Buildbucket_ExperimentReason) Type() protoreflect.EnumType {
	return &file_go_chromium_org_luci_buildbucket_proto_build_proto_enumTypes[0]
}

func (x BuildInfra_Buildbucket_ExperimentReason) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuildInfra_Buildbucket_ExperimentReason.Descriptor instead.
func (BuildInfra_Buildbucket_ExperimentReason) EnumDescriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 0, 0}
}

type BuildInfra_Buildbucket_Agent_Purpose int32

const (
	// No categorized/known purpose.
	BuildInfra_Buildbucket_Agent_PURPOSE_UNSPECIFIED BuildInfra_Buildbucket_Agent_Purpose = 0
	// This path contains the contents of the build's `exe.cipd_package`.
	BuildInfra_Buildbucket_Agent_PURPOSE_EXE_PAYLOAD BuildInfra_Buildbucket_Agent_Purpose = 1
	// This path contains data specifically for bbagent's own use.
	//
	// There's a proposal currently to add `nsjail` support to bbagent, and it
	// would need to bring a copy of `nsjail` in order to run the user binary
	// but we wouldn't necessarily want to expose it to the user binary.
	BuildInfra_Buildbucket_Agent_PURPOSE_BBAGENT_UTILITY BuildInfra_Buildbucket_Agent_Purpose = 2
)

// Enum value maps for BuildInfra_Buildbucket_Agent_Purpose.
var (
	BuildInfra_Buildbucket_Agent_Purpose_name = map[int32]string{
		0: "PURPOSE_UNSPECIFIED",
		1: "PURPOSE_EXE_PAYLOAD",
		2: "PURPOSE_BBAGENT_UTILITY",
	}
	BuildInfra_Buildbucket_Agent_Purpose_value = map[string]int32{
		"PURPOSE_UNSPECIFIED":     0,
		"PURPOSE_EXE_PAYLOAD":     1,
		"PURPOSE_BBAGENT_UTILITY": 2,
	}
)

func (x BuildInfra_Buildbucket_Agent_Purpose) Enum() *BuildInfra_Buildbucket_Agent_Purpose {
	p := new(BuildInfra_Buildbucket_Agent_Purpose)
	*p = x
	return p
}

func (x BuildInfra_Buildbucket_Agent_Purpose) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuildInfra_Buildbucket_Agent_Purpose) Descriptor() protoreflect.EnumDescriptor {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_enumTypes[1].Descriptor()
}

func (BuildInfra_Buildbucket_Agent_Purpose) Type() protoreflect.EnumType {
	return &file_go_chromium_org_luci_buildbucket_proto_build_proto_enumTypes[1]
}

func (x BuildInfra_Buildbucket_Agent_Purpose) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuildInfra_Buildbucket_Agent_Purpose.Descriptor instead.
func (BuildInfra_Buildbucket_Agent_Purpose) EnumDescriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 0, 0, 0}
}

// A single build, identified by an int64 id.
// Belongs to a builder.
//
// RPC: see Builds service for build creation and retrieval.
// Some Build fields are marked as excluded from responses by default.
// Use "mask" request field to specify that a field must be included.
//
// BigQuery: this message also defines schema of a BigQuery table of completed
// builds. A BigQuery row is inserted soon after build ends, i.e. a row
// represents a state of a build at completion time and does not change after
// that. All fields are included.
//
// Next id: 33.
type Build struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Identifier of the build, unique per LUCI deployment.
	// IDs are monotonically decreasing.
	Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	// Required. The builder this build belongs to.
	//
	// Tuple (builder.project, builder.bucket) defines build ACL
	// which may change after build has ended.
	Builder *BuilderID `protobuf:"bytes,2,opt,name=builder,proto3" json:"builder,omitempty"`
	// Human-readable identifier of the build with the following properties:
	// - unique within the builder
	// - a monotonically increasing number
	// - mostly contiguous
	// - much shorter than id
	//
	// Caution: populated (positive number) iff build numbers were enabled
	// in the builder configuration at the time of build creation.
	//
	// Caution: Build numbers are not guaranteed to be contiguous.
	// There may be gaps during outages.
	//
	// Caution: Build numbers, while monotonically increasing, do not
	// necessarily reflect source-code order. For example, force builds
	// or rebuilds can allocate new, higher, numbers, but build an older-
	// than-HEAD version of the source.
	Number int32 `protobuf:"varint,3,opt,name=number,proto3" json:"number,omitempty"`
	// Verified LUCI identity that created this build.
	CreatedBy string `protobuf:"bytes,4,opt,name=created_by,json=createdBy,proto3" json:"created_by,omitempty"`
	// Verified LUCI identity that canceled this build.
	CanceledBy string `protobuf:"bytes,23,opt,name=canceled_by,json=canceledBy,proto3" json:"canceled_by,omitempty"`
	// When the build was created.
	CreateTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
	// When the build started.
	// Required iff status is STARTED, SUCCESS or FAILURE.
	StartTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`
	// When the build ended.
	// Present iff status is terminal.
	// MUST NOT be before start_time.
	EndTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`
	// When the build was most recently updated.
	//
	// RPC: can be > end_time if, e.g. new tags were attached to a completed
	// build.
	UpdateTime *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
	// When the cancel process of the build started.
	// Note it's not the time that the cancellation completed, which would be
	// tracked by end_time.
	//
	// During the cancel process, the build still accepts updates.
	//
	// bbagent checks this field at the frequency of
	// buildbucket.MinUpdateBuildInterval. When bbagent sees the build is in
	// cancel process, there are two states:
	//  * it has NOT yet started the exe payload,
	//  * it HAS started the exe payload.
	//
	// In the first state, bbagent will immediately terminate the build without
	// invoking the exe payload at all.
	//
	// In the second state, bbagent will send SIGTERM/CTRL-BREAK to the exe
	// (according to the deadline protocol described in
	// https://chromium.googlesource.com/infra/luci/luci-py/+/HEAD/client/LUCI_CONTEXT.md).
	// After grace_period it will then try to kill the exe.
	//
	// NOTE: There is a race condition here; If bbagent starts the luciexe and
	// then immediately notices that the build is canceled, it's possible that
	// bbagent can send SIGTERM/CTRL-BREAK to the exe before that exe sets up
	// interrupt handlers. There is a bug on file (crbug.com/1311821)
	// which we plan to implement at some point as a mitigation for this.
	//
	//Additionally, the Buildbucket service itself will launch an asynchronous
	// task to terminate the build via the backend API (e.g. Swarming cancelation)
	// if bbagent cannot successfully terminate the exe in time.
	CancelTime *timestamppb.Timestamp `protobuf:"bytes,32,opt,name=cancel_time,json=cancelTime,proto3" json:"cancel_time,omitempty"`
	// Status of the build.
	// Must be specified, i.e. not STATUS_UNSPECIFIED.
	//
	// RPC: Responses have most current status.
	//
	// BigQuery: Final status of the build. Cannot be SCHEDULED or STARTED.
	Status Status `protobuf:"varint,12,opt,name=status,proto3,enum=buildbucket.v2.Status" json:"status,omitempty"`
	// Human-readable summary of the build in Markdown format
	// (https://spec.commonmark.org/0.28/).
	// Explains status.
	// Up to 4 KB.
	//
	// BigQuery: excluded from rows.
	SummaryMarkdown string `protobuf:"bytes,20,opt,name=summary_markdown,json=summaryMarkdown,proto3" json:"summary_markdown,omitempty"`
	// If NO, then the build status SHOULD NOT be used to assess correctness of
	// the input gitiles_commit or gerrit_changes.
	// For example, if a pre-submit build has failed, CQ MAY still land the CL.
	// For example, if a post-submit build has failed, CLs MAY continue landing.
	Critical Trinary `protobuf:"varint,21,opt,name=critical,proto3,enum=buildbucket.v2.Trinary" json:"critical,omitempty"`
	// Machine-readable details of the current status.
	// Human-readable status reason is available in summary_markdown.
	StatusDetails *StatusDetails `protobuf:"bytes,22,opt,name=status_details,json=statusDetails,proto3" json:"status_details,omitempty"`
	// Input to the build executable.
	Input *Build_Input `protobuf:"bytes,15,opt,name=input,proto3" json:"input,omitempty"`
	// Output of the build executable.
	// SHOULD depend only on input field and NOT other fields.
	// MUST be unset if build status is SCHEDULED.
	//
	// RPC: By default, this field is excluded from responses.
	// Updated while the build is running and finalized when the build ends.
	Output *Build_Output `protobuf:"bytes,16,opt,name=output,proto3" json:"output,omitempty"`
	// Current list of build steps.
	// Updated as build runs.
	//
	// May take up to 1MB after zlib compression.
	// MUST be unset if build status is SCHEDULED.
	//
	// RPC: By default, this field is excluded from responses.
	Steps []*Step `protobuf:"bytes,17,rep,name=steps,proto3" json:"steps,omitempty"`
	// Build infrastructure used by the build.
	//
	// RPC: By default, this field is excluded from responses.
	Infra *BuildInfra `protobuf:"bytes,18,opt,name=infra,proto3" json:"infra,omitempty"`
	// Arbitrary annotations for the build.
	// One key may have multiple values, which is why this is not a map<string,string>.
	// Indexed by the server, see also BuildPredicate.tags.
	Tags []*StringPair `protobuf:"bytes,19,rep,name=tags,proto3" json:"tags,omitempty"`
	// What to run when the build is ready to start.
	Exe *Executable `protobuf:"bytes,24,opt,name=exe,proto3" json:"exe,omitempty"`
	// DEPRECATED
	//
	// Equivalent to `"luci.buildbucket.canary_software" in input.experiments`.
	//
	// See `Builder.experiments` for well-known experiments.
	Canary bool `protobuf:"varint,25,opt,name=canary,proto3" json:"canary,omitempty"`
	// Maximum build pending time.
	// If the timeout is reached, the build is marked as INFRA_FAILURE status
	// and both status_details.{timeout, resource_exhaustion} are set.
	SchedulingTimeout *durationpb.Duration `protobuf:"bytes,26,opt,name=scheduling_timeout,json=schedulingTimeout,proto3" json:"scheduling_timeout,omitempty"`
	// Maximum build execution time.
	//
	// Not to be confused with scheduling_timeout.
	//
	// If the timeout is reached, the task will be signaled according to the
	// `deadline` section of
	// https://chromium.googlesource.com/infra/luci/luci-py/+/HEAD/client/LUCI_CONTEXT.md
	// and status_details.timeout is set.
	//
	// The task will have `grace_period` amount of time to handle cleanup
	// before being forcefully terminated.
	ExecutionTimeout *durationpb.Duration `protobuf:"bytes,27,opt,name=execution_timeout,json=executionTimeout,proto3" json:"execution_timeout,omitempty"`
	// Amount of cleanup time after execution_timeout.
	//
	// After being signaled according to execution_timeout, the task will
	// have this duration to clean up before being forcefully terminated.
	//
	// The signalling process is explained in the `deadline` section of
	// https://chromium.googlesource.com/infra/luci/luci-py/+/HEAD/client/LUCI_CONTEXT.md.
	GracePeriod *durationpb.Duration `protobuf:"bytes,29,opt,name=grace_period,json=gracePeriod,proto3" json:"grace_period,omitempty"`
	// If set, swarming was requested to wait until it sees at least one bot
	// report a superset of the build's requested dimensions.
	WaitForCapacity bool `protobuf:"varint,28,opt,name=wait_for_capacity,json=waitForCapacity,proto3" json:"wait_for_capacity,omitempty"`
	// Flag to control if the build can outlive its parent.
	//
	// This field is only meaningful if the build has ancestors.
	// If the build has ancestors and the value is false, it means that the build
	// SHOULD reach a terminal status (SUCCESS, FAILURE, INFRA_FAILURE or
	// CANCELED) before its parent. If the child fails to do so, Buildbucket will
	// cancel it some time after the parent build reaches a terminal status.
	//
	// A build that can outlive its parent can also outlive its parent's ancestors.
	CanOutliveParent bool `protobuf:"varint,30,opt,name=can_outlive_parent,json=canOutliveParent,proto3" json:"can_outlive_parent,omitempty"`
	// Ids of the build’s ancestors. This includes all parents/grandparents/etc.
	// This is ordered from top-to-bottom so `ancestor_ids[0]` is the root of
	// the builds tree, and `ancestor_ids[-1]` is this build's immediate parent.
	// This does not include any "siblings" at higher levels of the tree, just
	// the direct chain of ancestors from root to this build.
	AncestorIds []int64 `protobuf:"varint,31,rep,packed,name=ancestor_ids,json=ancestorIds,proto3" json:"ancestor_ids,omitempty"`
}

func (x *Build) Reset() {
	*x = Build{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Build) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Build) ProtoMessage() {}

func (x *Build) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Build.ProtoReflect.Descriptor instead.
func (*Build) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{0}
}

func (x *Build) GetId() int64 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *Build) GetBuilder() *BuilderID {
	if x != nil {
		return x.Builder
	}
	return nil
}

func (x *Build) GetNumber() int32 {
	if x != nil {
		return x.Number
	}
	return 0
}

func (x *Build) GetCreatedBy() string {
	if x != nil {
		return x.CreatedBy
	}
	return ""
}

func (x *Build) GetCanceledBy() string {
	if x != nil {
		return x.CanceledBy
	}
	return ""
}

func (x *Build) GetCreateTime() *timestamppb.Timestamp {
	if x != nil {
		return x.CreateTime
	}
	return nil
}

func (x *Build) GetStartTime() *timestamppb.Timestamp {
	if x != nil {
		return x.StartTime
	}
	return nil
}

func (x *Build) GetEndTime() *timestamppb.Timestamp {
	if x != nil {
		return x.EndTime
	}
	return nil
}

func (x *Build) GetUpdateTime() *timestamppb.Timestamp {
	if x != nil {
		return x.UpdateTime
	}
	return nil
}

func (x *Build) GetCancelTime() *timestamppb.Timestamp {
	if x != nil {
		return x.CancelTime
	}
	return nil
}

func (x *Build) GetStatus() Status {
	if x != nil {
		return x.Status
	}
	return Status_STATUS_UNSPECIFIED
}

func (x *Build) GetSummaryMarkdown() string {
	if x != nil {
		return x.SummaryMarkdown
	}
	return ""
}

func (x *Build) GetCritical() Trinary {
	if x != nil {
		return x.Critical
	}
	return Trinary_UNSET
}

func (x *Build) GetStatusDetails() *StatusDetails {
	if x != nil {
		return x.StatusDetails
	}
	return nil
}

func (x *Build) GetInput() *Build_Input {
	if x != nil {
		return x.Input
	}
	return nil
}

func (x *Build) GetOutput() *Build_Output {
	if x != nil {
		return x.Output
	}
	return nil
}

func (x *Build) GetSteps() []*Step {
	if x != nil {
		return x.Steps
	}
	return nil
}

func (x *Build) GetInfra() *BuildInfra {
	if x != nil {
		return x.Infra
	}
	return nil
}

func (x *Build) GetTags() []*StringPair {
	if x != nil {
		return x.Tags
	}
	return nil
}

func (x *Build) GetExe() *Executable {
	if x != nil {
		return x.Exe
	}
	return nil
}

func (x *Build) GetCanary() bool {
	if x != nil {
		return x.Canary
	}
	return false
}

func (x *Build) GetSchedulingTimeout() *durationpb.Duration {
	if x != nil {
		return x.SchedulingTimeout
	}
	return nil
}

func (x *Build) GetExecutionTimeout() *durationpb.Duration {
	if x != nil {
		return x.ExecutionTimeout
	}
	return nil
}

func (x *Build) GetGracePeriod() *durationpb.Duration {
	if x != nil {
		return x.GracePeriod
	}
	return nil
}

func (x *Build) GetWaitForCapacity() bool {
	if x != nil {
		return x.WaitForCapacity
	}
	return false
}

func (x *Build) GetCanOutliveParent() bool {
	if x != nil {
		return x.CanOutliveParent
	}
	return false
}

func (x *Build) GetAncestorIds() []int64 {
	if x != nil {
		return x.AncestorIds
	}
	return nil
}

type InputDataRef struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to DataType:
	//	*InputDataRef_Cas
	//	*InputDataRef_Cipd
	DataType isInputDataRef_DataType `protobuf_oneof:"data_type"`
	// TODO(crbug.com/1266060): TBD. `on_path` may need to move out to be incorporated into a field which captures other envvars.
	// Subdirectories relative to the root of `ref` which should be set as a prefix to
	// the $PATH variable.
	//
	// A substitude of `env_prefixes` in SwarmingRpcsTaskProperties field -
	// https://chromium.googlesource.com/infra/luci/luci-go/+/0048a84944e872776fba3542aa96d5943ae64bab/common/api/swarming/swarming/v1/swarming-gen.go#1495
	OnPath []string `protobuf:"bytes,3,rep,name=on_path,json=onPath,proto3" json:"on_path,omitempty"`
}

func (x *InputDataRef) Reset() {
	*x = InputDataRef{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InputDataRef) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InputDataRef) ProtoMessage() {}

func (x *InputDataRef) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[1]
	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 InputDataRef.ProtoReflect.Descriptor instead.
func (*InputDataRef) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{1}
}

func (m *InputDataRef) GetDataType() isInputDataRef_DataType {
	if m != nil {
		return m.DataType
	}
	return nil
}

func (x *InputDataRef) GetCas() *InputDataRef_CAS {
	if x, ok := x.GetDataType().(*InputDataRef_Cas); ok {
		return x.Cas
	}
	return nil
}

func (x *InputDataRef) GetCipd() *InputDataRef_CIPD {
	if x, ok := x.GetDataType().(*InputDataRef_Cipd); ok {
		return x.Cipd
	}
	return nil
}

func (x *InputDataRef) GetOnPath() []string {
	if x != nil {
		return x.OnPath
	}
	return nil
}

type isInputDataRef_DataType interface {
	isInputDataRef_DataType()
}

type InputDataRef_Cas struct {
	Cas *InputDataRef_CAS `protobuf:"bytes,1,opt,name=cas,proto3,oneof"`
}

type InputDataRef_Cipd struct {
	Cipd *InputDataRef_CIPD `protobuf:"bytes,2,opt,name=cipd,proto3,oneof"`
}

func (*InputDataRef_Cas) isInputDataRef_DataType() {}

func (*InputDataRef_Cipd) isInputDataRef_DataType() {}

type ResolvedDataRef struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to DataType:
	//	*ResolvedDataRef_Cas
	//	*ResolvedDataRef_Cipd
	DataType isResolvedDataRef_DataType `protobuf_oneof:"data_type"`
}

func (x *ResolvedDataRef) Reset() {
	*x = ResolvedDataRef{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ResolvedDataRef) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ResolvedDataRef) ProtoMessage() {}

func (x *ResolvedDataRef) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[2]
	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 ResolvedDataRef.ProtoReflect.Descriptor instead.
func (*ResolvedDataRef) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{2}
}

func (m *ResolvedDataRef) GetDataType() isResolvedDataRef_DataType {
	if m != nil {
		return m.DataType
	}
	return nil
}

func (x *ResolvedDataRef) GetCas() *ResolvedDataRef_CAS {
	if x, ok := x.GetDataType().(*ResolvedDataRef_Cas); ok {
		return x.Cas
	}
	return nil
}

func (x *ResolvedDataRef) GetCipd() *ResolvedDataRef_CIPD {
	if x, ok := x.GetDataType().(*ResolvedDataRef_Cipd); ok {
		return x.Cipd
	}
	return nil
}

type isResolvedDataRef_DataType interface {
	isResolvedDataRef_DataType()
}

type ResolvedDataRef_Cas struct {
	Cas *ResolvedDataRef_CAS `protobuf:"bytes,1,opt,name=cas,proto3,oneof"`
}

type ResolvedDataRef_Cipd struct {
	Cipd *ResolvedDataRef_CIPD `protobuf:"bytes,2,opt,name=cipd,proto3,oneof"`
}

func (*ResolvedDataRef_Cas) isResolvedDataRef_DataType() {}

func (*ResolvedDataRef_Cipd) isResolvedDataRef_DataType() {}

// Build infrastructure that was used for a particular build.
type BuildInfra struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Buildbucket *BuildInfra_Buildbucket `protobuf:"bytes,1,opt,name=buildbucket,proto3" json:"buildbucket,omitempty"`
	Swarming    *BuildInfra_Swarming    `protobuf:"bytes,2,opt,name=swarming,proto3" json:"swarming,omitempty"`
	Logdog      *BuildInfra_LogDog      `protobuf:"bytes,3,opt,name=logdog,proto3" json:"logdog,omitempty"`
	Recipe      *BuildInfra_Recipe      `protobuf:"bytes,4,opt,name=recipe,proto3" json:"recipe,omitempty"`
	Resultdb    *BuildInfra_ResultDB    `protobuf:"bytes,5,opt,name=resultdb,proto3" json:"resultdb,omitempty"`
	Bbagent     *BuildInfra_BBAgent     `protobuf:"bytes,6,opt,name=bbagent,proto3" json:"bbagent,omitempty"`
	Backend     *BuildInfra_Backend     `protobuf:"bytes,7,opt,name=backend,proto3" json:"backend,omitempty"`
}

func (x *BuildInfra) Reset() {
	*x = BuildInfra{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra) ProtoMessage() {}

func (x *BuildInfra) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[3]
	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 BuildInfra.ProtoReflect.Descriptor instead.
func (*BuildInfra) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3}
}

func (x *BuildInfra) GetBuildbucket() *BuildInfra_Buildbucket {
	if x != nil {
		return x.Buildbucket
	}
	return nil
}

func (x *BuildInfra) GetSwarming() *BuildInfra_Swarming {
	if x != nil {
		return x.Swarming
	}
	return nil
}

func (x *BuildInfra) GetLogdog() *BuildInfra_LogDog {
	if x != nil {
		return x.Logdog
	}
	return nil
}

func (x *BuildInfra) GetRecipe() *BuildInfra_Recipe {
	if x != nil {
		return x.Recipe
	}
	return nil
}

func (x *BuildInfra) GetResultdb() *BuildInfra_ResultDB {
	if x != nil {
		return x.Resultdb
	}
	return nil
}

func (x *BuildInfra) GetBbagent() *BuildInfra_BBAgent {
	if x != nil {
		return x.Bbagent
	}
	return nil
}

func (x *BuildInfra) GetBackend() *BuildInfra_Backend {
	if x != nil {
		return x.Backend
	}
	return nil
}

// Defines what to build/test.
//
// Behavior of a build executable MAY depend on Input.
// It MAY NOT modify its behavior based on anything outside of Input.
// It MAY read non-Input fields to display for debugging or to pass-through to
// triggered builds. For example the "tags" field may be passed to triggered
// builds, or the "infra" field may be printed for debugging purposes.
type Build_Input struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Arbitrary JSON object. Available at build run time.
	//
	// RPC: By default, this field is excluded from responses.
	//
	// V1 equivalent: corresponds to "properties" key in "parameters_json".
	Properties *structpb.Struct `protobuf:"bytes,1,opt,name=properties,proto3" json:"properties,omitempty"`
	// The Gitiles commit to run against.
	// Usually present in CI builds, set by LUCI Scheduler.
	// If not present, the build may checkout "refs/heads/master".
	// NOT a blamelist.
	//
	// V1 equivalent: supersedes "revision" property and "buildset"
	// tag that starts with "commit/gitiles/".
	GitilesCommit *GitilesCommit `protobuf:"bytes,2,opt,name=gitiles_commit,json=gitilesCommit,proto3" json:"gitiles_commit,omitempty"`
	// Gerrit patchsets to run against.
	// Usually present in tryjobs, set by CQ, Gerrit, git-cl-try.
	// Applied on top of gitiles_commit if specified, otherwise tip of the tree.
	//
	// V1 equivalent: supersedes patch_* properties and "buildset"
	// tag that starts with "patch/gerrit/".
	GerritChanges []*GerritChange `protobuf:"bytes,3,rep,name=gerrit_changes,json=gerritChanges,proto3" json:"gerrit_changes,omitempty"`
	// DEPRECATED
	//
	// Equivalent to `"luci.non_production" in experiments`.
	//
	// See `Builder.experiments` for well-known experiments.
	Experimental bool `protobuf:"varint,5,opt,name=experimental,proto3" json:"experimental,omitempty"`
	// The sorted list of experiments enabled on this build.
	//
	// See `Builder.experiments` for a detailed breakdown on how experiments
	// work, and go/buildbucket-settings.cfg for the current state of global
	// experiments.
	Experiments []string `protobuf:"bytes,6,rep,name=experiments,proto3" json:"experiments,omitempty"`
}

func (x *Build_Input) Reset() {
	*x = Build_Input{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Build_Input) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Build_Input) ProtoMessage() {}

func (x *Build_Input) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[4]
	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 Build_Input.ProtoReflect.Descriptor instead.
func (*Build_Input) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{0, 0}
}

func (x *Build_Input) GetProperties() *structpb.Struct {
	if x != nil {
		return x.Properties
	}
	return nil
}

func (x *Build_Input) GetGitilesCommit() *GitilesCommit {
	if x != nil {
		return x.GitilesCommit
	}
	return nil
}

func (x *Build_Input) GetGerritChanges() []*GerritChange {
	if x != nil {
		return x.GerritChanges
	}
	return nil
}

func (x *Build_Input) GetExperimental() bool {
	if x != nil {
		return x.Experimental
	}
	return false
}

func (x *Build_Input) GetExperiments() []string {
	if x != nil {
		return x.Experiments
	}
	return nil
}

// Result of the build executable.
type Build_Output struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Arbitrary JSON object produced by the build.
	//
	// In recipes, use step_result.presentation.properties to set these,
	// for example
	//
	//   step_result = api.step(['echo'])
	//   step_result.presentation.properties['foo'] = 'bar'
	//
	// More docs: https://chromium.googlesource.com/infra/luci/recipes-py/+/HEAD/doc/old_user_guide.md#Setting-properties
	//
	// V1 equivalent: corresponds to "properties" key in
	// "result_details_json".
	// In V1 output properties are not populated until build ends.
	Properties *structpb.Struct `protobuf:"bytes,1,opt,name=properties,proto3" json:"properties,omitempty"`
	// Build checked out and executed on this commit.
	//
	// Should correspond to Build.Input.gitiles_commit.
	// May be present even if Build.Input.gitiles_commit is not set, for example
	// in cron builders.
	//
	// V1 equivalent: this supersedes all got_revision output property.
	GitilesCommit *GitilesCommit `protobuf:"bytes,3,opt,name=gitiles_commit,json=gitilesCommit,proto3" json:"gitiles_commit,omitempty"`
	// Logs produced by the build script, typically "stdout" and "stderr".
	Logs []*Log `protobuf:"bytes,5,rep,name=logs,proto3" json:"logs,omitempty"`
}

func (x *Build_Output) Reset() {
	*x = Build_Output{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Build_Output) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Build_Output) ProtoMessage() {}

func (x *Build_Output) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[5]
	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 Build_Output.ProtoReflect.Descriptor instead.
func (*Build_Output) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{0, 1}
}

func (x *Build_Output) GetProperties() *structpb.Struct {
	if x != nil {
		return x.Properties
	}
	return nil
}

func (x *Build_Output) GetGitilesCommit() *GitilesCommit {
	if x != nil {
		return x.GitilesCommit
	}
	return nil
}

func (x *Build_Output) GetLogs() []*Log {
	if x != nil {
		return x.Logs
	}
	return nil
}

type InputDataRef_CAS struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Full name of RBE-CAS instance. `projects/{project_id}/instances/{instance}`.
	// e.g. projects/chromium-swarm/instances/default_instance
	CasInstance string                   `protobuf:"bytes,1,opt,name=cas_instance,json=casInstance,proto3" json:"cas_instance,omitempty"`
	Digest      *InputDataRef_CAS_Digest `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"`
}

func (x *InputDataRef_CAS) Reset() {
	*x = InputDataRef_CAS{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InputDataRef_CAS) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InputDataRef_CAS) ProtoMessage() {}

func (x *InputDataRef_CAS) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[6]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use InputDataRef_CAS.ProtoReflect.Descriptor instead.
func (*InputDataRef_CAS) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{1, 0}
}

func (x *InputDataRef_CAS) GetCasInstance() string {
	if x != nil {
		return x.CasInstance
	}
	return ""
}

func (x *InputDataRef_CAS) GetDigest() *InputDataRef_CAS_Digest {
	if x != nil {
		return x.Digest
	}
	return nil
}

type InputDataRef_CIPD struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Server string                       `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"`
	Specs  []*InputDataRef_CIPD_PkgSpec `protobuf:"bytes,2,rep,name=specs,proto3" json:"specs,omitempty"`
}

func (x *InputDataRef_CIPD) Reset() {
	*x = InputDataRef_CIPD{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InputDataRef_CIPD) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InputDataRef_CIPD) ProtoMessage() {}

func (x *InputDataRef_CIPD) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[7]
	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 InputDataRef_CIPD.ProtoReflect.Descriptor instead.
func (*InputDataRef_CIPD) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{1, 1}
}

func (x *InputDataRef_CIPD) GetServer() string {
	if x != nil {
		return x.Server
	}
	return ""
}

func (x *InputDataRef_CIPD) GetSpecs() []*InputDataRef_CIPD_PkgSpec {
	if x != nil {
		return x.Specs
	}
	return nil
}

// This is a [Digest][build.bazel.remote.execution.v2.Digest] of a blob on
// RBE-CAS. See the explanations at the original definition.
// https://github.com/bazelbuild/remote-apis/blob/77cfb44a88577a7ade5dd2400425f6d50469ec6d/build/bazel/remote/execution/v2/remote_execution.proto#L753-L791
type InputDataRef_CAS_Digest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Hash      string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
	SizeBytes int64  `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"`
}

func (x *InputDataRef_CAS_Digest) Reset() {
	*x = InputDataRef_CAS_Digest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InputDataRef_CAS_Digest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InputDataRef_CAS_Digest) ProtoMessage() {}

func (x *InputDataRef_CAS_Digest) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[8]
	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 InputDataRef_CAS_Digest.ProtoReflect.Descriptor instead.
func (*InputDataRef_CAS_Digest) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{1, 0, 0}
}

func (x *InputDataRef_CAS_Digest) GetHash() string {
	if x != nil {
		return x.Hash
	}
	return ""
}

func (x *InputDataRef_CAS_Digest) GetSizeBytes() int64 {
	if x != nil {
		return x.SizeBytes
	}
	return 0
}

type InputDataRef_CIPD_PkgSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Package MAY include CIPD variables, including conditional variables like
	// `${os=windows}`. Additionally, version may be a ref or a tag.
	Package string `protobuf:"bytes,1,opt,name=package,proto3" json:"package,omitempty"`
	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
}

func (x *InputDataRef_CIPD_PkgSpec) Reset() {
	*x = InputDataRef_CIPD_PkgSpec{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *InputDataRef_CIPD_PkgSpec) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*InputDataRef_CIPD_PkgSpec) ProtoMessage() {}

func (x *InputDataRef_CIPD_PkgSpec) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[9]
	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 InputDataRef_CIPD_PkgSpec.ProtoReflect.Descriptor instead.
func (*InputDataRef_CIPD_PkgSpec) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{1, 1, 0}
}

func (x *InputDataRef_CIPD_PkgSpec) GetPackage() string {
	if x != nil {
		return x.Package
	}
	return ""
}

func (x *InputDataRef_CIPD_PkgSpec) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

type ResolvedDataRef_Timing struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	FetchDuration   *durationpb.Duration `protobuf:"bytes,1,opt,name=fetch_duration,json=fetchDuration,proto3" json:"fetch_duration,omitempty"`
	InstallDuration *durationpb.Duration `protobuf:"bytes,2,opt,name=install_duration,json=installDuration,proto3" json:"install_duration,omitempty"`
}

func (x *ResolvedDataRef_Timing) Reset() {
	*x = ResolvedDataRef_Timing{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ResolvedDataRef_Timing) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ResolvedDataRef_Timing) ProtoMessage() {}

func (x *ResolvedDataRef_Timing) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[10]
	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 ResolvedDataRef_Timing.ProtoReflect.Descriptor instead.
func (*ResolvedDataRef_Timing) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{2, 0}
}

func (x *ResolvedDataRef_Timing) GetFetchDuration() *durationpb.Duration {
	if x != nil {
		return x.FetchDuration
	}
	return nil
}

func (x *ResolvedDataRef_Timing) GetInstallDuration() *durationpb.Duration {
	if x != nil {
		return x.InstallDuration
	}
	return nil
}

type ResolvedDataRef_CAS struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// TODO(crbug.com/1266060): potential fields can be
	// int64 cache_hits = ?;
	// int64 cache_hit_size = ?:
	// int64 cache_misses = ?;
	// int64 cache_miss_size = ?;
	// need more thinking and better to determine when starting writing code
	// to download binaries in bbagent.
	Timing *ResolvedDataRef_Timing `protobuf:"bytes,1,opt,name=timing,proto3" json:"timing,omitempty"`
}

func (x *ResolvedDataRef_CAS) Reset() {
	*x = ResolvedDataRef_CAS{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ResolvedDataRef_CAS) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ResolvedDataRef_CAS) ProtoMessage() {}

func (x *ResolvedDataRef_CAS) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[11]
	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 ResolvedDataRef_CAS.ProtoReflect.Descriptor instead.
func (*ResolvedDataRef_CAS) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{2, 1}
}

func (x *ResolvedDataRef_CAS) GetTiming() *ResolvedDataRef_Timing {
	if x != nil {
		return x.Timing
	}
	return nil
}

type ResolvedDataRef_CIPD struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Specs []*ResolvedDataRef_CIPD_PkgSpec `protobuf:"bytes,2,rep,name=specs,proto3" json:"specs,omitempty"`
}

func (x *ResolvedDataRef_CIPD) Reset() {
	*x = ResolvedDataRef_CIPD{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ResolvedDataRef_CIPD) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ResolvedDataRef_CIPD) ProtoMessage() {}

func (x *ResolvedDataRef_CIPD) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[12]
	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 ResolvedDataRef_CIPD.ProtoReflect.Descriptor instead.
func (*ResolvedDataRef_CIPD) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{2, 2}
}

func (x *ResolvedDataRef_CIPD) GetSpecs() []*ResolvedDataRef_CIPD_PkgSpec {
	if x != nil {
		return x.Specs
	}
	return nil
}

type ResolvedDataRef_CIPD_PkgSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// True if this package wasn't installed because `package` contained a
	// non-applicable conditional (e.g. ${os=windows} on a mac machine).
	Skipped   bool                    `protobuf:"varint,1,opt,name=skipped,proto3" json:"skipped,omitempty"`
	Package   string                  `protobuf:"bytes,2,opt,name=package,proto3" json:"package,omitempty"` // fully resolved
	Version   string                  `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` // fully resolved
	WasCached Trinary                 `protobuf:"varint,4,opt,name=was_cached,json=wasCached,proto3,enum=buildbucket.v2.Trinary" json:"was_cached,omitempty"`
	Timing    *ResolvedDataRef_Timing `protobuf:"bytes,5,opt,name=timing,proto3" json:"timing,omitempty"` // optional
}

func (x *ResolvedDataRef_CIPD_PkgSpec) Reset() {
	*x = ResolvedDataRef_CIPD_PkgSpec{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ResolvedDataRef_CIPD_PkgSpec) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ResolvedDataRef_CIPD_PkgSpec) ProtoMessage() {}

func (x *ResolvedDataRef_CIPD_PkgSpec) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[13]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ResolvedDataRef_CIPD_PkgSpec.ProtoReflect.Descriptor instead.
func (*ResolvedDataRef_CIPD_PkgSpec) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{2, 2, 0}
}

func (x *ResolvedDataRef_CIPD_PkgSpec) GetSkipped() bool {
	if x != nil {
		return x.Skipped
	}
	return false
}

func (x *ResolvedDataRef_CIPD_PkgSpec) GetPackage() string {
	if x != nil {
		return x.Package
	}
	return ""
}

func (x *ResolvedDataRef_CIPD_PkgSpec) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

func (x *ResolvedDataRef_CIPD_PkgSpec) GetWasCached() Trinary {
	if x != nil {
		return x.WasCached
	}
	return Trinary_UNSET
}

func (x *ResolvedDataRef_CIPD_PkgSpec) GetTiming() *ResolvedDataRef_Timing {
	if x != nil {
		return x.Timing
	}
	return nil
}

// Buildbucket-specific information, captured at the build creation time.
type BuildInfra_Buildbucket struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Version of swarming task template. Defines
	// versions of kitchen, git, git wrapper, python, vpython, etc.
	ServiceConfigRevision string `protobuf:"bytes,2,opt,name=service_config_revision,json=serviceConfigRevision,proto3" json:"service_config_revision,omitempty"`
	// Properties that were specified in ScheduleBuildRequest to create this
	// build.
	//
	// In particular, CQ uses this to decide whether the build created by
	// someone else is appropriate for CQ, e.g. it was created with the same
	// properties that CQ would use.
	RequestedProperties *structpb.Struct `protobuf:"bytes,5,opt,name=requested_properties,json=requestedProperties,proto3" json:"requested_properties,omitempty"`
	// Dimensions that were specified in ScheduleBuildRequest to create this
	// build.
	RequestedDimensions []*RequestedDimension `protobuf:"bytes,6,rep,name=requested_dimensions,json=requestedDimensions,proto3" json:"requested_dimensions,omitempty"`
	// Buildbucket hostname, e.g. "cr-buildbucket.appspot.com".
	Hostname string `protobuf:"bytes,7,opt,name=hostname,proto3" json:"hostname,omitempty"`
	// This contains a map of all the experiments involved for this build, as
	// well as which bit of configuration lead to them being set (or unset).
	//
	// Note that if the reason here is EXPERIMENT_REASON_GLOBAL_INACTIVE,
	// then that means that the experiment is completely disabled and has no
	// effect, but your builder or ScheduleBuildRequest still indicated that
	// the experiment should be set. If you see this, then please remove it
	// from your configuration and/or requests.
	ExperimentReasons map[string]BuildInfra_Buildbucket_ExperimentReason `protobuf:"bytes,8,rep,name=experiment_reasons,json=experimentReasons,proto3" json:"experiment_reasons,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=buildbucket.v2.BuildInfra_Buildbucket_ExperimentReason"`
	// The agent binary (bbagent or kitchen) resolutions Buildbucket made for this build.
	// This includes all agent_executable references supplied to
	// the TaskBackend in "original" (CIPD) form, to facilitate debugging.
	// DEPRECATED: Use agent.source instead.
	//
	// Deprecated: Do not use.
	AgentExecutable        map[string]*ResolvedDataRef   `protobuf:"bytes,9,rep,name=agent_executable,json=agentExecutable,proto3" json:"agent_executable,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	Agent                  *BuildInfra_Buildbucket_Agent `protobuf:"bytes,10,opt,name=agent,proto3" json:"agent,omitempty"`
	KnownPublicGerritHosts []string                      `protobuf:"bytes,11,rep,name=known_public_gerrit_hosts,json=knownPublicGerritHosts,proto3" json:"known_public_gerrit_hosts,omitempty"`
}

func (x *BuildInfra_Buildbucket) Reset() {
	*x = BuildInfra_Buildbucket{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_Buildbucket) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_Buildbucket) ProtoMessage() {}

func (x *BuildInfra_Buildbucket) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[14]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuildInfra_Buildbucket.ProtoReflect.Descriptor instead.
func (*BuildInfra_Buildbucket) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 0}
}

func (x *BuildInfra_Buildbucket) GetServiceConfigRevision() string {
	if x != nil {
		return x.ServiceConfigRevision
	}
	return ""
}

func (x *BuildInfra_Buildbucket) GetRequestedProperties() *structpb.Struct {
	if x != nil {
		return x.RequestedProperties
	}
	return nil
}

func (x *BuildInfra_Buildbucket) GetRequestedDimensions() []*RequestedDimension {
	if x != nil {
		return x.RequestedDimensions
	}
	return nil
}

func (x *BuildInfra_Buildbucket) GetHostname() string {
	if x != nil {
		return x.Hostname
	}
	return ""
}

func (x *BuildInfra_Buildbucket) GetExperimentReasons() map[string]BuildInfra_Buildbucket_ExperimentReason {
	if x != nil {
		return x.ExperimentReasons
	}
	return nil
}

// Deprecated: Do not use.
func (x *BuildInfra_Buildbucket) GetAgentExecutable() map[string]*ResolvedDataRef {
	if x != nil {
		return x.AgentExecutable
	}
	return nil
}

func (x *BuildInfra_Buildbucket) GetAgent() *BuildInfra_Buildbucket_Agent {
	if x != nil {
		return x.Agent
	}
	return nil
}

func (x *BuildInfra_Buildbucket) GetKnownPublicGerritHosts() []string {
	if x != nil {
		return x.KnownPublicGerritHosts
	}
	return nil
}

// Swarming-specific information.
//
// Next ID: 10.
type BuildInfra_Swarming struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Swarming hostname, e.g. "chromium-swarm.appspot.com".
	// Populated at the build creation time.
	Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"`
	// Swarming task id.
	// Not guaranteed to be populated at the build creation time.
	TaskId string `protobuf:"bytes,2,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"`
	// Swarming run id of the parent task from which this build is triggered.
	// If set, swarming promises to ensure this build won't outlive its parent
	// swarming task (which may or may not itself be a Buildbucket build).
	// Populated at the build creation time.
	ParentRunId string `protobuf:"bytes,9,opt,name=parent_run_id,json=parentRunId,proto3" json:"parent_run_id,omitempty"`
	// Task service account email address.
	// This is the service account used for all authenticated requests by the
	// build.
	TaskServiceAccount string `protobuf:"bytes,3,opt,name=task_service_account,json=taskServiceAccount,proto3" json:"task_service_account,omitempty"`
	// Priority of the task. The lower the more important.
	// Valid values are [20..255].
	Priority int32 `protobuf:"varint,4,opt,name=priority,proto3" json:"priority,omitempty"`
	// Swarming dimensions for the task.
	TaskDimensions []*RequestedDimension `protobuf:"bytes,5,rep,name=task_dimensions,json=taskDimensions,proto3" json:"task_dimensions,omitempty"`
	// Swarming dimensions of the bot used for the task.
	BotDimensions []*StringPair `protobuf:"bytes,6,rep,name=bot_dimensions,json=botDimensions,proto3" json:"bot_dimensions,omitempty"`
	// Caches requested by this build.
	Caches []*BuildInfra_Swarming_CacheEntry `protobuf:"bytes,7,rep,name=caches,proto3" json:"caches,omitempty"`
	// Swarming task containment for the task.
	Containment *api.Containment `protobuf:"bytes,8,opt,name=containment,proto3" json:"containment,omitempty"`
}

func (x *BuildInfra_Swarming) Reset() {
	*x = BuildInfra_Swarming{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[15]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_Swarming) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_Swarming) ProtoMessage() {}

func (x *BuildInfra_Swarming) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[15]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuildInfra_Swarming.ProtoReflect.Descriptor instead.
func (*BuildInfra_Swarming) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 1}
}

func (x *BuildInfra_Swarming) GetHostname() string {
	if x != nil {
		return x.Hostname
	}
	return ""
}

func (x *BuildInfra_Swarming) GetTaskId() string {
	if x != nil {
		return x.TaskId
	}
	return ""
}

func (x *BuildInfra_Swarming) GetParentRunId() string {
	if x != nil {
		return x.ParentRunId
	}
	return ""
}

func (x *BuildInfra_Swarming) GetTaskServiceAccount() string {
	if x != nil {
		return x.TaskServiceAccount
	}
	return ""
}

func (x *BuildInfra_Swarming) GetPriority() int32 {
	if x != nil {
		return x.Priority
	}
	return 0
}

func (x *BuildInfra_Swarming) GetTaskDimensions() []*RequestedDimension {
	if x != nil {
		return x.TaskDimensions
	}
	return nil
}

func (x *BuildInfra_Swarming) GetBotDimensions() []*StringPair {
	if x != nil {
		return x.BotDimensions
	}
	return nil
}

func (x *BuildInfra_Swarming) GetCaches() []*BuildInfra_Swarming_CacheEntry {
	if x != nil {
		return x.Caches
	}
	return nil
}

func (x *BuildInfra_Swarming) GetContainment() *api.Containment {
	if x != nil {
		return x.Containment
	}
	return nil
}

// LogDog-specific information.
type BuildInfra_LogDog struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// LogDog hostname, e.g. "logs.chromium.org".
	Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"`
	// LogDog project, e.g. "chromium".
	// Typically matches Build.builder.project.
	Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"`
	// A slash-separated path prefix shared by all logs and artifacts of this
	// build.
	// No other build can have the same prefix.
	// Can be used to discover logs and/or load log contents.
	//
	// Can be used to construct URL of a page that displays stdout/stderr of all
	// steps of a build. In pseudo-JS:
	//   q_stdout = `${project}/${prefix}/+/**/stdout`;
	//   q_stderr = `${project}/${prefix}/+/**/stderr`;
	//   url = `https://${host}/v/?s=${urlquote(q_stdout)}&s=${urlquote(q_stderr)}`;
	Prefix string `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"`
}

func (x *BuildInfra_LogDog) Reset() {
	*x = BuildInfra_LogDog{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[16]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_LogDog) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_LogDog) ProtoMessage() {}

func (x *BuildInfra_LogDog) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[16]
	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 BuildInfra_LogDog.ProtoReflect.Descriptor instead.
func (*BuildInfra_LogDog) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 2}
}

func (x *BuildInfra_LogDog) GetHostname() string {
	if x != nil {
		return x.Hostname
	}
	return ""
}

func (x *BuildInfra_LogDog) GetProject() string {
	if x != nil {
		return x.Project
	}
	return ""
}

func (x *BuildInfra_LogDog) GetPrefix() string {
	if x != nil {
		return x.Prefix
	}
	return ""
}

// Recipe-specific information.
type BuildInfra_Recipe struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// CIPD package name containing the recipe used to run this build.
	CipdPackage string `protobuf:"bytes,1,opt,name=cipd_package,json=cipdPackage,proto3" json:"cipd_package,omitempty"`
	// Name of the recipe used to run this build.
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
}

func (x *BuildInfra_Recipe) Reset() {
	*x = BuildInfra_Recipe{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[17]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_Recipe) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_Recipe) ProtoMessage() {}

func (x *BuildInfra_Recipe) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[17]
	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 BuildInfra_Recipe.ProtoReflect.Descriptor instead.
func (*BuildInfra_Recipe) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 3}
}

func (x *BuildInfra_Recipe) GetCipdPackage() string {
	if x != nil {
		return x.CipdPackage
	}
	return ""
}

func (x *BuildInfra_Recipe) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

// ResultDB-specific information.
type BuildInfra_ResultDB struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Hostname of the ResultDB instance, such as "results.api.cr.dev".
	Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"`
	// Name of the invocation for results of this build.
	// Typically "invocations/build:<build_id>".
	Invocation string `protobuf:"bytes,2,opt,name=invocation,proto3" json:"invocation,omitempty"`
}

func (x *BuildInfra_ResultDB) Reset() {
	*x = BuildInfra_ResultDB{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[18]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_ResultDB) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_ResultDB) ProtoMessage() {}

func (x *BuildInfra_ResultDB) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[18]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuildInfra_ResultDB.ProtoReflect.Descriptor instead.
func (*BuildInfra_ResultDB) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 4}
}

func (x *BuildInfra_ResultDB) GetHostname() string {
	if x != nil {
		return x.Hostname
	}
	return ""
}

func (x *BuildInfra_ResultDB) GetInvocation() string {
	if x != nil {
		return x.Invocation
	}
	return ""
}

// BBAgent-specific information.
//
// All paths are relateive to bbagent's working directory, and must be delimited
// with slashes ("/"), regardless of the host OS.
type BuildInfra_BBAgent struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Path to the base of the user executable package.
	//
	// Required.
	PayloadPath string `protobuf:"bytes,1,opt,name=payload_path,json=payloadPath,proto3" json:"payload_path,omitempty"`
	// Path to a directory where each subdirectory is a cache dir.
	//
	// Required.
	CacheDir string `protobuf:"bytes,2,opt,name=cache_dir,json=cacheDir,proto3" json:"cache_dir,omitempty"`
	// List of Gerrit hosts to force git authentication for.
	//
	// By default public hosts are accessed anonymously, and the anonymous access
	// has very low quota. Context needs to know all such hostnames in advance to
	// be able to force authenticated access to them.
	//
	// DEPRECATED: Use build.Infra.Buildbucket.KnownPublicGerritHosts instead.
	//
	// Deprecated: Do not use.
	KnownPublicGerritHosts []string `protobuf:"bytes,3,rep,name=known_public_gerrit_hosts,json=knownPublicGerritHosts,proto3" json:"known_public_gerrit_hosts,omitempty"`
	// DEPRECATED: Use build.Infra.Buildbucket.Agent.Input instead.
	//
	// Deprecated: Do not use.
	Input *BuildInfra_BBAgent_Input `protobuf:"bytes,4,opt,name=input,proto3" json:"input,omitempty"`
}

func (x *BuildInfra_BBAgent) Reset() {
	*x = BuildInfra_BBAgent{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[19]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_BBAgent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_BBAgent) ProtoMessage() {}

func (x *BuildInfra_BBAgent) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[19]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuildInfra_BBAgent.ProtoReflect.Descriptor instead.
func (*BuildInfra_BBAgent) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 5}
}

func (x *BuildInfra_BBAgent) GetPayloadPath() string {
	if x != nil {
		return x.PayloadPath
	}
	return ""
}

func (x *BuildInfra_BBAgent) GetCacheDir() string {
	if x != nil {
		return x.CacheDir
	}
	return ""
}

// Deprecated: Do not use.
func (x *BuildInfra_BBAgent) GetKnownPublicGerritHosts() []string {
	if x != nil {
		return x.KnownPublicGerritHosts
	}
	return nil
}

// Deprecated: Do not use.
func (x *BuildInfra_BBAgent) GetInput() *BuildInfra_BBAgent_Input {
	if x != nil {
		return x.Input
	}
	return nil
}

// Backend-specific information.
type BuildInfra_Backend struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Configuration supplied to the backend at the time it was instructed to
	// run this build.
	Config *structpb.Struct `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
	// Current backend task status.
	// Updated as build runs.
	Task *Task `protobuf:"bytes,2,opt,name=task,proto3" json:"task,omitempty"`
}

func (x *BuildInfra_Backend) Reset() {
	*x = BuildInfra_Backend{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[20]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_Backend) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_Backend) ProtoMessage() {}

func (x *BuildInfra_Backend) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[20]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuildInfra_Backend.ProtoReflect.Descriptor instead.
func (*BuildInfra_Backend) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 6}
}

func (x *BuildInfra_Backend) GetConfig() *structpb.Struct {
	if x != nil {
		return x.Config
	}
	return nil
}

func (x *BuildInfra_Backend) GetTask() *Task {
	if x != nil {
		return x.Task
	}
	return nil
}

// bbagent will interpret Agent.input, as well as update Agent.output.
type BuildInfra_Buildbucket_Agent struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// TODO(crbug.com/1297809): for a long-term solution, we may need to add
	// a top-level `on_path` array field in the input and read the value from
	// configuration files (eg.settings.cfg, builder configs). So it can store
	// the intended order of PATH env var. Then the per-inputDataRef level
	// `on_path` field will be deprecated.
	// Currently, the new BBagent flow merges all inputDataRef-level `on_path`
	// values and sort. This mimics the same behavior of PyBB backend in order
	// to have the cipd_installation migration to roll out first under a minimal risk.
	Input  *BuildInfra_Buildbucket_Agent_Input  `protobuf:"bytes,1,opt,name=input,proto3" json:"input,omitempty"`
	Output *BuildInfra_Buildbucket_Agent_Output `protobuf:"bytes,2,opt,name=output,proto3" json:"output,omitempty"`
	Source *BuildInfra_Buildbucket_Agent_Source `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"`
	// Maps the relative-to-root directory path in both `input` and `output`
	// to the Purpose of the software in that directory.
	//
	// If a path is not listed here, it is the same as PURPOSE_UNSPECIFIED.
	Purposes map[string]BuildInfra_Buildbucket_Agent_Purpose `protobuf:"bytes,4,rep,name=purposes,proto3" json:"purposes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=buildbucket.v2.BuildInfra_Buildbucket_Agent_Purpose"`
}

func (x *BuildInfra_Buildbucket_Agent) Reset() {
	*x = BuildInfra_Buildbucket_Agent{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[21]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_Buildbucket_Agent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_Buildbucket_Agent) ProtoMessage() {}

func (x *BuildInfra_Buildbucket_Agent) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[21]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuildInfra_Buildbucket_Agent.ProtoReflect.Descriptor instead.
func (*BuildInfra_Buildbucket_Agent) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 0, 0}
}

func (x *BuildInfra_Buildbucket_Agent) GetInput() *BuildInfra_Buildbucket_Agent_Input {
	if x != nil {
		return x.Input
	}
	return nil
}

func (x *BuildInfra_Buildbucket_Agent) GetOutput() *BuildInfra_Buildbucket_Agent_Output {
	if x != nil {
		return x.Output
	}
	return nil
}

func (x *BuildInfra_Buildbucket_Agent) GetSource() *BuildInfra_Buildbucket_Agent_Source {
	if x != nil {
		return x.Source
	}
	return nil
}

func (x *BuildInfra_Buildbucket_Agent) GetPurposes() map[string]BuildInfra_Buildbucket_Agent_Purpose {
	if x != nil {
		return x.Purposes
	}
	return nil
}

// Source describes where the Agent should be fetched from.
type BuildInfra_Buildbucket_Agent_Source struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to DataType:
	//	*BuildInfra_Buildbucket_Agent_Source_Cipd
	DataType isBuildInfra_Buildbucket_Agent_Source_DataType `protobuf_oneof:"data_type"`
}

func (x *BuildInfra_Buildbucket_Agent_Source) Reset() {
	*x = BuildInfra_Buildbucket_Agent_Source{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[24]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_Buildbucket_Agent_Source) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_Buildbucket_Agent_Source) ProtoMessage() {}

func (x *BuildInfra_Buildbucket_Agent_Source) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[24]
	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 BuildInfra_Buildbucket_Agent_Source.ProtoReflect.Descriptor instead.
func (*BuildInfra_Buildbucket_Agent_Source) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 0, 0, 0}
}

func (m *BuildInfra_Buildbucket_Agent_Source) GetDataType() isBuildInfra_Buildbucket_Agent_Source_DataType {
	if m != nil {
		return m.DataType
	}
	return nil
}

func (x *BuildInfra_Buildbucket_Agent_Source) GetCipd() *BuildInfra_Buildbucket_Agent_Source_CIPD {
	if x, ok := x.GetDataType().(*BuildInfra_Buildbucket_Agent_Source_Cipd); ok {
		return x.Cipd
	}
	return nil
}

type isBuildInfra_Buildbucket_Agent_Source_DataType interface {
	isBuildInfra_Buildbucket_Agent_Source_DataType()
}

type BuildInfra_Buildbucket_Agent_Source_Cipd struct {
	Cipd *BuildInfra_Buildbucket_Agent_Source_CIPD `protobuf:"bytes,1,opt,name=cipd,proto3,oneof"`
}

func (*BuildInfra_Buildbucket_Agent_Source_Cipd) isBuildInfra_Buildbucket_Agent_Source_DataType() {}

type BuildInfra_Buildbucket_Agent_Input struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// maps relative-to-root directory to the data
	//
	// For now, data is only allowed at the 'leaves', e.g. you cannot
	// specify data at "a/b/c" and "a/b" (but "a/b/c" and "a/q" would be OK).
	// All directories beginning with "luci." are reserved for Buildbucket's own use.
	//
	// TODO(crbug.com/1266060): Enforce the above constraints in a later phase.
	// Currently users don't have the flexibility to set the parent directory path.
	Data map[string]*InputDataRef `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}

func (x *BuildInfra_Buildbucket_Agent_Input) Reset() {
	*x = BuildInfra_Buildbucket_Agent_Input{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[25]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_Buildbucket_Agent_Input) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_Buildbucket_Agent_Input) ProtoMessage() {}

func (x *BuildInfra_Buildbucket_Agent_Input) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[25]
	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 BuildInfra_Buildbucket_Agent_Input.ProtoReflect.Descriptor instead.
func (*BuildInfra_Buildbucket_Agent_Input) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 0, 0, 1}
}

func (x *BuildInfra_Buildbucket_Agent_Input) GetData() map[string]*InputDataRef {
	if x != nil {
		return x.Data
	}
	return nil
}

type BuildInfra_Buildbucket_Agent_Output struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// maps relative-to-root directory to the fully-resolved ref.
	//
	// This will always have 1:1 mapping to Agent.Input.data
	ResolvedData  map[string]*ResolvedDataRef `protobuf:"bytes,1,rep,name=resolved_data,json=resolvedData,proto3" json:"resolved_data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	Status        Status                      `protobuf:"varint,2,opt,name=status,proto3,enum=buildbucket.v2.Status" json:"status,omitempty"`
	StatusDetails *StatusDetails              `protobuf:"bytes,3,opt,name=status_details,json=statusDetails,proto3" json:"status_details,omitempty"`
	SummaryHtml   string                      `protobuf:"bytes,4,opt,name=summary_html,json=summaryHtml,proto3" json:"summary_html,omitempty"`
	// The agent's resolved CIPD ${platform} (e.g. "linux-amd64",
	// "windows-386", etc.).
	//
	// This is trivial for bbagent to calculate (unlike trying to embed
	// its cipd package version inside or along with the executable).
	// Buildbucket is doing a full package -> instance ID resolution at
	// CreateBuild time anyway, so Agent.Source.resolved_instances
	// will give the mapping from `agent_platform` to a precise instance_id
	// which was used.
	AgentPlatform string `protobuf:"bytes,5,opt,name=agent_platform,json=agentPlatform,proto3" json:"agent_platform,omitempty"`
	// Total installation duration for all input data. Currently only record
	// cipd packages installation time.
	TotalDuration *durationpb.Duration `protobuf:"bytes,6,opt,name=total_duration,json=totalDuration,proto3" json:"total_duration,omitempty"`
}

func (x *BuildInfra_Buildbucket_Agent_Output) Reset() {
	*x = BuildInfra_Buildbucket_Agent_Output{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[26]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_Buildbucket_Agent_Output) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_Buildbucket_Agent_Output) ProtoMessage() {}

func (x *BuildInfra_Buildbucket_Agent_Output) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[26]
	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 BuildInfra_Buildbucket_Agent_Output.ProtoReflect.Descriptor instead.
func (*BuildInfra_Buildbucket_Agent_Output) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 0, 0, 2}
}

func (x *BuildInfra_Buildbucket_Agent_Output) GetResolvedData() map[string]*ResolvedDataRef {
	if x != nil {
		return x.ResolvedData
	}
	return nil
}

func (x *BuildInfra_Buildbucket_Agent_Output) GetStatus() Status {
	if x != nil {
		return x.Status
	}
	return Status_STATUS_UNSPECIFIED
}

func (x *BuildInfra_Buildbucket_Agent_Output) GetStatusDetails() *StatusDetails {
	if x != nil {
		return x.StatusDetails
	}
	return nil
}

func (x *BuildInfra_Buildbucket_Agent_Output) GetSummaryHtml() string {
	if x != nil {
		return x.SummaryHtml
	}
	return ""
}

func (x *BuildInfra_Buildbucket_Agent_Output) GetAgentPlatform() string {
	if x != nil {
		return x.AgentPlatform
	}
	return ""
}

func (x *BuildInfra_Buildbucket_Agent_Output) GetTotalDuration() *durationpb.Duration {
	if x != nil {
		return x.TotalDuration
	}
	return nil
}

type BuildInfra_Buildbucket_Agent_Source_CIPD struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The CIPD package to use for the agent.
	//
	// Must end in "/${platform}" with no other CIPD variables.
	// Will be expanded with CIPD's DescribeBootstrapBundle API
	// into a full platform -> {hash, size, URL} mapping for TaskBackend
	// RunTask.
	//
	// If using an experimental agent binary, please make sure the package
	// prefix has been configured here -
	// https://chrome-internal.googlesource.com/infradata/config/+/refs/heads/main/configs/chrome-infra-packages/bootstrap.cfg
	Package string `protobuf:"bytes,1,opt,name=package,proto3" json:"package,omitempty"`
	// The CIPD version to use for the agent.
	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
	// The CIPD server to use.
	Server string `protobuf:"bytes,3,opt,name=server,proto3" json:"server,omitempty"`
	// maps ${platform} -> instance_id for resolved agent packages.
	//
	// Will be overwritten at CreateBuild time, should be left empty
	// when creating a new Build.
	ResolvedInstances map[string]string `protobuf:"bytes,4,rep,name=resolved_instances,json=resolvedInstances,proto3" json:"resolved_instances,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}

func (x *BuildInfra_Buildbucket_Agent_Source_CIPD) Reset() {
	*x = BuildInfra_Buildbucket_Agent_Source_CIPD{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[28]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_Buildbucket_Agent_Source_CIPD) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_Buildbucket_Agent_Source_CIPD) ProtoMessage() {}

func (x *BuildInfra_Buildbucket_Agent_Source_CIPD) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[28]
	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 BuildInfra_Buildbucket_Agent_Source_CIPD.ProtoReflect.Descriptor instead.
func (*BuildInfra_Buildbucket_Agent_Source_CIPD) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 0, 0, 0, 0}
}

func (x *BuildInfra_Buildbucket_Agent_Source_CIPD) GetPackage() string {
	if x != nil {
		return x.Package
	}
	return ""
}

func (x *BuildInfra_Buildbucket_Agent_Source_CIPD) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

func (x *BuildInfra_Buildbucket_Agent_Source_CIPD) GetServer() string {
	if x != nil {
		return x.Server
	}
	return ""
}

func (x *BuildInfra_Buildbucket_Agent_Source_CIPD) GetResolvedInstances() map[string]string {
	if x != nil {
		return x.ResolvedInstances
	}
	return nil
}

// Describes a cache directory persisted on a bot.
//
// If a build requested a cache, the cache directory is available on build
// startup. If the cache was present on the bot, the directory contains
// files from the previous run on that bot.
// The build can read/write to the cache directory while it runs.
// After build completes, the cache directory is persisted.
// The next time another build requests the same cache and runs on the same
// bot, the files will still be there (unless the cache was evicted,
// perhaps due to disk space reasons).
//
// One bot can keep multiple caches at the same time and one build can request
// multiple different caches.
// A cache is identified by its name and mapped to a path.
//
// If the bot is running out of space, caches are evicted in LRU manner
// before the next build on this bot starts.
//
// Builder cache.
//
// Buildbucket implicitly declares cache
//   {"name": "<hash(project/bucket/builder)>", "path": "builder"}.
// This means that any LUCI builder has a "personal disk space" on the bot.
// Builder cache is often a good start before customizing caching.
// In recipes, it is available at api.buildbucket.builder_cache_path.
//
type BuildInfra_Swarming_CacheEntry struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Identifier of the cache. Required. Length is limited to 128.
	// Must be unique in the build.
	//
	// If the pool of swarming bots is shared among multiple LUCI projects and
	// projects use same cache name, the cache will be shared across projects.
	// To avoid affecting and being affected by other projects, prefix the
	// cache name with something project-specific, e.g. "v8-".
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Relative path where the cache in mapped into. Required.
	//
	// Must use POSIX format (forward slashes).
	// In most cases, it does not need slashes at all.
	//
	// In recipes, use api.path['cache'].join(path) to get absolute path.
	//
	// Must be unique in the build.
	Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
	// Duration to wait for a bot with a warm cache to pick up the
	// task, before falling back to a bot with a cold (non-existent) cache.
	//
	// The default is 0, which means that no preference will be chosen for a
	// bot with this or without this cache, and a bot without this cache may
	// be chosen instead.
	//
	// If no bot has this cache warm, the task will skip this wait and will
	// immediately fallback to a cold cache request.
	//
	// The value must be multiples of 60 seconds.
	WaitForWarmCache *durationpb.Duration `protobuf:"bytes,3,opt,name=wait_for_warm_cache,json=waitForWarmCache,proto3" json:"wait_for_warm_cache,omitempty"`
	// Environment variable with this name will be set to the path to the cache
	// directory.
	EnvVar string `protobuf:"bytes,4,opt,name=env_var,json=envVar,proto3" json:"env_var,omitempty"`
}

func (x *BuildInfra_Swarming_CacheEntry) Reset() {
	*x = BuildInfra_Swarming_CacheEntry{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[32]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_Swarming_CacheEntry) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_Swarming_CacheEntry) ProtoMessage() {}

func (x *BuildInfra_Swarming_CacheEntry) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[32]
	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 BuildInfra_Swarming_CacheEntry.ProtoReflect.Descriptor instead.
func (*BuildInfra_Swarming_CacheEntry) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 1, 0}
}

func (x *BuildInfra_Swarming_CacheEntry) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *BuildInfra_Swarming_CacheEntry) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *BuildInfra_Swarming_CacheEntry) GetWaitForWarmCache() *durationpb.Duration {
	if x != nil {
		return x.WaitForWarmCache
	}
	return nil
}

func (x *BuildInfra_Swarming_CacheEntry) GetEnvVar() string {
	if x != nil {
		return x.EnvVar
	}
	return ""
}

// BBAgent-specific input.
type BuildInfra_BBAgent_Input struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	CipdPackages []*BuildInfra_BBAgent_Input_CIPDPackage `protobuf:"bytes,1,rep,name=cipd_packages,json=cipdPackages,proto3" json:"cipd_packages,omitempty"`
}

func (x *BuildInfra_BBAgent_Input) Reset() {
	*x = BuildInfra_BBAgent_Input{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[33]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_BBAgent_Input) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_BBAgent_Input) ProtoMessage() {}

func (x *BuildInfra_BBAgent_Input) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[33]
	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 BuildInfra_BBAgent_Input.ProtoReflect.Descriptor instead.
func (*BuildInfra_BBAgent_Input) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 5, 0}
}

func (x *BuildInfra_BBAgent_Input) GetCipdPackages() []*BuildInfra_BBAgent_Input_CIPDPackage {
	if x != nil {
		return x.CipdPackages
	}
	return nil
}

// CIPD Packages to make available for this build.
type BuildInfra_BBAgent_Input_CIPDPackage struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Name of this CIPD package.
	//
	// Required.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// CIPD package version.
	//
	// Required.
	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
	// CIPD server to fetch this package from.
	//
	// Required.
	Server string `protobuf:"bytes,3,opt,name=server,proto3" json:"server,omitempty"`
	// Path where this CIPD package should be installed.
	//
	// Required.
	Path string `protobuf:"bytes,4,opt,name=path,proto3" json:"path,omitempty"`
}

func (x *BuildInfra_BBAgent_Input_CIPDPackage) Reset() {
	*x = BuildInfra_BBAgent_Input_CIPDPackage{}
	if protoimpl.UnsafeEnabled {
		mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[34]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuildInfra_BBAgent_Input_CIPDPackage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuildInfra_BBAgent_Input_CIPDPackage) ProtoMessage() {}

func (x *BuildInfra_BBAgent_Input_CIPDPackage) ProtoReflect() protoreflect.Message {
	mi := &file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[34]
	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 BuildInfra_BBAgent_Input_CIPDPackage.ProtoReflect.Descriptor instead.
func (*BuildInfra_BBAgent_Input_CIPDPackage) Descriptor() ([]byte, []int) {
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP(), []int{3, 5, 0, 0}
}

func (x *BuildInfra_BBAgent_Input_CIPDPackage) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *BuildInfra_BBAgent_Input_CIPDPackage) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

func (x *BuildInfra_BBAgent_Input_CIPDPackage) GetServer() string {
	if x != nil {
		return x.Server
	}
	return ""
}

func (x *BuildInfra_BBAgent_Input_CIPDPackage) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

var File_go_chromium_org_luci_buildbucket_proto_build_proto protoreflect.FileDescriptor

var file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDesc = []byte{
	0x0a, 0x32, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
	0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b,
	0x65, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65,
	0x74, 0x2e, 0x76, 0x32, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69,
	0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x75, 0x69,
	0x6c, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x1a, 0x33, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f,
	0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63,
	0x6b, 0x65, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x62, 0x75, 0x69,
	0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73,
	0x74, 0x65, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x67, 0x6f, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, 0x67, 0x6f,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75,
	0x63, 0x69, 0x2f, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x22, 0x97, 0x0e, 0x0a, 0x05, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x0e,
	0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33,
	0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x19, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x44, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x63,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61,
	0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x0a, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x63,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
	0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72,
	0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72,
	0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54,
	0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
	0x08, 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, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70,
	0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 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, 0x0a, 0x75, 0x70, 0x64,
	0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x61, 0x6e, 0x63, 0x65,
	0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x20, 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, 0x0a, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c,
	0x54, 0x69, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c,
	0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b,
	0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
	0x61, 0x74, 0x75, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x5f,
	0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f,
	0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x12,
	0x33, 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x15, 0x20, 0x01, 0x28,
	0x0e, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e,
	0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74,
	0x69, 0x63, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x64,
	0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74,
	0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x0d, 0x73, 0x74, 0x61,
	0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x31, 0x0a, 0x05, 0x69, 0x6e,
	0x70, 0x75, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64,
	0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x34, 0x0a,
	0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74,
	0x70, 0x75, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x11, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
	0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x65, 0x70, 0x52, 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x12,
	0x30, 0x0a, 0x05, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
	0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x52, 0x05, 0x69, 0x6e, 0x66, 0x72,
	0x61, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x1a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32,
	0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x04, 0x74, 0x61, 0x67,
	0x73, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x78, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
	0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e,
	0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x03, 0x65, 0x78, 0x65, 0x12,
	0x16, 0x0a, 0x06, 0x63, 0x61, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52,
	0x06, 0x63, 0x61, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64,
	0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x1a, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11,
	0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75,
	0x74, 0x12, 0x46, 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74,
	0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
	0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3c, 0x0a, 0x0c, 0x67, 0x72, 0x61,
	0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x63,
	0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x61, 0x69, 0x74, 0x5f,
	0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x1c, 0x20, 0x01,
	0x28, 0x08, 0x52, 0x0f, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x61, 0x70, 0x61, 0x63,
	0x69, 0x74, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x61, 0x6e, 0x5f, 0x6f, 0x75, 0x74, 0x6c, 0x69,
	0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52,
	0x10, 0x63, 0x61, 0x6e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x76, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e,
	0x74, 0x12, 0x26, 0x0a, 0x0c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64,
	0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x61, 0x6e,
	0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x73, 0x1a, 0x91, 0x02, 0x0a, 0x05, 0x49, 0x6e,
	0x70, 0x75, 0x74, 0x12, 0x37, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
	0x73, 0x18, 0x01, 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, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x0e,
	0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b,
	0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d,
	0x6d, 0x69, 0x74, 0x52, 0x0d, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d,
	0x69, 0x74, 0x12, 0x43, 0x0a, 0x0e, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x5f, 0x63, 0x68, 0x61,
	0x6e, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x69,
	0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x72, 0x72,
	0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74,
	0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x72,
	0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65,
	0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x65,
	0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09,
	0x52, 0x0b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0xbc, 0x01,
	0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x37, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70,
	0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 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, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
	0x73, 0x12, 0x44, 0x0a, 0x0e, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d,
	0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x69, 0x74, 0x69, 0x6c,
	0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x0d, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65,
	0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18,
	0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63,
	0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73,
	0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05,
	0x10, 0x06, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x4a, 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x22, 0xf3,
	0x03, 0x0a, 0x0c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x12,
	0x34, 0x0a, 0x03, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e,
	0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x2e, 0x43, 0x41, 0x53, 0x48, 0x00,
	0x52, 0x03, 0x63, 0x61, 0x73, 0x12, 0x37, 0x0a, 0x04, 0x63, 0x69, 0x70, 0x64, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65,
	0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65,
	0x66, 0x2e, 0x43, 0x49, 0x50, 0x44, 0x48, 0x00, 0x52, 0x04, 0x63, 0x69, 0x70, 0x64, 0x12, 0x17,
	0x0a, 0x07, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52,
	0x06, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x1a, 0xa6, 0x01, 0x0a, 0x03, 0x43, 0x41, 0x53, 0x12,
	0x21, 0x0a, 0x0c, 0x63, 0x61, 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x61, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e,
	0x63, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
	0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66,
	0x2e, 0x43, 0x41, 0x53, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67,
	0x65, 0x73, 0x74, 0x1a, 0x3b, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a,
	0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73,
	0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73,
	0x1a, 0x9e, 0x01, 0x0a, 0x04, 0x43, 0x49, 0x50, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72,
	0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65,
	0x72, 0x12, 0x3f, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x29, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76,
	0x32, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x2e, 0x43,
	0x49, 0x50, 0x44, 0x2e, 0x50, 0x6b, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x73, 0x70, 0x65,
	0x63, 0x73, 0x1a, 0x3d, 0x0a, 0x07, 0x50, 0x6b, 0x67, 0x53, 0x70, 0x65, 0x63, 0x12, 0x18, 0x0a,
	0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
	0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x42, 0x0b, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04,
	0x08, 0x04, 0x10, 0x05, 0x22, 0x8c, 0x05, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65,
	0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x12, 0x37, 0x0a, 0x03, 0x63, 0x61, 0x73, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63,
	0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x44,
	0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x2e, 0x43, 0x41, 0x53, 0x48, 0x00, 0x52, 0x03, 0x63, 0x61,
	0x73, 0x12, 0x3a, 0x0a, 0x04, 0x63, 0x69, 0x70, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x24, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32,
	0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66,
	0x2e, 0x43, 0x49, 0x50, 0x44, 0x48, 0x00, 0x52, 0x04, 0x63, 0x69, 0x70, 0x64, 0x1a, 0x90, 0x01,
	0x0a, 0x06, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x40, 0x0a, 0x0e, 0x66, 0x65, 0x74, 0x63,
	0x68, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
	0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x66, 0x65, 0x74,
	0x63, 0x68, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x10, 0x69, 0x6e,
	0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
	0x0f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x1a, 0x45, 0x0a, 0x03, 0x43, 0x41, 0x53, 0x12, 0x3e, 0x0a, 0x06, 0x74, 0x69, 0x6d, 0x69, 0x6e,
	0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62,
	0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65,
	0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52,
	0x06, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x1a, 0x9c, 0x02, 0x0a, 0x04, 0x43, 0x49, 0x50, 0x44,
	0x12, 0x42, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x2c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32,
	0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66,
	0x2e, 0x43, 0x49, 0x50, 0x44, 0x2e, 0x50, 0x6b, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x73,
	0x70, 0x65, 0x63, 0x73, 0x1a, 0xcf, 0x01, 0x0a, 0x07, 0x50, 0x6b, 0x67, 0x53, 0x70, 0x65, 0x63,
	0x12, 0x18, 0x0a, 0x07, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x07, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61,
	0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x63,
	0x6b, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x36,
	0x0a, 0x0a, 0x77, 0x61, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x17, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
	0x2e, 0x76, 0x32, 0x2e, 0x54, 0x72, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x52, 0x09, 0x77, 0x61, 0x73,
	0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x06, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75,
	0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64,
	0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x06,
	0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x42, 0x0b, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74,
	0x79, 0x70, 0x65, 0x22, 0xf0, 0x22, 0x0a, 0x0a, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66,
	0x72, 0x61, 0x12, 0x48, 0x0a, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65,
	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62,
	0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e,
	0x66, 0x72, 0x61, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52,
	0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3f, 0x0a, 0x08,
	0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23,
	0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x53, 0x77, 0x61, 0x72, 0x6d,
	0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x39, 0x0a,
	0x06, 0x6c, 0x6f, 0x67, 0x64, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x4c, 0x6f, 0x67, 0x44, 0x6f, 0x67,
	0x52, 0x06, 0x6c, 0x6f, 0x67, 0x64, 0x6f, 0x67, 0x12, 0x39, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x69,
	0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49,
	0x6e, 0x66, 0x72, 0x61, 0x2e, 0x52, 0x65, 0x63, 0x69, 0x70, 0x65, 0x52, 0x06, 0x72, 0x65, 0x63,
	0x69, 0x70, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x64, 0x62, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63,
	0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72,
	0x61, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x44, 0x42, 0x52, 0x08, 0x72, 0x65, 0x73, 0x75,
	0x6c, 0x74, 0x64, 0x62, 0x12, 0x3c, 0x0a, 0x07, 0x62, 0x62, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18,
	0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63,
	0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72,
	0x61, 0x2e, 0x42, 0x42, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x62, 0x61, 0x67, 0x65,
	0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x07, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65,
	0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e,
	0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64,
	0x1a, 0xdd, 0x14, 0x0a, 0x0b, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
	0x12, 0x36, 0x0a, 0x17, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x15, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
	0x18, 0x05, 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,
	0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
	0x74, 0x69, 0x65, 0x73, 0x12, 0x55, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65,
	0x64, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x22, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
	0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x44, 0x69, 0x6d,
	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65,
	0x64, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x68,
	0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68,
	0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x6c, 0x0a, 0x12, 0x65, 0x78, 0x70, 0x65, 0x72,
	0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65,
	0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x65,
	0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74,
	0x72, 0x79, 0x52, 0x11, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
	0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x6a, 0x0a, 0x10, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x65,
	0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x3b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x42, 0x75, 0x69, 0x6c,
	0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x65,
	0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x02, 0x18, 0x01,
	0x52, 0x0f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c,
	0x65, 0x12, 0x42, 0x0a, 0x05, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x2c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76,
	0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x42, 0x75, 0x69,
	0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x05,
	0x61, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x19, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x70,
	0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x5f, 0x68, 0x6f, 0x73,
	0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50,
	0x75, 0x62, 0x6c, 0x69, 0x63, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x73,
	0x1a, 0xa7, 0x0c, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x05, 0x69, 0x6e,
	0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64,
	0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65,
	0x74, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x52, 0x05, 0x69,
	0x6e, 0x70, 0x75, 0x74, 0x12, 0x4b, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b,
	0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x67, 0x65,
	0x6e, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75,
	0x74, 0x12, 0x4b, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e,
	0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x42, 0x75,
	0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2e,
	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x56,
	0x0a, 0x08, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x3a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76,
	0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x42, 0x75, 0x69,
	0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x50,
	0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x75,
	0x72, 0x70, 0x6f, 0x73, 0x65, 0x73, 0x1a, 0x86, 0x03, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63,
	0x65, 0x12, 0x4e, 0x0a, 0x04, 0x63, 0x69, 0x70, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x38, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x42, 0x75, 0x69, 0x6c,
	0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x6f,
	0x75, 0x72, 0x63, 0x65, 0x2e, 0x43, 0x49, 0x50, 0x44, 0x48, 0x00, 0x52, 0x04, 0x63, 0x69, 0x70,
	0x64, 0x1a, 0x9e, 0x02, 0x0a, 0x04, 0x43, 0x49, 0x50, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61,
	0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x63,
	0x6b, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16,
	0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
	0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x83, 0x01, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x6c,
	0x76, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65,
	0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x67, 0x65, 0x6e,
	0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x43, 0x49, 0x50, 0x44, 0x2e, 0x52, 0x65,
	0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x45,
	0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x6c,
	0x76, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x44, 0x0a, 0x16,
	0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
	0x38, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x1a,
	0xb0, 0x01, 0x0a, 0x05, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x50, 0x0a, 0x04, 0x64, 0x61, 0x74,
	0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62,
	0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e,
	0x66, 0x72, 0x61, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e,
	0x41, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61,
	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x55, 0x0a, 0x09, 0x44,
	0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61,
	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74,
	0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
	0x38, 0x01, 0x1a, 0xd8, 0x03, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x6a, 0x0a,
	0x0d, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b,
	0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x67, 0x65,
	0x6e, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76,
	0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x73,
	0x6f, 0x6c, 0x76, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x74, 0x61,
	0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75,
	0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x44, 0x0a, 0x0e, 0x73, 0x74, 0x61,
	0x74, 0x75, 0x73, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e,
	0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
	0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12,
	0x21, 0x0a, 0x0c, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x48, 0x74,
	0x6d, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74,
	0x66, 0x6f, 0x72, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x67, 0x65, 0x6e,
	0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x40, 0x0a, 0x0e, 0x74, 0x6f, 0x74,
	0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x74, 0x6f,
	0x74, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x60, 0x0a, 0x11, 0x52,
	0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79,
	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
	0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e,
	0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52,
	0x65, 0x66, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x71, 0x0a,
	0x0d, 0x50, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
	0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
	0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x34, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x42, 0x75, 0x69, 0x6c,
	0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x75,
	0x72, 0x70, 0x6f, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
	0x22, 0x58, 0x0a, 0x07, 0x50, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x50,
	0x55, 0x52, 0x50, 0x4f, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
	0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x55, 0x52, 0x50, 0x4f, 0x53, 0x45, 0x5f,
	0x45, 0x58, 0x45, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x01, 0x12, 0x1b, 0x0a,
	0x17, 0x50, 0x55, 0x52, 0x50, 0x4f, 0x53, 0x45, 0x5f, 0x42, 0x42, 0x41, 0x47, 0x45, 0x4e, 0x54,
	0x5f, 0x55, 0x54, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x10, 0x02, 0x1a, 0x7d, 0x0a, 0x16, 0x45, 0x78,
	0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 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, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63,
	0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72,
	0x61, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x45, 0x78,
	0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x05,
	0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x14, 0x41, 0x67, 0x65,
	0x6e, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72,
	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
	0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
	0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61,
	0x52, 0x65, 0x66, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe9,
	0x01, 0x0a, 0x10, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x61,
	0x73, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e,
	0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00,
	0x12, 0x24, 0x0a, 0x20, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52,
	0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x46,
	0x41, 0x55, 0x4c, 0x54, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49,
	0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x49, 0x4c,
	0x44, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20,
	0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f,
	0x4e, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x5f, 0x4d, 0x49, 0x4e, 0x49, 0x4d, 0x55, 0x4d,
	0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54,
	0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x45,
	0x44, 0x10, 0x04, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x58, 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e,
	0x54, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x5f,
	0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05,
	0x1a, 0xdf, 0x04, 0x0a, 0x08, 0x53, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a,
	0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73,
	0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b,
	0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x75, 0x6e,
	0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e,
	0x74, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73,
	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
	0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 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, 0x12, 0x4b, 0x0a, 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x69, 0x6d,
	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52,
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f,
	0x6e, 0x52, 0x0e, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
	0x73, 0x12, 0x41, 0x0a, 0x0e, 0x62, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69,
	0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e,
	0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0d, 0x62, 0x6f, 0x74, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73,
	0x69, 0x6f, 0x6e, 0x73, 0x12, 0x46, 0x0a, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x73, 0x18, 0x07,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b,
	0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61,
	0x2e, 0x53, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45,
	0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0b,
	0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x18, 0x2e, 0x73, 0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e,
	0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x6f, 0x6e,
	0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x97, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x63,
	0x68, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70,
	0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12,
	0x48, 0x0a, 0x13, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x77, 0x61, 0x72, 0x6d,
	0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
	0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72,
	0x57, 0x61, 0x72, 0x6d, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x6e, 0x76,
	0x5f, 0x76, 0x61, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x76, 0x56,
	0x61, 0x72, 0x1a, 0x56, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x44, 0x6f, 0x67, 0x12, 0x1a, 0x0a, 0x08,
	0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
	0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a,
	0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65,
	0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x3f, 0x0a, 0x06, 0x52, 0x65,
	0x63, 0x69, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x69, 0x70, 0x64, 0x5f, 0x70, 0x61, 0x63,
	0x6b, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x69, 0x70, 0x64,
	0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x46, 0x0a, 0x08, 0x52,
	0x65, 0x73, 0x75, 0x6c, 0x74, 0x44, 0x42, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e,
	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e,
	0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x1a, 0x9a, 0x03, 0x0a, 0x07, 0x42, 0x42, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12,
	0x21, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61,
	0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x63, 0x68, 0x65, 0x44, 0x69, 0x72, 0x12,
	0x3d, 0x0a, 0x19, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f,
	0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03,
	0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x16, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x75, 0x62,
	0x6c, 0x69, 0x63, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x42,
	0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x42, 0x42, 0x41, 0x67, 0x65, 0x6e,
	0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x69, 0x6e, 0x70,
	0x75, 0x74, 0x1a, 0xcb, 0x01, 0x0a, 0x05, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x59, 0x0a, 0x0d,
	0x63, 0x69, 0x70, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65,
	0x74, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e,
	0x42, 0x42, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x43, 0x49,
	0x50, 0x44, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x0c, 0x63, 0x69, 0x70, 0x64, 0x50,
	0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x1a, 0x67, 0x0a, 0x0b, 0x43, 0x49, 0x50, 0x44, 0x50,
	0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65,
	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72,
	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04,
	0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68,
	0x1a, 0x64, 0x0a, 0x07, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x63,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 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, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x28, 0x0a, 0x04,
	0x74, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x75, 0x69,
	0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b,
	0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x3b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x70, 0x62, 0x62, 0x06,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescOnce sync.Once
	file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescData = file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDesc
)

func file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescGZIP() []byte {
	file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescOnce.Do(func() {
		file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescData)
	})
	return file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDescData
}

var file_go_chromium_org_luci_buildbucket_proto_build_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes = make([]protoimpl.MessageInfo, 35)
var file_go_chromium_org_luci_buildbucket_proto_build_proto_goTypes = []interface{}{
	(BuildInfra_Buildbucket_ExperimentReason)(0), // 0: buildbucket.v2.BuildInfra.Buildbucket.ExperimentReason
	(BuildInfra_Buildbucket_Agent_Purpose)(0),    // 1: buildbucket.v2.BuildInfra.Buildbucket.Agent.Purpose
	(*Build)(nil),                               // 2: buildbucket.v2.Build
	(*InputDataRef)(nil),                        // 3: buildbucket.v2.InputDataRef
	(*ResolvedDataRef)(nil),                     // 4: buildbucket.v2.ResolvedDataRef
	(*BuildInfra)(nil),                          // 5: buildbucket.v2.BuildInfra
	(*Build_Input)(nil),                         // 6: buildbucket.v2.Build.Input
	(*Build_Output)(nil),                        // 7: buildbucket.v2.Build.Output
	(*InputDataRef_CAS)(nil),                    // 8: buildbucket.v2.InputDataRef.CAS
	(*InputDataRef_CIPD)(nil),                   // 9: buildbucket.v2.InputDataRef.CIPD
	(*InputDataRef_CAS_Digest)(nil),             // 10: buildbucket.v2.InputDataRef.CAS.Digest
	(*InputDataRef_CIPD_PkgSpec)(nil),           // 11: buildbucket.v2.InputDataRef.CIPD.PkgSpec
	(*ResolvedDataRef_Timing)(nil),              // 12: buildbucket.v2.ResolvedDataRef.Timing
	(*ResolvedDataRef_CAS)(nil),                 // 13: buildbucket.v2.ResolvedDataRef.CAS
	(*ResolvedDataRef_CIPD)(nil),                // 14: buildbucket.v2.ResolvedDataRef.CIPD
	(*ResolvedDataRef_CIPD_PkgSpec)(nil),        // 15: buildbucket.v2.ResolvedDataRef.CIPD.PkgSpec
	(*BuildInfra_Buildbucket)(nil),              // 16: buildbucket.v2.BuildInfra.Buildbucket
	(*BuildInfra_Swarming)(nil),                 // 17: buildbucket.v2.BuildInfra.Swarming
	(*BuildInfra_LogDog)(nil),                   // 18: buildbucket.v2.BuildInfra.LogDog
	(*BuildInfra_Recipe)(nil),                   // 19: buildbucket.v2.BuildInfra.Recipe
	(*BuildInfra_ResultDB)(nil),                 // 20: buildbucket.v2.BuildInfra.ResultDB
	(*BuildInfra_BBAgent)(nil),                  // 21: buildbucket.v2.BuildInfra.BBAgent
	(*BuildInfra_Backend)(nil),                  // 22: buildbucket.v2.BuildInfra.Backend
	(*BuildInfra_Buildbucket_Agent)(nil),        // 23: buildbucket.v2.BuildInfra.Buildbucket.Agent
	nil,                                         // 24: buildbucket.v2.BuildInfra.Buildbucket.ExperimentReasonsEntry
	nil,                                         // 25: buildbucket.v2.BuildInfra.Buildbucket.AgentExecutableEntry
	(*BuildInfra_Buildbucket_Agent_Source)(nil), // 26: buildbucket.v2.BuildInfra.Buildbucket.Agent.Source
	(*BuildInfra_Buildbucket_Agent_Input)(nil),  // 27: buildbucket.v2.BuildInfra.Buildbucket.Agent.Input
	(*BuildInfra_Buildbucket_Agent_Output)(nil), // 28: buildbucket.v2.BuildInfra.Buildbucket.Agent.Output
	nil, // 29: buildbucket.v2.BuildInfra.Buildbucket.Agent.PurposesEntry
	(*BuildInfra_Buildbucket_Agent_Source_CIPD)(nil), // 30: buildbucket.v2.BuildInfra.Buildbucket.Agent.Source.CIPD
	nil,                                    // 31: buildbucket.v2.BuildInfra.Buildbucket.Agent.Source.CIPD.ResolvedInstancesEntry
	nil,                                    // 32: buildbucket.v2.BuildInfra.Buildbucket.Agent.Input.DataEntry
	nil,                                    // 33: buildbucket.v2.BuildInfra.Buildbucket.Agent.Output.ResolvedDataEntry
	(*BuildInfra_Swarming_CacheEntry)(nil), // 34: buildbucket.v2.BuildInfra.Swarming.CacheEntry
	(*BuildInfra_BBAgent_Input)(nil),       // 35: buildbucket.v2.BuildInfra.BBAgent.Input
	(*BuildInfra_BBAgent_Input_CIPDPackage)(nil), // 36: buildbucket.v2.BuildInfra.BBAgent.Input.CIPDPackage
	(*BuilderID)(nil),             // 37: buildbucket.v2.BuilderID
	(*timestamppb.Timestamp)(nil), // 38: google.protobuf.Timestamp
	(Status)(0),                   // 39: buildbucket.v2.Status
	(Trinary)(0),                  // 40: buildbucket.v2.Trinary
	(*StatusDetails)(nil),         // 41: buildbucket.v2.StatusDetails
	(*Step)(nil),                  // 42: buildbucket.v2.Step
	(*StringPair)(nil),            // 43: buildbucket.v2.StringPair
	(*Executable)(nil),            // 44: buildbucket.v2.Executable
	(*durationpb.Duration)(nil),   // 45: google.protobuf.Duration
	(*structpb.Struct)(nil),       // 46: google.protobuf.Struct
	(*GitilesCommit)(nil),         // 47: buildbucket.v2.GitilesCommit
	(*GerritChange)(nil),          // 48: buildbucket.v2.GerritChange
	(*Log)(nil),                   // 49: buildbucket.v2.Log
	(*RequestedDimension)(nil),    // 50: buildbucket.v2.RequestedDimension
	(*api.Containment)(nil),       // 51: swarming.v1.Containment
	(*Task)(nil),                  // 52: buildbucket.v2.Task
}
var file_go_chromium_org_luci_buildbucket_proto_build_proto_depIdxs = []int32{
	37, // 0: buildbucket.v2.Build.builder:type_name -> buildbucket.v2.BuilderID
	38, // 1: buildbucket.v2.Build.create_time:type_name -> google.protobuf.Timestamp
	38, // 2: buildbucket.v2.Build.start_time:type_name -> google.protobuf.Timestamp
	38, // 3: buildbucket.v2.Build.end_time:type_name -> google.protobuf.Timestamp
	38, // 4: buildbucket.v2.Build.update_time:type_name -> google.protobuf.Timestamp
	38, // 5: buildbucket.v2.Build.cancel_time:type_name -> google.protobuf.Timestamp
	39, // 6: buildbucket.v2.Build.status:type_name -> buildbucket.v2.Status
	40, // 7: buildbucket.v2.Build.critical:type_name -> buildbucket.v2.Trinary
	41, // 8: buildbucket.v2.Build.status_details:type_name -> buildbucket.v2.StatusDetails
	6,  // 9: buildbucket.v2.Build.input:type_name -> buildbucket.v2.Build.Input
	7,  // 10: buildbucket.v2.Build.output:type_name -> buildbucket.v2.Build.Output
	42, // 11: buildbucket.v2.Build.steps:type_name -> buildbucket.v2.Step
	5,  // 12: buildbucket.v2.Build.infra:type_name -> buildbucket.v2.BuildInfra
	43, // 13: buildbucket.v2.Build.tags:type_name -> buildbucket.v2.StringPair
	44, // 14: buildbucket.v2.Build.exe:type_name -> buildbucket.v2.Executable
	45, // 15: buildbucket.v2.Build.scheduling_timeout:type_name -> google.protobuf.Duration
	45, // 16: buildbucket.v2.Build.execution_timeout:type_name -> google.protobuf.Duration
	45, // 17: buildbucket.v2.Build.grace_period:type_name -> google.protobuf.Duration
	8,  // 18: buildbucket.v2.InputDataRef.cas:type_name -> buildbucket.v2.InputDataRef.CAS
	9,  // 19: buildbucket.v2.InputDataRef.cipd:type_name -> buildbucket.v2.InputDataRef.CIPD
	13, // 20: buildbucket.v2.ResolvedDataRef.cas:type_name -> buildbucket.v2.ResolvedDataRef.CAS
	14, // 21: buildbucket.v2.ResolvedDataRef.cipd:type_name -> buildbucket.v2.ResolvedDataRef.CIPD
	16, // 22: buildbucket.v2.BuildInfra.buildbucket:type_name -> buildbucket.v2.BuildInfra.Buildbucket
	17, // 23: buildbucket.v2.BuildInfra.swarming:type_name -> buildbucket.v2.BuildInfra.Swarming
	18, // 24: buildbucket.v2.BuildInfra.logdog:type_name -> buildbucket.v2.BuildInfra.LogDog
	19, // 25: buildbucket.v2.BuildInfra.recipe:type_name -> buildbucket.v2.BuildInfra.Recipe
	20, // 26: buildbucket.v2.BuildInfra.resultdb:type_name -> buildbucket.v2.BuildInfra.ResultDB
	21, // 27: buildbucket.v2.BuildInfra.bbagent:type_name -> buildbucket.v2.BuildInfra.BBAgent
	22, // 28: buildbucket.v2.BuildInfra.backend:type_name -> buildbucket.v2.BuildInfra.Backend
	46, // 29: buildbucket.v2.Build.Input.properties:type_name -> google.protobuf.Struct
	47, // 30: buildbucket.v2.Build.Input.gitiles_commit:type_name -> buildbucket.v2.GitilesCommit
	48, // 31: buildbucket.v2.Build.Input.gerrit_changes:type_name -> buildbucket.v2.GerritChange
	46, // 32: buildbucket.v2.Build.Output.properties:type_name -> google.protobuf.Struct
	47, // 33: buildbucket.v2.Build.Output.gitiles_commit:type_name -> buildbucket.v2.GitilesCommit
	49, // 34: buildbucket.v2.Build.Output.logs:type_name -> buildbucket.v2.Log
	10, // 35: buildbucket.v2.InputDataRef.CAS.digest:type_name -> buildbucket.v2.InputDataRef.CAS.Digest
	11, // 36: buildbucket.v2.InputDataRef.CIPD.specs:type_name -> buildbucket.v2.InputDataRef.CIPD.PkgSpec
	45, // 37: buildbucket.v2.ResolvedDataRef.Timing.fetch_duration:type_name -> google.protobuf.Duration
	45, // 38: buildbucket.v2.ResolvedDataRef.Timing.install_duration:type_name -> google.protobuf.Duration
	12, // 39: buildbucket.v2.ResolvedDataRef.CAS.timing:type_name -> buildbucket.v2.ResolvedDataRef.Timing
	15, // 40: buildbucket.v2.ResolvedDataRef.CIPD.specs:type_name -> buildbucket.v2.ResolvedDataRef.CIPD.PkgSpec
	40, // 41: buildbucket.v2.ResolvedDataRef.CIPD.PkgSpec.was_cached:type_name -> buildbucket.v2.Trinary
	12, // 42: buildbucket.v2.ResolvedDataRef.CIPD.PkgSpec.timing:type_name -> buildbucket.v2.ResolvedDataRef.Timing
	46, // 43: buildbucket.v2.BuildInfra.Buildbucket.requested_properties:type_name -> google.protobuf.Struct
	50, // 44: buildbucket.v2.BuildInfra.Buildbucket.requested_dimensions:type_name -> buildbucket.v2.RequestedDimension
	24, // 45: buildbucket.v2.BuildInfra.Buildbucket.experiment_reasons:type_name -> buildbucket.v2.BuildInfra.Buildbucket.ExperimentReasonsEntry
	25, // 46: buildbucket.v2.BuildInfra.Buildbucket.agent_executable:type_name -> buildbucket.v2.BuildInfra.Buildbucket.AgentExecutableEntry
	23, // 47: buildbucket.v2.BuildInfra.Buildbucket.agent:type_name -> buildbucket.v2.BuildInfra.Buildbucket.Agent
	50, // 48: buildbucket.v2.BuildInfra.Swarming.task_dimensions:type_name -> buildbucket.v2.RequestedDimension
	43, // 49: buildbucket.v2.BuildInfra.Swarming.bot_dimensions:type_name -> buildbucket.v2.StringPair
	34, // 50: buildbucket.v2.BuildInfra.Swarming.caches:type_name -> buildbucket.v2.BuildInfra.Swarming.CacheEntry
	51, // 51: buildbucket.v2.BuildInfra.Swarming.containment:type_name -> swarming.v1.Containment
	35, // 52: buildbucket.v2.BuildInfra.BBAgent.input:type_name -> buildbucket.v2.BuildInfra.BBAgent.Input
	46, // 53: buildbucket.v2.BuildInfra.Backend.config:type_name -> google.protobuf.Struct
	52, // 54: buildbucket.v2.BuildInfra.Backend.task:type_name -> buildbucket.v2.Task
	27, // 55: buildbucket.v2.BuildInfra.Buildbucket.Agent.input:type_name -> buildbucket.v2.BuildInfra.Buildbucket.Agent.Input
	28, // 56: buildbucket.v2.BuildInfra.Buildbucket.Agent.output:type_name -> buildbucket.v2.BuildInfra.Buildbucket.Agent.Output
	26, // 57: buildbucket.v2.BuildInfra.Buildbucket.Agent.source:type_name -> buildbucket.v2.BuildInfra.Buildbucket.Agent.Source
	29, // 58: buildbucket.v2.BuildInfra.Buildbucket.Agent.purposes:type_name -> buildbucket.v2.BuildInfra.Buildbucket.Agent.PurposesEntry
	0,  // 59: buildbucket.v2.BuildInfra.Buildbucket.ExperimentReasonsEntry.value:type_name -> buildbucket.v2.BuildInfra.Buildbucket.ExperimentReason
	4,  // 60: buildbucket.v2.BuildInfra.Buildbucket.AgentExecutableEntry.value:type_name -> buildbucket.v2.ResolvedDataRef
	30, // 61: buildbucket.v2.BuildInfra.Buildbucket.Agent.Source.cipd:type_name -> buildbucket.v2.BuildInfra.Buildbucket.Agent.Source.CIPD
	32, // 62: buildbucket.v2.BuildInfra.Buildbucket.Agent.Input.data:type_name -> buildbucket.v2.BuildInfra.Buildbucket.Agent.Input.DataEntry
	33, // 63: buildbucket.v2.BuildInfra.Buildbucket.Agent.Output.resolved_data:type_name -> buildbucket.v2.BuildInfra.Buildbucket.Agent.Output.ResolvedDataEntry
	39, // 64: buildbucket.v2.BuildInfra.Buildbucket.Agent.Output.status:type_name -> buildbucket.v2.Status
	41, // 65: buildbucket.v2.BuildInfra.Buildbucket.Agent.Output.status_details:type_name -> buildbucket.v2.StatusDetails
	45, // 66: buildbucket.v2.BuildInfra.Buildbucket.Agent.Output.total_duration:type_name -> google.protobuf.Duration
	1,  // 67: buildbucket.v2.BuildInfra.Buildbucket.Agent.PurposesEntry.value:type_name -> buildbucket.v2.BuildInfra.Buildbucket.Agent.Purpose
	31, // 68: buildbucket.v2.BuildInfra.Buildbucket.Agent.Source.CIPD.resolved_instances:type_name -> buildbucket.v2.BuildInfra.Buildbucket.Agent.Source.CIPD.ResolvedInstancesEntry
	3,  // 69: buildbucket.v2.BuildInfra.Buildbucket.Agent.Input.DataEntry.value:type_name -> buildbucket.v2.InputDataRef
	4,  // 70: buildbucket.v2.BuildInfra.Buildbucket.Agent.Output.ResolvedDataEntry.value:type_name -> buildbucket.v2.ResolvedDataRef
	45, // 71: buildbucket.v2.BuildInfra.Swarming.CacheEntry.wait_for_warm_cache:type_name -> google.protobuf.Duration
	36, // 72: buildbucket.v2.BuildInfra.BBAgent.Input.cipd_packages:type_name -> buildbucket.v2.BuildInfra.BBAgent.Input.CIPDPackage
	73, // [73:73] is the sub-list for method output_type
	73, // [73:73] is the sub-list for method input_type
	73, // [73:73] is the sub-list for extension type_name
	73, // [73:73] is the sub-list for extension extendee
	0,  // [0:73] is the sub-list for field type_name
}

func init() { file_go_chromium_org_luci_buildbucket_proto_build_proto_init() }
func file_go_chromium_org_luci_buildbucket_proto_build_proto_init() {
	if File_go_chromium_org_luci_buildbucket_proto_build_proto != nil {
		return
	}
	file_go_chromium_org_luci_buildbucket_proto_builder_common_proto_init()
	file_go_chromium_org_luci_buildbucket_proto_common_proto_init()
	file_go_chromium_org_luci_buildbucket_proto_step_proto_init()
	file_go_chromium_org_luci_buildbucket_proto_task_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Build); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InputDataRef); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ResolvedDataRef); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Build_Input); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Build_Output); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InputDataRef_CAS); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InputDataRef_CIPD); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InputDataRef_CAS_Digest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InputDataRef_CIPD_PkgSpec); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ResolvedDataRef_Timing); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ResolvedDataRef_CAS); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ResolvedDataRef_CIPD); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ResolvedDataRef_CIPD_PkgSpec); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_Buildbucket); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_Swarming); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_LogDog); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_Recipe); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_ResultDB); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_BBAgent); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_Backend); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_Buildbucket_Agent); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_Buildbucket_Agent_Source); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_Buildbucket_Agent_Input); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_Buildbucket_Agent_Output); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_Buildbucket_Agent_Source_CIPD); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_Swarming_CacheEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_BBAgent_Input); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfra_BBAgent_Input_CIPDPackage); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[1].OneofWrappers = []interface{}{
		(*InputDataRef_Cas)(nil),
		(*InputDataRef_Cipd)(nil),
	}
	file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[2].OneofWrappers = []interface{}{
		(*ResolvedDataRef_Cas)(nil),
		(*ResolvedDataRef_Cipd)(nil),
	}
	file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes[24].OneofWrappers = []interface{}{
		(*BuildInfra_Buildbucket_Agent_Source_Cipd)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDesc,
			NumEnums:      2,
			NumMessages:   35,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_go_chromium_org_luci_buildbucket_proto_build_proto_goTypes,
		DependencyIndexes: file_go_chromium_org_luci_buildbucket_proto_build_proto_depIdxs,
		EnumInfos:         file_go_chromium_org_luci_buildbucket_proto_build_proto_enumTypes,
		MessageInfos:      file_go_chromium_org_luci_buildbucket_proto_build_proto_msgTypes,
	}.Build()
	File_go_chromium_org_luci_buildbucket_proto_build_proto = out.File
	file_go_chromium_org_luci_buildbucket_proto_build_proto_rawDesc = nil
	file_go_chromium_org_luci_buildbucket_proto_build_proto_goTypes = nil
	file_go_chromium_org_luci_buildbucket_proto_build_proto_depIdxs = nil
}
