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

package chromiumos

import (
	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)
)

// The types of images that can be built.
// These correspond to support types in lib/constants.py such
// as IMAGE_TYPE_BASE, IMAGE_TYPE_RECOVERY, and so on.
type ImageType int32

const (
	ImageType_IMAGE_TYPE_UNDEFINED ImageType = 0
	// Use these.
	ImageType_IMAGE_TYPE_BASE            ImageType = 1
	ImageType_IMAGE_TYPE_DEV             ImageType = 2
	ImageType_IMAGE_TYPE_TEST            ImageType = 3
	ImageType_IMAGE_TYPE_BASE_VM         ImageType = 4
	ImageType_IMAGE_TYPE_TEST_VM         ImageType = 5
	ImageType_IMAGE_TYPE_RECOVERY        ImageType = 6
	ImageType_IMAGE_TYPE_FACTORY         ImageType = 7
	ImageType_IMAGE_TYPE_FIRMWARE        ImageType = 8
	ImageType_IMAGE_TYPE_CR50_FIRMWARE   ImageType = 9
	ImageType_IMAGE_TYPE_BASE_GUEST_VM   ImageType = 10
	ImageType_IMAGE_TYPE_TEST_GUEST_VM   ImageType = 11
	ImageType_IMAGE_TYPE_DLC             ImageType = 12
	ImageType_IMAGE_TYPE_GSC_FIRMWARE    ImageType = 13
	ImageType_IMAGE_TYPE_ACCESSORY_USBPD ImageType = 14
	ImageType_IMAGE_TYPE_ACCESSORY_RWSIG ImageType = 15
	// Do not continue to use (or add to) these, use aliased enums above.
	// TODO: Deprecate non-prefixed enums (carefully considering branches).
	ImageType_BASE          ImageType = 1
	ImageType_DEV           ImageType = 2
	ImageType_TEST          ImageType = 3
	ImageType_BASE_VM       ImageType = 4
	ImageType_TEST_VM       ImageType = 5
	ImageType_RECOVERY      ImageType = 6
	ImageType_FACTORY       ImageType = 7
	ImageType_FIRMWARE      ImageType = 8
	ImageType_CR50_FIRMWARE ImageType = 9
	ImageType_BASE_GUEST_VM ImageType = 10
	ImageType_TEST_GUEST_VM ImageType = 11
	ImageType_DLC           ImageType = 12
	ImageType_GSC_FIRMWARE  ImageType = 13
)

// Enum value maps for ImageType.
var (
	ImageType_name = map[int32]string{
		0:  "IMAGE_TYPE_UNDEFINED",
		1:  "IMAGE_TYPE_BASE",
		2:  "IMAGE_TYPE_DEV",
		3:  "IMAGE_TYPE_TEST",
		4:  "IMAGE_TYPE_BASE_VM",
		5:  "IMAGE_TYPE_TEST_VM",
		6:  "IMAGE_TYPE_RECOVERY",
		7:  "IMAGE_TYPE_FACTORY",
		8:  "IMAGE_TYPE_FIRMWARE",
		9:  "IMAGE_TYPE_CR50_FIRMWARE",
		10: "IMAGE_TYPE_BASE_GUEST_VM",
		11: "IMAGE_TYPE_TEST_GUEST_VM",
		12: "IMAGE_TYPE_DLC",
		13: "IMAGE_TYPE_GSC_FIRMWARE",
		14: "IMAGE_TYPE_ACCESSORY_USBPD",
		15: "IMAGE_TYPE_ACCESSORY_RWSIG",
		// Duplicate value: 1: "BASE",
		// Duplicate value: 2: "DEV",
		// Duplicate value: 3: "TEST",
		// Duplicate value: 4: "BASE_VM",
		// Duplicate value: 5: "TEST_VM",
		// Duplicate value: 6: "RECOVERY",
		// Duplicate value: 7: "FACTORY",
		// Duplicate value: 8: "FIRMWARE",
		// Duplicate value: 9: "CR50_FIRMWARE",
		// Duplicate value: 10: "BASE_GUEST_VM",
		// Duplicate value: 11: "TEST_GUEST_VM",
		// Duplicate value: 12: "DLC",
		// Duplicate value: 13: "GSC_FIRMWARE",
	}
	ImageType_value = map[string]int32{
		"IMAGE_TYPE_UNDEFINED":       0,
		"IMAGE_TYPE_BASE":            1,
		"IMAGE_TYPE_DEV":             2,
		"IMAGE_TYPE_TEST":            3,
		"IMAGE_TYPE_BASE_VM":         4,
		"IMAGE_TYPE_TEST_VM":         5,
		"IMAGE_TYPE_RECOVERY":        6,
		"IMAGE_TYPE_FACTORY":         7,
		"IMAGE_TYPE_FIRMWARE":        8,
		"IMAGE_TYPE_CR50_FIRMWARE":   9,
		"IMAGE_TYPE_BASE_GUEST_VM":   10,
		"IMAGE_TYPE_TEST_GUEST_VM":   11,
		"IMAGE_TYPE_DLC":             12,
		"IMAGE_TYPE_GSC_FIRMWARE":    13,
		"IMAGE_TYPE_ACCESSORY_USBPD": 14,
		"IMAGE_TYPE_ACCESSORY_RWSIG": 15,
		"BASE":                       1,
		"DEV":                        2,
		"TEST":                       3,
		"BASE_VM":                    4,
		"TEST_VM":                    5,
		"RECOVERY":                   6,
		"FACTORY":                    7,
		"FIRMWARE":                   8,
		"CR50_FIRMWARE":              9,
		"BASE_GUEST_VM":              10,
		"TEST_GUEST_VM":              11,
		"DLC":                        12,
		"GSC_FIRMWARE":               13,
	}
)

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

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

func (ImageType) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[0].Descriptor()
}

func (ImageType) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[0]
}

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

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

// The various channels that we release through.
type Channel int32

const (
	Channel_CHANNEL_UNSPECIFIED Channel = 0
	Channel_CHANNEL_STABLE      Channel = 1
	Channel_CHANNEL_BETA        Channel = 2
	Channel_CHANNEL_DEV         Channel = 3
	Channel_CHANNEL_CANARY      Channel = 4
)

// Enum value maps for Channel.
var (
	Channel_name = map[int32]string{
		0: "CHANNEL_UNSPECIFIED",
		1: "CHANNEL_STABLE",
		2: "CHANNEL_BETA",
		3: "CHANNEL_DEV",
		4: "CHANNEL_CANARY",
	}
	Channel_value = map[string]int32{
		"CHANNEL_UNSPECIFIED": 0,
		"CHANNEL_STABLE":      1,
		"CHANNEL_BETA":        2,
		"CHANNEL_DEV":         3,
		"CHANNEL_CANARY":      4,
	}
)

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

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

func (Channel) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[1].Descriptor()
}

func (Channel) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[1]
}

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

// Deprecated: Use Channel.Descriptor instead.
func (Channel) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_common_proto_rawDescGZIP(), []int{1}
}

// The available delta types.
type DeltaType int32

const (
	DeltaType_DELTA_UNKNOWN  DeltaType = 0
	DeltaType_NO_DELTA       DeltaType = 1
	DeltaType_FSI            DeltaType = 2
	DeltaType_MILESTONE      DeltaType = 3
	DeltaType_OMAHA          DeltaType = 4
	DeltaType_STEPPING_STONE DeltaType = 5
	DeltaType_N2N            DeltaType = 6
)

// Enum value maps for DeltaType.
var (
	DeltaType_name = map[int32]string{
		0: "DELTA_UNKNOWN",
		1: "NO_DELTA",
		2: "FSI",
		3: "MILESTONE",
		4: "OMAHA",
		5: "STEPPING_STONE",
		6: "N2N",
	}
	DeltaType_value = map[string]int32{
		"DELTA_UNKNOWN":  0,
		"NO_DELTA":       1,
		"FSI":            2,
		"MILESTONE":      3,
		"OMAHA":          4,
		"STEPPING_STONE": 5,
		"N2N":            6,
	}
)

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

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

func (DeltaType) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[2].Descriptor()
}

func (DeltaType) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[2]
}

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

// Deprecated: Use DeltaType.Descriptor instead.
func (DeltaType) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_common_proto_rawDescGZIP(), []int{2}
}

// List of known location that firmware can be built from
type FwLocation int32

const (
	FwLocation_FW_LOCATION_UNKNOWN FwLocation = 0
	FwLocation_PLATFORM_EC         FwLocation = 1 // platform/ec/firmware_builder.py
	FwLocation_PLATFORM_ZEPHYR     FwLocation = 2 // platform/zephyr-chrome/firmware_builder.py
	FwLocation_PLATFORM_TI50       FwLocation = 3 // platform/ti50/common/firmware_builder.py
)

// Enum value maps for FwLocation.
var (
	FwLocation_name = map[int32]string{
		0: "FW_LOCATION_UNKNOWN",
		1: "PLATFORM_EC",
		2: "PLATFORM_ZEPHYR",
		3: "PLATFORM_TI50",
	}
	FwLocation_value = map[string]int32{
		"FW_LOCATION_UNKNOWN": 0,
		"PLATFORM_EC":         1,
		"PLATFORM_ZEPHYR":     2,
		"PLATFORM_TI50":       3,
	}
)

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

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

func (FwLocation) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[3].Descriptor()
}

func (FwLocation) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[3]
}

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

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

// TODO(crbug.com/1020615): Drop this from chromite/api/toolchain.proto (and
// here) once usage has migrated to BuilderConfig.Artifacts.ArtifactType.
// Meanwhile, keep this in sync with chromite/api/toolchain.proto.  The various
// toolchain optimization artifact types.
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_chromiumos_common_proto_enumTypes[4].Descriptor()
}

func (AFDOArtifactType) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[4]
}

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

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

// Facilitates testing new Goma approaches before rolling them out
// more widely.
type GomaConfig_GomaApproach int32

const (
	GomaConfig_GOMA_APPROACH_UNSPECIFIED GomaConfig_GomaApproach = 0
	GomaConfig_DEFAULT                   GomaConfig_GomaApproach = 1
	GomaConfig_RBE_PROD                  GomaConfig_GomaApproach = 2
	GomaConfig_RBE_STAGING               GomaConfig_GomaApproach = 3
	GomaConfig_RBE_CHROMEOS              GomaConfig_GomaApproach = 4
)

// Enum value maps for GomaConfig_GomaApproach.
var (
	GomaConfig_GomaApproach_name = map[int32]string{
		0: "GOMA_APPROACH_UNSPECIFIED",
		1: "DEFAULT",
		2: "RBE_PROD",
		3: "RBE_STAGING",
		4: "RBE_CHROMEOS",
	}
	GomaConfig_GomaApproach_value = map[string]int32{
		"GOMA_APPROACH_UNSPECIFIED": 0,
		"DEFAULT":                   1,
		"RBE_PROD":                  2,
		"RBE_STAGING":               3,
		"RBE_CHROMEOS":              4,
	}
)

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

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

func (GomaConfig_GomaApproach) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[5].Descriptor()
}

func (GomaConfig_GomaApproach) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[5]
}

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

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

// Location enum; whether the resource is inside or outside of the chroot.
type Path_Location int32

const (
	Path_NO_LOCATION Path_Location = 0
	Path_INSIDE      Path_Location = 1
	Path_OUTSIDE     Path_Location = 2
)

// Enum value maps for Path_Location.
var (
	Path_Location_name = map[int32]string{
		0: "NO_LOCATION",
		1: "INSIDE",
		2: "OUTSIDE",
	}
	Path_Location_value = map[string]int32{
		"NO_LOCATION": 0,
		"INSIDE":      1,
		"OUTSIDE":     2,
	}
)

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

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

func (Path_Location) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[6].Descriptor()
}

func (Path_Location) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[6]
}

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

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

// When to publish the artifact.
type ArtifactsByService_PublishCondition int32

const (
	ArtifactsByService_PUBLISH_UNSPECIFIED ArtifactsByService_PublishCondition = 0
	// Publish only for successful builds.  This is the default.
	ArtifactsByService_PUBLISH_ON_SUCCESS ArtifactsByService_PublishCondition = 1
	// Publish always.  (Useful for error diagnostics.)
	ArtifactsByService_PUBLISH_ALWAYS ArtifactsByService_PublishCondition = 2
)

// Enum value maps for ArtifactsByService_PublishCondition.
var (
	ArtifactsByService_PublishCondition_name = map[int32]string{
		0: "PUBLISH_UNSPECIFIED",
		1: "PUBLISH_ON_SUCCESS",
		2: "PUBLISH_ALWAYS",
	}
	ArtifactsByService_PublishCondition_value = map[string]int32{
		"PUBLISH_UNSPECIFIED": 0,
		"PUBLISH_ON_SUCCESS":  1,
		"PUBLISH_ALWAYS":      2,
	}
)

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

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

func (ArtifactsByService_PublishCondition) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[7].Descriptor()
}

func (ArtifactsByService_PublishCondition) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[7]
}

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

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

// Legacy artifacts, handled in cros_artifacts.  DO NOT ADD TO THIS.
type ArtifactsByService_Legacy_ArtifactType int32

const (
	ArtifactsByService_Legacy_UNSPECIFIED ArtifactsByService_Legacy_ArtifactType = 0
	// Indicates wanting a zip file of everything in the image directory.
	// TODO(crbug/1034529): moves to ArtifactsByService.Image
	ArtifactsByService_Legacy_IMAGE_ZIP ArtifactsByService_Legacy_ArtifactType = 1
	// Indicates wanting update payloads.
	// TODO(crbug/1034529): moves to ArtifactsByService.Test
	ArtifactsByService_Legacy_TEST_UPDATE_PAYLOAD ArtifactsByService_Legacy_ArtifactType = 2
	// Indicates wanting the autotest tarballs.
	// TODO(crbug/1034529): moves to ArtifactsByService.Test
	ArtifactsByService_Legacy_AUTOTEST_FILES ArtifactsByService_Legacy_ArtifactType = 3
	// Indicates wanting a tarball containing private TAST test bundles.
	// TODO(crbug/1034529): moves to ArtifactsByService.Test
	ArtifactsByService_Legacy_TAST_FILES ArtifactsByService_Legacy_ArtifactType = 4
	// Indicates wanting a tarball containing guest images and test bundles.
	// TODO(crbug/1034529): moves to ArtifactsByService.Test
	ArtifactsByService_Legacy_PINNED_GUEST_IMAGES ArtifactsByService_Legacy_ArtifactType = 5
	// Indicates wanting an archive of firmware images built from source.
	// TODO(crbug/1034529): moves to ArtifactsByService.Package
	ArtifactsByService_Legacy_FIRMWARE ArtifactsByService_Legacy_ArtifactType = 6
	// Indicates wanting a tarball of the Ebuilds logs.
	// TODO(crbug/1034529): moves to ArtifactsByService.Sysroot
	ArtifactsByService_Legacy_EBUILD_LOGS ArtifactsByService_Legacy_ArtifactType = 7
	// Indicates wanting an archive of the ChromeOS Config.
	// TODO(crbug/1034529): moves to ArtifactsByService.Sysroot
	ArtifactsByService_Legacy_CHROMEOS_CONFIG ArtifactsByService_Legacy_ArtifactType = 8
	// Indicates wanting the CPE report.
	// TODO(crbug/1034529): moves to ArtifactsByService.Package
	ArtifactsByService_Legacy_CPE_REPORT ArtifactsByService_Legacy_ArtifactType = 9
	// Indicates wanting a tar.xz archive for each image created.
	// TODO(crbug/1034529): moves to ArtifactsByService.Image
	ArtifactsByService_Legacy_IMAGE_ARCHIVES ArtifactsByService_Legacy_ArtifactType = 10
	// Indicates wanting a tarball containing fingerprint MCU test binaries.
	// TODO(crbug/1034529): moves to ArtifactsByService.Test
	ArtifactsByService_Legacy_FPMCU_UNITTESTS ArtifactsByService_Legacy_ArtifactType = 27
	// Indicates wanting a test image tarball suitable for importing into GCE.
	// TODO(crbug/1034529): moves to ArtifactsByService.Image
	ArtifactsByService_Legacy_GCE_TARBALL ArtifactsByService_Legacy_ArtifactType = 28
	// Indicates wanting the Bundled debug symbol files.
	// TODO(crbug/1034529): Moves from legacy to ArtifactsByService/Get.
	ArtifactsByService_Legacy_DEBUG_SYMBOLS ArtifactsByService_Legacy_ArtifactType = 32
)

// Enum value maps for ArtifactsByService_Legacy_ArtifactType.
var (
	ArtifactsByService_Legacy_ArtifactType_name = map[int32]string{
		0:  "UNSPECIFIED",
		1:  "IMAGE_ZIP",
		2:  "TEST_UPDATE_PAYLOAD",
		3:  "AUTOTEST_FILES",
		4:  "TAST_FILES",
		5:  "PINNED_GUEST_IMAGES",
		6:  "FIRMWARE",
		7:  "EBUILD_LOGS",
		8:  "CHROMEOS_CONFIG",
		9:  "CPE_REPORT",
		10: "IMAGE_ARCHIVES",
		27: "FPMCU_UNITTESTS",
		28: "GCE_TARBALL",
		32: "DEBUG_SYMBOLS",
	}
	ArtifactsByService_Legacy_ArtifactType_value = map[string]int32{
		"UNSPECIFIED":         0,
		"IMAGE_ZIP":           1,
		"TEST_UPDATE_PAYLOAD": 2,
		"AUTOTEST_FILES":      3,
		"TAST_FILES":          4,
		"PINNED_GUEST_IMAGES": 5,
		"FIRMWARE":            6,
		"EBUILD_LOGS":         7,
		"CHROMEOS_CONFIG":     8,
		"CPE_REPORT":          9,
		"IMAGE_ARCHIVES":      10,
		"FPMCU_UNITTESTS":     27,
		"GCE_TARBALL":         28,
		"DEBUG_SYMBOLS":       32,
	}
)

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

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

func (ArtifactsByService_Legacy_ArtifactType) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[8].Descriptor()
}

func (ArtifactsByService_Legacy_ArtifactType) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[8]
}

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

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

// Artifacts which the ArtifactsService endpoints pass to ToolchainService.
type ArtifactsByService_Toolchain_ArtifactType int32

const (
	ArtifactsByService_Toolchain_UNSPECIFIED ArtifactsByService_Toolchain_ArtifactType = 0
	// Indicates an unvetted orderfile for Chrome.
	ArtifactsByService_Toolchain_UNVERIFIED_CHROME_LLVM_ORDERFILE ArtifactsByService_Toolchain_ArtifactType = 11
	// Indicates a vetted orderfile for Chrome.
	ArtifactsByService_Toolchain_VERIFIED_CHROME_LLVM_ORDERFILE ArtifactsByService_Toolchain_ArtifactType = 12
	// Indicates a clang-tidy artifact.
	ArtifactsByService_Toolchain_CHROME_CLANG_WARNINGS_FILE ArtifactsByService_Toolchain_ArtifactType = 13
	// Indicates a PGO artifact for the compiler.
	ArtifactsByService_Toolchain_UNVERIFIED_LLVM_PGO_FILE ArtifactsByService_Toolchain_ArtifactType = 14
	// Indicates an unvetted AFDO Chrome profile.  (Generated by HW Tests in
	// the benchmark-afdo-generate builder.)
	ArtifactsByService_Toolchain_UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 15
	// Indicates a vetted AFDO Chrome profile.
	ArtifactsByService_Toolchain_VERIFIED_CHROME_BENCHMARK_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 16
	// Indicates a vetted AFDO Kernel profile.
	ArtifactsByService_Toolchain_VERIFIED_KERNEL_CWP_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 17
	// Indicates an unvetted AFDO Kernel CWP profile.
	ArtifactsByService_Toolchain_UNVERIFIED_KERNEL_CWP_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 18
	// Indicates an unvetted AFDO Chrome CWP profile.
	ArtifactsByService_Toolchain_UNVERIFIED_CHROME_CWP_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 19
	// Indicates a vetted AFDO Chrome CWP profile.
	ArtifactsByService_Toolchain_VERIFIED_CHROME_CWP_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 20
	// Indicates a vetted AFDO profile for release.
	ArtifactsByService_Toolchain_VERIFIED_RELEASE_AFDO_FILE ArtifactsByService_Toolchain_ArtifactType = 21
	// Indicates an unvetted AFDO perf data file (from HW Test).
	ArtifactsByService_Toolchain_UNVERIFIED_CHROME_BENCHMARK_PERF_FILE ArtifactsByService_Toolchain_ArtifactType = 22
	// Indicates an unstripped Chrome binary.
	ArtifactsByService_Toolchain_CHROME_DEBUG_BINARY ArtifactsByService_Toolchain_ArtifactType = 23
	// Indicates toolchain logs for the compiler warnings for werror monitor
	ArtifactsByService_Toolchain_TOOLCHAIN_WARNING_LOGS ArtifactsByService_Toolchain_ArtifactType = 24
	// Indicates a prod Chrome AFDO profile for Android/Linux.
	ArtifactsByService_Toolchain_CHROME_AFDO_PROFILE_FOR_ANDROID_LINUX ArtifactsByService_Toolchain_ArtifactType = 25
	// Indicates diagnoses for Clang crashes
	ArtifactsByService_Toolchain_CLANG_CRASH_DIAGNOSES ArtifactsByService_Toolchain_ArtifactType = 26
	// Indicates Rusage logs from Compiler Invocations
	ArtifactsByService_Toolchain_COMPILER_RUSAGE_LOG ArtifactsByService_Toolchain_ArtifactType = 29
)

// Enum value maps for ArtifactsByService_Toolchain_ArtifactType.
var (
	ArtifactsByService_Toolchain_ArtifactType_name = map[int32]string{
		0:  "UNSPECIFIED",
		11: "UNVERIFIED_CHROME_LLVM_ORDERFILE",
		12: "VERIFIED_CHROME_LLVM_ORDERFILE",
		13: "CHROME_CLANG_WARNINGS_FILE",
		14: "UNVERIFIED_LLVM_PGO_FILE",
		15: "UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE",
		16: "VERIFIED_CHROME_BENCHMARK_AFDO_FILE",
		17: "VERIFIED_KERNEL_CWP_AFDO_FILE",
		18: "UNVERIFIED_KERNEL_CWP_AFDO_FILE",
		19: "UNVERIFIED_CHROME_CWP_AFDO_FILE",
		20: "VERIFIED_CHROME_CWP_AFDO_FILE",
		21: "VERIFIED_RELEASE_AFDO_FILE",
		22: "UNVERIFIED_CHROME_BENCHMARK_PERF_FILE",
		23: "CHROME_DEBUG_BINARY",
		24: "TOOLCHAIN_WARNING_LOGS",
		25: "CHROME_AFDO_PROFILE_FOR_ANDROID_LINUX",
		26: "CLANG_CRASH_DIAGNOSES",
		29: "COMPILER_RUSAGE_LOG",
	}
	ArtifactsByService_Toolchain_ArtifactType_value = map[string]int32{
		"UNSPECIFIED":                           0,
		"UNVERIFIED_CHROME_LLVM_ORDERFILE":      11,
		"VERIFIED_CHROME_LLVM_ORDERFILE":        12,
		"CHROME_CLANG_WARNINGS_FILE":            13,
		"UNVERIFIED_LLVM_PGO_FILE":              14,
		"UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE": 15,
		"VERIFIED_CHROME_BENCHMARK_AFDO_FILE":   16,
		"VERIFIED_KERNEL_CWP_AFDO_FILE":         17,
		"UNVERIFIED_KERNEL_CWP_AFDO_FILE":       18,
		"UNVERIFIED_CHROME_CWP_AFDO_FILE":       19,
		"VERIFIED_CHROME_CWP_AFDO_FILE":         20,
		"VERIFIED_RELEASE_AFDO_FILE":            21,
		"UNVERIFIED_CHROME_BENCHMARK_PERF_FILE": 22,
		"CHROME_DEBUG_BINARY":                   23,
		"TOOLCHAIN_WARNING_LOGS":                24,
		"CHROME_AFDO_PROFILE_FOR_ANDROID_LINUX": 25,
		"CLANG_CRASH_DIAGNOSES":                 26,
		"COMPILER_RUSAGE_LOG":                   29,
	}
)

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

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

func (ArtifactsByService_Toolchain_ArtifactType) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[9].Descriptor()
}

func (ArtifactsByService_Toolchain_ArtifactType) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[9]
}

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

// Deprecated: Use ArtifactsByService_Toolchain_ArtifactType.Descriptor instead.
func (ArtifactsByService_Toolchain_ArtifactType) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_common_proto_rawDescGZIP(), []int{20, 1, 0}
}

// Artifacts which the ArtifactsService endpoints pass to ImageService.
type ArtifactsByService_Image_ArtifactType int32

const (
	ArtifactsByService_Image_UNSPECIFIED ArtifactsByService_Image_ArtifactType = 0
)

// Enum value maps for ArtifactsByService_Image_ArtifactType.
var (
	ArtifactsByService_Image_ArtifactType_name = map[int32]string{
		0: "UNSPECIFIED",
	}
	ArtifactsByService_Image_ArtifactType_value = map[string]int32{
		"UNSPECIFIED": 0,
	}
)

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

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

func (ArtifactsByService_Image_ArtifactType) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[10].Descriptor()
}

func (ArtifactsByService_Image_ArtifactType) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[10]
}

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

// Deprecated: Use ArtifactsByService_Image_ArtifactType.Descriptor instead.
func (ArtifactsByService_Image_ArtifactType) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_common_proto_rawDescGZIP(), []int{20, 2, 0}
}

// Artifacts which the ArtifactsService endpoints pass to PackageService.
type ArtifactsByService_Package_ArtifactType int32

const (
	ArtifactsByService_Package_UNSPECIFIED ArtifactsByService_Package_ArtifactType = 0
)

// Enum value maps for ArtifactsByService_Package_ArtifactType.
var (
	ArtifactsByService_Package_ArtifactType_name = map[int32]string{
		0: "UNSPECIFIED",
	}
	ArtifactsByService_Package_ArtifactType_value = map[string]int32{
		"UNSPECIFIED": 0,
	}
)

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

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

func (ArtifactsByService_Package_ArtifactType) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[11].Descriptor()
}

func (ArtifactsByService_Package_ArtifactType) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[11]
}

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

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

// Artifacts which the ArtifactsService endpoints pass to SysrootService.
type ArtifactsByService_Sysroot_ArtifactType int32

const (
	ArtifactsByService_Sysroot_UNSPECIFIED ArtifactsByService_Sysroot_ArtifactType = 0
)

// Enum value maps for ArtifactsByService_Sysroot_ArtifactType.
var (
	ArtifactsByService_Sysroot_ArtifactType_name = map[int32]string{
		0: "UNSPECIFIED",
	}
	ArtifactsByService_Sysroot_ArtifactType_value = map[string]int32{
		"UNSPECIFIED": 0,
	}
)

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

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

func (ArtifactsByService_Sysroot_ArtifactType) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[12].Descriptor()
}

func (ArtifactsByService_Sysroot_ArtifactType) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[12]
}

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

// Deprecated: Use ArtifactsByService_Sysroot_ArtifactType.Descriptor instead.
func (ArtifactsByService_Sysroot_ArtifactType) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_common_proto_rawDescGZIP(), []int{20, 4, 0}
}

// Artifacts which the ArtifactsService endpoints pass to TestService.
type ArtifactsByService_Test_ArtifactType int32

const (
	ArtifactsByService_Test_UNSPECIFIED ArtifactsByService_Test_ArtifactType = 0
)

// Enum value maps for ArtifactsByService_Test_ArtifactType.
var (
	ArtifactsByService_Test_ArtifactType_name = map[int32]string{
		0: "UNSPECIFIED",
	}
	ArtifactsByService_Test_ArtifactType_value = map[string]int32{
		"UNSPECIFIED": 0,
	}
)

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

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

func (ArtifactsByService_Test_ArtifactType) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[13].Descriptor()
}

func (ArtifactsByService_Test_ArtifactType) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[13]
}

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

// Deprecated: Use ArtifactsByService_Test_ArtifactType.Descriptor instead.
func (ArtifactsByService_Test_ArtifactType) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_common_proto_rawDescGZIP(), []int{20, 5, 0}
}

// Artifacts which the ArtifactsService endpoints pass to FirmwareService.
type ArtifactsByService_Firmware_ArtifactType int32

const (
	ArtifactsByService_Firmware_UNSPECIFIED ArtifactsByService_Firmware_ArtifactType = 0
	// Firmware artifacts in a tarball.
	ArtifactsByService_Firmware_FIRMWARE_TARBALL ArtifactsByService_Firmware_ArtifactType = 30
	// Metadata about the firmware.
	ArtifactsByService_Firmware_FIRMWARE_TARBALL_INFO ArtifactsByService_Firmware_ArtifactType = 31
	// FirmwareService: LCOV code coverage files.
	ArtifactsByService_Firmware_FIRMWARE_LCOV ArtifactsByService_Firmware_ArtifactType = 33
)

// Enum value maps for ArtifactsByService_Firmware_ArtifactType.
var (
	ArtifactsByService_Firmware_ArtifactType_name = map[int32]string{
		0:  "UNSPECIFIED",
		30: "FIRMWARE_TARBALL",
		31: "FIRMWARE_TARBALL_INFO",
		33: "FIRMWARE_LCOV",
	}
	ArtifactsByService_Firmware_ArtifactType_value = map[string]int32{
		"UNSPECIFIED":           0,
		"FIRMWARE_TARBALL":      30,
		"FIRMWARE_TARBALL_INFO": 31,
		"FIRMWARE_LCOV":         33,
	}
)

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

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

func (ArtifactsByService_Firmware_ArtifactType) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_common_proto_enumTypes[14].Descriptor()
}

func (ArtifactsByService_Firmware_ArtifactType) Type() protoreflect.EnumType {
	return &file_chromiumos_common_proto_enumTypes[14]
}

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

// Deprecated: Use ArtifactsByService_Firmware_ArtifactType.Descriptor instead.
func (ArtifactsByService_Firmware_ArtifactType) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_common_proto_rawDescGZIP(), []int{20, 6, 0}
}

// BuildTarget encapsulates a number of related arguments. At the moment, the
// usage of specific arguments is on a per endpoint basis, but will converge
// to support a standard set as time goes on.
// BuildTarget is a more appropriate name going forward for what we currently
// call "board".
type BuildTarget struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the build target (a.k.a. board name).
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}

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

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

func (*BuildTarget) ProtoMessage() {}

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

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

// Chroot is used to define how to enter a chroot.
type Chroot struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The directory containing the chroot.
	Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
	// The cache directory override.
	CacheDir string `protobuf:"bytes,2,opt,name=cache_dir,json=cacheDir,proto3" json:"cache_dir,omitempty"`
	// Environment configuration.
	Env *Chroot_ChrootEnv `protobuf:"bytes,3,opt,name=env,proto3" json:"env,omitempty"`
	// The directory where the chrome source should be mounted.
	ChromeDir string `protobuf:"bytes,4,opt,name=chrome_dir,json=chromeDir,proto3" json:"chrome_dir,omitempty"`
}

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

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

func (*Chroot) ProtoMessage() {}

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

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

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

func (x *Chroot) GetEnv() *Chroot_ChrootEnv {
	if x != nil {
		return x.Env
	}
	return nil
}

func (x *Chroot) GetChromeDir() string {
	if x != nil {
		return x.ChromeDir
	}
	return ""
}

// FEATURES environment variable component message.
type Feature struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Feature string `protobuf:"bytes,1,opt,name=feature,proto3" json:"feature,omitempty"`
}

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

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

func (*Feature) ProtoMessage() {}

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

func (x *Feature) GetFeature() string {
	if x != nil {
		return x.Feature
	}
	return ""
}

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

	// The goma install location.
	// Required.
	GomaDir string `protobuf:"bytes,1,opt,name=goma_dir,json=gomaDir,proto3" json:"goma_dir,omitempty"`
	// The goma client credentials file.
	GomaClientJson string `protobuf:"bytes,2,opt,name=goma_client_json,json=gomaClientJson,proto3" json:"goma_client_json,omitempty"`
	// Path to the Goma client used for build package.
	// If None, goma_dir will be used instead.
	ChromeosGomaDir string                  `protobuf:"bytes,3,opt,name=chromeos_goma_dir,json=chromeosGomaDir,proto3" json:"chromeos_goma_dir,omitempty"`
	GomaApproach    GomaConfig_GomaApproach `protobuf:"varint,4,opt,name=goma_approach,json=gomaApproach,proto3,enum=chromiumos.GomaConfig_GomaApproach" json:"goma_approach,omitempty"`
	// The directory where the goma logs will be extracted.
	LogDir *SyncedDir `protobuf:"bytes,5,opt,name=log_dir,json=logDir,proto3" json:"log_dir,omitempty"`
	// The name of the goma stats file. It will be dumped inside log_dir.
	StatsFile string `protobuf:"bytes,6,opt,name=stats_file,json=statsFile,proto3" json:"stats_file,omitempty"`
	// The name of the goma counterz file. It will be dumped inside log_dir.
	CounterzFile string `protobuf:"bytes,7,opt,name=counterz_file,json=counterzFile,proto3" json:"counterz_file,omitempty"`
}

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

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

func (*GomaConfig) ProtoMessage() {}

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

func (x *GomaConfig) GetGomaDir() string {
	if x != nil {
		return x.GomaDir
	}
	return ""
}

func (x *GomaConfig) GetGomaClientJson() string {
	if x != nil {
		return x.GomaClientJson
	}
	return ""
}

func (x *GomaConfig) GetChromeosGomaDir() string {
	if x != nil {
		return x.ChromeosGomaDir
	}
	return ""
}

func (x *GomaConfig) GetGomaApproach() GomaConfig_GomaApproach {
	if x != nil {
		return x.GomaApproach
	}
	return GomaConfig_GOMA_APPROACH_UNSPECIFIED
}

func (x *GomaConfig) GetLogDir() *SyncedDir {
	if x != nil {
		return x.LogDir
	}
	return nil
}

func (x *GomaConfig) GetStatsFile() string {
	if x != nil {
		return x.StatsFile
	}
	return ""
}

func (x *GomaConfig) GetCounterzFile() string {
	if x != nil {
		return x.CounterzFile
	}
	return ""
}

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

	// Goma stats file.
	StatsFile string `protobuf:"bytes,1,opt,name=stats_file,json=statsFile,proto3" json:"stats_file,omitempty"`
	// Goma counterz file.
	CounterzFile string `protobuf:"bytes,2,opt,name=counterz_file,json=counterzFile,proto3" json:"counterz_file,omitempty"`
	// Goma log files.
	LogFiles []string `protobuf:"bytes,3,rep,name=log_files,json=logFiles,proto3" json:"log_files,omitempty"`
}

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

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

func (*GomaArtifacts) ProtoMessage() {}

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

func (x *GomaArtifacts) GetStatsFile() string {
	if x != nil {
		return x.StatsFile
	}
	return ""
}

func (x *GomaArtifacts) GetCounterzFile() string {
	if x != nil {
		return x.CounterzFile
	}
	return ""
}

func (x *GomaArtifacts) GetLogFiles() []string {
	if x != nil {
		return x.LogFiles
	}
	return nil
}

// Message describing a package, The corresponding variable names are from
// https://devmanual.gentoo.org/ebuild-writing/variables/index.html
type PackageInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The package name (PN variable).
	PackageName string `protobuf:"bytes,1,opt,name=package_name,json=packageName,proto3" json:"package_name,omitempty"`
	// The package category (CATEGORY variable).
	Category string `protobuf:"bytes,2,opt,name=category,proto3" json:"category,omitempty"`
	// The package version and revision (PVR variable).
	Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
}

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

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

func (*PackageInfo) ProtoMessage() {}

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

func (x *PackageInfo) GetPackageName() string {
	if x != nil {
		return x.PackageName
	}
	return ""
}

func (x *PackageInfo) GetCategory() string {
	if x != nil {
		return x.Category
	}
	return ""
}

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

// Information about the sysroot's profile.
type Profile struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the profile.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}

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

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

func (*Profile) ProtoMessage() {}

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

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

// Message describing a package index (binhost) file.
type PackageIndexInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The snapshot SHA
	SnapshotSha string `protobuf:"bytes,1,opt,name=snapshot_sha,json=snapshotSha,proto3" json:"snapshot_sha,omitempty"`
	// The snapshot number.  Higher is newer.
	SnapshotNumber int32 `protobuf:"varint,2,opt,name=snapshot_number,json=snapshotNumber,proto3" json:"snapshot_number,omitempty"`
	// The build target.
	BuildTarget *BuildTarget `protobuf:"bytes,3,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// The full URI of the package index file.
	Location string `protobuf:"bytes,4,opt,name=location,proto3" json:"location,omitempty"`
	// The sysroot profile.
	Profile *Profile `protobuf:"bytes,5,opt,name=profile,proto3" json:"profile,omitempty"`
}

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

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

func (*PackageIndexInfo) ProtoMessage() {}

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

func (x *PackageIndexInfo) GetSnapshotSha() string {
	if x != nil {
		return x.SnapshotSha
	}
	return ""
}

func (x *PackageIndexInfo) GetSnapshotNumber() int32 {
	if x != nil {
		return x.SnapshotNumber
	}
	return 0
}

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

func (x *PackageIndexInfo) GetLocation() string {
	if x != nil {
		return x.Location
	}
	return ""
}

func (x *PackageIndexInfo) GetProfile() *Profile {
	if x != nil {
		return x.Profile
	}
	return nil
}

// A message to clarify inside/outside chroot paths.
type Path struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The path to the resource.
	Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
	// The path location.
	Location Path_Location `protobuf:"varint,2,opt,name=location,proto3,enum=chromiumos.Path_Location" json:"location,omitempty"`
}

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

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

func (*Path) ProtoMessage() {}

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

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

func (x *Path) GetLocation() Path_Location {
	if x != nil {
		return x.Location
	}
	return Path_NO_LOCATION
}

// A message used to indicate an output location for results. Specifically,
// this is used to automatically transfer files out of the chroot when needed.
// Note: No more than one ResultPath per message can be supported.
type ResultPath struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required.
	// The result directory information.
	Path *Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
}

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

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

func (*ResultPath) ProtoMessage() {}

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

func (x *ResultPath) GetPath() *Path {
	if x != nil {
		return x.Path
	}
	return nil
}

// A SyncedDir will have all of its contents transferred into a tmp directory
// in the chroot before the endpoint is called, and afterwords its contents
// will be exactly what was in the tmp directory when the endpoint completed.
type SyncedDir struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required.
	// The directory being synced.
	Dir string `protobuf:"bytes,1,opt,name=dir,proto3" json:"dir,omitempty"`
}

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

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

func (*SyncedDir) ProtoMessage() {}

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

func (x *SyncedDir) GetDir() string {
	if x != nil {
		return x.Dir
	}
	return ""
}

// See also crrev.com/c/1929452 and:
//   https://cs.corp.google.com/piper///depot/google3/third_party/luci/buildbucket/proto/common.proto?l=147-176&rcl=257714215
// A Gerrit patchset.
type GerritChange struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Gerrit hostname, e.g. "chromium-review.googlesource.com".
	Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"`
	// Gerrit project, e.g. "chromium/src".
	Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"`
	// Change number, e.g. 12345.
	Change int64 `protobuf:"varint,3,opt,name=change,proto3" json:"change,omitempty"`
	// Patch set number, e.g. 1.
	Patchset int64 `protobuf:"varint,4,opt,name=patchset,proto3" json:"patchset,omitempty"`
}

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

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

func (*GerritChange) ProtoMessage() {}

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

func (x *GerritChange) GetHost() string {
	if x != nil {
		return x.Host
	}
	return ""
}

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

func (x *GerritChange) GetChange() int64 {
	if x != nil {
		return x.Change
	}
	return 0
}

func (x *GerritChange) GetPatchset() int64 {
	if x != nil {
		return x.Patchset
	}
	return 0
}

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

	// Gitiles hostname, e.g. "chromium.googlesource.com".
	Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"`
	// Repository name on the host, e.g. "chromium/src".
	Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"`
	// Commit HEX SHA1.
	Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
	// Commit ref, e.g. "refs/heads/master".
	// NOT a branch name: if specified, must start with "refs/".
	Ref string `protobuf:"bytes,4,opt,name=ref,proto3" json:"ref,omitempty"`
	// Defines a total order of commits on the ref. Requires ref field.
	Position uint32 `protobuf:"varint,5,opt,name=position,proto3" json:"position,omitempty"`
}

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

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

func (*GitilesCommit) ProtoMessage() {}

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

func (x *GitilesCommit) GetHost() string {
	if x != nil {
		return x.Host
	}
	return ""
}

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

func (x *GitilesCommit) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *GitilesCommit) GetRef() string {
	if x != nil {
		return x.Ref
	}
	return ""
}

func (x *GitilesCommit) GetPosition() uint32 {
	if x != nil {
		return x.Position
	}
	return 0
}

// Message for USE flags.
type UseFlag struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The use flag.
	Flag string `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"`
}

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

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

func (*UseFlag) ProtoMessage() {}

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

func (x *UseFlag) GetFlag() string {
	if x != nil {
		return x.Flag
	}
	return ""
}

// Message for defining a release builder.
// Used to generate release_builders.star.
type ReleaseBuilder struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to MilestoneMessage:
	//	*ReleaseBuilder_Milestone_
	MilestoneMessage isReleaseBuilder_MilestoneMessage `protobuf_oneof:"milestone_message"`
	// Schedule to use for release builder.
	// e.g. "0 5 * * *"
	BuildSchedule string `protobuf:"bytes,2,opt,name=build_schedule,json=buildSchedule,proto3" json:"build_schedule,omitempty"`
	// Expiration date of builder.
	// A builder with an expiration date set (that has not yet occurred)
	// will not be pruned as a stale milestone by automatic release config management.
	ExpirationDate *ReleaseBuilder_Date `protobuf:"bytes,3,opt,name=expiration_date,json=expirationDate,proto3" json:"expiration_date,omitempty"`
}

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

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

func (*ReleaseBuilder) ProtoMessage() {}

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

func (m *ReleaseBuilder) GetMilestoneMessage() isReleaseBuilder_MilestoneMessage {
	if m != nil {
		return m.MilestoneMessage
	}
	return nil
}

func (x *ReleaseBuilder) GetMilestone() *ReleaseBuilder_Milestone {
	if x, ok := x.GetMilestoneMessage().(*ReleaseBuilder_Milestone_); ok {
		return x.Milestone
	}
	return nil
}

func (x *ReleaseBuilder) GetBuildSchedule() string {
	if x != nil {
		return x.BuildSchedule
	}
	return ""
}

func (x *ReleaseBuilder) GetExpirationDate() *ReleaseBuilder_Date {
	if x != nil {
		return x.ExpirationDate
	}
	return nil
}

type isReleaseBuilder_MilestoneMessage interface {
	isReleaseBuilder_MilestoneMessage()
}

type ReleaseBuilder_Milestone_ struct {
	Milestone *ReleaseBuilder_Milestone `protobuf:"bytes,1,opt,name=milestone,proto3,oneof"`
}

func (*ReleaseBuilder_Milestone_) isReleaseBuilder_MilestoneMessage() {}

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

	// Release builders to generate _define_release blocks for
	// in release_builders.star.
	Builders []*ReleaseBuilder `protobuf:"bytes,1,rep,name=builders,proto3" json:"builders,omitempty"`
}

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

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

func (*ReleaseBuilders) ProtoMessage() {}

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

func (x *ReleaseBuilders) GetBuilders() []*ReleaseBuilder {
	if x != nil {
		return x.Builders
	}
	return nil
}

// A wrapper around a serialized protocol buffer.
type ProtoBytes struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	SerializedProto []byte `protobuf:"bytes,1,opt,name=serialized_proto,json=serializedProto,proto3" json:"serialized_proto,omitempty"`
}

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

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

func (*ProtoBytes) ProtoMessage() {}

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

func (x *ProtoBytes) GetSerializedProto() []byte {
	if x != nil {
		return x.SerializedProto
	}
	return nil
}

// Additional information about artifacts used by PrepareForBuild endpoints.
// TODO(crbug/1019868): This is migrating to ArtifactProfileInfo.
type PrepareForBuildAdditionalArgs struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to PrepareForBuildArgs:
	//	*PrepareForBuildAdditionalArgs_ChromeCwpProfile
	//	*PrepareForBuildAdditionalArgs_KernelVersion
	PrepareForBuildArgs isPrepareForBuildAdditionalArgs_PrepareForBuildArgs `protobuf_oneof:"prepare_for_build_args"`
}

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

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

func (*PrepareForBuildAdditionalArgs) ProtoMessage() {}

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

func (m *PrepareForBuildAdditionalArgs) GetPrepareForBuildArgs() isPrepareForBuildAdditionalArgs_PrepareForBuildArgs {
	if m != nil {
		return m.PrepareForBuildArgs
	}
	return nil
}

func (x *PrepareForBuildAdditionalArgs) GetChromeCwpProfile() string {
	if x, ok := x.GetPrepareForBuildArgs().(*PrepareForBuildAdditionalArgs_ChromeCwpProfile); ok {
		return x.ChromeCwpProfile
	}
	return ""
}

func (x *PrepareForBuildAdditionalArgs) GetKernelVersion() string {
	if x, ok := x.GetPrepareForBuildArgs().(*PrepareForBuildAdditionalArgs_KernelVersion); ok {
		return x.KernelVersion
	}
	return ""
}

type isPrepareForBuildAdditionalArgs_PrepareForBuildArgs interface {
	isPrepareForBuildAdditionalArgs_PrepareForBuildArgs()
}

type PrepareForBuildAdditionalArgs_ChromeCwpProfile struct {
	// ToolchainService Chrome AFDO artifacts require profile name.
	ChromeCwpProfile string `protobuf:"bytes,1,opt,name=chrome_cwp_profile,json=chromeCwpProfile,proto3,oneof"`
}

type PrepareForBuildAdditionalArgs_KernelVersion struct {
	// ToolchainService Kernel AFDO artifacts require a kernel version.
	KernelVersion string `protobuf:"bytes,2,opt,name=kernel_version,json=kernelVersion,proto3,oneof"`
}

func (*PrepareForBuildAdditionalArgs_ChromeCwpProfile) isPrepareForBuildAdditionalArgs_PrepareForBuildArgs() {
}

func (*PrepareForBuildAdditionalArgs_KernelVersion) isPrepareForBuildAdditionalArgs_PrepareForBuildArgs() {
}

// ToolchainService Unverified Release AFDO artifacts require information
// about the builder that created the image used to generate the unverified
// chrome benchmark perf file.
type AfdoRelease struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// ToolchainService Chrome AFDO artifacts require profile name.
	ChromeCwpProfile string `protobuf:"bytes,1,opt,name=chrome_cwp_profile,json=chromeCwpProfile,proto3" json:"chrome_cwp_profile,omitempty"`
	// The build id of the image_build.  Used to generate the location for the
	// image archive.
	ImageBuildId int64 `protobuf:"varint,2,opt,name=image_build_id,json=imageBuildId,proto3" json:"image_build_id,omitempty"`
}

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

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

func (*AfdoRelease) ProtoMessage() {}

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

func (x *AfdoRelease) GetChromeCwpProfile() string {
	if x != nil {
		return x.ChromeCwpProfile
	}
	return ""
}

func (x *AfdoRelease) GetImageBuildId() int64 {
	if x != nil {
		return x.ImageBuildId
	}
	return 0
}

// Artifact profile information used by artifact prepare/bundle endpoints in
// addition to input_artifacts.
type ArtifactProfileInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to ArtifactProfileInfo:
	//	*ArtifactProfileInfo_ChromeCwpProfile
	//	*ArtifactProfileInfo_KernelVersion
	//	*ArtifactProfileInfo_AfdoRelease
	ArtifactProfileInfo isArtifactProfileInfo_ArtifactProfileInfo `protobuf_oneof:"artifact_profile_info"`
}

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

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

func (*ArtifactProfileInfo) ProtoMessage() {}

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

func (m *ArtifactProfileInfo) GetArtifactProfileInfo() isArtifactProfileInfo_ArtifactProfileInfo {
	if m != nil {
		return m.ArtifactProfileInfo
	}
	return nil
}

func (x *ArtifactProfileInfo) GetChromeCwpProfile() string {
	if x, ok := x.GetArtifactProfileInfo().(*ArtifactProfileInfo_ChromeCwpProfile); ok {
		return x.ChromeCwpProfile
	}
	return ""
}

func (x *ArtifactProfileInfo) GetKernelVersion() string {
	if x, ok := x.GetArtifactProfileInfo().(*ArtifactProfileInfo_KernelVersion); ok {
		return x.KernelVersion
	}
	return ""
}

func (x *ArtifactProfileInfo) GetAfdoRelease() *AfdoRelease {
	if x, ok := x.GetArtifactProfileInfo().(*ArtifactProfileInfo_AfdoRelease); ok {
		return x.AfdoRelease
	}
	return nil
}

type isArtifactProfileInfo_ArtifactProfileInfo interface {
	isArtifactProfileInfo_ArtifactProfileInfo()
}

type ArtifactProfileInfo_ChromeCwpProfile struct {
	// ToolchainService Chrome AFDO artifacts require profile name.
	ChromeCwpProfile string `protobuf:"bytes,1,opt,name=chrome_cwp_profile,json=chromeCwpProfile,proto3,oneof"`
}

type ArtifactProfileInfo_KernelVersion struct {
	// ToolchainService Kernel AFDO artifacts require a kernel version.
	KernelVersion string `protobuf:"bytes,2,opt,name=kernel_version,json=kernelVersion,proto3,oneof"`
}

type ArtifactProfileInfo_AfdoRelease struct {
	// ToolchainService Unverified Release AFDO artifacts require more.
	AfdoRelease *AfdoRelease `protobuf:"bytes,3,opt,name=afdo_release,json=afdoRelease,proto3,oneof"`
}

func (*ArtifactProfileInfo_ChromeCwpProfile) isArtifactProfileInfo_ArtifactProfileInfo() {}

func (*ArtifactProfileInfo_KernelVersion) isArtifactProfileInfo_ArtifactProfileInfo() {}

func (*ArtifactProfileInfo_AfdoRelease) isArtifactProfileInfo_ArtifactProfileInfo() {}

// Artifact information. Used bythe  ArtifactsService.PrepareForBuild and
// BundleArtifacts endpoints to dispatch the appropriate service routines to
// prepare or bundle as a batch.
type ArtifactsByService struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Legacy    *ArtifactsByService_Legacy    `protobuf:"bytes,1,opt,name=legacy,proto3" json:"legacy,omitempty"`
	Toolchain *ArtifactsByService_Toolchain `protobuf:"bytes,2,opt,name=toolchain,proto3" json:"toolchain,omitempty"`
	Image     *ArtifactsByService_Image     `protobuf:"bytes,3,opt,name=image,proto3" json:"image,omitempty"`
	Package   *ArtifactsByService_Package   `protobuf:"bytes,4,opt,name=package,proto3" json:"package,omitempty"`
	Sysroot   *ArtifactsByService_Sysroot   `protobuf:"bytes,5,opt,name=sysroot,proto3" json:"sysroot,omitempty"`
	Test      *ArtifactsByService_Test      `protobuf:"bytes,6,opt,name=test,proto3" json:"test,omitempty"`
	// Profile information needed by the artifact handler, if any.
	ProfileInfo *ArtifactProfileInfo         `protobuf:"bytes,7,opt,name=profile_info,json=profileInfo,proto3" json:"profile_info,omitempty"`
	Firmware    *ArtifactsByService_Firmware `protobuf:"bytes,8,opt,name=firmware,proto3" json:"firmware,omitempty"`
}

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

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

func (*ArtifactsByService) ProtoMessage() {}

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

func (x *ArtifactsByService) GetLegacy() *ArtifactsByService_Legacy {
	if x != nil {
		return x.Legacy
	}
	return nil
}

func (x *ArtifactsByService) GetToolchain() *ArtifactsByService_Toolchain {
	if x != nil {
		return x.Toolchain
	}
	return nil
}

func (x *ArtifactsByService) GetImage() *ArtifactsByService_Image {
	if x != nil {
		return x.Image
	}
	return nil
}

func (x *ArtifactsByService) GetPackage() *ArtifactsByService_Package {
	if x != nil {
		return x.Package
	}
	return nil
}

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

func (x *ArtifactsByService) GetTest() *ArtifactsByService_Test {
	if x != nil {
		return x.Test
	}
	return nil
}

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

func (x *ArtifactsByService) GetFirmware() *ArtifactsByService_Firmware {
	if x != nil {
		return x.Firmware
	}
	return nil
}

// Artifact information. Used bythe  ArtifactsService.PrepareForBuild and
// BundleArtifacts endpoints Response messages.
type UploadedArtifactsByService struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Legacy    *UploadedArtifactsByService_Legacy    `protobuf:"bytes,1,opt,name=legacy,proto3" json:"legacy,omitempty"`
	Toolchain *UploadedArtifactsByService_Toolchain `protobuf:"bytes,2,opt,name=toolchain,proto3" json:"toolchain,omitempty"`
	Image     *UploadedArtifactsByService_Image     `protobuf:"bytes,3,opt,name=image,proto3" json:"image,omitempty"`
	Package   *UploadedArtifactsByService_Package   `protobuf:"bytes,4,opt,name=package,proto3" json:"package,omitempty"`
	Sysroot   *UploadedArtifactsByService_Sysroot   `protobuf:"bytes,5,opt,name=sysroot,proto3" json:"sysroot,omitempty"`
	Test      *UploadedArtifactsByService_Test      `protobuf:"bytes,6,opt,name=test,proto3" json:"test,omitempty"`
	Firmware  *UploadedArtifactsByService_Firmware  `protobuf:"bytes,7,opt,name=firmware,proto3" json:"firmware,omitempty"`
}

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

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

func (*UploadedArtifactsByService) ProtoMessage() {}

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

func (x *UploadedArtifactsByService) GetLegacy() *UploadedArtifactsByService_Legacy {
	if x != nil {
		return x.Legacy
	}
	return nil
}

func (x *UploadedArtifactsByService) GetToolchain() *UploadedArtifactsByService_Toolchain {
	if x != nil {
		return x.Toolchain
	}
	return nil
}

func (x *UploadedArtifactsByService) GetImage() *UploadedArtifactsByService_Image {
	if x != nil {
		return x.Image
	}
	return nil
}

func (x *UploadedArtifactsByService) GetPackage() *UploadedArtifactsByService_Package {
	if x != nil {
		return x.Package
	}
	return nil
}

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

func (x *UploadedArtifactsByService) GetTest() *UploadedArtifactsByService_Test {
	if x != nil {
		return x.Test
	}
	return nil
}

func (x *UploadedArtifactsByService) GetFirmware() *UploadedArtifactsByService_Firmware {
	if x != nil {
		return x.Firmware
	}
	return nil
}

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

	// USE flags to set.
	UseFlags []*UseFlag `protobuf:"bytes,1,rep,name=use_flags,json=useFlags,proto3" json:"use_flags,omitempty"`
	// FEATURES flags to set.
	Features []*Feature `protobuf:"bytes,2,rep,name=features,proto3" json:"features,omitempty"`
}

func (x *Chroot_ChrootEnv) Reset() {
	*x = Chroot_ChrootEnv{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[22]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*Chroot_ChrootEnv) ProtoMessage() {}

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

func (x *Chroot_ChrootEnv) GetUseFlags() []*UseFlag {
	if x != nil {
		return x.UseFlags
	}
	return nil
}

func (x *Chroot_ChrootEnv) GetFeatures() []*Feature {
	if x != nil {
		return x.Features
	}
	return nil
}

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

	// Format: YYYY-MM-DD (ISO 8601)
	// E.g. 2020-02-10
	Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
}

func (x *ReleaseBuilder_Date) Reset() {
	*x = ReleaseBuilder_Date{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[23]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ReleaseBuilder_Date) ProtoMessage() {}

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

func (x *ReleaseBuilder_Date) GetValue() string {
	if x != nil {
		return x.Value
	}
	return ""
}

// The release milestone. Needs to have "branch_name" filled out.
// TODO(b/177487002): cannot include prototype.Milestone at this time.
//prototype.Milestone milestone = 1;
type ReleaseBuilder_Milestone struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// E.g. 86
	Number int32 `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"`
	// Initially planned branch date for the milestone.
	TargetBranchDate *ReleaseBuilder_Date `protobuf:"bytes,2,opt,name=target_branch_date,json=targetBranchDate,proto3" json:"target_branch_date,omitempty"`
	// Actual branch name when the branch is created.
	// E.g. release-R86-13421.B
	BranchName string `protobuf:"bytes,3,opt,name=branch_name,json=branchName,proto3" json:"branch_name,omitempty"`
}

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

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

func (*ReleaseBuilder_Milestone) ProtoMessage() {}

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

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

func (x *ReleaseBuilder_Milestone) GetTargetBranchDate() *ReleaseBuilder_Date {
	if x != nil {
		return x.TargetBranchDate
	}
	return nil
}

func (x *ReleaseBuilder_Milestone) GetBranchName() string {
	if x != nil {
		return x.BranchName
	}
	return ""
}

// TODO(crbug/1034529): Drop this message.
// Artifacts handled within the ArtifactsService endpoints directly.
type ArtifactsByService_Legacy struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Input artifact information
	InputArtifacts []*ArtifactsByService_Legacy_ArtifactInfo `protobuf:"bytes,1,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
	// Output artifact information
	OutputArtifacts []*ArtifactsByService_Legacy_ArtifactInfo `protobuf:"bytes,2,rep,name=output_artifacts,json=outputArtifacts,proto3" json:"output_artifacts,omitempty"`
}

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

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

func (*ArtifactsByService_Legacy) ProtoMessage() {}

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

func (x *ArtifactsByService_Legacy) GetInputArtifacts() []*ArtifactsByService_Legacy_ArtifactInfo {
	if x != nil {
		return x.InputArtifacts
	}
	return nil
}

func (x *ArtifactsByService_Legacy) GetOutputArtifacts() []*ArtifactsByService_Legacy_ArtifactInfo {
	if x != nil {
		return x.OutputArtifacts
	}
	return nil
}

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

	// Input artifact information
	InputArtifacts []*ArtifactsByService_Toolchain_ArtifactInfo `protobuf:"bytes,1,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
	// Output artifact information
	OutputArtifacts []*ArtifactsByService_Toolchain_ArtifactInfo `protobuf:"bytes,2,rep,name=output_artifacts,json=outputArtifacts,proto3" json:"output_artifacts,omitempty"`
}

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

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

func (*ArtifactsByService_Toolchain) ProtoMessage() {}

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

func (x *ArtifactsByService_Toolchain) GetInputArtifacts() []*ArtifactsByService_Toolchain_ArtifactInfo {
	if x != nil {
		return x.InputArtifacts
	}
	return nil
}

func (x *ArtifactsByService_Toolchain) GetOutputArtifacts() []*ArtifactsByService_Toolchain_ArtifactInfo {
	if x != nil {
		return x.OutputArtifacts
	}
	return nil
}

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

	// Input artifact information
	InputArtifacts []*ArtifactsByService_Image_ArtifactInfo `protobuf:"bytes,1,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
	// Output artifact information
	OutputArtifacts []*ArtifactsByService_Image_ArtifactInfo `protobuf:"bytes,2,rep,name=output_artifacts,json=outputArtifacts,proto3" json:"output_artifacts,omitempty"`
}

func (x *ArtifactsByService_Image) Reset() {
	*x = ArtifactsByService_Image{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[27]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ArtifactsByService_Image) ProtoMessage() {}

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

func (x *ArtifactsByService_Image) GetInputArtifacts() []*ArtifactsByService_Image_ArtifactInfo {
	if x != nil {
		return x.InputArtifacts
	}
	return nil
}

func (x *ArtifactsByService_Image) GetOutputArtifacts() []*ArtifactsByService_Image_ArtifactInfo {
	if x != nil {
		return x.OutputArtifacts
	}
	return nil
}

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

	// Input artifact information
	InputArtifacts []*ArtifactsByService_Package_ArtifactInfo `protobuf:"bytes,1,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
	// Output artifact information
	OutputArtifacts []*ArtifactsByService_Package_ArtifactInfo `protobuf:"bytes,2,rep,name=output_artifacts,json=outputArtifacts,proto3" json:"output_artifacts,omitempty"`
}

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

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

func (*ArtifactsByService_Package) ProtoMessage() {}

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

func (x *ArtifactsByService_Package) GetInputArtifacts() []*ArtifactsByService_Package_ArtifactInfo {
	if x != nil {
		return x.InputArtifacts
	}
	return nil
}

func (x *ArtifactsByService_Package) GetOutputArtifacts() []*ArtifactsByService_Package_ArtifactInfo {
	if x != nil {
		return x.OutputArtifacts
	}
	return nil
}

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

	// Input artifact information
	InputArtifacts []*ArtifactsByService_Sysroot_ArtifactInfo `protobuf:"bytes,1,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
	// Output artifact information
	OutputArtifacts []*ArtifactsByService_Sysroot_ArtifactInfo `protobuf:"bytes,2,rep,name=output_artifacts,json=outputArtifacts,proto3" json:"output_artifacts,omitempty"`
}

func (x *ArtifactsByService_Sysroot) Reset() {
	*x = ArtifactsByService_Sysroot{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[29]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ArtifactsByService_Sysroot) ProtoMessage() {}

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

func (x *ArtifactsByService_Sysroot) GetInputArtifacts() []*ArtifactsByService_Sysroot_ArtifactInfo {
	if x != nil {
		return x.InputArtifacts
	}
	return nil
}

func (x *ArtifactsByService_Sysroot) GetOutputArtifacts() []*ArtifactsByService_Sysroot_ArtifactInfo {
	if x != nil {
		return x.OutputArtifacts
	}
	return nil
}

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

	// Input artifact information
	InputArtifacts []*ArtifactsByService_Test_ArtifactInfo `protobuf:"bytes,1,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
	// Output artifact information
	OutputArtifacts []*ArtifactsByService_Test_ArtifactInfo `protobuf:"bytes,2,rep,name=output_artifacts,json=outputArtifacts,proto3" json:"output_artifacts,omitempty"`
}

func (x *ArtifactsByService_Test) Reset() {
	*x = ArtifactsByService_Test{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[30]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ArtifactsByService_Test) ProtoMessage() {}

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

func (x *ArtifactsByService_Test) GetInputArtifacts() []*ArtifactsByService_Test_ArtifactInfo {
	if x != nil {
		return x.InputArtifacts
	}
	return nil
}

func (x *ArtifactsByService_Test) GetOutputArtifacts() []*ArtifactsByService_Test_ArtifactInfo {
	if x != nil {
		return x.OutputArtifacts
	}
	return nil
}

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

	// Input artifact information
	InputArtifacts []*ArtifactsByService_Firmware_ArtifactInfo `protobuf:"bytes,1,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
	// Output artifact information
	OutputArtifacts []*ArtifactsByService_Firmware_ArtifactInfo `protobuf:"bytes,2,rep,name=output_artifacts,json=outputArtifacts,proto3" json:"output_artifacts,omitempty"`
}

func (x *ArtifactsByService_Firmware) Reset() {
	*x = ArtifactsByService_Firmware{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[31]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ArtifactsByService_Firmware) ProtoMessage() {}

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

func (x *ArtifactsByService_Firmware) GetInputArtifacts() []*ArtifactsByService_Firmware_ArtifactInfo {
	if x != nil {
		return x.InputArtifacts
	}
	return nil
}

func (x *ArtifactsByService_Firmware) GetOutputArtifacts() []*ArtifactsByService_Firmware_ArtifactInfo {
	if x != nil {
		return x.OutputArtifacts
	}
	return nil
}

// Information about one or more artifacts.
type ArtifactsByService_Legacy_ArtifactInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The ArtifactType.  One or more types to which the rest of the fields
	// apply.
	ArtifactTypes []ArtifactsByService_Legacy_ArtifactType `protobuf:"varint,1,rep,packed,name=artifact_types,json=artifactTypes,proto3,enum=chromiumos.ArtifactsByService_Legacy_ArtifactType" json:"artifact_types,omitempty"`
	// GS location in which to upload artifacts ("gs://" is prepended).
	// Several fields can be logically specified:
	//   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
	//   %(version)s: Chromeos version (e.g., R81-12813.0.0)
	//   %(build_id)s: Buildbucket job ID.
	//   %(target)s: build target name.
	//   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
	//       underscores turned into hyphens.
	//   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
	//   %(artifact_name)s: The name of the artifact being published.
	//
	// BuilderConfig.Artifacts.artifacts_gs_location is used for all
	// artifacts.  Artifact can be published to additional locations by
	// specifying those here.  Examples: include AFDO artifacts and Release
	// images.
	GsLocations []string `protobuf:"bytes,2,rep,name=gs_locations,json=gsLocations,proto3" json:"gs_locations,omitempty"`
	// Any acl to apply, such as "public-read".
	AclName string `protobuf:"bytes,4,opt,name=acl_name,json=aclName,proto3" json:"acl_name,omitempty"`
	// When to publish the artifact.
	PublishCondition ArtifactsByService_PublishCondition `protobuf:"varint,5,opt,name=publish_condition,json=publishCondition,proto3,enum=chromiumos.ArtifactsByService_PublishCondition" json:"publish_condition,omitempty"`
}

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

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

func (*ArtifactsByService_Legacy_ArtifactInfo) ProtoMessage() {}

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

func (x *ArtifactsByService_Legacy_ArtifactInfo) GetArtifactTypes() []ArtifactsByService_Legacy_ArtifactType {
	if x != nil {
		return x.ArtifactTypes
	}
	return nil
}

func (x *ArtifactsByService_Legacy_ArtifactInfo) GetGsLocations() []string {
	if x != nil {
		return x.GsLocations
	}
	return nil
}

func (x *ArtifactsByService_Legacy_ArtifactInfo) GetAclName() string {
	if x != nil {
		return x.AclName
	}
	return ""
}

func (x *ArtifactsByService_Legacy_ArtifactInfo) GetPublishCondition() ArtifactsByService_PublishCondition {
	if x != nil {
		return x.PublishCondition
	}
	return ArtifactsByService_PUBLISH_UNSPECIFIED
}

// Information about one or more artifacts.  This should match the rest of
// the ArtifactInfo definitions in ArtifactsByService, other than having
// it's own (service-specific) definition for ArtifactType.
type ArtifactsByService_Toolchain_ArtifactInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The ArtifactType.  One or more types to which the rest of the fields
	// apply.
	ArtifactTypes []ArtifactsByService_Toolchain_ArtifactType `protobuf:"varint,1,rep,packed,name=artifact_types,json=artifactTypes,proto3,enum=chromiumos.ArtifactsByService_Toolchain_ArtifactType" json:"artifact_types,omitempty"`
	// GS location in which to upload artifacts ("gs://" is prepended).
	// Several fields can be logically specified:
	//   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
	//   %(version)s: Chromeos version (e.g., R81-12813.0.0)
	//   %(build_id)s: Buildbucket job ID.
	//   %(target)s: build target name.
	//   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
	//       underscores turned into hyphens.
	// specifying those here.  Examples include AFDO artifacts and release
	//   %(artifact_name)s: The name of the artifact being published.
	//
	// BuilderConfig.Artifacts.artifacts_gs_location is used for all
	// artifacts.  Artifact can be published to additional locations by
	// specifying those here.  Examples: include AFDO artifacts and Release
	// images.
	GsLocations []string `protobuf:"bytes,2,rep,name=gs_locations,json=gsLocations,proto3" json:"gs_locations,omitempty"`
	// Any acl to apply, such as "public-read".
	AclName string `protobuf:"bytes,4,opt,name=acl_name,json=aclName,proto3" json:"acl_name,omitempty"`
	// When to publish the artifact.
	PublishCondition ArtifactsByService_PublishCondition `protobuf:"varint,5,opt,name=publish_condition,json=publishCondition,proto3,enum=chromiumos.ArtifactsByService_PublishCondition" json:"publish_condition,omitempty"`
}

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

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

func (*ArtifactsByService_Toolchain_ArtifactInfo) ProtoMessage() {}

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

func (x *ArtifactsByService_Toolchain_ArtifactInfo) GetArtifactTypes() []ArtifactsByService_Toolchain_ArtifactType {
	if x != nil {
		return x.ArtifactTypes
	}
	return nil
}

func (x *ArtifactsByService_Toolchain_ArtifactInfo) GetGsLocations() []string {
	if x != nil {
		return x.GsLocations
	}
	return nil
}

func (x *ArtifactsByService_Toolchain_ArtifactInfo) GetAclName() string {
	if x != nil {
		return x.AclName
	}
	return ""
}

func (x *ArtifactsByService_Toolchain_ArtifactInfo) GetPublishCondition() ArtifactsByService_PublishCondition {
	if x != nil {
		return x.PublishCondition
	}
	return ArtifactsByService_PUBLISH_UNSPECIFIED
}

// Information about one or more artifacts.  This should match the rest of
// the ArtifactInfo definitions in ArtifactsByService, other than having
// it's own (service-specific) definition for ArtifactType.
type ArtifactsByService_Image_ArtifactInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The ArtifactType.  One or more types to which the rest of the fields
	// apply.
	ArtifactTypes []ArtifactsByService_Image_ArtifactType `protobuf:"varint,1,rep,packed,name=artifact_types,json=artifactTypes,proto3,enum=chromiumos.ArtifactsByService_Image_ArtifactType" json:"artifact_types,omitempty"`
	// GS location in which to upload artifacts ("gs://" is prepended).
	// Several fields can be logically specified:
	//   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
	//   %(version)s: Chromeos version (e.g., R81-12813.0.0)
	//   %(build_id)s: Buildbucket job ID.
	//   %(target)s: build target name.
	//   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
	//       underscores turned into hyphens.
	//   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
	//   %(artifact_name)s: The name of the artifact being published.
	//
	// BuilderConfig.Artifacts.artifacts_gs_location is used for all
	// artifacts.  Artifact can be published to additional locations by
	// specifying those here.  Examples: include AFDO artifacts and Release
	// images.
	GsLocations []string `protobuf:"bytes,2,rep,name=gs_locations,json=gsLocations,proto3" json:"gs_locations,omitempty"`
	// Any acl to apply, such as "public-read".
	AclName string `protobuf:"bytes,4,opt,name=acl_name,json=aclName,proto3" json:"acl_name,omitempty"`
	// When to publish the artifact.
	PublishCondition ArtifactsByService_PublishCondition `protobuf:"varint,5,opt,name=publish_condition,json=publishCondition,proto3,enum=chromiumos.ArtifactsByService_PublishCondition" json:"publish_condition,omitempty"`
}

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

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

func (*ArtifactsByService_Image_ArtifactInfo) ProtoMessage() {}

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

func (x *ArtifactsByService_Image_ArtifactInfo) GetArtifactTypes() []ArtifactsByService_Image_ArtifactType {
	if x != nil {
		return x.ArtifactTypes
	}
	return nil
}

func (x *ArtifactsByService_Image_ArtifactInfo) GetGsLocations() []string {
	if x != nil {
		return x.GsLocations
	}
	return nil
}

func (x *ArtifactsByService_Image_ArtifactInfo) GetAclName() string {
	if x != nil {
		return x.AclName
	}
	return ""
}

func (x *ArtifactsByService_Image_ArtifactInfo) GetPublishCondition() ArtifactsByService_PublishCondition {
	if x != nil {
		return x.PublishCondition
	}
	return ArtifactsByService_PUBLISH_UNSPECIFIED
}

// Information about one or more artifacts.  This should match the rest of
// the ArtifactInfo definitions in ArtifactsByService, other than having
// it's own (service-specific) definition for ArtifactType.
type ArtifactsByService_Package_ArtifactInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The ArtifactType.  One or more types to which the rest of the fields
	// apply.
	ArtifactTypes []ArtifactsByService_Package_ArtifactType `protobuf:"varint,1,rep,packed,name=artifact_types,json=artifactTypes,proto3,enum=chromiumos.ArtifactsByService_Package_ArtifactType" json:"artifact_types,omitempty"`
	// GS location in which to upload artifacts ("gs://" is prepended).
	// Several fields can be logically specified:
	//   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
	//   %(version)s: Chromeos version (e.g., R81-12813.0.0)
	//   %(build_id)s: Buildbucket job ID.
	//   %(target)s: build target name.
	//   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
	//       underscores turned into hyphens.
	//   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
	//   %(artifact_name)s: The name of the artifact being published.
	//
	// BuilderConfig.Artifacts.artifacts_gs_location is used for all
	// artifacts.  Artifact can be published to additional locations by
	// specifying those here.  Examples: include AFDO artifacts and Release
	// images.
	GsLocations []string `protobuf:"bytes,2,rep,name=gs_locations,json=gsLocations,proto3" json:"gs_locations,omitempty"`
	// Any acl to apply, such as "public-read".
	AclName string `protobuf:"bytes,4,opt,name=acl_name,json=aclName,proto3" json:"acl_name,omitempty"`
	// When to publish the artifact.
	PublishCondition ArtifactsByService_PublishCondition `protobuf:"varint,5,opt,name=publish_condition,json=publishCondition,proto3,enum=chromiumos.ArtifactsByService_PublishCondition" json:"publish_condition,omitempty"`
}

func (x *ArtifactsByService_Package_ArtifactInfo) Reset() {
	*x = ArtifactsByService_Package_ArtifactInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[35]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ArtifactsByService_Package_ArtifactInfo) ProtoMessage() {}

func (x *ArtifactsByService_Package_ArtifactInfo) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_common_proto_msgTypes[35]
	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 ArtifactsByService_Package_ArtifactInfo.ProtoReflect.Descriptor instead.
func (*ArtifactsByService_Package_ArtifactInfo) Descriptor() ([]byte, []int) {
	return file_chromiumos_common_proto_rawDescGZIP(), []int{20, 3, 0}
}

func (x *ArtifactsByService_Package_ArtifactInfo) GetArtifactTypes() []ArtifactsByService_Package_ArtifactType {
	if x != nil {
		return x.ArtifactTypes
	}
	return nil
}

func (x *ArtifactsByService_Package_ArtifactInfo) GetGsLocations() []string {
	if x != nil {
		return x.GsLocations
	}
	return nil
}

func (x *ArtifactsByService_Package_ArtifactInfo) GetAclName() string {
	if x != nil {
		return x.AclName
	}
	return ""
}

func (x *ArtifactsByService_Package_ArtifactInfo) GetPublishCondition() ArtifactsByService_PublishCondition {
	if x != nil {
		return x.PublishCondition
	}
	return ArtifactsByService_PUBLISH_UNSPECIFIED
}

// Information about one or more artifacts.  This should match the rest of
// the ArtifactInfo definitions in ArtifactsByService, other than having
// it's own (service-specific) definition for ArtifactType.
type ArtifactsByService_Sysroot_ArtifactInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The ArtifactType.  One or more types to which the rest of the fields
	// apply.
	ArtifactTypes []ArtifactsByService_Sysroot_ArtifactType `protobuf:"varint,1,rep,packed,name=artifact_types,json=artifactTypes,proto3,enum=chromiumos.ArtifactsByService_Sysroot_ArtifactType" json:"artifact_types,omitempty"`
	// GS location in which to upload artifacts ("gs://" is prepended).
	// Several fields can be logically specified:
	//   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
	//   %(version)s: Chromeos version (e.g., R81-12813.0.0)
	//   %(build_id)s: Buildbucket job ID.
	//   %(target)s: build target name.
	//   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
	//       underscores turned into hyphens.
	//   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
	//   %(artifact_name)s: The name of the artifact being published.
	//
	// BuilderConfig.Artifacts.artifacts_gs_location is used for all
	// artifacts.  Artifact can be published to additional locations by
	// specifying those here.  Examples: include AFDO artifacts and Release
	// images.
	GsLocations []string `protobuf:"bytes,2,rep,name=gs_locations,json=gsLocations,proto3" json:"gs_locations,omitempty"`
	// Any acl to apply, such as "public-read".
	AclName string `protobuf:"bytes,4,opt,name=acl_name,json=aclName,proto3" json:"acl_name,omitempty"`
	// When to publish the artifact.
	PublishCondition ArtifactsByService_PublishCondition `protobuf:"varint,5,opt,name=publish_condition,json=publishCondition,proto3,enum=chromiumos.ArtifactsByService_PublishCondition" json:"publish_condition,omitempty"`
}

func (x *ArtifactsByService_Sysroot_ArtifactInfo) Reset() {
	*x = ArtifactsByService_Sysroot_ArtifactInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[36]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ArtifactsByService_Sysroot_ArtifactInfo) ProtoMessage() {}

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

func (x *ArtifactsByService_Sysroot_ArtifactInfo) GetArtifactTypes() []ArtifactsByService_Sysroot_ArtifactType {
	if x != nil {
		return x.ArtifactTypes
	}
	return nil
}

func (x *ArtifactsByService_Sysroot_ArtifactInfo) GetGsLocations() []string {
	if x != nil {
		return x.GsLocations
	}
	return nil
}

func (x *ArtifactsByService_Sysroot_ArtifactInfo) GetAclName() string {
	if x != nil {
		return x.AclName
	}
	return ""
}

func (x *ArtifactsByService_Sysroot_ArtifactInfo) GetPublishCondition() ArtifactsByService_PublishCondition {
	if x != nil {
		return x.PublishCondition
	}
	return ArtifactsByService_PUBLISH_UNSPECIFIED
}

// Information about one or more artifacts.  This should match the rest of
// the ArtifactInfo definitions in ArtifactsByService, other than having
// it's own (service-specific) definition for ArtifactType.
type ArtifactsByService_Test_ArtifactInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The ArtifactType.  One or more types to which the rest of the fields
	// apply.
	ArtifactTypes []ArtifactsByService_Test_ArtifactType `protobuf:"varint,1,rep,packed,name=artifact_types,json=artifactTypes,proto3,enum=chromiumos.ArtifactsByService_Test_ArtifactType" json:"artifact_types,omitempty"`
	// GS location in which to upload artifacts ("gs://" is prepended).
	// Several fields can be logically specified:
	//   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
	//   %(version)s: Chromeos version (e.g., R81-12813.0.0)
	//   %(build_id)s: Buildbucket job ID.
	//   %(target)s: build target name.
	//   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
	//       underscores turned into hyphens.
	//   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
	//   %(artifact_name)s: The name of the artifact being published.
	//
	// BuilderConfig.Artifacts.artifacts_gs_location is used for all
	// artifacts.  Artifact can be published to additional locations by
	// specifying those here.  Examples: include AFDO artifacts and Release
	// images.
	GsLocations []string `protobuf:"bytes,2,rep,name=gs_locations,json=gsLocations,proto3" json:"gs_locations,omitempty"`
	// Any acl to apply, such as "public-read".
	AclName string `protobuf:"bytes,4,opt,name=acl_name,json=aclName,proto3" json:"acl_name,omitempty"`
	// When to publish the artifact.
	PublishCondition ArtifactsByService_PublishCondition `protobuf:"varint,5,opt,name=publish_condition,json=publishCondition,proto3,enum=chromiumos.ArtifactsByService_PublishCondition" json:"publish_condition,omitempty"`
}

func (x *ArtifactsByService_Test_ArtifactInfo) Reset() {
	*x = ArtifactsByService_Test_ArtifactInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[37]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ArtifactsByService_Test_ArtifactInfo) ProtoMessage() {}

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

func (x *ArtifactsByService_Test_ArtifactInfo) GetArtifactTypes() []ArtifactsByService_Test_ArtifactType {
	if x != nil {
		return x.ArtifactTypes
	}
	return nil
}

func (x *ArtifactsByService_Test_ArtifactInfo) GetGsLocations() []string {
	if x != nil {
		return x.GsLocations
	}
	return nil
}

func (x *ArtifactsByService_Test_ArtifactInfo) GetAclName() string {
	if x != nil {
		return x.AclName
	}
	return ""
}

func (x *ArtifactsByService_Test_ArtifactInfo) GetPublishCondition() ArtifactsByService_PublishCondition {
	if x != nil {
		return x.PublishCondition
	}
	return ArtifactsByService_PUBLISH_UNSPECIFIED
}

// Information about one or more artifacts.  This should match the rest of
// the ArtifactInfo definitions in ArtifactsByService, other than having
// it's own (service-specific) definition for ArtifactType.
type ArtifactsByService_Firmware_ArtifactInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The ArtifactType.  One or more types to which the rest of the fields
	// apply.
	ArtifactTypes []ArtifactsByService_Firmware_ArtifactType `protobuf:"varint,1,rep,packed,name=artifact_types,json=artifactTypes,proto3,enum=chromiumos.ArtifactsByService_Firmware_ArtifactType" json:"artifact_types,omitempty"`
	// GS location in which to upload artifacts ("gs://" is prepended).
	// Several fields can be logically specified:
	//   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
	//   %(version)s: Chromeos version (e.g., R81-12813.0.0)
	//   %(build_id)s: Buildbucket job ID.
	//   %(target)s: build target name.
	//   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
	//       underscores turned into hyphens.
	//   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
	//   %(artifact_name)s: The name of the artifact being published.
	//
	// BuilderConfig.Artifacts.artifacts_gs_location is used for all
	// artifacts.  Artifact can be published to additional locations by
	// specifying those here.  Examples: include AFDO artifacts and Release
	// images.
	GsLocations []string `protobuf:"bytes,2,rep,name=gs_locations,json=gsLocations,proto3" json:"gs_locations,omitempty"`
	// Any acl to apply, such as "public-read".
	AclName string `protobuf:"bytes,4,opt,name=acl_name,json=aclName,proto3" json:"acl_name,omitempty"`
	// When to publish the artifact.
	PublishCondition ArtifactsByService_PublishCondition `protobuf:"varint,5,opt,name=publish_condition,json=publishCondition,proto3,enum=chromiumos.ArtifactsByService_PublishCondition" json:"publish_condition,omitempty"`
	// The firmware location.
	Location FwLocation `protobuf:"varint,6,opt,name=location,proto3,enum=chromiumos.FwLocation" json:"location,omitempty"`
}

func (x *ArtifactsByService_Firmware_ArtifactInfo) Reset() {
	*x = ArtifactsByService_Firmware_ArtifactInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[38]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ArtifactsByService_Firmware_ArtifactInfo) ProtoMessage() {}

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

func (x *ArtifactsByService_Firmware_ArtifactInfo) GetArtifactTypes() []ArtifactsByService_Firmware_ArtifactType {
	if x != nil {
		return x.ArtifactTypes
	}
	return nil
}

func (x *ArtifactsByService_Firmware_ArtifactInfo) GetGsLocations() []string {
	if x != nil {
		return x.GsLocations
	}
	return nil
}

func (x *ArtifactsByService_Firmware_ArtifactInfo) GetAclName() string {
	if x != nil {
		return x.AclName
	}
	return ""
}

func (x *ArtifactsByService_Firmware_ArtifactInfo) GetPublishCondition() ArtifactsByService_PublishCondition {
	if x != nil {
		return x.PublishCondition
	}
	return ArtifactsByService_PUBLISH_UNSPECIFIED
}

func (x *ArtifactsByService_Firmware_ArtifactInfo) GetLocation() FwLocation {
	if x != nil {
		return x.Location
	}
	return FwLocation_FW_LOCATION_UNKNOWN
}

// Legacy artifacts, handled directly ArtifactsService.
// Artifacts handled within the ArtifactsService endpoints directly.
// TODO(crbug/1034529): Drop this message.
type UploadedArtifactsByService_Legacy struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Artifacts []*UploadedArtifactsByService_Legacy_ArtifactPaths `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
}

func (x *UploadedArtifactsByService_Legacy) Reset() {
	*x = UploadedArtifactsByService_Legacy{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[39]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Legacy) ProtoMessage() {}

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

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

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

	Artifacts []*UploadedArtifactsByService_Toolchain_ArtifactPaths `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
}

func (x *UploadedArtifactsByService_Toolchain) Reset() {
	*x = UploadedArtifactsByService_Toolchain{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[40]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Toolchain) ProtoMessage() {}

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

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

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

	Artifacts []*UploadedArtifactsByService_Image_ArtifactPaths `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
}

func (x *UploadedArtifactsByService_Image) Reset() {
	*x = UploadedArtifactsByService_Image{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[41]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Image) ProtoMessage() {}

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

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

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

	Artifacts []*UploadedArtifactsByService_Package_ArtifactPaths `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
}

func (x *UploadedArtifactsByService_Package) Reset() {
	*x = UploadedArtifactsByService_Package{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[42]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Package) ProtoMessage() {}

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

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

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

	Artifacts []*UploadedArtifactsByService_Sysroot_ArtifactPaths `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
}

func (x *UploadedArtifactsByService_Sysroot) Reset() {
	*x = UploadedArtifactsByService_Sysroot{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[43]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Sysroot) ProtoMessage() {}

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

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

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

	Artifacts []*UploadedArtifactsByService_Test_ArtifactPaths `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
}

func (x *UploadedArtifactsByService_Test) Reset() {
	*x = UploadedArtifactsByService_Test{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[44]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Test) ProtoMessage() {}

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

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

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

	Artifacts []*UploadedArtifactsByService_Firmware_ArtifactPaths `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
}

func (x *UploadedArtifactsByService_Firmware) Reset() {
	*x = UploadedArtifactsByService_Firmware{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[45]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Firmware) ProtoMessage() {}

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

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

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

	// The ArtifactType.
	ArtifactType ArtifactsByService_Legacy_ArtifactType `protobuf:"varint,1,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Legacy_ArtifactType" json:"artifact_type,omitempty"`
	// Absolute path to the artifact file.
	Paths []*Path `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"`
}

func (x *UploadedArtifactsByService_Legacy_ArtifactPaths) Reset() {
	*x = UploadedArtifactsByService_Legacy_ArtifactPaths{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[46]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Legacy_ArtifactPaths) ProtoMessage() {}

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

func (x *UploadedArtifactsByService_Legacy_ArtifactPaths) GetArtifactType() ArtifactsByService_Legacy_ArtifactType {
	if x != nil {
		return x.ArtifactType
	}
	return ArtifactsByService_Legacy_UNSPECIFIED
}

func (x *UploadedArtifactsByService_Legacy_ArtifactPaths) GetPaths() []*Path {
	if x != nil {
		return x.Paths
	}
	return nil
}

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

	// The ArtifactType.
	ArtifactType ArtifactsByService_Toolchain_ArtifactType `protobuf:"varint,1,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Toolchain_ArtifactType" json:"artifact_type,omitempty"`
	// Absolute path to the artifact file.
	Paths []*Path `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"`
}

func (x *UploadedArtifactsByService_Toolchain_ArtifactPaths) Reset() {
	*x = UploadedArtifactsByService_Toolchain_ArtifactPaths{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[47]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Toolchain_ArtifactPaths) ProtoMessage() {}

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

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

func (x *UploadedArtifactsByService_Toolchain_ArtifactPaths) GetArtifactType() ArtifactsByService_Toolchain_ArtifactType {
	if x != nil {
		return x.ArtifactType
	}
	return ArtifactsByService_Toolchain_UNSPECIFIED
}

func (x *UploadedArtifactsByService_Toolchain_ArtifactPaths) GetPaths() []*Path {
	if x != nil {
		return x.Paths
	}
	return nil
}

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

	// The ArtifactType.
	ArtifactType ArtifactsByService_Image_ArtifactType `protobuf:"varint,1,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Image_ArtifactType" json:"artifact_type,omitempty"`
	// Absolute path to the artifact file.
	Paths []*Path `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"`
}

func (x *UploadedArtifactsByService_Image_ArtifactPaths) Reset() {
	*x = UploadedArtifactsByService_Image_ArtifactPaths{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[48]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Image_ArtifactPaths) ProtoMessage() {}

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

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

func (x *UploadedArtifactsByService_Image_ArtifactPaths) GetArtifactType() ArtifactsByService_Image_ArtifactType {
	if x != nil {
		return x.ArtifactType
	}
	return ArtifactsByService_Image_UNSPECIFIED
}

func (x *UploadedArtifactsByService_Image_ArtifactPaths) GetPaths() []*Path {
	if x != nil {
		return x.Paths
	}
	return nil
}

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

	// The ArtifactType.
	ArtifactType ArtifactsByService_Package_ArtifactType `protobuf:"varint,1,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Package_ArtifactType" json:"artifact_type,omitempty"`
	// Absolute path to the artifact file.
	Paths []*Path `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"`
}

func (x *UploadedArtifactsByService_Package_ArtifactPaths) Reset() {
	*x = UploadedArtifactsByService_Package_ArtifactPaths{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[49]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Package_ArtifactPaths) ProtoMessage() {}

func (x *UploadedArtifactsByService_Package_ArtifactPaths) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_common_proto_msgTypes[49]
	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 UploadedArtifactsByService_Package_ArtifactPaths.ProtoReflect.Descriptor instead.
func (*UploadedArtifactsByService_Package_ArtifactPaths) Descriptor() ([]byte, []int) {
	return file_chromiumos_common_proto_rawDescGZIP(), []int{21, 3, 0}
}

func (x *UploadedArtifactsByService_Package_ArtifactPaths) GetArtifactType() ArtifactsByService_Package_ArtifactType {
	if x != nil {
		return x.ArtifactType
	}
	return ArtifactsByService_Package_UNSPECIFIED
}

func (x *UploadedArtifactsByService_Package_ArtifactPaths) GetPaths() []*Path {
	if x != nil {
		return x.Paths
	}
	return nil
}

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

	// The ArtifactType.
	ArtifactType ArtifactsByService_Sysroot_ArtifactType `protobuf:"varint,1,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Sysroot_ArtifactType" json:"artifact_type,omitempty"`
	// Absolute path to the artifact file.
	Paths []*Path `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"`
}

func (x *UploadedArtifactsByService_Sysroot_ArtifactPaths) Reset() {
	*x = UploadedArtifactsByService_Sysroot_ArtifactPaths{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[50]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Sysroot_ArtifactPaths) ProtoMessage() {}

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

func (x *UploadedArtifactsByService_Sysroot_ArtifactPaths) GetArtifactType() ArtifactsByService_Sysroot_ArtifactType {
	if x != nil {
		return x.ArtifactType
	}
	return ArtifactsByService_Sysroot_UNSPECIFIED
}

func (x *UploadedArtifactsByService_Sysroot_ArtifactPaths) GetPaths() []*Path {
	if x != nil {
		return x.Paths
	}
	return nil
}

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

	// The ArtifactType.
	ArtifactType ArtifactsByService_Test_ArtifactType `protobuf:"varint,1,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Test_ArtifactType" json:"artifact_type,omitempty"`
	// Absolute path to the artifact file.
	Paths []*Path `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"`
}

func (x *UploadedArtifactsByService_Test_ArtifactPaths) Reset() {
	*x = UploadedArtifactsByService_Test_ArtifactPaths{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[51]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Test_ArtifactPaths) ProtoMessage() {}

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

func (x *UploadedArtifactsByService_Test_ArtifactPaths) GetArtifactType() ArtifactsByService_Test_ArtifactType {
	if x != nil {
		return x.ArtifactType
	}
	return ArtifactsByService_Test_UNSPECIFIED
}

func (x *UploadedArtifactsByService_Test_ArtifactPaths) GetPaths() []*Path {
	if x != nil {
		return x.Paths
	}
	return nil
}

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

	// The ArtifactType.
	ArtifactType ArtifactsByService_Firmware_ArtifactType `protobuf:"varint,1,opt,name=artifact_type,json=artifactType,proto3,enum=chromiumos.ArtifactsByService_Firmware_ArtifactType" json:"artifact_type,omitempty"`
	// Absolute path to the artifact file.
	Paths []*Path `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"`
	// The firmware location.
	Location FwLocation `protobuf:"varint,3,opt,name=location,proto3,enum=chromiumos.FwLocation" json:"location,omitempty"`
}

func (x *UploadedArtifactsByService_Firmware_ArtifactPaths) Reset() {
	*x = UploadedArtifactsByService_Firmware_ArtifactPaths{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_common_proto_msgTypes[52]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*UploadedArtifactsByService_Firmware_ArtifactPaths) ProtoMessage() {}

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

func (x *UploadedArtifactsByService_Firmware_ArtifactPaths) GetArtifactType() ArtifactsByService_Firmware_ArtifactType {
	if x != nil {
		return x.ArtifactType
	}
	return ArtifactsByService_Firmware_UNSPECIFIED
}

func (x *UploadedArtifactsByService_Firmware_ArtifactPaths) GetPaths() []*Path {
	if x != nil {
		return x.Paths
	}
	return nil
}

func (x *UploadedArtifactsByService_Firmware_ArtifactPaths) GetLocation() FwLocation {
	if x != nil {
		return x.Location
	}
	return FwLocation_FW_LOCATION_UNKNOWN
}

var File_chromiumos_common_proto protoreflect.FileDescriptor

var file_chromiumos_common_proto_rawDesc = []byte{
	0x0a, 0x17, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x6d,
	0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x22, 0x21, 0x0a, 0x0b, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61,
	0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x84, 0x02, 0x0a, 0x06, 0x43, 0x68, 0x72,
	0x6f, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x04, 0x70, 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, 0x2e, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43,
	0x68, 0x72, 0x6f, 0x6f, 0x74, 0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x45, 0x6e, 0x76, 0x52,
	0x03, 0x65, 0x6e, 0x76, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x5f, 0x64,
	0x69, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65,
	0x44, 0x69, 0x72, 0x1a, 0x6e, 0x0a, 0x09, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x45, 0x6e, 0x76,
	0x12, 0x30, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x55, 0x73, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x08, 0x75, 0x73, 0x65, 0x46, 0x6c, 0x61,
	0x67, 0x73, 0x12, 0x2f, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75,
	0x72, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x52, 0x04, 0x67, 0x6f, 0x6d, 0x61, 0x22,
	0x23, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x65,
	0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x65, 0x61,
	0x74, 0x75, 0x72, 0x65, 0x22, 0xa8, 0x03, 0x0a, 0x0a, 0x47, 0x6f, 0x6d, 0x61, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x6f, 0x6d, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x6f, 0x6d, 0x61, 0x44, 0x69, 0x72, 0x12, 0x28,
	0x0a, 0x10, 0x67, 0x6f, 0x6d, 0x61, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6a, 0x73,
	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x6f, 0x6d, 0x61, 0x43, 0x6c,
	0x69, 0x65, 0x6e, 0x74, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x65, 0x6f, 0x73, 0x5f, 0x67, 0x6f, 0x6d, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x6f, 0x73, 0x47, 0x6f, 0x6d,
	0x61, 0x44, 0x69, 0x72, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x6f, 0x6d, 0x61, 0x5f, 0x61, 0x70, 0x70,
	0x72, 0x6f, 0x61, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x47, 0x6f, 0x6d, 0x61, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x47, 0x6f, 0x6d, 0x61, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68,
	0x52, 0x0c, 0x67, 0x6f, 0x6d, 0x61, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, 0x12, 0x2e,
	0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x79, 0x6e,
	0x63, 0x65, 0x64, 0x44, 0x69, 0x72, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x44, 0x69, 0x72, 0x12, 0x1d,
	0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x23, 0x0a,
	0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x7a, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x07,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x7a, 0x46, 0x69,
	0x6c, 0x65, 0x22, 0x6b, 0x0a, 0x0c, 0x47, 0x6f, 0x6d, 0x61, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x61,
	0x63, 0x68, 0x12, 0x1d, 0x0a, 0x19, 0x47, 0x4f, 0x4d, 0x41, 0x5f, 0x41, 0x50, 0x50, 0x52, 0x4f,
	0x41, 0x43, 0x48, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10,
	0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x01, 0x12, 0x0c,
	0x0a, 0x08, 0x52, 0x42, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b,
	0x52, 0x42, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x10, 0x0a,
	0x0c, 0x52, 0x42, 0x45, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x4f, 0x53, 0x10, 0x04, 0x22,
	0x70, 0x0a, 0x0d, 0x47, 0x6f, 0x6d, 0x61, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x12,
	0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x7a, 0x5f, 0x66, 0x69, 0x6c, 0x65,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x7a,
	0x46, 0x69, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65,
	0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65,
	0x73, 0x22, 0x66, 0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f,
	0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x4e,
	0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 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, 0x22, 0x1d, 0x0a, 0x07, 0x50, 0x72, 0x6f,
	0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x10, 0x50, 0x61, 0x63,
	0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a,
	0x0c, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x68, 0x61,
	0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x6e, 0x75, 0x6d,
	0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, 0x6e, 0x61, 0x70, 0x73,
	0x68, 0x6f, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x0c, 0x62, 0x75, 0x69,
	0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 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, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x12, 0x2d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
	0x22, 0x87, 0x01, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74,
	0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x35, 0x0a,
	0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74,
	0x68, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10,
	0x00, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x4e, 0x53, 0x49, 0x44, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a,
	0x07, 0x4f, 0x55, 0x54, 0x53, 0x49, 0x44, 0x45, 0x10, 0x02, 0x22, 0x32, 0x0a, 0x0a, 0x52, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x1d,
	0x0a, 0x09, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x44, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x64,
	0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x69, 0x72, 0x22, 0x70, 0x0a,
	0x0c, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x12, 0x0a,
	0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73,
	0x74, 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, 0x63,
	0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x68, 0x61,
	0x6e, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, 0x65, 0x74, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x74, 0x63, 0x68, 0x73, 0x65, 0x74, 0x22,
	0x7b, 0x0a, 0x0d, 0x47, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
	0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x68, 0x6f, 0x73, 0x74, 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, 0x0e,
	0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10,
	0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66,
	0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01,
	0x28, 0x0d, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1d, 0x0a, 0x07,
	0x55, 0x73, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x90, 0x03, 0x0a, 0x0e,
	0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x44,
	0x0a, 0x09, 0x6d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x52,
	0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x4d, 0x69,
	0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x69, 0x6c, 0x65, 0x73,
	0x74, 0x6f, 0x6e, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x63,
	0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x62, 0x75,
	0x69, 0x6c, 0x64, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x65,
	0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72,
	0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x44, 0x61, 0x74, 0x65, 0x1a, 0x1c, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a,
	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
	0x6c, 0x75, 0x65, 0x1a, 0x93, 0x01, 0x0a, 0x09, 0x4d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e,
	0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x12, 0x74, 0x61, 0x72,
	0x67, 0x65, 0x74, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
	0x6f, 0x73, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65,
	0x72, 0x2e, 0x44, 0x61, 0x74, 0x65, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x72,
	0x61, 0x6e, 0x63, 0x68, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x72, 0x61, 0x6e,
	0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62,
	0x72, 0x61, 0x6e, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x13, 0x0a, 0x11, 0x6d, 0x69, 0x6c,
	0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x49,
	0x0a, 0x0f, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72,
	0x73, 0x12, 0x36, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x52,
	0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x22, 0x37, 0x0a, 0x0a, 0x50, 0x72, 0x6f,
	0x74, 0x6f, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x69, 0x61,
	0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0c, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x6f,
	0x74, 0x6f, 0x22, 0x92, 0x01, 0x0a, 0x1d, 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, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x5f, 0x63,
	0x77, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x48, 0x00, 0x52, 0x10, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x43, 0x77, 0x70, 0x50, 0x72, 0x6f,
	0x66, 0x69, 0x6c, 0x65, 0x12, 0x27, 0x0a, 0x0e, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x76,
	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d,
	0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x18, 0x0a,
	0x16, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x62, 0x75, 0x69,
	0x6c, 0x64, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x22, 0x61, 0x0a, 0x0b, 0x41, 0x66, 0x64, 0x6f, 0x52,
	0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65,
	0x5f, 0x63, 0x77, 0x70, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x10, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x43, 0x77, 0x70, 0x50, 0x72, 0x6f,
	0x66, 0x69, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x62, 0x75,
	0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x69, 0x6d,
	0x61, 0x67, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x13, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e,
	0x66, 0x6f, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x5f, 0x63, 0x77, 0x70,
	0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
	0x52, 0x10, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x43, 0x77, 0x70, 0x50, 0x72, 0x6f, 0x66, 0x69,
	0x6c, 0x65, 0x12, 0x27, 0x0a, 0x0e, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72,
	0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x6b, 0x65,
	0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x0c, 0x61,
	0x66, 0x64, 0x6f, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41,
	0x66, 0x64, 0x6f, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x66,
	0x64, 0x6f, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x17, 0x0a, 0x15, 0x61, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e,
	0x66, 0x6f, 0x22, 0xad, 0x28, 0x0a, 0x12, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x65, 0x67,
	0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79,
	0x52, 0x06, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x46, 0x0a, 0x09, 0x74, 0x6f, 0x6f, 0x6c,
	0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x6f, 0x6c,
	0x63, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x09, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e,
	0x12, 0x3a, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x24, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x07,
	0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x61,
	0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x40,
	0x0a, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x26, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74,
	0x12, 0x37, 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54,
	0x65, 0x73, 0x74, 0x52, 0x04, 0x74, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0c, 0x70, 0x72, 0x6f,
	0x66, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x07, 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, 0x12, 0x43, 0x0a,
	0x08, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x27, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x52, 0x08, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61,
	0x72, 0x65, 0x1a, 0x8a, 0x06, 0x0a, 0x06, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x5b, 0x0a,
	0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53,
	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2e, 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, 0x5d, 0x0a, 0x10, 0x6f, 0x75,
	0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72,
	0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2e, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x99, 0x02, 0x0a, 0x0c, 0x41, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x59, 0x0a, 0x0e, 0x61, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03,
	0x28, 0x0e, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
	0x63, 0x65, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x73, 0x4c,
	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x63, 0x6c, 0x5f,
	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x6c, 0x4e,
	0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, 0x11, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x63,
	0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50,
	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52,
	0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f,
	0x6e, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
	0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xa7, 0x02, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
	0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4d, 0x41, 0x47, 0x45,
	0x5f, 0x5a, 0x49, 0x50, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x55,
	0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x02, 0x12,
	0x12, 0x0a, 0x0e, 0x41, 0x55, 0x54, 0x4f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x46, 0x49, 0x4c, 0x45,
	0x53, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x41, 0x53, 0x54, 0x5f, 0x46, 0x49, 0x4c, 0x45,
	0x53, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x49, 0x4e, 0x4e, 0x45, 0x44, 0x5f, 0x47, 0x55,
	0x45, 0x53, 0x54, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x53, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08,
	0x46, 0x49, 0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x42,
	0x55, 0x49, 0x4c, 0x44, 0x5f, 0x4c, 0x4f, 0x47, 0x53, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x43,
	0x48, 0x52, 0x4f, 0x4d, 0x45, 0x4f, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x08,
	0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x09,
	0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56,
	0x45, 0x53, 0x10, 0x0a, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x50, 0x4d, 0x43, 0x55, 0x5f, 0x55, 0x4e,
	0x49, 0x54, 0x54, 0x45, 0x53, 0x54, 0x53, 0x10, 0x1b, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x43, 0x45,
	0x5f, 0x54, 0x41, 0x52, 0x42, 0x41, 0x4c, 0x4c, 0x10, 0x1c, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45,
	0x42, 0x55, 0x47, 0x5f, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x53, 0x10, 0x20, 0x22, 0x04, 0x08,
	0x0b, 0x10, 0x1a, 0x22, 0x04, 0x08, 0x1d, 0x10, 0x1f, 0x22, 0x04, 0x08, 0x21, 0x10, 0x21, 0x1a,
	0xd7, 0x08, 0x0a, 0x09, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x5e, 0x0a,
	0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53,
	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e,
	0x2e, 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, 0x60, 0x0a,
	0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79,
	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69,
	0x6e, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f,
	0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a,
	0x88, 0x02, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f,
	0x12, 0x5c, 0x0a, 0x0e, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70,
	0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42,
	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61,
	0x69, 0x6e, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52,
	0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x21,
	0x0a, 0x0c, 0x67, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x63, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, 0x11,
	0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f,
	0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79,
	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43,
	0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73,
	0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xfc, 0x04, 0x0a, 0x0c, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55,
	0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20,
	0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d,
	0x45, 0x5f, 0x4c, 0x4c, 0x56, 0x4d, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x46, 0x49, 0x4c, 0x45,
	0x10, 0x0b, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43,
	0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x4c, 0x4c, 0x56, 0x4d, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52,
	0x46, 0x49, 0x4c, 0x45, 0x10, 0x0c, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45,
	0x5f, 0x43, 0x4c, 0x41, 0x4e, 0x47, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x53, 0x5f,
	0x46, 0x49, 0x4c, 0x45, 0x10, 0x0d, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49,
	0x46, 0x49, 0x45, 0x44, 0x5f, 0x4c, 0x4c, 0x56, 0x4d, 0x5f, 0x50, 0x47, 0x4f, 0x5f, 0x46, 0x49,
	0x4c, 0x45, 0x10, 0x0e, 0x12, 0x29, 0x0a, 0x25, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49,
	0x45, 0x44, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x42, 0x45, 0x4e, 0x43, 0x48, 0x4d,
	0x41, 0x52, 0x4b, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x0f, 0x12,
	0x27, 0x0a, 0x23, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x52, 0x4f,
	0x4d, 0x45, 0x5f, 0x42, 0x45, 0x4e, 0x43, 0x48, 0x4d, 0x41, 0x52, 0x4b, 0x5f, 0x41, 0x46, 0x44,
	0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x10, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x45, 0x52, 0x49,
	0x46, 0x49, 0x45, 0x44, 0x5f, 0x4b, 0x45, 0x52, 0x4e, 0x45, 0x4c, 0x5f, 0x43, 0x57, 0x50, 0x5f,
	0x41, 0x46, 0x44, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x11, 0x12, 0x23, 0x0a, 0x1f, 0x55,
	0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x4b, 0x45, 0x52, 0x4e, 0x45, 0x4c,
	0x5f, 0x43, 0x57, 0x50, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x12,
	0x12, 0x23, 0x0a, 0x1f, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43,
	0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x43, 0x57, 0x50, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x5f, 0x46,
	0x49, 0x4c, 0x45, 0x10, 0x13, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45,
	0x44, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x43, 0x57, 0x50, 0x5f, 0x41, 0x46, 0x44,
	0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x14, 0x12, 0x1e, 0x0a, 0x1a, 0x56, 0x45, 0x52, 0x49,
	0x46, 0x49, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x41, 0x46, 0x44,
	0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x15, 0x12, 0x29, 0x0a, 0x25, 0x55, 0x4e, 0x56, 0x45,
	0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x42, 0x45,
	0x4e, 0x43, 0x48, 0x4d, 0x41, 0x52, 0x4b, 0x5f, 0x50, 0x45, 0x52, 0x46, 0x5f, 0x46, 0x49, 0x4c,
	0x45, 0x10, 0x16, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x44, 0x45,
	0x42, 0x55, 0x47, 0x5f, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x17, 0x12, 0x1a, 0x0a, 0x16,
	0x54, 0x4f, 0x4f, 0x4c, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e,
	0x47, 0x5f, 0x4c, 0x4f, 0x47, 0x53, 0x10, 0x18, 0x12, 0x29, 0x0a, 0x25, 0x43, 0x48, 0x52, 0x4f,
	0x4d, 0x45, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f,
	0x46, 0x4f, 0x52, 0x5f, 0x41, 0x4e, 0x44, 0x52, 0x4f, 0x49, 0x44, 0x5f, 0x4c, 0x49, 0x4e, 0x55,
	0x58, 0x10, 0x19, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x4c, 0x41, 0x4e, 0x47, 0x5f, 0x43, 0x52, 0x41,
	0x53, 0x48, 0x5f, 0x44, 0x49, 0x41, 0x47, 0x4e, 0x4f, 0x53, 0x45, 0x53, 0x10, 0x1a, 0x12, 0x17,
	0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x52, 0x5f, 0x52, 0x55, 0x53, 0x41, 0x47,
	0x45, 0x5f, 0x4c, 0x4f, 0x47, 0x10, 0x1d, 0x22, 0x04, 0x08, 0x01, 0x10, 0x0a, 0x22, 0x04, 0x08,
	0x1b, 0x10, 0x1c, 0x22, 0x04, 0x08, 0x1e, 0x10, 0x21, 0x1a, 0xef, 0x03, 0x0a, 0x05, 0x49, 0x6d,
	0x61, 0x67, 0x65, 0x12, 0x5a, 0x0a, 0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6d, 0x61,
	0x67, 0x65, 0x2e, 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,
	0x5c, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x2e,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x6f, 0x75,
	0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x84, 0x02,
	0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 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, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53,
	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x73, 0x5f, 0x6c,
	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b,
	0x67, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61,
	0x63, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61,
	0x63, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, 0x11, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73,
	0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
	0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x22, 0x25, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
	0x49, 0x45, 0x44, 0x10, 0x00, 0x22, 0x04, 0x08, 0x01, 0x10, 0x21, 0x1a, 0xf7, 0x03, 0x0a, 0x07,
	0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x5c, 0x0a, 0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74,
	0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x33, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
	0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 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, 0x5e, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f,
	0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x33, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x86, 0x02, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x5a, 0x0a, 0x0e, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x33,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50,
	0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54,
	0x79, 0x70, 0x65, 0x52, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70,
	0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x73, 0x4c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x63, 0x6c, 0x5f, 0x6e, 0x61, 0x6d,
	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x6c, 0x4e, 0x61, 0x6d, 0x65,
	0x12, 0x5c, 0x0a, 0x11, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64,
	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c,
	0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x70, 0x75,
	0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x25,
	0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f,
	0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x22,
	0x04, 0x08, 0x01, 0x10, 0x21, 0x1a, 0xf7, 0x03, 0x0a, 0x07, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f,
	0x74, 0x12, 0x5c, 0x0a, 0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x72, 0x6f,
	0x6f, 0x74, 0x2e, 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,
	0x5e, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f,
	0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f,
	0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a,
	0x86, 0x02, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f,
	0x12, 0x5a, 0x0a, 0x0e, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70,
	0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42,
	0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74,
	0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x61,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c,
	0x67, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03,
	0x28, 0x09, 0x52, 0x0b, 0x67, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
	0x19, 0x0a, 0x08, 0x61, 0x63, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x07, 0x61, 0x63, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, 0x11, 0x70, 0x75,
	0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
	0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65,
	0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e,
	0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43,
	0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x25, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50,
	0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x22, 0x04, 0x08, 0x01, 0x10, 0x21, 0x1a,
	0xeb, 0x03, 0x0a, 0x04, 0x54, 0x65, 0x73, 0x74, 0x12, 0x59, 0x0a, 0x0f, 0x69, 0x6e, 0x70, 0x75,
	0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
	0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x2e, 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, 0x5b, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x65,
	0x73, 0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52,
	0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x1a, 0x83, 0x02, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66,
	0x6f, 0x12, 0x57, 0x0a, 0x0e, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79,
	0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x2e, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x61, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x73,
	0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09,
	0x52, 0x0b, 0x67, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a,
	0x08, 0x61, 0x63, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x07, 0x61, 0x63, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, 0x11, 0x70, 0x75, 0x62, 0x6c,
	0x69, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76,
	0x69, 0x63, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e,
	0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x25, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
	0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x22, 0x04, 0x08, 0x01, 0x10, 0x21, 0x1a, 0xf9, 0x04,
	0x0a, 0x08, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x12, 0x5d, 0x0a, 0x0f, 0x69, 0x6e,
	0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76,
	0x69, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x2e, 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, 0x5f, 0x0a, 0x10, 0x6f, 0x75, 0x74,
	0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76,
	0x69, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75,
	0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0xbb, 0x02, 0x0a, 0x0c, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x5b, 0x0a, 0x0e, 0x61,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76,
	0x69, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x73, 0x5f, 0x6c,
	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b,
	0x67, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61,
	0x63, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61,
	0x63, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5c, 0x0a, 0x11, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73,
	0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
	0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x46, 0x77, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08,
	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6f, 0x0a, 0x0c, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50,
	0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x49, 0x52,
	0x4d, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x42, 0x41, 0x4c, 0x4c, 0x10, 0x1e, 0x12,
	0x19, 0x0a, 0x15, 0x46, 0x49, 0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x42,
	0x41, 0x4c, 0x4c, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x1f, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x49,
	0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x4c, 0x43, 0x4f, 0x56, 0x10, 0x21, 0x22, 0x04, 0x08,
	0x01, 0x10, 0x1d, 0x22, 0x04, 0x08, 0x20, 0x10, 0x20, 0x22, 0x57, 0x0a, 0x10, 0x50, 0x75, 0x62,
	0x6c, 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a,
	0x13, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
	0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53,
	0x48, 0x5f, 0x4f, 0x4e, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x12,
	0x0a, 0x0e, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x5f, 0x41, 0x4c, 0x57, 0x41, 0x59, 0x53,
	0x10, 0x02, 0x22, 0xa8, 0x12, 0x0a, 0x1a, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
	0x65, 0x12, 0x45, 0x0a, 0x06, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55,
	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79,
	0x52, 0x06, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x4e, 0x0a, 0x09, 0x74, 0x6f, 0x6f, 0x6c,
	0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65,
	0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76,
	0x69, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x09, 0x74,
	0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x42, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67,
	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x48, 0x0a, 0x07,
	0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61,
	0x64, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65,
	0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x07, 0x70,
	0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x48, 0x0a, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f,
	0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74,
	0x12, 0x3f, 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f,
	0x61, 0x64, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53,
	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x04, 0x74, 0x65, 0x73,
	0x74, 0x12, 0x4b, 0x0a, 0x08, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x18, 0x07, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x72, 0x6d,
	0x77, 0x61, 0x72, 0x65, 0x52, 0x08, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x1a, 0xf6,
	0x01, 0x0a, 0x06, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x59, 0x0a, 0x09, 0x61, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64,
	0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72,
	0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2e, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x1a, 0x90, 0x01, 0x0a, 0x0d, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x57, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4c, 0x65,
	0x67, 0x61, 0x63, 0x79, 0x2e, 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, 0x12,
	0x26, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68,
	0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x1a, 0xff, 0x01, 0x0a, 0x09, 0x54, 0x6f, 0x6f, 0x6c,
	0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x5c, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x41, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
	0x2e, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x73, 0x1a, 0x93, 0x01, 0x0a, 0x0d, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x5a, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x6f, 0x6f,
	0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 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, 0x12, 0x26, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61,
	0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x1a, 0xf3, 0x01, 0x0a, 0x05, 0x49, 0x6d,
	0x61, 0x67, 0x65, 0x12, 0x58, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73,
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49,
	0x6d, 0x61, 0x67, 0x65, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x50, 0x61, 0x74,
	0x68, 0x73, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x8f, 0x01,
	0x0a, 0x0d, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 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, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53,
	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x2e, 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, 0x12, 0x26, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73,
	0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x1a,
	0xf9, 0x01, 0x0a, 0x07, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x5a, 0x0a, 0x09, 0x61,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f,
	0x61, 0x64, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53,
	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, 0x09, 0x61, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x91, 0x01, 0x0a, 0x0d, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x58, 0x0a, 0x0d, 0x61, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x33, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
	0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2e, 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, 0x12, 0x26, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x1a, 0xf9, 0x01, 0x0a, 0x07,
	0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x5a, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
	0x63, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x73, 0x1a, 0x91, 0x01, 0x0a, 0x0d, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x58, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x79, 0x73,
	0x72, 0x6f, 0x6f, 0x74, 0x2e, 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, 0x12,
	0x26, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68,
	0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x1a, 0xf0, 0x01, 0x0a, 0x04, 0x54, 0x65, 0x73, 0x74,
	0x12, 0x57, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74,
	0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, 0x09,
	0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x8e, 0x01, 0x0a, 0x0d, 0x41, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x55, 0x0a, 0x0d, 0x61,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
	0x63, 0x65, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x2e, 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, 0x12, 0x26, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50,
	0x61, 0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x1a, 0xb0, 0x02, 0x0a, 0x08, 0x46,
	0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x12, 0x5b, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64,
	0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
	0x63, 0x65, 0x2e, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x1a, 0xc6, 0x01, 0x0a, 0x0d, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x59, 0x0a, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x69,
	0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x2e, 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, 0x12, 0x26, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61,
	0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x6c, 0x6f, 0x63,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x46, 0x77, 0x4c, 0x6f, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0xe0, 0x04,
	0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x49,
	0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49,
	0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54,
	0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4d,
	0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x56, 0x10, 0x02, 0x12, 0x13,
	0x0a, 0x0f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x45, 0x53,
	0x54, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50,
	0x45, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x56, 0x4d, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x49,
	0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x56,
	0x4d, 0x10, 0x05, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50,
	0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x59, 0x10, 0x06, 0x12, 0x16, 0x0a, 0x12,
	0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x41, 0x43, 0x54, 0x4f,
	0x52, 0x59, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59,
	0x50, 0x45, 0x5f, 0x46, 0x49, 0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x10, 0x08, 0x12, 0x1c, 0x0a,
	0x18, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x35, 0x30,
	0x5f, 0x46, 0x49, 0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x10, 0x09, 0x12, 0x1c, 0x0a, 0x18, 0x49,
	0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x47,
	0x55, 0x45, 0x53, 0x54, 0x5f, 0x56, 0x4d, 0x10, 0x0a, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4d, 0x41,
	0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x47, 0x55, 0x45,
	0x53, 0x54, 0x5f, 0x56, 0x4d, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4d, 0x41, 0x47, 0x45,
	0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x4c, 0x43, 0x10, 0x0c, 0x12, 0x1b, 0x0a, 0x17, 0x49,
	0x4d, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x53, 0x43, 0x5f, 0x46, 0x49,
	0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x10, 0x0d, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4d, 0x41, 0x47,
	0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x4f, 0x52, 0x59,
	0x5f, 0x55, 0x53, 0x42, 0x50, 0x44, 0x10, 0x0e, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4d, 0x41, 0x47,
	0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x4f, 0x52, 0x59,
	0x5f, 0x52, 0x57, 0x53, 0x49, 0x47, 0x10, 0x0f, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x41, 0x53, 0x45,
	0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x45, 0x56, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x54,
	0x45, 0x53, 0x54, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x56, 0x4d,
	0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x56, 0x4d, 0x10, 0x05, 0x12,
	0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x59, 0x10, 0x06, 0x12, 0x0b, 0x0a,
	0x07, 0x46, 0x41, 0x43, 0x54, 0x4f, 0x52, 0x59, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x49,
	0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x52, 0x35, 0x30,
	0x5f, 0x46, 0x49, 0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x42,
	0x41, 0x53, 0x45, 0x5f, 0x47, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x56, 0x4d, 0x10, 0x0a, 0x12, 0x11,
	0x0a, 0x0d, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x47, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x56, 0x4d, 0x10,
	0x0b, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x4c, 0x43, 0x10, 0x0c, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x53,
	0x43, 0x5f, 0x46, 0x49, 0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x10, 0x0d, 0x1a, 0x02, 0x10, 0x01,
	0x2a, 0x6d, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x17, 0x0a, 0x13, 0x43,
	0x48, 0x41, 0x4e, 0x4e, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
	0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x4e, 0x4e, 0x45, 0x4c, 0x5f,
	0x53, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x41, 0x4e,
	0x4e, 0x45, 0x4c, 0x5f, 0x42, 0x45, 0x54, 0x41, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x48,
	0x41, 0x4e, 0x4e, 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x56, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x43,
	0x48, 0x41, 0x4e, 0x4e, 0x45, 0x4c, 0x5f, 0x43, 0x41, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x04, 0x2a,
	0x6c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d,
	0x44, 0x45, 0x4c, 0x54, 0x41, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
	0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x10, 0x01, 0x12, 0x07, 0x0a,
	0x03, 0x46, 0x53, 0x49, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x49, 0x4c, 0x45, 0x53, 0x54,
	0x4f, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x4d, 0x41, 0x48, 0x41, 0x10, 0x04,
	0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x45, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x4f,
	0x4e, 0x45, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x4e, 0x32, 0x4e, 0x10, 0x06, 0x2a, 0x5e, 0x0a,
	0x0a, 0x46, 0x77, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x13, 0x46,
	0x57, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
	0x57, 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d,
	0x5f, 0x45, 0x43, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x4c, 0x41, 0x54, 0x46, 0x4f, 0x52,
	0x4d, 0x5f, 0x5a, 0x45, 0x50, 0x48, 0x59, 0x52, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x4c,
	0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x54, 0x49, 0x35, 0x30, 0x10, 0x03, 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, 0x42, 0x36, 0x5a, 0x34, 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, 0x75, 0x6d, 0x6f, 0x73, 0x62, 0x06, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_chromiumos_common_proto_rawDescOnce sync.Once
	file_chromiumos_common_proto_rawDescData = file_chromiumos_common_proto_rawDesc
)

func file_chromiumos_common_proto_rawDescGZIP() []byte {
	file_chromiumos_common_proto_rawDescOnce.Do(func() {
		file_chromiumos_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_chromiumos_common_proto_rawDescData)
	})
	return file_chromiumos_common_proto_rawDescData
}

var file_chromiumos_common_proto_enumTypes = make([]protoimpl.EnumInfo, 15)
var file_chromiumos_common_proto_msgTypes = make([]protoimpl.MessageInfo, 53)
var file_chromiumos_common_proto_goTypes = []interface{}{
	(ImageType)(0),                                             // 0: chromiumos.ImageType
	(Channel)(0),                                               // 1: chromiumos.Channel
	(DeltaType)(0),                                             // 2: chromiumos.DeltaType
	(FwLocation)(0),                                            // 3: chromiumos.FwLocation
	(AFDOArtifactType)(0),                                      // 4: chromiumos.AFDOArtifactType
	(GomaConfig_GomaApproach)(0),                               // 5: chromiumos.GomaConfig.GomaApproach
	(Path_Location)(0),                                         // 6: chromiumos.Path.Location
	(ArtifactsByService_PublishCondition)(0),                   // 7: chromiumos.ArtifactsByService.PublishCondition
	(ArtifactsByService_Legacy_ArtifactType)(0),                // 8: chromiumos.ArtifactsByService.Legacy.ArtifactType
	(ArtifactsByService_Toolchain_ArtifactType)(0),             // 9: chromiumos.ArtifactsByService.Toolchain.ArtifactType
	(ArtifactsByService_Image_ArtifactType)(0),                 // 10: chromiumos.ArtifactsByService.Image.ArtifactType
	(ArtifactsByService_Package_ArtifactType)(0),               // 11: chromiumos.ArtifactsByService.Package.ArtifactType
	(ArtifactsByService_Sysroot_ArtifactType)(0),               // 12: chromiumos.ArtifactsByService.Sysroot.ArtifactType
	(ArtifactsByService_Test_ArtifactType)(0),                  // 13: chromiumos.ArtifactsByService.Test.ArtifactType
	(ArtifactsByService_Firmware_ArtifactType)(0),              // 14: chromiumos.ArtifactsByService.Firmware.ArtifactType
	(*BuildTarget)(nil),                                        // 15: chromiumos.BuildTarget
	(*Chroot)(nil),                                             // 16: chromiumos.Chroot
	(*Feature)(nil),                                            // 17: chromiumos.Feature
	(*GomaConfig)(nil),                                         // 18: chromiumos.GomaConfig
	(*GomaArtifacts)(nil),                                      // 19: chromiumos.GomaArtifacts
	(*PackageInfo)(nil),                                        // 20: chromiumos.PackageInfo
	(*Profile)(nil),                                            // 21: chromiumos.Profile
	(*PackageIndexInfo)(nil),                                   // 22: chromiumos.PackageIndexInfo
	(*Path)(nil),                                               // 23: chromiumos.Path
	(*ResultPath)(nil),                                         // 24: chromiumos.ResultPath
	(*SyncedDir)(nil),                                          // 25: chromiumos.SyncedDir
	(*GerritChange)(nil),                                       // 26: chromiumos.GerritChange
	(*GitilesCommit)(nil),                                      // 27: chromiumos.GitilesCommit
	(*UseFlag)(nil),                                            // 28: chromiumos.UseFlag
	(*ReleaseBuilder)(nil),                                     // 29: chromiumos.ReleaseBuilder
	(*ReleaseBuilders)(nil),                                    // 30: chromiumos.ReleaseBuilders
	(*ProtoBytes)(nil),                                         // 31: chromiumos.ProtoBytes
	(*PrepareForBuildAdditionalArgs)(nil),                      // 32: chromiumos.PrepareForBuildAdditionalArgs
	(*AfdoRelease)(nil),                                        // 33: chromiumos.AfdoRelease
	(*ArtifactProfileInfo)(nil),                                // 34: chromiumos.ArtifactProfileInfo
	(*ArtifactsByService)(nil),                                 // 35: chromiumos.ArtifactsByService
	(*UploadedArtifactsByService)(nil),                         // 36: chromiumos.UploadedArtifactsByService
	(*Chroot_ChrootEnv)(nil),                                   // 37: chromiumos.Chroot.ChrootEnv
	(*ReleaseBuilder_Date)(nil),                                // 38: chromiumos.ReleaseBuilder.Date
	(*ReleaseBuilder_Milestone)(nil),                           // 39: chromiumos.ReleaseBuilder.Milestone
	(*ArtifactsByService_Legacy)(nil),                          // 40: chromiumos.ArtifactsByService.Legacy
	(*ArtifactsByService_Toolchain)(nil),                       // 41: chromiumos.ArtifactsByService.Toolchain
	(*ArtifactsByService_Image)(nil),                           // 42: chromiumos.ArtifactsByService.Image
	(*ArtifactsByService_Package)(nil),                         // 43: chromiumos.ArtifactsByService.Package
	(*ArtifactsByService_Sysroot)(nil),                         // 44: chromiumos.ArtifactsByService.Sysroot
	(*ArtifactsByService_Test)(nil),                            // 45: chromiumos.ArtifactsByService.Test
	(*ArtifactsByService_Firmware)(nil),                        // 46: chromiumos.ArtifactsByService.Firmware
	(*ArtifactsByService_Legacy_ArtifactInfo)(nil),             // 47: chromiumos.ArtifactsByService.Legacy.ArtifactInfo
	(*ArtifactsByService_Toolchain_ArtifactInfo)(nil),          // 48: chromiumos.ArtifactsByService.Toolchain.ArtifactInfo
	(*ArtifactsByService_Image_ArtifactInfo)(nil),              // 49: chromiumos.ArtifactsByService.Image.ArtifactInfo
	(*ArtifactsByService_Package_ArtifactInfo)(nil),            // 50: chromiumos.ArtifactsByService.Package.ArtifactInfo
	(*ArtifactsByService_Sysroot_ArtifactInfo)(nil),            // 51: chromiumos.ArtifactsByService.Sysroot.ArtifactInfo
	(*ArtifactsByService_Test_ArtifactInfo)(nil),               // 52: chromiumos.ArtifactsByService.Test.ArtifactInfo
	(*ArtifactsByService_Firmware_ArtifactInfo)(nil),           // 53: chromiumos.ArtifactsByService.Firmware.ArtifactInfo
	(*UploadedArtifactsByService_Legacy)(nil),                  // 54: chromiumos.UploadedArtifactsByService.Legacy
	(*UploadedArtifactsByService_Toolchain)(nil),               // 55: chromiumos.UploadedArtifactsByService.Toolchain
	(*UploadedArtifactsByService_Image)(nil),                   // 56: chromiumos.UploadedArtifactsByService.Image
	(*UploadedArtifactsByService_Package)(nil),                 // 57: chromiumos.UploadedArtifactsByService.Package
	(*UploadedArtifactsByService_Sysroot)(nil),                 // 58: chromiumos.UploadedArtifactsByService.Sysroot
	(*UploadedArtifactsByService_Test)(nil),                    // 59: chromiumos.UploadedArtifactsByService.Test
	(*UploadedArtifactsByService_Firmware)(nil),                // 60: chromiumos.UploadedArtifactsByService.Firmware
	(*UploadedArtifactsByService_Legacy_ArtifactPaths)(nil),    // 61: chromiumos.UploadedArtifactsByService.Legacy.ArtifactPaths
	(*UploadedArtifactsByService_Toolchain_ArtifactPaths)(nil), // 62: chromiumos.UploadedArtifactsByService.Toolchain.ArtifactPaths
	(*UploadedArtifactsByService_Image_ArtifactPaths)(nil),     // 63: chromiumos.UploadedArtifactsByService.Image.ArtifactPaths
	(*UploadedArtifactsByService_Package_ArtifactPaths)(nil),   // 64: chromiumos.UploadedArtifactsByService.Package.ArtifactPaths
	(*UploadedArtifactsByService_Sysroot_ArtifactPaths)(nil),   // 65: chromiumos.UploadedArtifactsByService.Sysroot.ArtifactPaths
	(*UploadedArtifactsByService_Test_ArtifactPaths)(nil),      // 66: chromiumos.UploadedArtifactsByService.Test.ArtifactPaths
	(*UploadedArtifactsByService_Firmware_ArtifactPaths)(nil),  // 67: chromiumos.UploadedArtifactsByService.Firmware.ArtifactPaths
}
var file_chromiumos_common_proto_depIdxs = []int32{
	37, // 0: chromiumos.Chroot.env:type_name -> chromiumos.Chroot.ChrootEnv
	5,  // 1: chromiumos.GomaConfig.goma_approach:type_name -> chromiumos.GomaConfig.GomaApproach
	25, // 2: chromiumos.GomaConfig.log_dir:type_name -> chromiumos.SyncedDir
	15, // 3: chromiumos.PackageIndexInfo.build_target:type_name -> chromiumos.BuildTarget
	21, // 4: chromiumos.PackageIndexInfo.profile:type_name -> chromiumos.Profile
	6,  // 5: chromiumos.Path.location:type_name -> chromiumos.Path.Location
	23, // 6: chromiumos.ResultPath.path:type_name -> chromiumos.Path
	39, // 7: chromiumos.ReleaseBuilder.milestone:type_name -> chromiumos.ReleaseBuilder.Milestone
	38, // 8: chromiumos.ReleaseBuilder.expiration_date:type_name -> chromiumos.ReleaseBuilder.Date
	29, // 9: chromiumos.ReleaseBuilders.builders:type_name -> chromiumos.ReleaseBuilder
	33, // 10: chromiumos.ArtifactProfileInfo.afdo_release:type_name -> chromiumos.AfdoRelease
	40, // 11: chromiumos.ArtifactsByService.legacy:type_name -> chromiumos.ArtifactsByService.Legacy
	41, // 12: chromiumos.ArtifactsByService.toolchain:type_name -> chromiumos.ArtifactsByService.Toolchain
	42, // 13: chromiumos.ArtifactsByService.image:type_name -> chromiumos.ArtifactsByService.Image
	43, // 14: chromiumos.ArtifactsByService.package:type_name -> chromiumos.ArtifactsByService.Package
	44, // 15: chromiumos.ArtifactsByService.sysroot:type_name -> chromiumos.ArtifactsByService.Sysroot
	45, // 16: chromiumos.ArtifactsByService.test:type_name -> chromiumos.ArtifactsByService.Test
	34, // 17: chromiumos.ArtifactsByService.profile_info:type_name -> chromiumos.ArtifactProfileInfo
	46, // 18: chromiumos.ArtifactsByService.firmware:type_name -> chromiumos.ArtifactsByService.Firmware
	54, // 19: chromiumos.UploadedArtifactsByService.legacy:type_name -> chromiumos.UploadedArtifactsByService.Legacy
	55, // 20: chromiumos.UploadedArtifactsByService.toolchain:type_name -> chromiumos.UploadedArtifactsByService.Toolchain
	56, // 21: chromiumos.UploadedArtifactsByService.image:type_name -> chromiumos.UploadedArtifactsByService.Image
	57, // 22: chromiumos.UploadedArtifactsByService.package:type_name -> chromiumos.UploadedArtifactsByService.Package
	58, // 23: chromiumos.UploadedArtifactsByService.sysroot:type_name -> chromiumos.UploadedArtifactsByService.Sysroot
	59, // 24: chromiumos.UploadedArtifactsByService.test:type_name -> chromiumos.UploadedArtifactsByService.Test
	60, // 25: chromiumos.UploadedArtifactsByService.firmware:type_name -> chromiumos.UploadedArtifactsByService.Firmware
	28, // 26: chromiumos.Chroot.ChrootEnv.use_flags:type_name -> chromiumos.UseFlag
	17, // 27: chromiumos.Chroot.ChrootEnv.features:type_name -> chromiumos.Feature
	38, // 28: chromiumos.ReleaseBuilder.Milestone.target_branch_date:type_name -> chromiumos.ReleaseBuilder.Date
	47, // 29: chromiumos.ArtifactsByService.Legacy.input_artifacts:type_name -> chromiumos.ArtifactsByService.Legacy.ArtifactInfo
	47, // 30: chromiumos.ArtifactsByService.Legacy.output_artifacts:type_name -> chromiumos.ArtifactsByService.Legacy.ArtifactInfo
	48, // 31: chromiumos.ArtifactsByService.Toolchain.input_artifacts:type_name -> chromiumos.ArtifactsByService.Toolchain.ArtifactInfo
	48, // 32: chromiumos.ArtifactsByService.Toolchain.output_artifacts:type_name -> chromiumos.ArtifactsByService.Toolchain.ArtifactInfo
	49, // 33: chromiumos.ArtifactsByService.Image.input_artifacts:type_name -> chromiumos.ArtifactsByService.Image.ArtifactInfo
	49, // 34: chromiumos.ArtifactsByService.Image.output_artifacts:type_name -> chromiumos.ArtifactsByService.Image.ArtifactInfo
	50, // 35: chromiumos.ArtifactsByService.Package.input_artifacts:type_name -> chromiumos.ArtifactsByService.Package.ArtifactInfo
	50, // 36: chromiumos.ArtifactsByService.Package.output_artifacts:type_name -> chromiumos.ArtifactsByService.Package.ArtifactInfo
	51, // 37: chromiumos.ArtifactsByService.Sysroot.input_artifacts:type_name -> chromiumos.ArtifactsByService.Sysroot.ArtifactInfo
	51, // 38: chromiumos.ArtifactsByService.Sysroot.output_artifacts:type_name -> chromiumos.ArtifactsByService.Sysroot.ArtifactInfo
	52, // 39: chromiumos.ArtifactsByService.Test.input_artifacts:type_name -> chromiumos.ArtifactsByService.Test.ArtifactInfo
	52, // 40: chromiumos.ArtifactsByService.Test.output_artifacts:type_name -> chromiumos.ArtifactsByService.Test.ArtifactInfo
	53, // 41: chromiumos.ArtifactsByService.Firmware.input_artifacts:type_name -> chromiumos.ArtifactsByService.Firmware.ArtifactInfo
	53, // 42: chromiumos.ArtifactsByService.Firmware.output_artifacts:type_name -> chromiumos.ArtifactsByService.Firmware.ArtifactInfo
	8,  // 43: chromiumos.ArtifactsByService.Legacy.ArtifactInfo.artifact_types:type_name -> chromiumos.ArtifactsByService.Legacy.ArtifactType
	7,  // 44: chromiumos.ArtifactsByService.Legacy.ArtifactInfo.publish_condition:type_name -> chromiumos.ArtifactsByService.PublishCondition
	9,  // 45: chromiumos.ArtifactsByService.Toolchain.ArtifactInfo.artifact_types:type_name -> chromiumos.ArtifactsByService.Toolchain.ArtifactType
	7,  // 46: chromiumos.ArtifactsByService.Toolchain.ArtifactInfo.publish_condition:type_name -> chromiumos.ArtifactsByService.PublishCondition
	10, // 47: chromiumos.ArtifactsByService.Image.ArtifactInfo.artifact_types:type_name -> chromiumos.ArtifactsByService.Image.ArtifactType
	7,  // 48: chromiumos.ArtifactsByService.Image.ArtifactInfo.publish_condition:type_name -> chromiumos.ArtifactsByService.PublishCondition
	11, // 49: chromiumos.ArtifactsByService.Package.ArtifactInfo.artifact_types:type_name -> chromiumos.ArtifactsByService.Package.ArtifactType
	7,  // 50: chromiumos.ArtifactsByService.Package.ArtifactInfo.publish_condition:type_name -> chromiumos.ArtifactsByService.PublishCondition
	12, // 51: chromiumos.ArtifactsByService.Sysroot.ArtifactInfo.artifact_types:type_name -> chromiumos.ArtifactsByService.Sysroot.ArtifactType
	7,  // 52: chromiumos.ArtifactsByService.Sysroot.ArtifactInfo.publish_condition:type_name -> chromiumos.ArtifactsByService.PublishCondition
	13, // 53: chromiumos.ArtifactsByService.Test.ArtifactInfo.artifact_types:type_name -> chromiumos.ArtifactsByService.Test.ArtifactType
	7,  // 54: chromiumos.ArtifactsByService.Test.ArtifactInfo.publish_condition:type_name -> chromiumos.ArtifactsByService.PublishCondition
	14, // 55: chromiumos.ArtifactsByService.Firmware.ArtifactInfo.artifact_types:type_name -> chromiumos.ArtifactsByService.Firmware.ArtifactType
	7,  // 56: chromiumos.ArtifactsByService.Firmware.ArtifactInfo.publish_condition:type_name -> chromiumos.ArtifactsByService.PublishCondition
	3,  // 57: chromiumos.ArtifactsByService.Firmware.ArtifactInfo.location:type_name -> chromiumos.FwLocation
	61, // 58: chromiumos.UploadedArtifactsByService.Legacy.artifacts:type_name -> chromiumos.UploadedArtifactsByService.Legacy.ArtifactPaths
	62, // 59: chromiumos.UploadedArtifactsByService.Toolchain.artifacts:type_name -> chromiumos.UploadedArtifactsByService.Toolchain.ArtifactPaths
	63, // 60: chromiumos.UploadedArtifactsByService.Image.artifacts:type_name -> chromiumos.UploadedArtifactsByService.Image.ArtifactPaths
	64, // 61: chromiumos.UploadedArtifactsByService.Package.artifacts:type_name -> chromiumos.UploadedArtifactsByService.Package.ArtifactPaths
	65, // 62: chromiumos.UploadedArtifactsByService.Sysroot.artifacts:type_name -> chromiumos.UploadedArtifactsByService.Sysroot.ArtifactPaths
	66, // 63: chromiumos.UploadedArtifactsByService.Test.artifacts:type_name -> chromiumos.UploadedArtifactsByService.Test.ArtifactPaths
	67, // 64: chromiumos.UploadedArtifactsByService.Firmware.artifacts:type_name -> chromiumos.UploadedArtifactsByService.Firmware.ArtifactPaths
	8,  // 65: chromiumos.UploadedArtifactsByService.Legacy.ArtifactPaths.artifact_type:type_name -> chromiumos.ArtifactsByService.Legacy.ArtifactType
	23, // 66: chromiumos.UploadedArtifactsByService.Legacy.ArtifactPaths.paths:type_name -> chromiumos.Path
	9,  // 67: chromiumos.UploadedArtifactsByService.Toolchain.ArtifactPaths.artifact_type:type_name -> chromiumos.ArtifactsByService.Toolchain.ArtifactType
	23, // 68: chromiumos.UploadedArtifactsByService.Toolchain.ArtifactPaths.paths:type_name -> chromiumos.Path
	10, // 69: chromiumos.UploadedArtifactsByService.Image.ArtifactPaths.artifact_type:type_name -> chromiumos.ArtifactsByService.Image.ArtifactType
	23, // 70: chromiumos.UploadedArtifactsByService.Image.ArtifactPaths.paths:type_name -> chromiumos.Path
	11, // 71: chromiumos.UploadedArtifactsByService.Package.ArtifactPaths.artifact_type:type_name -> chromiumos.ArtifactsByService.Package.ArtifactType
	23, // 72: chromiumos.UploadedArtifactsByService.Package.ArtifactPaths.paths:type_name -> chromiumos.Path
	12, // 73: chromiumos.UploadedArtifactsByService.Sysroot.ArtifactPaths.artifact_type:type_name -> chromiumos.ArtifactsByService.Sysroot.ArtifactType
	23, // 74: chromiumos.UploadedArtifactsByService.Sysroot.ArtifactPaths.paths:type_name -> chromiumos.Path
	13, // 75: chromiumos.UploadedArtifactsByService.Test.ArtifactPaths.artifact_type:type_name -> chromiumos.ArtifactsByService.Test.ArtifactType
	23, // 76: chromiumos.UploadedArtifactsByService.Test.ArtifactPaths.paths:type_name -> chromiumos.Path
	14, // 77: chromiumos.UploadedArtifactsByService.Firmware.ArtifactPaths.artifact_type:type_name -> chromiumos.ArtifactsByService.Firmware.ArtifactType
	23, // 78: chromiumos.UploadedArtifactsByService.Firmware.ArtifactPaths.paths:type_name -> chromiumos.Path
	3,  // 79: chromiumos.UploadedArtifactsByService.Firmware.ArtifactPaths.location:type_name -> chromiumos.FwLocation
	80, // [80:80] is the sub-list for method output_type
	80, // [80:80] is the sub-list for method input_type
	80, // [80:80] is the sub-list for extension type_name
	80, // [80:80] is the sub-list for extension extendee
	0,  // [0:80] is the sub-list for field type_name
}

func init() { file_chromiumos_common_proto_init() }
func file_chromiumos_common_proto_init() {
	if File_chromiumos_common_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_chromiumos_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildTarget); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Chroot); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Feature); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GomaConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GomaArtifacts); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PackageInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Profile); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PackageIndexInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Path); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ResultPath); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SyncedDir); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GerritChange); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitilesCommit); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UseFlag); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReleaseBuilder); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReleaseBuilders); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ProtoBytes); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PrepareForBuildAdditionalArgs); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AfdoRelease); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactProfileInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Chroot_ChrootEnv); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReleaseBuilder_Date); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ReleaseBuilder_Milestone); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Legacy); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Toolchain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Image); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Package); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Sysroot); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Test); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Firmware); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Legacy_ArtifactInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Toolchain_ArtifactInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Image_ArtifactInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Package_ArtifactInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Sysroot_ArtifactInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Test_ArtifactInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ArtifactsByService_Firmware_ArtifactInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Legacy); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Toolchain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Image); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Package); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Sysroot); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Test); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Firmware); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Legacy_ArtifactPaths); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Toolchain_ArtifactPaths); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Image_ArtifactPaths); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Package_ArtifactPaths); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Sysroot_ArtifactPaths); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Test_ArtifactPaths); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_common_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadedArtifactsByService_Firmware_ArtifactPaths); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_chromiumos_common_proto_msgTypes[14].OneofWrappers = []interface{}{
		(*ReleaseBuilder_Milestone_)(nil),
	}
	file_chromiumos_common_proto_msgTypes[17].OneofWrappers = []interface{}{
		(*PrepareForBuildAdditionalArgs_ChromeCwpProfile)(nil),
		(*PrepareForBuildAdditionalArgs_KernelVersion)(nil),
	}
	file_chromiumos_common_proto_msgTypes[19].OneofWrappers = []interface{}{
		(*ArtifactProfileInfo_ChromeCwpProfile)(nil),
		(*ArtifactProfileInfo_KernelVersion)(nil),
		(*ArtifactProfileInfo_AfdoRelease)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_chromiumos_common_proto_rawDesc,
			NumEnums:      15,
			NumMessages:   53,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_chromiumos_common_proto_goTypes,
		DependencyIndexes: file_chromiumos_common_proto_depIdxs,
		EnumInfos:         file_chromiumos_common_proto_enumTypes,
		MessageInfos:      file_chromiumos_common_proto_msgTypes,
	}.Build()
	File_chromiumos_common_proto = out.File
	file_chromiumos_common_proto_rawDesc = nil
	file_chromiumos_common_proto_goTypes = nil
	file_chromiumos_common_proto_depIdxs = nil
}
