// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

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

package suite_scheduler

import (
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	api "go.chromium.org/chromiumos/infra/proto/go/chromite/api"
	chromiumos "go.chromium.org/chromiumos/infra/proto/go/chromiumos"
	device "go.chromium.org/chromiumos/infra/proto/go/device"
	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)
)

type BranchFilter_Channel int32

const (
	BranchFilter_BRANCH_REF_NOT_SET BranchFilter_Channel = 0
	BranchFilter_MASTER             BranchFilter_Channel = 1
	BranchFilter_DEV                BranchFilter_Channel = 2
	BranchFilter_BETA               BranchFilter_Channel = 3
	BranchFilter_STABLE             BranchFilter_Channel = 4
)

// Enum value maps for BranchFilter_Channel.
var (
	BranchFilter_Channel_name = map[int32]string{
		0: "BRANCH_REF_NOT_SET",
		1: "MASTER",
		2: "DEV",
		3: "BETA",
		4: "STABLE",
	}
	BranchFilter_Channel_value = map[string]int32{
		"BRANCH_REF_NOT_SET": 0,
		"MASTER":             1,
		"DEV":                2,
		"BETA":               3,
		"STABLE":             4,
	}
)

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

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

func (BranchFilter_Channel) Descriptor() protoreflect.EnumDescriptor {
	return file_test_platform_suite_scheduler_analytics_proto_enumTypes[0].Descriptor()
}

func (BranchFilter_Channel) Type() protoreflect.EnumType {
	return &file_test_platform_suite_scheduler_analytics_proto_enumTypes[0]
}

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

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

type BranchFilter_Operator int32

const (
	BranchFilter_UNDEFINED BranchFilter_Operator = 0
	BranchFilter_EQ        BranchFilter_Operator = 1 // "=="
	BranchFilter_GE        BranchFilter_Operator = 2 // ">="
	BranchFilter_LE        BranchFilter_Operator = 3 // "<="
)

// Enum value maps for BranchFilter_Operator.
var (
	BranchFilter_Operator_name = map[int32]string{
		0: "UNDEFINED",
		1: "EQ",
		2: "GE",
		3: "LE",
	}
	BranchFilter_Operator_value = map[string]int32{
		"UNDEFINED": 0,
		"EQ":        1,
		"GE":        2,
		"LE":        3,
	}
)

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

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

func (BranchFilter_Operator) Descriptor() protoreflect.EnumDescriptor {
	return file_test_platform_suite_scheduler_analytics_proto_enumTypes[1].Descriptor()
}

func (BranchFilter_Operator) Type() protoreflect.EnumType {
	return &file_test_platform_suite_scheduler_analytics_proto_enumTypes[1]
}

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

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

// The build information queried from BuildBucket DB.
type BuildInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the build target (a.k.a. board name), e.g., "gale", "eve".
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,1,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// The milestone number (e.g. 73).
	Milestone uint32 `protobuf:"varint,2,opt,name=milestone,proto3" json:"milestone,omitempty"`
	// The chrome os version (e.g. "12240.0.0" or "").
	ChromeOsVersion string `protobuf:"bytes,3,opt,name=chrome_os_version,json=chromeOsVersion,proto3" json:"chrome_os_version,omitempty"`
	// Build type with the board name as the prefix, e.g.
	// "RELEASE" or "FIRMWARE".
	Type chromiumos.Branch_BranchType `protobuf:"varint,4,opt,name=type,proto3,enum=chromiumos.Branch_BranchType" json:"type,omitempty"`
}

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

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

func (*BuildInfo) ProtoMessage() {}

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

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

func (x *BuildInfo) GetMilestone() uint32 {
	if x != nil {
		return x.Milestone
	}
	return 0
}

func (x *BuildInfo) GetChromeOsVersion() string {
	if x != nil {
		return x.ChromeOsVersion
	}
	return ""
}

func (x *BuildInfo) GetType() chromiumos.Branch_BranchType {
	if x != nil {
		return x.Type
	}
	return chromiumos.Branch_UNSPECIFIED
}

// The firmware build information queried from BuildBucket DB.
type FirmwareBuildInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Board name.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,1,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// Build type, "RELEASE" or "FIRMWARE". Each has different form of
	// artifacts.
	Type chromiumos.Branch_BranchType `protobuf:"varint,2,opt,name=type,proto3,enum=chromiumos.Branch_BranchType" json:"type,omitempty"`
	// Relative path to the artifact file, e.g.
	// "firmware-board-12345.67.B-firmwarebranch/RFoo-1.0.0-b1e234567/board"
	// for firmware type or "board-release/R81-12766.0.0" for release type.
	Artifact *api.Artifact `protobuf:"bytes,3,opt,name=artifact,proto3" json:"artifact,omitempty"`
}

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

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

func (*FirmwareBuildInfo) ProtoMessage() {}

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

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

func (x *FirmwareBuildInfo) GetType() chromiumos.Branch_BranchType {
	if x != nil {
		return x.Type
	}
	return chromiumos.Branch_UNSPECIFIED
}

func (x *FirmwareBuildInfo) GetArtifact() *api.Artifact {
	if x != nil {
		return x.Artifact
	}
	return nil
}

// BranchFilter is a combination of channel, operator and
// lag, e.g. a filter of the form ">=tot-2" is stated as
// { channel = MASTER; operator = GE; lag = 2; };
// a filter of "==tot" is translated to
// { channel = MASTER; operator = EQ; lag = 0; }.
type BranchFilter struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Channel  BranchFilter_Channel  `protobuf:"varint,1,opt,name=channel,proto3,enum=test_platform.suite_scheduler.BranchFilter_Channel" json:"channel,omitempty"`
	Operator BranchFilter_Operator `protobuf:"varint,2,opt,name=operator,proto3,enum=test_platform.suite_scheduler.BranchFilter_Operator" json:"operator,omitempty"`
	// Number of minor versions behind tip-of-tree on channel.
	Lag int32 `protobuf:"varint,3,opt,name=lag,proto3" json:"lag,omitempty"`
}

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

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

func (*BranchFilter) ProtoMessage() {}

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

func (x *BranchFilter) GetChannel() BranchFilter_Channel {
	if x != nil {
		return x.Channel
	}
	return BranchFilter_BRANCH_REF_NOT_SET
}

func (x *BranchFilter) GetOperator() BranchFilter_Operator {
	if x != nil {
		return x.Operator
	}
	return BranchFilter_UNDEFINED
}

func (x *BranchFilter) GetLag() int32 {
	if x != nil {
		return x.Lag
	}
	return 0
}

// BuildFilters defines on which build to run a suite test.
type BuildFilters struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// If true, use the relax_builds.
	OnlyHwtestSanityRequired bool `protobuf:"varint,1,opt,name=only_hwtest_sanity_required,json=onlyHwtestSanityRequired,proto3" json:"only_hwtest_sanity_required,omitempty"`
	// BranchFilter defines the target branch of the new build.
	// Note, the final result is "AND" of each single filter.
	BranchFilters []*BranchFilter `protobuf:"bytes,2,rep,name=branch_filters,json=branchFilters,proto3" json:"branch_filters,omitempty"`
	// The firmware build type, e.g., "RELEASE" or "FIRMWARE". Note,
	// in suite scheduler, "cros" = "RELEASE".
	FirmwareRoBuildSpec chromiumos.Branch_BranchType `protobuf:"varint,3,opt,name=firmware_ro_build_spec,json=firmwareRoBuildSpec,proto3,enum=chromiumos.Branch_BranchType" json:"firmware_ro_build_spec,omitempty"`
	FirmwareRwBuildSpec chromiumos.Branch_BranchType `protobuf:"varint,4,opt,name=firmware_rw_build_spec,json=firmwareRwBuildSpec,proto3,enum=chromiumos.Branch_BranchType" json:"firmware_rw_build_spec,omitempty"`
}

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

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

func (*BuildFilters) ProtoMessage() {}

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

func (x *BuildFilters) GetOnlyHwtestSanityRequired() bool {
	if x != nil {
		return x.OnlyHwtestSanityRequired
	}
	return false
}

func (x *BuildFilters) GetBranchFilters() []*BranchFilter {
	if x != nil {
		return x.BranchFilters
	}
	return nil
}

func (x *BuildFilters) GetFirmwareRoBuildSpec() chromiumos.Branch_BranchType {
	if x != nil {
		return x.FirmwareRoBuildSpec
	}
	return chromiumos.Branch_UNSPECIFIED
}

func (x *BuildFilters) GetFirmwareRwBuildSpec() chromiumos.Branch_BranchType {
	if x != nil {
		return x.FirmwareRwBuildSpec
	}
	return chromiumos.Branch_UNSPECIFIED
}

// ScheduleJobTrigger defines the trigger to kick off a suite test.
type ScheduleJobTrigger struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to Trigger:
	//	*ScheduleJobTrigger_Weekly
	//	*ScheduleJobTrigger_Nightly
	//	*ScheduleJobTrigger_Interval
	Trigger      isScheduleJobTrigger_Trigger `protobuf_oneof:"trigger"`
	BuildFilters *BuildFilters                `protobuf:"bytes,4,opt,name=build_filters,json=buildFilters,proto3" json:"build_filters,omitempty"`
}

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

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

func (*ScheduleJobTrigger) ProtoMessage() {}

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

func (m *ScheduleJobTrigger) GetTrigger() isScheduleJobTrigger_Trigger {
	if m != nil {
		return m.Trigger
	}
	return nil
}

func (x *ScheduleJobTrigger) GetWeekly() *ScheduleJobTrigger_WeeklyTrigger {
	if x, ok := x.GetTrigger().(*ScheduleJobTrigger_Weekly); ok {
		return x.Weekly
	}
	return nil
}

func (x *ScheduleJobTrigger) GetNightly() *ScheduleJobTrigger_NightlyTrigger {
	if x, ok := x.GetTrigger().(*ScheduleJobTrigger_Nightly); ok {
		return x.Nightly
	}
	return nil
}

func (x *ScheduleJobTrigger) GetInterval() *ScheduleJobTrigger_IntervalTrigger {
	if x, ok := x.GetTrigger().(*ScheduleJobTrigger_Interval); ok {
		return x.Interval
	}
	return nil
}

func (x *ScheduleJobTrigger) GetBuildFilters() *BuildFilters {
	if x != nil {
		return x.BuildFilters
	}
	return nil
}

type isScheduleJobTrigger_Trigger interface {
	isScheduleJobTrigger_Trigger()
}

type ScheduleJobTrigger_Weekly struct {
	Weekly *ScheduleJobTrigger_WeeklyTrigger `protobuf:"bytes,1,opt,name=weekly,proto3,oneof"`
}

type ScheduleJobTrigger_Nightly struct {
	Nightly *ScheduleJobTrigger_NightlyTrigger `protobuf:"bytes,2,opt,name=nightly,proto3,oneof"`
}

type ScheduleJobTrigger_Interval struct {
	// TODO: This feature is not implemented to suite scheduler yet. So
	// if IntervalTrigger is configured, pause should be zero all the time.
	Interval *ScheduleJobTrigger_IntervalTrigger `protobuf:"bytes,3,opt,name=interval,proto3,oneof"`
}

func (*ScheduleJobTrigger_Weekly) isScheduleJobTrigger_Trigger() {}

func (*ScheduleJobTrigger_Nightly) isScheduleJobTrigger_Trigger() {}

func (*ScheduleJobTrigger_Interval) isScheduleJobTrigger_Trigger() {}

// ScheduleJob represents the schedule result for a specific board
// and model.
type ScheduleJob struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Model.
	Model *device.ModelId `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"`
	// Board.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,2,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// Types that are assignable to Result:
	//	*ScheduleJob_QueuedTaskId
	//	*ScheduleJob_Justification
	Result isScheduleJob_Result `protobuf_oneof:"result"`
	// Result generated time in UTC.
	GeneratedTime *timestamp.Timestamp `protobuf:"bytes,5,opt,name=generated_time,json=generatedTime,proto3" json:"generated_time,omitempty"`
}

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

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

func (*ScheduleJob) ProtoMessage() {}

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

func (x *ScheduleJob) GetModel() *device.ModelId {
	if x != nil {
		return x.Model
	}
	return nil
}

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

func (m *ScheduleJob) GetResult() isScheduleJob_Result {
	if m != nil {
		return m.Result
	}
	return nil
}

func (x *ScheduleJob) GetQueuedTaskId() string {
	if x, ok := x.GetResult().(*ScheduleJob_QueuedTaskId); ok {
		return x.QueuedTaskId
	}
	return ""
}

func (x *ScheduleJob) GetJustification() string {
	if x, ok := x.GetResult().(*ScheduleJob_Justification); ok {
		return x.Justification
	}
	return ""
}

func (x *ScheduleJob) GetGeneratedTime() *timestamp.Timestamp {
	if x != nil {
		return x.GeneratedTime
	}
	return nil
}

type isScheduleJob_Result interface {
	isScheduleJob_Result()
}

type ScheduleJob_QueuedTaskId struct {
	// If this job qualifies to kick off a suite test, suite scheduler
	// creates a task to the task-queue and assigns an ID for tracking
	// the execution.
	QueuedTaskId string `protobuf:"bytes,3,opt,name=queued_task_id,json=queuedTaskId,proto3,oneof"`
}

type ScheduleJob_Justification struct {
	// If the job failed to schedule a suite test, clarify the reason.
	Justification string `protobuf:"bytes,4,opt,name=justification,proto3,oneof"`
}

func (*ScheduleJob_QueuedTaskId) isScheduleJob_Result() {}

func (*ScheduleJob_Justification) isScheduleJob_Result() {}

// ScheduleJobSection represents a schedule request configured in
// suite_scheduler.ini. Varying boards and models, a job section can
// have multiple suite tests scheduled.
type ScheduleJobSection struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// job_name is the name of a schedule request defined in config,
	// e.g. “CrosAVAnalysis”.
	JobName string `protobuf:"bytes,1,opt,name=job_name,json=jobName,proto3" json:"job_name,omitempty"`
	// Trigger to run jobs under this section.
	ScheduleJobTrigger *ScheduleJobTrigger `protobuf:"bytes,2,opt,name=schedule_job_trigger,json=scheduleJobTrigger,proto3" json:"schedule_job_trigger,omitempty"`
	// Specific models to run this suite.
	Models []*device.ModelId `protobuf:"bytes,3,rep,name=models,proto3" json:"models,omitempty"`
	// Specific boards to run this suite.
	BuildTargets  []*chromiumos.BuildTarget          `protobuf:"bytes,4,rep,name=build_targets,json=buildTargets,proto3" json:"build_targets,omitempty"`
	MatchedBuilds []*ScheduleJobSection_MatchedBuild `protobuf:"bytes,5,rep,name=matched_builds,json=matchedBuilds,proto3" json:"matched_builds,omitempty"`
	// Jobs in this section.
	ScheduleJobs []*ScheduleJob `protobuf:"bytes,6,rep,name=schedule_jobs,json=scheduleJobs,proto3" json:"schedule_jobs,omitempty"`
	// The pool to run jobs in this section.
	Pool string `protobuf:"bytes,7,opt,name=pool,proto3" json:"pool,omitempty"`
	// The suite name this section to execute.
	Suite string `protobuf:"bytes,8,opt,name=suite,proto3" json:"suite,omitempty"`
}

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

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

func (*ScheduleJobSection) ProtoMessage() {}

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

func (x *ScheduleJobSection) GetJobName() string {
	if x != nil {
		return x.JobName
	}
	return ""
}

func (x *ScheduleJobSection) GetScheduleJobTrigger() *ScheduleJobTrigger {
	if x != nil {
		return x.ScheduleJobTrigger
	}
	return nil
}

func (x *ScheduleJobSection) GetModels() []*device.ModelId {
	if x != nil {
		return x.Models
	}
	return nil
}

func (x *ScheduleJobSection) GetBuildTargets() []*chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTargets
	}
	return nil
}

func (x *ScheduleJobSection) GetMatchedBuilds() []*ScheduleJobSection_MatchedBuild {
	if x != nil {
		return x.MatchedBuilds
	}
	return nil
}

func (x *ScheduleJobSection) GetScheduleJobs() []*ScheduleJob {
	if x != nil {
		return x.ScheduleJobs
	}
	return nil
}

func (x *ScheduleJobSection) GetPool() string {
	if x != nil {
		return x.Pool
	}
	return ""
}

func (x *ScheduleJobSection) GetSuite() string {
	if x != nil {
		return x.Suite
	}
	return ""
}

// The response received from cros_test_platform.
type ExecutionResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// build id used in cros_test_platform.
	CtpBuildId string `protobuf:"bytes,1,opt,name=ctp_build_id,json=ctpBuildId,proto3" json:"ctp_build_id,omitempty"`
}

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

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

func (*ExecutionResponse) ProtoMessage() {}

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

func (x *ExecutionResponse) GetCtpBuildId() string {
	if x != nil {
		return x.CtpBuildId
	}
	return ""
}

// The error message received from cros_test_platform.
type ExecutionError struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ErrorMessage string `protobuf:"bytes,1,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"`
}

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

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

func (*ExecutionError) ProtoMessage() {}

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

func (x *ExecutionError) GetErrorMessage() string {
	if x != nil {
		return x.ErrorMessage
	}
	return ""
}

// ExecutionTask bridges suite scheduler and cros_test_platform. With it,
// we could track the execution reuslt for a scheduled test.
type ExecutionTask struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The ID used in JobResult, to track suite's execution.
	QueuedTaskId string `protobuf:"bytes,1,opt,name=queued_task_id,json=queuedTaskId,proto3" json:"queued_task_id,omitempty"`
	// The scheduling result from cros_test_platform, either a build id
	// error message.
	//
	// Types that are assignable to Result:
	//	*ExecutionTask_Response
	//	*ExecutionTask_Error
	Result isExecutionTask_Result `protobuf_oneof:"result"`
	// Request sent time in UTC.
	RequestSent *timestamp.Timestamp `protobuf:"bytes,4,opt,name=request_sent,json=requestSent,proto3" json:"request_sent,omitempty"`
	// The CTP request tag for grouping several ScheduleJobs into
	// a multiple CTP request.
	RequestTag string `protobuf:"bytes,5,opt,name=request_tag,json=requestTag,proto3" json:"request_tag,omitempty"`
}

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

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

func (*ExecutionTask) ProtoMessage() {}

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

func (x *ExecutionTask) GetQueuedTaskId() string {
	if x != nil {
		return x.QueuedTaskId
	}
	return ""
}

func (m *ExecutionTask) GetResult() isExecutionTask_Result {
	if m != nil {
		return m.Result
	}
	return nil
}

func (x *ExecutionTask) GetResponse() *ExecutionResponse {
	if x, ok := x.GetResult().(*ExecutionTask_Response); ok {
		return x.Response
	}
	return nil
}

func (x *ExecutionTask) GetError() *ExecutionError {
	if x, ok := x.GetResult().(*ExecutionTask_Error); ok {
		return x.Error
	}
	return nil
}

func (x *ExecutionTask) GetRequestSent() *timestamp.Timestamp {
	if x != nil {
		return x.RequestSent
	}
	return nil
}

func (x *ExecutionTask) GetRequestTag() string {
	if x != nil {
		return x.RequestTag
	}
	return ""
}

type isExecutionTask_Result interface {
	isExecutionTask_Result()
}

type ExecutionTask_Response struct {
	Response *ExecutionResponse `protobuf:"bytes,2,opt,name=response,proto3,oneof"`
}

type ExecutionTask_Error struct {
	Error *ExecutionError `protobuf:"bytes,3,opt,name=error,proto3,oneof"`
}

func (*ExecutionTask_Response) isExecutionTask_Result() {}

func (*ExecutionTask_Error) isExecutionTask_Result() {}

// WeeklyTrigger is for the suite test running every week.
// "day" is from 0 to 6.
type ScheduleJobTrigger_WeeklyTrigger struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Day uint32 `protobuf:"varint,1,opt,name=day,proto3" json:"day,omitempty"`
}

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

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

func (*ScheduleJobTrigger_WeeklyTrigger) ProtoMessage() {}

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

func (x *ScheduleJobTrigger_WeeklyTrigger) GetDay() uint32 {
	if x != nil {
		return x.Day
	}
	return 0
}

// NightlyTrigger is for the suite test running every day.
// "hour" is from 0 to 23.
type ScheduleJobTrigger_NightlyTrigger struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Hour uint32 `protobuf:"varint,1,opt,name=hour,proto3" json:"hour,omitempty"`
}

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

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

func (*ScheduleJobTrigger_NightlyTrigger) ProtoMessage() {}

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

func (x *ScheduleJobTrigger_NightlyTrigger) GetHour() uint32 {
	if x != nil {
		return x.Hour
	}
	return 0
}

// IntervalTrigger is for the suite test running every N times the
// scheduler operates.
type ScheduleJobTrigger_IntervalTrigger struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// pause represents the number of times scheduler skips this job
	// once the job completed. If pause is zero, we pick this job
	// whenever scheduler is kicked off.
	Pause uint32 `protobuf:"varint,1,opt,name=pause,proto3" json:"pause,omitempty"`
}

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

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

func (*ScheduleJobTrigger_IntervalTrigger) ProtoMessage() {}

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

func (x *ScheduleJobTrigger_IntervalTrigger) GetPause() uint32 {
	if x != nil {
		return x.Pause
	}
	return 0
}

// The build matched with this job section on BuildTarget and BuildFilters.
type ScheduleJobSection_MatchedBuild struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to CrosBuild:
	//	*ScheduleJobSection_MatchedBuild_ReleaseBuild
	//	*ScheduleJobSection_MatchedBuild_RelaxBuild
	//	*ScheduleJobSection_MatchedBuild_FirmwareRoBuild
	//	*ScheduleJobSection_MatchedBuild_FirmwareRwBuild
	CrosBuild isScheduleJobSection_MatchedBuild_CrosBuild `protobuf_oneof:"cros_build"`
}

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

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

func (*ScheduleJobSection_MatchedBuild) ProtoMessage() {}

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

func (m *ScheduleJobSection_MatchedBuild) GetCrosBuild() isScheduleJobSection_MatchedBuild_CrosBuild {
	if m != nil {
		return m.CrosBuild
	}
	return nil
}

func (x *ScheduleJobSection_MatchedBuild) GetReleaseBuild() *BuildInfo {
	if x, ok := x.GetCrosBuild().(*ScheduleJobSection_MatchedBuild_ReleaseBuild); ok {
		return x.ReleaseBuild
	}
	return nil
}

func (x *ScheduleJobSection_MatchedBuild) GetRelaxBuild() *BuildInfo {
	if x, ok := x.GetCrosBuild().(*ScheduleJobSection_MatchedBuild_RelaxBuild); ok {
		return x.RelaxBuild
	}
	return nil
}

func (x *ScheduleJobSection_MatchedBuild) GetFirmwareRoBuild() *FirmwareBuildInfo {
	if x, ok := x.GetCrosBuild().(*ScheduleJobSection_MatchedBuild_FirmwareRoBuild); ok {
		return x.FirmwareRoBuild
	}
	return nil
}

func (x *ScheduleJobSection_MatchedBuild) GetFirmwareRwBuild() *FirmwareBuildInfo {
	if x, ok := x.GetCrosBuild().(*ScheduleJobSection_MatchedBuild_FirmwareRwBuild); ok {
		return x.FirmwareRwBuild
	}
	return nil
}

type isScheduleJobSection_MatchedBuild_CrosBuild interface {
	isScheduleJobSection_MatchedBuild_CrosBuild()
}

type ScheduleJobSection_MatchedBuild_ReleaseBuild struct {
	// The release build information.
	ReleaseBuild *BuildInfo `protobuf:"bytes,1,opt,name=release_build,json=releaseBuild,proto3,oneof"`
}

type ScheduleJobSection_MatchedBuild_RelaxBuild struct {
	// relax_builds are the builds failed but met the relaxed success
	// requirement. Relax builds are for the suite job configured
	// "only_hwtest_sanity_required: True".
	RelaxBuild *BuildInfo `protobuf:"bytes,2,opt,name=relax_build,json=relaxBuild,proto3,oneof"`
}

type ScheduleJobSection_MatchedBuild_FirmwareRoBuild struct {
	// The firmware build information.
	FirmwareRoBuild *FirmwareBuildInfo `protobuf:"bytes,3,opt,name=firmware_ro_build,json=firmwareRoBuild,proto3,oneof"`
}

type ScheduleJobSection_MatchedBuild_FirmwareRwBuild struct {
	FirmwareRwBuild *FirmwareBuildInfo `protobuf:"bytes,4,opt,name=firmware_rw_build,json=firmwareRwBuild,proto3,oneof"`
}

func (*ScheduleJobSection_MatchedBuild_ReleaseBuild) isScheduleJobSection_MatchedBuild_CrosBuild() {}

func (*ScheduleJobSection_MatchedBuild_RelaxBuild) isScheduleJobSection_MatchedBuild_CrosBuild() {}

func (*ScheduleJobSection_MatchedBuild_FirmwareRoBuild) isScheduleJobSection_MatchedBuild_CrosBuild() {
}

func (*ScheduleJobSection_MatchedBuild_FirmwareRwBuild) isScheduleJobSection_MatchedBuild_CrosBuild() {
}

var File_test_platform_suite_scheduler_analytics_proto protoreflect.FileDescriptor

var file_test_platform_suite_scheduler_analytics_proto_rawDesc = []byte{
	0x0a, 0x2d, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f,
	0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f,
	0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
	0x1d, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73,
	0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x1a, 0x1c,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc4, 0x01, 0x0a, 0x09, 0x42, 0x75, 0x69, 0x6c, 0x64,
	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3a, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61,
	0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72,
	0x67, 0x65, 0x74, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
	0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x69, 0x6c, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x12, 0x2a,
	0x0a, 0x11, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x5f, 0x6f, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73,
	0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x65, 0x4f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79,
	0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x2e, 0x42, 0x72, 0x61,
	0x6e, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb6, 0x01,
	0x0a, 0x11, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49,
	0x6e, 0x66, 0x6f, 0x12, 0x3a, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72,
	0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67,
	0x65, 0x74, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12,
	0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63,
	0x68, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79,
	0x70, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e,
	0x61, 0x70, 0x69, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x08, 0x61, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x22, 0xc2, 0x02, 0x0a, 0x0c, 0x42, 0x72, 0x61, 0x6e, 0x63,
	0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e,
	0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f,
	0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73,
	0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x46,
	0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x07, 0x63,
	0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x50, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,
	0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f,
	0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73,
	0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x46,
	0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08,
	0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x61, 0x67, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6c, 0x61, 0x67, 0x22, 0x4c, 0x0a, 0x07, 0x43, 0x68,
	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x52, 0x41, 0x4e, 0x43, 0x48, 0x5f,
	0x52, 0x45, 0x46, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a,
	0x06, 0x4d, 0x41, 0x53, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x45, 0x56,
	0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x45, 0x54, 0x41, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06,
	0x53, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x04, 0x22, 0x31, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x72,
	0x61, 0x74, 0x6f, 0x72, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45,
	0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x45, 0x51, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x47,
	0x45, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x4c, 0x45, 0x10, 0x03, 0x22, 0xc9, 0x02, 0x0a, 0x0c,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x1b,
	0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x68, 0x77, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x61, 0x6e, 0x69,
	0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x18, 0x6f, 0x6e, 0x6c, 0x79, 0x48, 0x77, 0x74, 0x65, 0x73, 0x74, 0x53, 0x61, 0x6e,
	0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x52, 0x0a, 0x0e, 0x62,
	0x72, 0x61, 0x6e, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66,
	0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75,
	0x6c, 0x65, 0x72, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72,
	0x52, 0x0d, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12,
	0x52, 0x0a, 0x16, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x6f, 0x5f, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x1d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x72, 0x61,
	0x6e, 0x63, 0x68, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x13,
	0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x52, 0x6f, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53,
	0x70, 0x65, 0x63, 0x12, 0x52, 0x0a, 0x16, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x5f,
	0x72, 0x77, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x54, 0x79,
	0x70, 0x65, 0x52, 0x13, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x52, 0x77, 0x42, 0x75,
	0x69, 0x6c, 0x64, 0x53, 0x70, 0x65, 0x63, 0x22, 0xfd, 0x03, 0x0a, 0x12, 0x53, 0x63, 0x68, 0x65,
	0x64, 0x75, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x59,
	0x0a, 0x06, 0x77, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f,
	0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73,
	0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53,
	0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65,
	0x72, 0x2e, 0x57, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x48,
	0x00, 0x52, 0x06, 0x77, 0x65, 0x65, 0x6b, 0x6c, 0x79, 0x12, 0x5c, 0x0a, 0x07, 0x6e, 0x69, 0x67,
	0x68, 0x74, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x74, 0x65, 0x73,
	0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x75, 0x69, 0x74, 0x65,
	0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64,
	0x75, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x4e, 0x69,
	0x67, 0x68, 0x74, 0x6c, 0x79, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07,
	0x6e, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x12, 0x5f, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72,
	0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x74, 0x65, 0x73, 0x74,
	0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x75, 0x69, 0x74, 0x65, 0x5f,
	0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75,
	0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x74,
	0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08,
	0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x50, 0x0a, 0x0d, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x2b, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e,
	0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0c, 0x62, 0x75,
	0x69, 0x6c, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x21, 0x0a, 0x0d, 0x57, 0x65,
	0x65, 0x6b, 0x6c, 0x79, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x64,
	0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x64, 0x61, 0x79, 0x1a, 0x24, 0x0a,
	0x0e, 0x4e, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12,
	0x12, 0x0a, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x68,
	0x6f, 0x75, 0x72, 0x1a, 0x27, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54,
	0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x75, 0x73, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x70, 0x61, 0x75, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07,
	0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x22, 0x8d, 0x02, 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65,
	0x64, 0x75, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x25, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e,
	0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x49, 0x64, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x3a,
	0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02,
	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, 0x26, 0x0a, 0x0e, 0x71, 0x75,
	0x65, 0x75, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b,
	0x49, 0x64, 0x12, 0x26, 0x0a, 0x0d, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x6a, 0x75, 0x73,
	0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0e, 0x67, 0x65,
	0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d,
	0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x08, 0x0a,
	0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xda, 0x06, 0x0a, 0x12, 0x53, 0x63, 0x68, 0x65,
	0x64, 0x75, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19,
	0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x07, 0x6a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x63, 0x0a, 0x14, 0x73, 0x63, 0x68,
	0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65,
	0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70,
	0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63,
	0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65,
	0x4a, 0x6f, 0x62, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65,
	0x64, 0x75, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x27,
	0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f,
	0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x49, 0x64, 0x52,
	0x06, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 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, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61,
	0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x65, 0x0a, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64,
	0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e,
	0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x75,
	0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63,
	0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x0d, 0x6d,
	0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x4f, 0x0a, 0x0d,
	0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x06, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66,
	0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75,
	0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x52,
	0x0c, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x12, 0x0a,
	0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x6f, 0x6f,
	0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x75, 0x69, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x05, 0x73, 0x75, 0x69, 0x74, 0x65, 0x1a, 0xfa, 0x02, 0x0a, 0x0c, 0x4d, 0x61, 0x74, 0x63,
	0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x4f, 0x0a, 0x0d, 0x72, 0x65, 0x6c, 0x65,
	0x61, 0x73, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x28, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e,
	0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x6c,
	0x65, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x0b, 0x72, 0x65, 0x6c,
	0x61, 0x78, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28,
	0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73,
	0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x61,
	0x78, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x5e, 0x0a, 0x11, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61,
	0x72, 0x65, 0x5f, 0x72, 0x6f, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x30, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
	0x6d, 0x2e, 0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65,
	0x72, 0x2e, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49,
	0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0f, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x52,
	0x6f, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x5e, 0x0a, 0x11, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61,
	0x72, 0x65, 0x5f, 0x72, 0x77, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x30, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
	0x6d, 0x2e, 0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65,
	0x72, 0x2e, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49,
	0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0f, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x52,
	0x77, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x63, 0x72, 0x6f, 0x73, 0x5f, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x22, 0x35, 0x0a, 0x11, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x74, 0x70,
	0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x0a, 0x63, 0x74, 0x70, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x0e, 0x45,
	0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x23, 0x0a,
	0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61,
	0x67, 0x65, 0x22, 0xb6, 0x02, 0x0a, 0x0d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
	0x54, 0x61, 0x73, 0x6b, 0x12, 0x24, 0x0a, 0x0e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x74,
	0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x71, 0x75,
	0x65, 0x75, 0x65, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x08, 0x72, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74,
	0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x75, 0x69,
	0x74, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x65,
	0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00,
	0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x05, 0x65, 0x72,
	0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x74, 0x65, 0x73, 0x74,
	0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x73, 0x75, 0x69, 0x74, 0x65, 0x5f,
	0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
	0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f,
	0x72, 0x12, 0x3d, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x6e,
	0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
	0x61, 0x6d, 0x70, 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x65, 0x6e, 0x74,
	0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x61,
	0x67, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x49, 0x5a, 0x47, 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, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x6c,
	0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x63, 0x68,
	0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_test_platform_suite_scheduler_analytics_proto_rawDescOnce sync.Once
	file_test_platform_suite_scheduler_analytics_proto_rawDescData = file_test_platform_suite_scheduler_analytics_proto_rawDesc
)

func file_test_platform_suite_scheduler_analytics_proto_rawDescGZIP() []byte {
	file_test_platform_suite_scheduler_analytics_proto_rawDescOnce.Do(func() {
		file_test_platform_suite_scheduler_analytics_proto_rawDescData = protoimpl.X.CompressGZIP(file_test_platform_suite_scheduler_analytics_proto_rawDescData)
	})
	return file_test_platform_suite_scheduler_analytics_proto_rawDescData
}

var file_test_platform_suite_scheduler_analytics_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_test_platform_suite_scheduler_analytics_proto_msgTypes = make([]protoimpl.MessageInfo, 14)
var file_test_platform_suite_scheduler_analytics_proto_goTypes = []interface{}{
	(BranchFilter_Channel)(0),                  // 0: test_platform.suite_scheduler.BranchFilter.Channel
	(BranchFilter_Operator)(0),                 // 1: test_platform.suite_scheduler.BranchFilter.Operator
	(*BuildInfo)(nil),                          // 2: test_platform.suite_scheduler.BuildInfo
	(*FirmwareBuildInfo)(nil),                  // 3: test_platform.suite_scheduler.FirmwareBuildInfo
	(*BranchFilter)(nil),                       // 4: test_platform.suite_scheduler.BranchFilter
	(*BuildFilters)(nil),                       // 5: test_platform.suite_scheduler.BuildFilters
	(*ScheduleJobTrigger)(nil),                 // 6: test_platform.suite_scheduler.ScheduleJobTrigger
	(*ScheduleJob)(nil),                        // 7: test_platform.suite_scheduler.ScheduleJob
	(*ScheduleJobSection)(nil),                 // 8: test_platform.suite_scheduler.ScheduleJobSection
	(*ExecutionResponse)(nil),                  // 9: test_platform.suite_scheduler.ExecutionResponse
	(*ExecutionError)(nil),                     // 10: test_platform.suite_scheduler.ExecutionError
	(*ExecutionTask)(nil),                      // 11: test_platform.suite_scheduler.ExecutionTask
	(*ScheduleJobTrigger_WeeklyTrigger)(nil),   // 12: test_platform.suite_scheduler.ScheduleJobTrigger.WeeklyTrigger
	(*ScheduleJobTrigger_NightlyTrigger)(nil),  // 13: test_platform.suite_scheduler.ScheduleJobTrigger.NightlyTrigger
	(*ScheduleJobTrigger_IntervalTrigger)(nil), // 14: test_platform.suite_scheduler.ScheduleJobTrigger.IntervalTrigger
	(*ScheduleJobSection_MatchedBuild)(nil),    // 15: test_platform.suite_scheduler.ScheduleJobSection.MatchedBuild
	(*chromiumos.BuildTarget)(nil),             // 16: chromiumos.BuildTarget
	(chromiumos.Branch_BranchType)(0),          // 17: chromiumos.Branch.BranchType
	(*api.Artifact)(nil),                       // 18: chromite.api.Artifact
	(*device.ModelId)(nil),                     // 19: device.ModelId
	(*timestamp.Timestamp)(nil),                // 20: google.protobuf.Timestamp
}
var file_test_platform_suite_scheduler_analytics_proto_depIdxs = []int32{
	16, // 0: test_platform.suite_scheduler.BuildInfo.build_target:type_name -> chromiumos.BuildTarget
	17, // 1: test_platform.suite_scheduler.BuildInfo.type:type_name -> chromiumos.Branch.BranchType
	16, // 2: test_platform.suite_scheduler.FirmwareBuildInfo.build_target:type_name -> chromiumos.BuildTarget
	17, // 3: test_platform.suite_scheduler.FirmwareBuildInfo.type:type_name -> chromiumos.Branch.BranchType
	18, // 4: test_platform.suite_scheduler.FirmwareBuildInfo.artifact:type_name -> chromite.api.Artifact
	0,  // 5: test_platform.suite_scheduler.BranchFilter.channel:type_name -> test_platform.suite_scheduler.BranchFilter.Channel
	1,  // 6: test_platform.suite_scheduler.BranchFilter.operator:type_name -> test_platform.suite_scheduler.BranchFilter.Operator
	4,  // 7: test_platform.suite_scheduler.BuildFilters.branch_filters:type_name -> test_platform.suite_scheduler.BranchFilter
	17, // 8: test_platform.suite_scheduler.BuildFilters.firmware_ro_build_spec:type_name -> chromiumos.Branch.BranchType
	17, // 9: test_platform.suite_scheduler.BuildFilters.firmware_rw_build_spec:type_name -> chromiumos.Branch.BranchType
	12, // 10: test_platform.suite_scheduler.ScheduleJobTrigger.weekly:type_name -> test_platform.suite_scheduler.ScheduleJobTrigger.WeeklyTrigger
	13, // 11: test_platform.suite_scheduler.ScheduleJobTrigger.nightly:type_name -> test_platform.suite_scheduler.ScheduleJobTrigger.NightlyTrigger
	14, // 12: test_platform.suite_scheduler.ScheduleJobTrigger.interval:type_name -> test_platform.suite_scheduler.ScheduleJobTrigger.IntervalTrigger
	5,  // 13: test_platform.suite_scheduler.ScheduleJobTrigger.build_filters:type_name -> test_platform.suite_scheduler.BuildFilters
	19, // 14: test_platform.suite_scheduler.ScheduleJob.model:type_name -> device.ModelId
	16, // 15: test_platform.suite_scheduler.ScheduleJob.build_target:type_name -> chromiumos.BuildTarget
	20, // 16: test_platform.suite_scheduler.ScheduleJob.generated_time:type_name -> google.protobuf.Timestamp
	6,  // 17: test_platform.suite_scheduler.ScheduleJobSection.schedule_job_trigger:type_name -> test_platform.suite_scheduler.ScheduleJobTrigger
	19, // 18: test_platform.suite_scheduler.ScheduleJobSection.models:type_name -> device.ModelId
	16, // 19: test_platform.suite_scheduler.ScheduleJobSection.build_targets:type_name -> chromiumos.BuildTarget
	15, // 20: test_platform.suite_scheduler.ScheduleJobSection.matched_builds:type_name -> test_platform.suite_scheduler.ScheduleJobSection.MatchedBuild
	7,  // 21: test_platform.suite_scheduler.ScheduleJobSection.schedule_jobs:type_name -> test_platform.suite_scheduler.ScheduleJob
	9,  // 22: test_platform.suite_scheduler.ExecutionTask.response:type_name -> test_platform.suite_scheduler.ExecutionResponse
	10, // 23: test_platform.suite_scheduler.ExecutionTask.error:type_name -> test_platform.suite_scheduler.ExecutionError
	20, // 24: test_platform.suite_scheduler.ExecutionTask.request_sent:type_name -> google.protobuf.Timestamp
	2,  // 25: test_platform.suite_scheduler.ScheduleJobSection.MatchedBuild.release_build:type_name -> test_platform.suite_scheduler.BuildInfo
	2,  // 26: test_platform.suite_scheduler.ScheduleJobSection.MatchedBuild.relax_build:type_name -> test_platform.suite_scheduler.BuildInfo
	3,  // 27: test_platform.suite_scheduler.ScheduleJobSection.MatchedBuild.firmware_ro_build:type_name -> test_platform.suite_scheduler.FirmwareBuildInfo
	3,  // 28: test_platform.suite_scheduler.ScheduleJobSection.MatchedBuild.firmware_rw_build:type_name -> test_platform.suite_scheduler.FirmwareBuildInfo
	29, // [29:29] is the sub-list for method output_type
	29, // [29:29] is the sub-list for method input_type
	29, // [29:29] is the sub-list for extension type_name
	29, // [29:29] is the sub-list for extension extendee
	0,  // [0:29] is the sub-list for field type_name
}

func init() { file_test_platform_suite_scheduler_analytics_proto_init() }
func file_test_platform_suite_scheduler_analytics_proto_init() {
	if File_test_platform_suite_scheduler_analytics_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FirmwareBuildInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BranchFilter); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildFilters); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ScheduleJobTrigger); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ScheduleJob); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ScheduleJobSection); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ExecutionResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ExecutionError); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ExecutionTask); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ScheduleJobTrigger_WeeklyTrigger); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ScheduleJobTrigger_NightlyTrigger); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ScheduleJobTrigger_IntervalTrigger); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_test_platform_suite_scheduler_analytics_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ScheduleJobSection_MatchedBuild); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_test_platform_suite_scheduler_analytics_proto_msgTypes[4].OneofWrappers = []interface{}{
		(*ScheduleJobTrigger_Weekly)(nil),
		(*ScheduleJobTrigger_Nightly)(nil),
		(*ScheduleJobTrigger_Interval)(nil),
	}
	file_test_platform_suite_scheduler_analytics_proto_msgTypes[5].OneofWrappers = []interface{}{
		(*ScheduleJob_QueuedTaskId)(nil),
		(*ScheduleJob_Justification)(nil),
	}
	file_test_platform_suite_scheduler_analytics_proto_msgTypes[9].OneofWrappers = []interface{}{
		(*ExecutionTask_Response)(nil),
		(*ExecutionTask_Error)(nil),
	}
	file_test_platform_suite_scheduler_analytics_proto_msgTypes[13].OneofWrappers = []interface{}{
		(*ScheduleJobSection_MatchedBuild_ReleaseBuild)(nil),
		(*ScheduleJobSection_MatchedBuild_RelaxBuild)(nil),
		(*ScheduleJobSection_MatchedBuild_FirmwareRoBuild)(nil),
		(*ScheduleJobSection_MatchedBuild_FirmwareRwBuild)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_test_platform_suite_scheduler_analytics_proto_rawDesc,
			NumEnums:      2,
			NumMessages:   14,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_test_platform_suite_scheduler_analytics_proto_goTypes,
		DependencyIndexes: file_test_platform_suite_scheduler_analytics_proto_depIdxs,
		EnumInfos:         file_test_platform_suite_scheduler_analytics_proto_enumTypes,
		MessageInfos:      file_test_platform_suite_scheduler_analytics_proto_msgTypes,
	}.Build()
	File_test_platform_suite_scheduler_analytics_proto = out.File
	file_test_platform_suite_scheduler_analytics_proto_rawDesc = nil
	file_test_platform_suite_scheduler_analytics_proto_goTypes = nil
	file_test_platform_suite_scheduler_analytics_proto_depIdxs = nil
}
