// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.25.0-devel
// 	protoc        v3.6.1
// source: chromite/api/toolchain.proto

package api

import (
	chromiumos "go.chromium.org/chromiumos/infra/proto/go/chromiumos"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	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)
)

// TODO(crbug.com/1020615): Drop this once this is live in production and all of
// the users have migrated to using BuilderConfig.Artifacts.ArtifactType
// Meanwhile, keep this in sync with chromiumos/builder_config.proto.
type AFDOArtifactType int32

const (
	// No AFDO artifact type specified.
	AFDOArtifactType_NONE_TYPE AFDOArtifactType = 0
	// The type is orderfile.
	AFDOArtifactType_ORDERFILE AFDOArtifactType = 1
	// The type is Chrome AFDO files generated by benchmarks.
	AFDOArtifactType_BENCHMARK_AFDO AFDOArtifactType = 2
	// The type is kernel AFDO files.
	AFDOArtifactType_KERNEL_AFDO AFDOArtifactType = 3
	// The type is Chrome AFDO used in release builders.
	AFDOArtifactType_CHROME_AFDO AFDOArtifactType = 4
)

// Enum value maps for AFDOArtifactType.
var (
	AFDOArtifactType_name = map[int32]string{
		0: "NONE_TYPE",
		1: "ORDERFILE",
		2: "BENCHMARK_AFDO",
		3: "KERNEL_AFDO",
		4: "CHROME_AFDO",
	}
	AFDOArtifactType_value = map[string]int32{
		"NONE_TYPE":      0,
		"ORDERFILE":      1,
		"BENCHMARK_AFDO": 2,
		"KERNEL_AFDO":    3,
		"CHROME_AFDO":    4,
	}
)

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

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

func (AFDOArtifactType) Descriptor() protoreflect.EnumDescriptor {
	return file_chromite_api_toolchain_proto_enumTypes[0].Descriptor()
}

func (AFDOArtifactType) Type() protoreflect.EnumType {
	return &file_chromite_api_toolchain_proto_enumTypes[0]
}

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

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

// Information about a collection of artifacts.
type ArtifactInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The ArtifactType.
	ArtifactType chromiumos.BuilderConfig_Artifacts_ArtifactTypes `protobuf:"varint,1,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.BuilderConfig_Artifacts_ArtifactTypes" json:"artifact_type,omitempty"`
	// Artifacts for this ArtifactType.
	Artifacts []*Artifact `protobuf:"bytes,2,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
}

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

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

func (*ArtifactInfo) ProtoMessage() {}

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

func (x *ArtifactInfo) GetArtifactType() chromiumos.BuilderConfig_Artifacts_ArtifactTypes {
	if x != nil {
		return x.ArtifactType
	}
	return chromiumos.BuilderConfig_Artifacts_ARTIFACT_TYPES_UNSPECIFIED
}

func (x *ArtifactInfo) GetArtifacts() []*Artifact {
	if x != nil {
		return x.Artifacts
	}
	return nil
}

// TODO(crbug/1034529): Migrate this to ArtifactsService/BuildSetup.
//
// Prepare the build for artifact building.
type PrepareForToolchainBuildRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The artifact types that this build should make.
	ArtifactTypes []chromiumos.BuilderConfig_Artifacts_ArtifactTypes `protobuf:"varint,1,rep,packed,name=artifact_types,json=artifactTypes,proto3,enum=chromiumos.BuilderConfig_Artifacts_ArtifactTypes" json:"artifact_types,omitempty"`
	// Note: both chroot and sysroot may be unspecified, when the endpoint is
	// called prior to their creation.
	// The chroot where the sysroot lives.
	Chroot *chromiumos.Chroot `protobuf:"bytes,2,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The sysroot where the files live.
	Sysroot *Sysroot `protobuf:"bytes,3,opt,name=sysroot,proto3" json:"sysroot,omitempty"`
	// Information about artifacts available when preparing.
	InputArtifacts []*chromiumos.BuilderConfig_Artifacts_InputArtifactInfo `protobuf:"bytes,4,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
	// Additional arguments used in PrepareForBuild.
	// TODO(crbug/1019868): Transition to artifact_profile_info.
	AdditionalArgs *chromiumos.PrepareForBuildAdditionalArgs `protobuf:"bytes,5,opt,name=additional_args,json=additionalArgs,proto3" json:"additional_args,omitempty"`
	// Profile information used for the artifact.
	ProfileInfo *chromiumos.ArtifactProfileInfo `protobuf:"bytes,6,opt,name=profile_info,json=profileInfo,proto3" json:"profile_info,omitempty"`
}

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

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

func (*PrepareForToolchainBuildRequest) ProtoMessage() {}

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

func (x *PrepareForToolchainBuildRequest) GetArtifactTypes() []chromiumos.BuilderConfig_Artifacts_ArtifactTypes {
	if x != nil {
		return x.ArtifactTypes
	}
	return nil
}

func (x *PrepareForToolchainBuildRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *PrepareForToolchainBuildRequest) GetSysroot() *Sysroot {
	if x != nil {
		return x.Sysroot
	}
	return nil
}

func (x *PrepareForToolchainBuildRequest) GetInputArtifacts() []*chromiumos.BuilderConfig_Artifacts_InputArtifactInfo {
	if x != nil {
		return x.InputArtifacts
	}
	return nil
}

func (x *PrepareForToolchainBuildRequest) GetAdditionalArgs() *chromiumos.PrepareForBuildAdditionalArgs {
	if x != nil {
		return x.AdditionalArgs
	}
	return nil
}

func (x *PrepareForToolchainBuildRequest) GetProfileInfo() *chromiumos.ArtifactProfileInfo {
	if x != nil {
		return x.ProfileInfo
	}
	return nil
}

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

	// Does this artifact require a build?  See artifacts.proto in this directory.
	BuildRelevance PrepareForBuildResponse_BuildRelevance `protobuf:"varint,1,opt,name=build_relevance,json=buildRelevance,proto3,enum=chromite.api.PrepareForBuildResponse_BuildRelevance" json:"build_relevance,omitempty"`
}

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

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

func (*PrepareForToolchainBuildResponse) ProtoMessage() {}

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

func (x *PrepareForToolchainBuildResponse) GetBuildRelevance() PrepareForBuildResponse_BuildRelevance {
	if x != nil {
		return x.BuildRelevance
	}
	return PrepareForBuildResponse_UNSPECIFIED
}

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

	// The chroot where the sysroot lives.
	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// The sysroot where the files live.
	Sysroot *Sysroot `protobuf:"bytes,2,opt,name=sysroot,proto3" json:"sysroot,omitempty"`
	// Absolute path to the directory in which artifacts should be dropped.
	OutputDir string `protobuf:"bytes,3,opt,name=output_dir,json=outputDir,proto3" json:"output_dir,omitempty"`
	// Which artifacts are wanted?
	ArtifactTypes []chromiumos.BuilderConfig_Artifacts_ArtifactTypes `protobuf:"varint,4,rep,packed,name=artifact_types,json=artifactTypes,proto3,enum=chromiumos.BuilderConfig_Artifacts_ArtifactTypes" json:"artifact_types,omitempty"`
	// Additional arguments that were used in PrepareForBuild.
	// TODO(crbug/1019868): Transition to artifact_profile_info.
	AdditionalArgs *chromiumos.PrepareForBuildAdditionalArgs `protobuf:"bytes,5,opt,name=additional_args,json=additionalArgs,proto3" json:"additional_args,omitempty"`
	// Profile information used for the artifact.
	ProfileInfo *chromiumos.ArtifactProfileInfo `protobuf:"bytes,6,opt,name=profile_info,json=profileInfo,proto3" json:"profile_info,omitempty"`
}

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

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

func (*BundleToolchainRequest) ProtoMessage() {}

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

func (x *BundleToolchainRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *BundleToolchainRequest) GetSysroot() *Sysroot {
	if x != nil {
		return x.Sysroot
	}
	return nil
}

func (x *BundleToolchainRequest) GetOutputDir() string {
	if x != nil {
		return x.OutputDir
	}
	return ""
}

func (x *BundleToolchainRequest) GetArtifactTypes() []chromiumos.BuilderConfig_Artifacts_ArtifactTypes {
	if x != nil {
		return x.ArtifactTypes
	}
	return nil
}

func (x *BundleToolchainRequest) GetAdditionalArgs() *chromiumos.PrepareForBuildAdditionalArgs {
	if x != nil {
		return x.AdditionalArgs
	}
	return nil
}

func (x *BundleToolchainRequest) GetProfileInfo() *chromiumos.ArtifactProfileInfo {
	if x != nil {
		return x.ProfileInfo
	}
	return nil
}

// Response describing which bundles were dumped to the given output directory.
type BundleToolchainResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The artifacts that added to the output directory.
	ArtifactsInfo []*ArtifactInfo `protobuf:"bytes,2,rep,name=artifacts_info,json=artifactsInfo,proto3" json:"artifacts_info,omitempty"`
}

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

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

func (*BundleToolchainResponse) ProtoMessage() {}

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

func (x *BundleToolchainResponse) GetArtifactsInfo() []*ArtifactInfo {
	if x != nil {
		return x.ArtifactsInfo
	}
	return nil
}

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

	UploadedArtifacts []*GetUpdatedFilesRequest_UploadedArtifacts `protobuf:"bytes,1,rep,name=uploaded_artifacts,json=uploadedArtifacts,proto3" json:"uploaded_artifacts,omitempty"`
}

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

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

func (*GetUpdatedFilesRequest) ProtoMessage() {}

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

func (x *GetUpdatedFilesRequest) GetUploadedArtifacts() []*GetUpdatedFilesRequest_UploadedArtifacts {
	if x != nil {
		return x.UploadedArtifacts
	}
	return nil
}

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

	UpdatedFiles []*GetUpdatedFilesResponse_UpdatedFile `protobuf:"bytes,1,rep,name=updated_files,json=updatedFiles,proto3" json:"updated_files,omitempty"`
	// The commit message to use.
	CommitMessage string `protobuf:"bytes,2,opt,name=commit_message,json=commitMessage,proto3" json:"commit_message,omitempty"`
	// Any footers to use.  Formatted to the current standard by Recipes.
	CommitFooter []*GetUpdatedFilesResponse_CommitFooter `protobuf:"bytes,3,rep,name=commit_footer,json=commitFooter,proto3" json:"commit_footer,omitempty"`
}

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

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

func (*GetUpdatedFilesResponse) ProtoMessage() {}

func (x *GetUpdatedFilesResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_toolchain_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 GetUpdatedFilesResponse.ProtoReflect.Descriptor instead.
func (*GetUpdatedFilesResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_toolchain_proto_rawDescGZIP(), []int{6}
}

func (x *GetUpdatedFilesResponse) GetUpdatedFiles() []*GetUpdatedFilesResponse_UpdatedFile {
	if x != nil {
		return x.UpdatedFiles
	}
	return nil
}

func (x *GetUpdatedFilesResponse) GetCommitMessage() string {
	if x != nil {
		return x.CommitMessage
	}
	return ""
}

func (x *GetUpdatedFilesResponse) GetCommitFooter() []*GetUpdatedFilesResponse_CommitFooter {
	if x != nil {
		return x.CommitFooter
	}
	return nil
}

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

	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,1,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// The type of AFDO artifact to test.
	ArtifactType chromiumos.AFDOArtifactType `protobuf:"varint,2,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.AFDOArtifactType" json:"artifact_type,omitempty"`
}

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

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

func (*VerifyAFDOArtifactsRequest) ProtoMessage() {}

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

func (x *VerifyAFDOArtifactsRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

func (x *VerifyAFDOArtifactsRequest) GetArtifactType() chromiumos.AFDOArtifactType {
	if x != nil {
		return x.ArtifactType
	}
	return chromiumos.AFDOArtifactType_NONE_TYPE
}

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

	// Status of the service
	Status bool `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"`
}

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

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

func (*VerifyAFDOArtifactsResponse) ProtoMessage() {}

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

func (x *VerifyAFDOArtifactsResponse) GetStatus() bool {
	if x != nil {
		return x.Status
	}
	return false
}

// We need the artifact info from BundleResponse and the profile info
// as the input of the request.
type GetUpdatedFilesRequest_UploadedArtifacts struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ArtifactInfo *ArtifactInfo                   `protobuf:"bytes,1,opt,name=artifact_info,json=artifactInfo,proto3" json:"artifact_info,omitempty"`
	ProfileInfo  *chromiumos.ArtifactProfileInfo `protobuf:"bytes,2,opt,name=profile_info,json=profileInfo,proto3" json:"profile_info,omitempty"`
}

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

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

func (*GetUpdatedFilesRequest_UploadedArtifacts) ProtoMessage() {}

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

func (x *GetUpdatedFilesRequest_UploadedArtifacts) GetArtifactInfo() *ArtifactInfo {
	if x != nil {
		return x.ArtifactInfo
	}
	return nil
}

func (x *GetUpdatedFilesRequest_UploadedArtifacts) GetProfileInfo() *chromiumos.ArtifactProfileInfo {
	if x != nil {
		return x.ProfileInfo
	}
	return nil
}

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

	// The path to the (uncommitted) file.
	Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
}

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

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

func (*GetUpdatedFilesResponse_UpdatedFile) ProtoMessage() {}

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

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

// The Cq-Depend footer is used by LUCI (and Chrome OS Recipes) to operate
// on interdependent changes at various steps.
type GetUpdatedFilesResponse_CqDependFooter struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The gerrit change(s) we depend on.
	GerritChange []*chromiumos.GerritChange `protobuf:"bytes,1,rep,name=gerrit_change,json=gerritChange,proto3" json:"gerrit_change,omitempty"`
}

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

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

func (*GetUpdatedFilesResponse_CqDependFooter) ProtoMessage() {}

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

func (x *GetUpdatedFilesResponse_CqDependFooter) GetGerritChange() []*chromiumos.GerritChange {
	if x != nil {
		return x.GerritChange
	}
	return nil
}

// The Cq-Cl-Tag footer is used by cq-orchestrator to choose quota pools.
type GetUpdatedFilesResponse_CqClTagFooter struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The Cq-Cl-Tag value.
	Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"`
}

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

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

func (*GetUpdatedFilesResponse_CqClTagFooter) ProtoMessage() {}

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

func (x *GetUpdatedFilesResponse_CqClTagFooter) GetTag() string {
	if x != nil {
		return x.Tag
	}
	return ""
}

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

	// Types that are assignable to Footer:
	//	*GetUpdatedFilesResponse_CommitFooter_CqDepend
	//	*GetUpdatedFilesResponse_CommitFooter_CqClTag
	Footer isGetUpdatedFilesResponse_CommitFooter_Footer `protobuf_oneof:"footer"`
}

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

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

func (*GetUpdatedFilesResponse_CommitFooter) ProtoMessage() {}

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

func (m *GetUpdatedFilesResponse_CommitFooter) GetFooter() isGetUpdatedFilesResponse_CommitFooter_Footer {
	if m != nil {
		return m.Footer
	}
	return nil
}

func (x *GetUpdatedFilesResponse_CommitFooter) GetCqDepend() *GetUpdatedFilesResponse_CqDependFooter {
	if x, ok := x.GetFooter().(*GetUpdatedFilesResponse_CommitFooter_CqDepend); ok {
		return x.CqDepend
	}
	return nil
}

func (x *GetUpdatedFilesResponse_CommitFooter) GetCqClTag() *GetUpdatedFilesResponse_CqClTagFooter {
	if x, ok := x.GetFooter().(*GetUpdatedFilesResponse_CommitFooter_CqClTag); ok {
		return x.CqClTag
	}
	return nil
}

type isGetUpdatedFilesResponse_CommitFooter_Footer interface {
	isGetUpdatedFilesResponse_CommitFooter_Footer()
}

type GetUpdatedFilesResponse_CommitFooter_CqDepend struct {
	CqDepend *GetUpdatedFilesResponse_CqDependFooter `protobuf:"bytes,1,opt,name=cq_depend,json=cqDepend,proto3,oneof"`
}

type GetUpdatedFilesResponse_CommitFooter_CqClTag struct {
	CqClTag *GetUpdatedFilesResponse_CqClTagFooter `protobuf:"bytes,2,opt,name=cq_cl_tag,json=cqClTag,proto3,oneof"`
}

func (*GetUpdatedFilesResponse_CommitFooter_CqDepend) isGetUpdatedFilesResponse_CommitFooter_Footer() {
}

func (*GetUpdatedFilesResponse_CommitFooter_CqClTag) isGetUpdatedFilesResponse_CommitFooter_Footer() {
}

var File_chromite_api_toolchain_proto protoreflect.FileDescriptor

var file_chromite_api_toolchain_proto_rawDesc = []byte{
	0x0a, 0x1c, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74,
	0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x1c, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61,
	0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9c,
	0x01, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12,
	0x56, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x0c, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0xd0, 0x03,
	0x0a, 0x1f, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c,
	0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x12, 0x58, 0x0a, 0x0e, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79,
	0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x2e, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x0d, 0x61, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x63,
	0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x52,
	0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x2f, 0x0a, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f,
	0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x52,
	0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x5e, 0x0a, 0x0f, 0x69, 0x6e, 0x70, 0x75,
	0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50,
	0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x64,
	0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x52, 0x0e, 0x61, 0x64,
	0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x12, 0x42, 0x0a, 0x0c,
	0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49,
	0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f,
	0x22, 0x81, 0x01, 0x0a, 0x20, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x54,
	0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x72,
	0x65, 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72,
	0x65, 0x70, 0x61, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x6c, 0x65, 0x76,
	0x61, 0x6e, 0x63, 0x65, 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x6c, 0x65, 0x76,
	0x61, 0x6e, 0x63, 0x65, 0x22, 0x86, 0x03, 0x0a, 0x16, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x54,
	0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
	0x2a, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x12, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x68, 0x72,
	0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x2f, 0x0a, 0x07, 0x73,
	0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x79, 0x73, 0x72,
	0x6f, 0x6f, 0x74, 0x52, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
	0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x09, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x69, 0x72, 0x12, 0x58, 0x0a, 0x0e, 0x61,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20,
	0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
	0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x72, 0x65, 0x70,
	0x61, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x64, 0x64, 0x69, 0x74,
	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74,
	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x12, 0x42, 0x0a, 0x0c, 0x70, 0x72, 0x6f,
	0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f,
	0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x62, 0x0a,
	0x17, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0e, 0x61, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x1a, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x61, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x4a, 0x04, 0x08, 0x01, 0x10,
	0x02, 0x22, 0x9a, 0x02, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
	0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x12,
	0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74,
	0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55,
	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x52, 0x11, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x73, 0x1a, 0x98, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x1a, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x61, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x42, 0x0a, 0x0c, 0x70, 0x72,
	0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66,
	0x6f, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xcb,
	0x04, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c,
	0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x75, 0x70,
	0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69,
	0x2e, 0x47, 0x65, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
	0x46, 0x69, 0x6c, 0x65, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c,
	0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x6d, 0x65, 0x73,
	0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x6d,
	0x69, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x63, 0x6f, 0x6d,
	0x6d, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x32, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
	0x47, 0x65, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52,
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f,
	0x6f, 0x74, 0x65, 0x72, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x6f, 0x74,
	0x65, 0x72, 0x1a, 0x21, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c,
	0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x04, 0x70, 0x61, 0x74, 0x68, 0x1a, 0x4f, 0x0a, 0x0e, 0x43, 0x71, 0x44, 0x65, 0x70, 0x65, 0x6e,
	0x64, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x0d, 0x67, 0x65, 0x72, 0x72, 0x69,
	0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x47, 0x65, 0x72, 0x72,
	0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0c, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74,
	0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x1a, 0x21, 0x0a, 0x0d, 0x43, 0x71, 0x43, 0x6c, 0x54, 0x61,
	0x67, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x1a, 0xc0, 0x01, 0x0a, 0x0c, 0x43, 0x6f,
	0x6d, 0x6d, 0x69, 0x74, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x09, 0x63, 0x71,
	0x5f, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74,
	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
	0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x71, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x46, 0x6f, 0x6f,
	0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x63, 0x71, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x12,
	0x51, 0x0a, 0x09, 0x63, 0x71, 0x5f, 0x63, 0x6c, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70,
	0x69, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65,
	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x71, 0x43, 0x6c, 0x54, 0x61,
	0x67, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x63, 0x71, 0x43, 0x6c, 0x54,
	0x61, 0x67, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0x9b, 0x01, 0x0a,
	0x1a, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x41, 0x46, 0x44, 0x4f, 0x41, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0c, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x41, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x46, 0x44, 0x4f,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x61, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x35, 0x0a, 0x1b, 0x56, 0x65,
	0x72, 0x69, 0x66, 0x79, 0x41, 0x46, 0x44, 0x4f, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61,
	0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
	0x73, 0x2a, 0x66, 0x0a, 0x10, 0x41, 0x46, 0x44, 0x4f, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x4e, 0x45, 0x5f, 0x54, 0x59,
	0x50, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x46, 0x49, 0x4c,
	0x45, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x45, 0x4e, 0x43, 0x48, 0x4d, 0x41, 0x52, 0x4b,
	0x5f, 0x41, 0x46, 0x44, 0x4f, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x4b, 0x45, 0x52, 0x4e, 0x45,
	0x4c, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x48, 0x52, 0x4f,
	0x4d, 0x45, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x10, 0x04, 0x32, 0xcf, 0x04, 0x0a, 0x10, 0x54, 0x6f,
	0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7c,
	0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x57, 0x69,
	0x74, 0x68, 0x41, 0x46, 0x44, 0x4f, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12,
	0x28, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56,
	0x65, 0x72, 0x69, 0x66, 0x79, 0x41, 0x46, 0x44, 0x4f, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x41,
	0x46, 0x44, 0x4f, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70,
	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xc2, 0xed, 0x1a, 0x02, 0x10, 0x01, 0x12, 0x78, 0x0a, 0x19,
	0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x56, 0x65, 0x74, 0x74, 0x65, 0x64, 0x41, 0x46, 0x44, 0x4f,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x41,
	0x46, 0x44, 0x4f, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61,
	0x70, 0x69, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x41, 0x46, 0x44, 0x4f, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
	0xc2, 0xed, 0x1a, 0x02, 0x10, 0x01, 0x12, 0x70, 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72,
	0x65, 0x46, 0x6f, 0x72, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2d, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65,
	0x46, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c,
	0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x46,
	0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x0f, 0x42, 0x75, 0x6e, 0x64,
	0x6c, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c,
	0x65, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69,
	0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55,
	0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x70,
	0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69,
	0x2e, 0x47, 0x65, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x11, 0xc2, 0xed, 0x1a, 0x0d, 0x0a, 0x09,
	0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x10, 0x02, 0x42, 0x38, 0x5a, 0x36, 0x67,
	0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74,
	0x65, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_chromite_api_toolchain_proto_rawDescOnce sync.Once
	file_chromite_api_toolchain_proto_rawDescData = file_chromite_api_toolchain_proto_rawDesc
)

func file_chromite_api_toolchain_proto_rawDescGZIP() []byte {
	file_chromite_api_toolchain_proto_rawDescOnce.Do(func() {
		file_chromite_api_toolchain_proto_rawDescData = protoimpl.X.CompressGZIP(file_chromite_api_toolchain_proto_rawDescData)
	})
	return file_chromite_api_toolchain_proto_rawDescData
}

var file_chromite_api_toolchain_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_chromite_api_toolchain_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
var file_chromite_api_toolchain_proto_goTypes = []interface{}{
	(AFDOArtifactType)(0),                                        // 0: chromite.api.AFDOArtifactType
	(*ArtifactInfo)(nil),                                         // 1: chromite.api.ArtifactInfo
	(*PrepareForToolchainBuildRequest)(nil),                      // 2: chromite.api.PrepareForToolchainBuildRequest
	(*PrepareForToolchainBuildResponse)(nil),                     // 3: chromite.api.PrepareForToolchainBuildResponse
	(*BundleToolchainRequest)(nil),                               // 4: chromite.api.BundleToolchainRequest
	(*BundleToolchainResponse)(nil),                              // 5: chromite.api.BundleToolchainResponse
	(*GetUpdatedFilesRequest)(nil),                               // 6: chromite.api.GetUpdatedFilesRequest
	(*GetUpdatedFilesResponse)(nil),                              // 7: chromite.api.GetUpdatedFilesResponse
	(*VerifyAFDOArtifactsRequest)(nil),                           // 8: chromite.api.VerifyAFDOArtifactsRequest
	(*VerifyAFDOArtifactsResponse)(nil),                          // 9: chromite.api.VerifyAFDOArtifactsResponse
	(*GetUpdatedFilesRequest_UploadedArtifacts)(nil),             // 10: chromite.api.GetUpdatedFilesRequest.UploadedArtifacts
	(*GetUpdatedFilesResponse_UpdatedFile)(nil),                  // 11: chromite.api.GetUpdatedFilesResponse.UpdatedFile
	(*GetUpdatedFilesResponse_CqDependFooter)(nil),               // 12: chromite.api.GetUpdatedFilesResponse.CqDependFooter
	(*GetUpdatedFilesResponse_CqClTagFooter)(nil),                // 13: chromite.api.GetUpdatedFilesResponse.CqClTagFooter
	(*GetUpdatedFilesResponse_CommitFooter)(nil),                 // 14: chromite.api.GetUpdatedFilesResponse.CommitFooter
	(chromiumos.BuilderConfig_Artifacts_ArtifactTypes)(0),        // 15: chromiumos.BuilderConfig.Artifacts.ArtifactTypes
	(*Artifact)(nil),                                             // 16: chromite.api.Artifact
	(*chromiumos.Chroot)(nil),                                    // 17: chromiumos.Chroot
	(*Sysroot)(nil),                                              // 18: chromite.api.Sysroot
	(*chromiumos.BuilderConfig_Artifacts_InputArtifactInfo)(nil), // 19: chromiumos.BuilderConfig.Artifacts.InputArtifactInfo
	(*chromiumos.PrepareForBuildAdditionalArgs)(nil),             // 20: chromiumos.PrepareForBuildAdditionalArgs
	(*chromiumos.ArtifactProfileInfo)(nil),                       // 21: chromiumos.ArtifactProfileInfo
	(PrepareForBuildResponse_BuildRelevance)(0),                  // 22: chromite.api.PrepareForBuildResponse.BuildRelevance
	(*chromiumos.BuildTarget)(nil),                               // 23: chromiumos.BuildTarget
	(chromiumos.AFDOArtifactType)(0),                             // 24: chromiumos.AFDOArtifactType
	(*chromiumos.GerritChange)(nil),                              // 25: chromiumos.GerritChange
}
var file_chromite_api_toolchain_proto_depIdxs = []int32{
	15, // 0: chromite.api.ArtifactInfo.artifact_type:type_name -> chromiumos.BuilderConfig.Artifacts.ArtifactTypes
	16, // 1: chromite.api.ArtifactInfo.artifacts:type_name -> chromite.api.Artifact
	15, // 2: chromite.api.PrepareForToolchainBuildRequest.artifact_types:type_name -> chromiumos.BuilderConfig.Artifacts.ArtifactTypes
	17, // 3: chromite.api.PrepareForToolchainBuildRequest.chroot:type_name -> chromiumos.Chroot
	18, // 4: chromite.api.PrepareForToolchainBuildRequest.sysroot:type_name -> chromite.api.Sysroot
	19, // 5: chromite.api.PrepareForToolchainBuildRequest.input_artifacts:type_name -> chromiumos.BuilderConfig.Artifacts.InputArtifactInfo
	20, // 6: chromite.api.PrepareForToolchainBuildRequest.additional_args:type_name -> chromiumos.PrepareForBuildAdditionalArgs
	21, // 7: chromite.api.PrepareForToolchainBuildRequest.profile_info:type_name -> chromiumos.ArtifactProfileInfo
	22, // 8: chromite.api.PrepareForToolchainBuildResponse.build_relevance:type_name -> chromite.api.PrepareForBuildResponse.BuildRelevance
	17, // 9: chromite.api.BundleToolchainRequest.chroot:type_name -> chromiumos.Chroot
	18, // 10: chromite.api.BundleToolchainRequest.sysroot:type_name -> chromite.api.Sysroot
	15, // 11: chromite.api.BundleToolchainRequest.artifact_types:type_name -> chromiumos.BuilderConfig.Artifacts.ArtifactTypes
	20, // 12: chromite.api.BundleToolchainRequest.additional_args:type_name -> chromiumos.PrepareForBuildAdditionalArgs
	21, // 13: chromite.api.BundleToolchainRequest.profile_info:type_name -> chromiumos.ArtifactProfileInfo
	1,  // 14: chromite.api.BundleToolchainResponse.artifacts_info:type_name -> chromite.api.ArtifactInfo
	10, // 15: chromite.api.GetUpdatedFilesRequest.uploaded_artifacts:type_name -> chromite.api.GetUpdatedFilesRequest.UploadedArtifacts
	11, // 16: chromite.api.GetUpdatedFilesResponse.updated_files:type_name -> chromite.api.GetUpdatedFilesResponse.UpdatedFile
	14, // 17: chromite.api.GetUpdatedFilesResponse.commit_footer:type_name -> chromite.api.GetUpdatedFilesResponse.CommitFooter
	23, // 18: chromite.api.VerifyAFDOArtifactsRequest.build_target:type_name -> chromiumos.BuildTarget
	24, // 19: chromite.api.VerifyAFDOArtifactsRequest.artifact_type:type_name -> chromiumos.AFDOArtifactType
	1,  // 20: chromite.api.GetUpdatedFilesRequest.UploadedArtifacts.artifact_info:type_name -> chromite.api.ArtifactInfo
	21, // 21: chromite.api.GetUpdatedFilesRequest.UploadedArtifacts.profile_info:type_name -> chromiumos.ArtifactProfileInfo
	25, // 22: chromite.api.GetUpdatedFilesResponse.CqDependFooter.gerrit_change:type_name -> chromiumos.GerritChange
	12, // 23: chromite.api.GetUpdatedFilesResponse.CommitFooter.cq_depend:type_name -> chromite.api.GetUpdatedFilesResponse.CqDependFooter
	13, // 24: chromite.api.GetUpdatedFilesResponse.CommitFooter.cq_cl_tag:type_name -> chromite.api.GetUpdatedFilesResponse.CqClTagFooter
	8,  // 25: chromite.api.ToolchainService.UpdateEbuildWithAFDOArtifacts:input_type -> chromite.api.VerifyAFDOArtifactsRequest
	8,  // 26: chromite.api.ToolchainService.UploadVettedAFDOArtifacts:input_type -> chromite.api.VerifyAFDOArtifactsRequest
	2,  // 27: chromite.api.ToolchainService.PrepareForBuild:input_type -> chromite.api.PrepareForToolchainBuildRequest
	4,  // 28: chromite.api.ToolchainService.BundleArtifacts:input_type -> chromite.api.BundleToolchainRequest
	6,  // 29: chromite.api.ToolchainService.GetUpdatedFiles:input_type -> chromite.api.GetUpdatedFilesRequest
	9,  // 30: chromite.api.ToolchainService.UpdateEbuildWithAFDOArtifacts:output_type -> chromite.api.VerifyAFDOArtifactsResponse
	9,  // 31: chromite.api.ToolchainService.UploadVettedAFDOArtifacts:output_type -> chromite.api.VerifyAFDOArtifactsResponse
	3,  // 32: chromite.api.ToolchainService.PrepareForBuild:output_type -> chromite.api.PrepareForToolchainBuildResponse
	5,  // 33: chromite.api.ToolchainService.BundleArtifacts:output_type -> chromite.api.BundleToolchainResponse
	7,  // 34: chromite.api.ToolchainService.GetUpdatedFiles:output_type -> chromite.api.GetUpdatedFilesResponse
	30, // [30:35] is the sub-list for method output_type
	25, // [25:30] is the sub-list for method input_type
	25, // [25:25] is the sub-list for extension type_name
	25, // [25:25] is the sub-list for extension extendee
	0,  // [0:25] is the sub-list for field type_name
}

func init() { file_chromite_api_toolchain_proto_init() }
func file_chromite_api_toolchain_proto_init() {
	if File_chromite_api_toolchain_proto != nil {
		return
	}
	file_chromite_api_artifacts_proto_init()
	file_chromite_api_build_api_proto_init()
	file_chromite_api_sysroot_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_chromite_api_toolchain_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PrepareForToolchainBuildRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PrepareForToolchainBuildResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BundleToolchainRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BundleToolchainResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetUpdatedFilesRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetUpdatedFilesResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VerifyAFDOArtifactsRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VerifyAFDOArtifactsResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetUpdatedFilesRequest_UploadedArtifacts); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetUpdatedFilesResponse_UpdatedFile); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetUpdatedFilesResponse_CqDependFooter); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetUpdatedFilesResponse_CqClTagFooter); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_toolchain_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GetUpdatedFilesResponse_CommitFooter); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_chromite_api_toolchain_proto_msgTypes[13].OneofWrappers = []interface{}{
		(*GetUpdatedFilesResponse_CommitFooter_CqDepend)(nil),
		(*GetUpdatedFilesResponse_CommitFooter_CqClTag)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_chromite_api_toolchain_proto_rawDesc,
			NumEnums:      1,
			NumMessages:   14,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_chromite_api_toolchain_proto_goTypes,
		DependencyIndexes: file_chromite_api_toolchain_proto_depIdxs,
		EnumInfos:         file_chromite_api_toolchain_proto_enumTypes,
		MessageInfos:      file_chromite_api_toolchain_proto_msgTypes,
	}.Build()
	File_chromite_api_toolchain_proto = out.File
	file_chromite_api_toolchain_proto_rawDesc = nil
	file_chromite_api_toolchain_proto_goTypes = nil
	file_chromite_api_toolchain_proto_depIdxs = nil
}
