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

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.26.0
// 	protoc        v3.12.2
// source: google/cloud/dataplex/v1/resources.proto

package dataplexpb

import (
	reflect "reflect"
	sync "sync"

	duration "github.com/golang/protobuf/ptypes/duration"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)

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

// State of a resource.
type State int32

const (
	// State is not specified.
	State_STATE_UNSPECIFIED State = 0
	// Resource is active, i.e., ready to use.
	State_ACTIVE State = 1
	// Resource is under creation.
	State_CREATING State = 2
	// Resource is under deletion.
	State_DELETING State = 3
	// Resource is active but has unresolved actions.
	State_ACTION_REQUIRED State = 4
)

// Enum value maps for State.
var (
	State_name = map[int32]string{
		0: "STATE_UNSPECIFIED",
		1: "ACTIVE",
		2: "CREATING",
		3: "DELETING",
		4: "ACTION_REQUIRED",
	}
	State_value = map[string]int32{
		"STATE_UNSPECIFIED": 0,
		"ACTIVE":            1,
		"CREATING":          2,
		"DELETING":          3,
		"ACTION_REQUIRED":   4,
	}
)

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

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

func (State) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[0].Descriptor()
}

func (State) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[0]
}

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

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

// Current state of association.
type Lake_MetastoreStatus_State int32

const (
	// Unspecified.
	Lake_MetastoreStatus_STATE_UNSPECIFIED Lake_MetastoreStatus_State = 0
	// A Metastore service instance is not associated with the lake.
	Lake_MetastoreStatus_NONE Lake_MetastoreStatus_State = 1
	// A Metastore service instance is attached to the lake.
	Lake_MetastoreStatus_READY Lake_MetastoreStatus_State = 2
	// Attach/detach is in progress.
	Lake_MetastoreStatus_UPDATING Lake_MetastoreStatus_State = 3
	// Attach/detach could not be done due to errors.
	Lake_MetastoreStatus_ERROR Lake_MetastoreStatus_State = 4
)

// Enum value maps for Lake_MetastoreStatus_State.
var (
	Lake_MetastoreStatus_State_name = map[int32]string{
		0: "STATE_UNSPECIFIED",
		1: "NONE",
		2: "READY",
		3: "UPDATING",
		4: "ERROR",
	}
	Lake_MetastoreStatus_State_value = map[string]int32{
		"STATE_UNSPECIFIED": 0,
		"NONE":              1,
		"READY":             2,
		"UPDATING":          3,
		"ERROR":             4,
	}
)

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

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

func (Lake_MetastoreStatus_State) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[1].Descriptor()
}

func (Lake_MetastoreStatus_State) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[1]
}

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

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

// Type of zone.
type Zone_Type int32

const (
	// Zone type not specified.
	Zone_TYPE_UNSPECIFIED Zone_Type = 0
	// A zone that contains data that needs further processing before it is
	// considered generally ready for consumption and analytics workloads.
	Zone_RAW Zone_Type = 1
	// A zone that contains data that is considered to be ready for broader
	// consumption and analytics workloads. Curated structured data stored in
	// Cloud Storage must conform to certain file formats (parquet, avro and
	// orc) and organized in a hive-compatible directory layout.
	Zone_CURATED Zone_Type = 2
)

// Enum value maps for Zone_Type.
var (
	Zone_Type_name = map[int32]string{
		0: "TYPE_UNSPECIFIED",
		1: "RAW",
		2: "CURATED",
	}
	Zone_Type_value = map[string]int32{
		"TYPE_UNSPECIFIED": 0,
		"RAW":              1,
		"CURATED":          2,
	}
)

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

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

func (Zone_Type) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[2].Descriptor()
}

func (Zone_Type) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[2]
}

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

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

// Location type of the resources attached to a zone.
type Zone_ResourceSpec_LocationType int32

const (
	// Unspecified location type.
	Zone_ResourceSpec_LOCATION_TYPE_UNSPECIFIED Zone_ResourceSpec_LocationType = 0
	// Resources that are associated with a single region.
	Zone_ResourceSpec_SINGLE_REGION Zone_ResourceSpec_LocationType = 1
	// Resources that are associated with a multi-region location.
	Zone_ResourceSpec_MULTI_REGION Zone_ResourceSpec_LocationType = 2
)

// Enum value maps for Zone_ResourceSpec_LocationType.
var (
	Zone_ResourceSpec_LocationType_name = map[int32]string{
		0: "LOCATION_TYPE_UNSPECIFIED",
		1: "SINGLE_REGION",
		2: "MULTI_REGION",
	}
	Zone_ResourceSpec_LocationType_value = map[string]int32{
		"LOCATION_TYPE_UNSPECIFIED": 0,
		"SINGLE_REGION":             1,
		"MULTI_REGION":              2,
	}
)

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

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

func (Zone_ResourceSpec_LocationType) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[3].Descriptor()
}

func (Zone_ResourceSpec_LocationType) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[3]
}

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

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

// The category of issues.
type Action_Category int32

const (
	// Unspecified category.
	Action_CATEGORY_UNSPECIFIED Action_Category = 0
	// Resource management related issues.
	Action_RESOURCE_MANAGEMENT Action_Category = 1
	// Security policy related issues.
	Action_SECURITY_POLICY Action_Category = 2
	// Data and discovery related issues.
	Action_DATA_DISCOVERY Action_Category = 3
)

// Enum value maps for Action_Category.
var (
	Action_Category_name = map[int32]string{
		0: "CATEGORY_UNSPECIFIED",
		1: "RESOURCE_MANAGEMENT",
		2: "SECURITY_POLICY",
		3: "DATA_DISCOVERY",
	}
	Action_Category_value = map[string]int32{
		"CATEGORY_UNSPECIFIED": 0,
		"RESOURCE_MANAGEMENT":  1,
		"SECURITY_POLICY":      2,
		"DATA_DISCOVERY":       3,
	}
)

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

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

func (Action_Category) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[4].Descriptor()
}

func (Action_Category) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[4]
}

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

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

// Whether the action relates to a schema that is incompatible or modified.
type Action_IncompatibleDataSchema_SchemaChange int32

const (
	// Schema change unspecified.
	Action_IncompatibleDataSchema_SCHEMA_CHANGE_UNSPECIFIED Action_IncompatibleDataSchema_SchemaChange = 0
	// Newly discovered schema is incompatible with existing schema.
	Action_IncompatibleDataSchema_INCOMPATIBLE Action_IncompatibleDataSchema_SchemaChange = 1
	// Newly discovered schema has changed from existing schema for data in a
	// curated zone.
	Action_IncompatibleDataSchema_MODIFIED Action_IncompatibleDataSchema_SchemaChange = 2
)

// Enum value maps for Action_IncompatibleDataSchema_SchemaChange.
var (
	Action_IncompatibleDataSchema_SchemaChange_name = map[int32]string{
		0: "SCHEMA_CHANGE_UNSPECIFIED",
		1: "INCOMPATIBLE",
		2: "MODIFIED",
	}
	Action_IncompatibleDataSchema_SchemaChange_value = map[string]int32{
		"SCHEMA_CHANGE_UNSPECIFIED": 0,
		"INCOMPATIBLE":              1,
		"MODIFIED":                  2,
	}
)

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

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

func (Action_IncompatibleDataSchema_SchemaChange) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[5].Descriptor()
}

func (Action_IncompatibleDataSchema_SchemaChange) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[5]
}

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

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

// The expected partition structure.
type Action_InvalidDataPartition_PartitionStructure int32

const (
	// PartitionStructure unspecified.
	Action_InvalidDataPartition_PARTITION_STRUCTURE_UNSPECIFIED Action_InvalidDataPartition_PartitionStructure = 0
	// Consistent hive-style partition definition (both raw and curated zone).
	Action_InvalidDataPartition_CONSISTENT_KEYS Action_InvalidDataPartition_PartitionStructure = 1
	// Hive style partition definition (curated zone only).
	Action_InvalidDataPartition_HIVE_STYLE_KEYS Action_InvalidDataPartition_PartitionStructure = 2
)

// Enum value maps for Action_InvalidDataPartition_PartitionStructure.
var (
	Action_InvalidDataPartition_PartitionStructure_name = map[int32]string{
		0: "PARTITION_STRUCTURE_UNSPECIFIED",
		1: "CONSISTENT_KEYS",
		2: "HIVE_STYLE_KEYS",
	}
	Action_InvalidDataPartition_PartitionStructure_value = map[string]int32{
		"PARTITION_STRUCTURE_UNSPECIFIED": 0,
		"CONSISTENT_KEYS":                 1,
		"HIVE_STYLE_KEYS":                 2,
	}
)

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

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

func (Action_InvalidDataPartition_PartitionStructure) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[6].Descriptor()
}

func (Action_InvalidDataPartition_PartitionStructure) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[6]
}

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

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

// The state of the security policy.
type Asset_SecurityStatus_State int32

const (
	// State unspecified.
	Asset_SecurityStatus_STATE_UNSPECIFIED Asset_SecurityStatus_State = 0
	// Security policy has been successfully applied to the attached resource.
	Asset_SecurityStatus_READY Asset_SecurityStatus_State = 1
	// Security policy is in the process of being applied to the attached
	// resource.
	Asset_SecurityStatus_APPLYING Asset_SecurityStatus_State = 2
	// Security policy could not be applied to the attached resource due to
	// errors.
	Asset_SecurityStatus_ERROR Asset_SecurityStatus_State = 3
)

// Enum value maps for Asset_SecurityStatus_State.
var (
	Asset_SecurityStatus_State_name = map[int32]string{
		0: "STATE_UNSPECIFIED",
		1: "READY",
		2: "APPLYING",
		3: "ERROR",
	}
	Asset_SecurityStatus_State_value = map[string]int32{
		"STATE_UNSPECIFIED": 0,
		"READY":             1,
		"APPLYING":          2,
		"ERROR":             3,
	}
)

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

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

func (Asset_SecurityStatus_State) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[7].Descriptor()
}

func (Asset_SecurityStatus_State) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[7]
}

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

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

// Type of resource.
type Asset_ResourceSpec_Type int32

const (
	// Type not specified.
	Asset_ResourceSpec_TYPE_UNSPECIFIED Asset_ResourceSpec_Type = 0
	// Cloud Storage bucket.
	Asset_ResourceSpec_STORAGE_BUCKET Asset_ResourceSpec_Type = 1
	// BigQuery dataset.
	Asset_ResourceSpec_BIGQUERY_DATASET Asset_ResourceSpec_Type = 2
)

// Enum value maps for Asset_ResourceSpec_Type.
var (
	Asset_ResourceSpec_Type_name = map[int32]string{
		0: "TYPE_UNSPECIFIED",
		1: "STORAGE_BUCKET",
		2: "BIGQUERY_DATASET",
	}
	Asset_ResourceSpec_Type_value = map[string]int32{
		"TYPE_UNSPECIFIED": 0,
		"STORAGE_BUCKET":   1,
		"BIGQUERY_DATASET": 2,
	}
)

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

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

func (Asset_ResourceSpec_Type) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[8].Descriptor()
}

func (Asset_ResourceSpec_Type) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[8]
}

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

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

// The state of a resource.
type Asset_ResourceStatus_State int32

const (
	// State unspecified.
	Asset_ResourceStatus_STATE_UNSPECIFIED Asset_ResourceStatus_State = 0
	// Resource does not have any errors.
	Asset_ResourceStatus_READY Asset_ResourceStatus_State = 1
	// Resource has errors.
	Asset_ResourceStatus_ERROR Asset_ResourceStatus_State = 2
)

// Enum value maps for Asset_ResourceStatus_State.
var (
	Asset_ResourceStatus_State_name = map[int32]string{
		0: "STATE_UNSPECIFIED",
		1: "READY",
		2: "ERROR",
	}
	Asset_ResourceStatus_State_value = map[string]int32{
		"STATE_UNSPECIFIED": 0,
		"READY":             1,
		"ERROR":             2,
	}
)

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

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

func (Asset_ResourceStatus_State) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[9].Descriptor()
}

func (Asset_ResourceStatus_State) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[9]
}

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

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

// Current state of discovery.
type Asset_DiscoveryStatus_State int32

const (
	// State is unspecified.
	Asset_DiscoveryStatus_STATE_UNSPECIFIED Asset_DiscoveryStatus_State = 0
	// Discovery for the asset is scheduled.
	Asset_DiscoveryStatus_SCHEDULED Asset_DiscoveryStatus_State = 1
	// Discovery for the asset is running.
	Asset_DiscoveryStatus_IN_PROGRESS Asset_DiscoveryStatus_State = 2
	// Discovery for the asset is currently paused (e.g. due to a lack
	// of available resources). It will be automatically resumed.
	Asset_DiscoveryStatus_PAUSED Asset_DiscoveryStatus_State = 3
	// Discovery for the asset is disabled.
	Asset_DiscoveryStatus_DISABLED Asset_DiscoveryStatus_State = 5
)

// Enum value maps for Asset_DiscoveryStatus_State.
var (
	Asset_DiscoveryStatus_State_name = map[int32]string{
		0: "STATE_UNSPECIFIED",
		1: "SCHEDULED",
		2: "IN_PROGRESS",
		3: "PAUSED",
		5: "DISABLED",
	}
	Asset_DiscoveryStatus_State_value = map[string]int32{
		"STATE_UNSPECIFIED": 0,
		"SCHEDULED":         1,
		"IN_PROGRESS":       2,
		"PAUSED":            3,
		"DISABLED":          5,
	}
)

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

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

func (Asset_DiscoveryStatus_State) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_dataplex_v1_resources_proto_enumTypes[10].Descriptor()
}

func (Asset_DiscoveryStatus_State) Type() protoreflect.EnumType {
	return &file_google_cloud_dataplex_v1_resources_proto_enumTypes[10]
}

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

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

// A lake is a centralized repository for managing enterprise data across the
// organization distributed across many cloud projects, and stored in a variety
// of storage services such as Google Cloud Storage and BigQuery. The resources
// attached to a lake are referred to as managed resources. Data within these
// managed resources can be structured or unstructured. A lake provides data
// admins with tools to organize, secure and manage their data at scale, and
// provides data scientists and data engineers an integrated experience to
// easily search, discover, analyze and transform data and associated metadata.
type Lake struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Output only. The relative resource name of the lake, of the form:
	// `projects/{project_number}/locations/{location_id}/lakes/{lake_id}`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Optional. User friendly display name.
	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// Output only. System generated globally unique ID for the lake. This ID will be
	// different if the lake is deleted and re-created with the same name.
	Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"`
	// Output only. The time when the lake was created.
	CreateTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
	// Output only. The time when the lake was last updated.
	UpdateTime *timestamp.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
	// Optional. User-defined labels for the lake.
	Labels map[string]string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Optional. Description of the lake.
	Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"`
	// Output only. Current state of the lake.
	State State `protobuf:"varint,8,opt,name=state,proto3,enum=google.cloud.dataplex.v1.State" json:"state,omitempty"`
	// Output only. Service account associated with this lake. This service account must be
	// authorized to access or operate on resources managed by the lake.
	ServiceAccount string `protobuf:"bytes,9,opt,name=service_account,json=serviceAccount,proto3" json:"service_account,omitempty"`
	// Optional. Settings to manage lake and Dataproc Metastore service instance
	// association.
	Metastore *Lake_Metastore `protobuf:"bytes,102,opt,name=metastore,proto3" json:"metastore,omitempty"`
	// Output only. Aggregated status of the underlying assets of the lake.
	AssetStatus *AssetStatus `protobuf:"bytes,103,opt,name=asset_status,json=assetStatus,proto3" json:"asset_status,omitempty"`
	// Output only. Metastore status of the lake.
	MetastoreStatus *Lake_MetastoreStatus `protobuf:"bytes,104,opt,name=metastore_status,json=metastoreStatus,proto3" json:"metastore_status,omitempty"`
}

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

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

func (*Lake) ProtoMessage() {}

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

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

func (x *Lake) GetDisplayName() string {
	if x != nil {
		return x.DisplayName
	}
	return ""
}

func (x *Lake) GetUid() string {
	if x != nil {
		return x.Uid
	}
	return ""
}

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

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

func (x *Lake) GetLabels() map[string]string {
	if x != nil {
		return x.Labels
	}
	return nil
}

func (x *Lake) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *Lake) GetState() State {
	if x != nil {
		return x.State
	}
	return State_STATE_UNSPECIFIED
}

func (x *Lake) GetServiceAccount() string {
	if x != nil {
		return x.ServiceAccount
	}
	return ""
}

func (x *Lake) GetMetastore() *Lake_Metastore {
	if x != nil {
		return x.Metastore
	}
	return nil
}

func (x *Lake) GetAssetStatus() *AssetStatus {
	if x != nil {
		return x.AssetStatus
	}
	return nil
}

func (x *Lake) GetMetastoreStatus() *Lake_MetastoreStatus {
	if x != nil {
		return x.MetastoreStatus
	}
	return nil
}

// Aggregated status of the underlying assets of a lake or zone.
type AssetStatus struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Last update time of the status.
	UpdateTime *timestamp.Timestamp `protobuf:"bytes,1,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
	// Number of active assets.
	ActiveAssets int32 `protobuf:"varint,2,opt,name=active_assets,json=activeAssets,proto3" json:"active_assets,omitempty"`
	// Number of assets that are in process of updating the security policy on
	// attached resources.
	SecurityPolicyApplyingAssets int32 `protobuf:"varint,3,opt,name=security_policy_applying_assets,json=securityPolicyApplyingAssets,proto3" json:"security_policy_applying_assets,omitempty"`
}

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

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

func (*AssetStatus) ProtoMessage() {}

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

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

func (x *AssetStatus) GetActiveAssets() int32 {
	if x != nil {
		return x.ActiveAssets
	}
	return 0
}

func (x *AssetStatus) GetSecurityPolicyApplyingAssets() int32 {
	if x != nil {
		return x.SecurityPolicyApplyingAssets
	}
	return 0
}

// A zone represents a logical group of related assets within a lake. A zone can
// be used to map to organizational structure or represent stages of data
// readiness from raw to curated. It provides managing behavior that is shared
// or inherited by all contained assets.
type Zone struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Output only. The relative resource name of the zone, of the form:
	// `projects/{project_number}/locations/{location_id}/lakes/{lake_id}/zones/{zone_id}`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Optional. User friendly display name.
	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// Output only. System generated globally unique ID for the zone. This ID will be
	// different if the zone is deleted and re-created with the same name.
	Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"`
	// Output only. The time when the zone was created.
	CreateTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
	// Output only. The time when the zone was last updated.
	UpdateTime *timestamp.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
	// Optional. User defined labels for the zone.
	Labels map[string]string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Optional. Description of the zone.
	Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"`
	// Output only. Current state of the zone.
	State State `protobuf:"varint,8,opt,name=state,proto3,enum=google.cloud.dataplex.v1.State" json:"state,omitempty"`
	// Required. Immutable. The type of the zone.
	Type Zone_Type `protobuf:"varint,9,opt,name=type,proto3,enum=google.cloud.dataplex.v1.Zone_Type" json:"type,omitempty"`
	// Optional. Specification of the discovery feature applied to data in this zone.
	DiscoverySpec *Zone_DiscoverySpec `protobuf:"bytes,103,opt,name=discovery_spec,json=discoverySpec,proto3" json:"discovery_spec,omitempty"`
	// Required. Specification of the resources that are referenced by the assets within
	// this zone.
	ResourceSpec *Zone_ResourceSpec `protobuf:"bytes,104,opt,name=resource_spec,json=resourceSpec,proto3" json:"resource_spec,omitempty"`
	// Output only. Aggregated status of the underlying assets of the zone.
	AssetStatus *AssetStatus `protobuf:"bytes,105,opt,name=asset_status,json=assetStatus,proto3" json:"asset_status,omitempty"`
}

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

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

func (*Zone) ProtoMessage() {}

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

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

func (x *Zone) GetDisplayName() string {
	if x != nil {
		return x.DisplayName
	}
	return ""
}

func (x *Zone) GetUid() string {
	if x != nil {
		return x.Uid
	}
	return ""
}

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

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

func (x *Zone) GetLabels() map[string]string {
	if x != nil {
		return x.Labels
	}
	return nil
}

func (x *Zone) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *Zone) GetState() State {
	if x != nil {
		return x.State
	}
	return State_STATE_UNSPECIFIED
}

func (x *Zone) GetType() Zone_Type {
	if x != nil {
		return x.Type
	}
	return Zone_TYPE_UNSPECIFIED
}

func (x *Zone) GetDiscoverySpec() *Zone_DiscoverySpec {
	if x != nil {
		return x.DiscoverySpec
	}
	return nil
}

func (x *Zone) GetResourceSpec() *Zone_ResourceSpec {
	if x != nil {
		return x.ResourceSpec
	}
	return nil
}

func (x *Zone) GetAssetStatus() *AssetStatus {
	if x != nil {
		return x.AssetStatus
	}
	return nil
}

// Action represents an issue requiring administrator action for resolution.
type Action struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The category of issue associated with the action.
	Category Action_Category `protobuf:"varint,1,opt,name=category,proto3,enum=google.cloud.dataplex.v1.Action_Category" json:"category,omitempty"`
	// Detailed description of the issue requiring action.
	Issue string `protobuf:"bytes,2,opt,name=issue,proto3" json:"issue,omitempty"`
	// The time that the issue was detected.
	DetectTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=detect_time,json=detectTime,proto3" json:"detect_time,omitempty"`
	// Output only. The relative resource name of the action, of the form:
	// `projects/{project}/locations/{location}/lakes/{lake}/actions/{action}`
	// `projects/{project}/locations/{location}/lakes/{lake}/zones/{zone}/actions/{action}`
	// `projects/{project}/locations/{location}/lakes/{lake}/zones/{zone}/assets/{asset}/actions/{action}`.
	Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
	// Output only. The relative resource name of the lake, of the form:
	// `projects/{project_number}/locations/{location_id}/lakes/{lake_id}`.
	Lake string `protobuf:"bytes,6,opt,name=lake,proto3" json:"lake,omitempty"`
	// Output only. The relative resource name of the zone, of the form:
	// `projects/{project_number}/locations/{location_id}/lakes/{lake_id}/zones/{zone_id}`.
	Zone string `protobuf:"bytes,7,opt,name=zone,proto3" json:"zone,omitempty"`
	// Output only. The relative resource name of the asset, of the form:
	// `projects/{project_number}/locations/{location_id}/lakes/{lake_id}/zones/{zone_id}/assets/{asset_id}`.
	Asset string `protobuf:"bytes,8,opt,name=asset,proto3" json:"asset,omitempty"`
	// The list of data locations associated with this action. Cloud Storage
	// locations are represented as URI paths(E.g.
	// `gs://bucket/table1/year=2020/month=Jan/`). BigQuery locations refer to
	// resource names(E.g.
	// `bigquery.googleapis.com/projects/project-id/datasets/dataset-id`).
	DataLocations []string `protobuf:"bytes,9,rep,name=data_locations,json=dataLocations,proto3" json:"data_locations,omitempty"`
	// Additional details about the action based on the action category.
	//
	// Types that are assignable to Details:
	//
	//	*Action_InvalidDataFormat_
	//	*Action_IncompatibleDataSchema_
	//	*Action_InvalidDataPartition_
	//	*Action_MissingData_
	//	*Action_MissingResource_
	//	*Action_UnauthorizedResource_
	//	*Action_FailedSecurityPolicyApply_
	//	*Action_InvalidDataOrganization_
	Details isAction_Details `protobuf_oneof:"details"`
}

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

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

func (*Action) ProtoMessage() {}

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

func (x *Action) GetCategory() Action_Category {
	if x != nil {
		return x.Category
	}
	return Action_CATEGORY_UNSPECIFIED
}

func (x *Action) GetIssue() string {
	if x != nil {
		return x.Issue
	}
	return ""
}

func (x *Action) GetDetectTime() *timestamp.Timestamp {
	if x != nil {
		return x.DetectTime
	}
	return nil
}

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

func (x *Action) GetLake() string {
	if x != nil {
		return x.Lake
	}
	return ""
}

func (x *Action) GetZone() string {
	if x != nil {
		return x.Zone
	}
	return ""
}

func (x *Action) GetAsset() string {
	if x != nil {
		return x.Asset
	}
	return ""
}

func (x *Action) GetDataLocations() []string {
	if x != nil {
		return x.DataLocations
	}
	return nil
}

func (m *Action) GetDetails() isAction_Details {
	if m != nil {
		return m.Details
	}
	return nil
}

func (x *Action) GetInvalidDataFormat() *Action_InvalidDataFormat {
	if x, ok := x.GetDetails().(*Action_InvalidDataFormat_); ok {
		return x.InvalidDataFormat
	}
	return nil
}

func (x *Action) GetIncompatibleDataSchema() *Action_IncompatibleDataSchema {
	if x, ok := x.GetDetails().(*Action_IncompatibleDataSchema_); ok {
		return x.IncompatibleDataSchema
	}
	return nil
}

func (x *Action) GetInvalidDataPartition() *Action_InvalidDataPartition {
	if x, ok := x.GetDetails().(*Action_InvalidDataPartition_); ok {
		return x.InvalidDataPartition
	}
	return nil
}

func (x *Action) GetMissingData() *Action_MissingData {
	if x, ok := x.GetDetails().(*Action_MissingData_); ok {
		return x.MissingData
	}
	return nil
}

func (x *Action) GetMissingResource() *Action_MissingResource {
	if x, ok := x.GetDetails().(*Action_MissingResource_); ok {
		return x.MissingResource
	}
	return nil
}

func (x *Action) GetUnauthorizedResource() *Action_UnauthorizedResource {
	if x, ok := x.GetDetails().(*Action_UnauthorizedResource_); ok {
		return x.UnauthorizedResource
	}
	return nil
}

func (x *Action) GetFailedSecurityPolicyApply() *Action_FailedSecurityPolicyApply {
	if x, ok := x.GetDetails().(*Action_FailedSecurityPolicyApply_); ok {
		return x.FailedSecurityPolicyApply
	}
	return nil
}

func (x *Action) GetInvalidDataOrganization() *Action_InvalidDataOrganization {
	if x, ok := x.GetDetails().(*Action_InvalidDataOrganization_); ok {
		return x.InvalidDataOrganization
	}
	return nil
}

type isAction_Details interface {
	isAction_Details()
}

type Action_InvalidDataFormat_ struct {
	// Details for issues related to invalid or unsupported data formats.
	InvalidDataFormat *Action_InvalidDataFormat `protobuf:"bytes,10,opt,name=invalid_data_format,json=invalidDataFormat,proto3,oneof"`
}

type Action_IncompatibleDataSchema_ struct {
	// Details for issues related to incompatible schemas detected within data.
	IncompatibleDataSchema *Action_IncompatibleDataSchema `protobuf:"bytes,11,opt,name=incompatible_data_schema,json=incompatibleDataSchema,proto3,oneof"`
}

type Action_InvalidDataPartition_ struct {
	// Details for issues related to invalid or unsupported data partition
	// structure.
	InvalidDataPartition *Action_InvalidDataPartition `protobuf:"bytes,12,opt,name=invalid_data_partition,json=invalidDataPartition,proto3,oneof"`
}

type Action_MissingData_ struct {
	// Details for issues related to absence of data within managed resources.
	MissingData *Action_MissingData `protobuf:"bytes,13,opt,name=missing_data,json=missingData,proto3,oneof"`
}

type Action_MissingResource_ struct {
	// Details for issues related to absence of a managed resource.
	MissingResource *Action_MissingResource `protobuf:"bytes,14,opt,name=missing_resource,json=missingResource,proto3,oneof"`
}

type Action_UnauthorizedResource_ struct {
	// Details for issues related to lack of permissions to access data
	// resources.
	UnauthorizedResource *Action_UnauthorizedResource `protobuf:"bytes,15,opt,name=unauthorized_resource,json=unauthorizedResource,proto3,oneof"`
}

type Action_FailedSecurityPolicyApply_ struct {
	// Details for issues related to applying security policy.
	FailedSecurityPolicyApply *Action_FailedSecurityPolicyApply `protobuf:"bytes,21,opt,name=failed_security_policy_apply,json=failedSecurityPolicyApply,proto3,oneof"`
}

type Action_InvalidDataOrganization_ struct {
	// Details for issues related to invalid data arrangement.
	InvalidDataOrganization *Action_InvalidDataOrganization `protobuf:"bytes,22,opt,name=invalid_data_organization,json=invalidDataOrganization,proto3,oneof"`
}

func (*Action_InvalidDataFormat_) isAction_Details() {}

func (*Action_IncompatibleDataSchema_) isAction_Details() {}

func (*Action_InvalidDataPartition_) isAction_Details() {}

func (*Action_MissingData_) isAction_Details() {}

func (*Action_MissingResource_) isAction_Details() {}

func (*Action_UnauthorizedResource_) isAction_Details() {}

func (*Action_FailedSecurityPolicyApply_) isAction_Details() {}

func (*Action_InvalidDataOrganization_) isAction_Details() {}

// An asset represents a cloud resource that is being managed within a lake as a
// member of a zone.
type Asset struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Output only. The relative resource name of the asset, of the form:
	// `projects/{project_number}/locations/{location_id}/lakes/{lake_id}/zones/{zone_id}/assets/{asset_id}`.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Optional. User friendly display name.
	DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
	// Output only. System generated globally unique ID for the asset. This ID will be
	// different if the asset is deleted and re-created with the same name.
	Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"`
	// Output only. The time when the asset was created.
	CreateTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"`
	// Output only. The time when the asset was last updated.
	UpdateTime *timestamp.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
	// Optional. User defined labels for the asset.
	Labels map[string]string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Optional. Description of the asset.
	Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"`
	// Output only. Current state of the asset.
	State State `protobuf:"varint,8,opt,name=state,proto3,enum=google.cloud.dataplex.v1.State" json:"state,omitempty"`
	// Required. Specification of the resource that is referenced by this asset.
	ResourceSpec *Asset_ResourceSpec `protobuf:"bytes,100,opt,name=resource_spec,json=resourceSpec,proto3" json:"resource_spec,omitempty"`
	// Output only. Status of the resource referenced by this asset.
	ResourceStatus *Asset_ResourceStatus `protobuf:"bytes,101,opt,name=resource_status,json=resourceStatus,proto3" json:"resource_status,omitempty"`
	// Output only. Status of the security policy applied to resource referenced by this asset.
	SecurityStatus *Asset_SecurityStatus `protobuf:"bytes,103,opt,name=security_status,json=securityStatus,proto3" json:"security_status,omitempty"`
	// Optional. Specification of the discovery feature applied to data referenced by this
	// asset.
	// When this spec is left unset, the asset will use the spec set on the parent
	// zone.
	DiscoverySpec *Asset_DiscoverySpec `protobuf:"bytes,106,opt,name=discovery_spec,json=discoverySpec,proto3" json:"discovery_spec,omitempty"`
	// Output only. Status of the discovery feature applied to data referenced by this asset.
	DiscoveryStatus *Asset_DiscoveryStatus `protobuf:"bytes,107,opt,name=discovery_status,json=discoveryStatus,proto3" json:"discovery_status,omitempty"`
}

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

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

func (*Asset) ProtoMessage() {}

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

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

func (x *Asset) GetDisplayName() string {
	if x != nil {
		return x.DisplayName
	}
	return ""
}

func (x *Asset) GetUid() string {
	if x != nil {
		return x.Uid
	}
	return ""
}

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

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

func (x *Asset) GetLabels() map[string]string {
	if x != nil {
		return x.Labels
	}
	return nil
}

func (x *Asset) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *Asset) GetState() State {
	if x != nil {
		return x.State
	}
	return State_STATE_UNSPECIFIED
}

func (x *Asset) GetResourceSpec() *Asset_ResourceSpec {
	if x != nil {
		return x.ResourceSpec
	}
	return nil
}

func (x *Asset) GetResourceStatus() *Asset_ResourceStatus {
	if x != nil {
		return x.ResourceStatus
	}
	return nil
}

func (x *Asset) GetSecurityStatus() *Asset_SecurityStatus {
	if x != nil {
		return x.SecurityStatus
	}
	return nil
}

func (x *Asset) GetDiscoverySpec() *Asset_DiscoverySpec {
	if x != nil {
		return x.DiscoverySpec
	}
	return nil
}

func (x *Asset) GetDiscoveryStatus() *Asset_DiscoveryStatus {
	if x != nil {
		return x.DiscoveryStatus
	}
	return nil
}

// Settings to manage association of Dataproc Metastore with a lake.
type Lake_Metastore struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Optional. A relative reference to the Dataproc Metastore
	// (https://cloud.google.com/dataproc-metastore/docs) service associated
	// with the lake:
	// `projects/{project_id}/locations/{location_id}/services/{service_id}`
	Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
}

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

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

func (*Lake_Metastore) ProtoMessage() {}

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

func (x *Lake_Metastore) GetService() string {
	if x != nil {
		return x.Service
	}
	return ""
}

// Status of Lake and Dataproc Metastore service instance association.
type Lake_MetastoreStatus struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Current state of association.
	State Lake_MetastoreStatus_State `protobuf:"varint,1,opt,name=state,proto3,enum=google.cloud.dataplex.v1.Lake_MetastoreStatus_State" json:"state,omitempty"`
	// Additional information about the current status.
	Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
	// Last update time of the metastore status of the lake.
	UpdateTime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
	// The URI of the endpoint used to access the Metastore service.
	Endpoint string `protobuf:"bytes,4,opt,name=endpoint,proto3" json:"endpoint,omitempty"`
}

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

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

func (*Lake_MetastoreStatus) ProtoMessage() {}

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

func (x *Lake_MetastoreStatus) GetState() Lake_MetastoreStatus_State {
	if x != nil {
		return x.State
	}
	return Lake_MetastoreStatus_STATE_UNSPECIFIED
}

func (x *Lake_MetastoreStatus) GetMessage() string {
	if x != nil {
		return x.Message
	}
	return ""
}

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

func (x *Lake_MetastoreStatus) GetEndpoint() string {
	if x != nil {
		return x.Endpoint
	}
	return ""
}

// Settings for resources attached as assets within a zone.
type Zone_ResourceSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. Immutable. The location type of the resources that are allowed to be attached to the
	// assets within this zone.
	LocationType Zone_ResourceSpec_LocationType `protobuf:"varint,1,opt,name=location_type,json=locationType,proto3,enum=google.cloud.dataplex.v1.Zone_ResourceSpec_LocationType" json:"location_type,omitempty"`
}

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

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

func (*Zone_ResourceSpec) ProtoMessage() {}

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

func (x *Zone_ResourceSpec) GetLocationType() Zone_ResourceSpec_LocationType {
	if x != nil {
		return x.LocationType
	}
	return Zone_ResourceSpec_LOCATION_TYPE_UNSPECIFIED
}

// Settings to manage the metadata discovery and publishing in a zone.
type Zone_DiscoverySpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. Whether discovery is enabled.
	Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
	// Optional. The list of patterns to apply for selecting data to include during
	// discovery if only a subset of the data should considered. For Cloud
	// Storage bucket assets, these are interpreted as glob patterns used to
	// match object names. For BigQuery dataset assets, these are
	// interpreted as patterns to match table names.
	IncludePatterns []string `protobuf:"bytes,2,rep,name=include_patterns,json=includePatterns,proto3" json:"include_patterns,omitempty"`
	// Optional. The list of patterns to apply for selecting data to exclude during
	// discovery.  For Cloud Storage bucket assets, these are interpreted as
	// glob patterns used to match object names. For BigQuery dataset assets,
	// these are interpreted as patterns to match table names.
	ExcludePatterns []string `protobuf:"bytes,3,rep,name=exclude_patterns,json=excludePatterns,proto3" json:"exclude_patterns,omitempty"`
	// Optional. Configuration for CSV data.
	CsvOptions *Zone_DiscoverySpec_CsvOptions `protobuf:"bytes,4,opt,name=csv_options,json=csvOptions,proto3" json:"csv_options,omitempty"`
	// Optional. Configuration for Json data.
	JsonOptions *Zone_DiscoverySpec_JsonOptions `protobuf:"bytes,5,opt,name=json_options,json=jsonOptions,proto3" json:"json_options,omitempty"`
	// Determines when discovery is triggered.
	//
	// Types that are assignable to Trigger:
	//
	//	*Zone_DiscoverySpec_Schedule
	Trigger isZone_DiscoverySpec_Trigger `protobuf_oneof:"trigger"`
}

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

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

func (*Zone_DiscoverySpec) ProtoMessage() {}

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

func (x *Zone_DiscoverySpec) GetEnabled() bool {
	if x != nil {
		return x.Enabled
	}
	return false
}

func (x *Zone_DiscoverySpec) GetIncludePatterns() []string {
	if x != nil {
		return x.IncludePatterns
	}
	return nil
}

func (x *Zone_DiscoverySpec) GetExcludePatterns() []string {
	if x != nil {
		return x.ExcludePatterns
	}
	return nil
}

func (x *Zone_DiscoverySpec) GetCsvOptions() *Zone_DiscoverySpec_CsvOptions {
	if x != nil {
		return x.CsvOptions
	}
	return nil
}

func (x *Zone_DiscoverySpec) GetJsonOptions() *Zone_DiscoverySpec_JsonOptions {
	if x != nil {
		return x.JsonOptions
	}
	return nil
}

func (m *Zone_DiscoverySpec) GetTrigger() isZone_DiscoverySpec_Trigger {
	if m != nil {
		return m.Trigger
	}
	return nil
}

func (x *Zone_DiscoverySpec) GetSchedule() string {
	if x, ok := x.GetTrigger().(*Zone_DiscoverySpec_Schedule); ok {
		return x.Schedule
	}
	return ""
}

type isZone_DiscoverySpec_Trigger interface {
	isZone_DiscoverySpec_Trigger()
}

type Zone_DiscoverySpec_Schedule struct {
	// Optional. Cron schedule (https://en.wikipedia.org/wiki/Cron) for running
	// discovery periodically. Successive discovery runs must be scheduled at
	// least 60 minutes apart.
	// The default value is to run discovery every 60 minutes.
	// To explicitly set a timezone to the cron tab, apply a prefix in the
	// cron tab: "CRON_TZ=${IANA_TIME_ZONE}" or TZ=${IANA_TIME_ZONE}".
	// The ${IANA_TIME_ZONE} may only be a valid string from IANA time zone
	// database. For example, "CRON_TZ=America/New_York 1 * * * *", or
	// "TZ=America/New_York 1 * * * *".
	Schedule string `protobuf:"bytes,10,opt,name=schedule,proto3,oneof"`
}

func (*Zone_DiscoverySpec_Schedule) isZone_DiscoverySpec_Trigger() {}

// Describe CSV and similar semi-structured data formats.
type Zone_DiscoverySpec_CsvOptions struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Optional. The number of rows to interpret as header rows that should be skipped
	// when reading data rows.
	HeaderRows int32 `protobuf:"varint,1,opt,name=header_rows,json=headerRows,proto3" json:"header_rows,omitempty"`
	// Optional. The delimiter being used to separate values. This defaults to ','.
	Delimiter string `protobuf:"bytes,2,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
	// Optional. The character encoding of the data. The default is UTF-8.
	Encoding string `protobuf:"bytes,3,opt,name=encoding,proto3" json:"encoding,omitempty"`
	// Optional. Whether to disable the inference of data type for CSV data.
	// If true, all columns will be registered as strings.
	DisableTypeInference bool `protobuf:"varint,4,opt,name=disable_type_inference,json=disableTypeInference,proto3" json:"disable_type_inference,omitempty"`
}

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

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

func (*Zone_DiscoverySpec_CsvOptions) ProtoMessage() {}

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

func (x *Zone_DiscoverySpec_CsvOptions) GetHeaderRows() int32 {
	if x != nil {
		return x.HeaderRows
	}
	return 0
}

func (x *Zone_DiscoverySpec_CsvOptions) GetDelimiter() string {
	if x != nil {
		return x.Delimiter
	}
	return ""
}

func (x *Zone_DiscoverySpec_CsvOptions) GetEncoding() string {
	if x != nil {
		return x.Encoding
	}
	return ""
}

func (x *Zone_DiscoverySpec_CsvOptions) GetDisableTypeInference() bool {
	if x != nil {
		return x.DisableTypeInference
	}
	return false
}

// Describe JSON data format.
type Zone_DiscoverySpec_JsonOptions struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Optional. The character encoding of the data. The default is UTF-8.
	Encoding string `protobuf:"bytes,1,opt,name=encoding,proto3" json:"encoding,omitempty"`
	// Optional. Whether to disable the inference of data type for Json data.
	// If true, all columns will be registered as their primitive types
	// (strings, number or boolean).
	DisableTypeInference bool `protobuf:"varint,2,opt,name=disable_type_inference,json=disableTypeInference,proto3" json:"disable_type_inference,omitempty"`
}

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

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

func (*Zone_DiscoverySpec_JsonOptions) ProtoMessage() {}

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

func (x *Zone_DiscoverySpec_JsonOptions) GetEncoding() string {
	if x != nil {
		return x.Encoding
	}
	return ""
}

func (x *Zone_DiscoverySpec_JsonOptions) GetDisableTypeInference() bool {
	if x != nil {
		return x.DisableTypeInference
	}
	return false
}

// Action details for resource references in assets that cannot be located.
type Action_MissingResource struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*Action_MissingResource) ProtoMessage() {}

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

// Action details for unauthorized resource issues raised to indicate that the
// service account associated with the lake instance is not authorized to
// access or manage the resource associated with an asset.
type Action_UnauthorizedResource struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*Action_UnauthorizedResource) ProtoMessage() {}

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

// Failed to apply security policy to the managed resource(s) under a
// lake, zone or an asset. For a lake or zone resource, one or more underlying
// assets has a failure applying security policy to the associated managed
// resource.
type Action_FailedSecurityPolicyApply struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Resource name of one of the assets with failing security policy
	// application. Populated for a lake or zone resource only.
	Asset string `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"`
}

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

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

func (*Action_FailedSecurityPolicyApply) ProtoMessage() {}

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

func (x *Action_FailedSecurityPolicyApply) GetAsset() string {
	if x != nil {
		return x.Asset
	}
	return ""
}

// Action details for invalid or unsupported data files detected by discovery.
type Action_InvalidDataFormat struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The list of data locations sampled and used for format/schema
	// inference.
	SampledDataLocations []string `protobuf:"bytes,1,rep,name=sampled_data_locations,json=sampledDataLocations,proto3" json:"sampled_data_locations,omitempty"`
	// The expected data format of the entity.
	ExpectedFormat string `protobuf:"bytes,2,opt,name=expected_format,json=expectedFormat,proto3" json:"expected_format,omitempty"`
	// The new unexpected data format within the entity.
	NewFormat string `protobuf:"bytes,3,opt,name=new_format,json=newFormat,proto3" json:"new_format,omitempty"`
}

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

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

func (*Action_InvalidDataFormat) ProtoMessage() {}

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

func (x *Action_InvalidDataFormat) GetSampledDataLocations() []string {
	if x != nil {
		return x.SampledDataLocations
	}
	return nil
}

func (x *Action_InvalidDataFormat) GetExpectedFormat() string {
	if x != nil {
		return x.ExpectedFormat
	}
	return ""
}

func (x *Action_InvalidDataFormat) GetNewFormat() string {
	if x != nil {
		return x.NewFormat
	}
	return ""
}

// Action details for incompatible schemas detected by discovery.
type Action_IncompatibleDataSchema struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the table containing invalid data.
	Table string `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"`
	// The existing and expected schema of the table. The schema is provided as
	// a JSON formatted structure listing columns and data types.
	ExistingSchema string `protobuf:"bytes,2,opt,name=existing_schema,json=existingSchema,proto3" json:"existing_schema,omitempty"`
	// The new and incompatible schema within the table. The schema is provided
	// as a JSON formatted structured listing columns and data types.
	NewSchema string `protobuf:"bytes,3,opt,name=new_schema,json=newSchema,proto3" json:"new_schema,omitempty"`
	// The list of data locations sampled and used for format/schema
	// inference.
	SampledDataLocations []string `protobuf:"bytes,4,rep,name=sampled_data_locations,json=sampledDataLocations,proto3" json:"sampled_data_locations,omitempty"`
	// Whether the action relates to a schema that is incompatible or modified.
	SchemaChange Action_IncompatibleDataSchema_SchemaChange `protobuf:"varint,5,opt,name=schema_change,json=schemaChange,proto3,enum=google.cloud.dataplex.v1.Action_IncompatibleDataSchema_SchemaChange" json:"schema_change,omitempty"`
}

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

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

func (*Action_IncompatibleDataSchema) ProtoMessage() {}

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

func (x *Action_IncompatibleDataSchema) GetTable() string {
	if x != nil {
		return x.Table
	}
	return ""
}

func (x *Action_IncompatibleDataSchema) GetExistingSchema() string {
	if x != nil {
		return x.ExistingSchema
	}
	return ""
}

func (x *Action_IncompatibleDataSchema) GetNewSchema() string {
	if x != nil {
		return x.NewSchema
	}
	return ""
}

func (x *Action_IncompatibleDataSchema) GetSampledDataLocations() []string {
	if x != nil {
		return x.SampledDataLocations
	}
	return nil
}

func (x *Action_IncompatibleDataSchema) GetSchemaChange() Action_IncompatibleDataSchema_SchemaChange {
	if x != nil {
		return x.SchemaChange
	}
	return Action_IncompatibleDataSchema_SCHEMA_CHANGE_UNSPECIFIED
}

// Action details for invalid or unsupported partitions detected by discovery.
type Action_InvalidDataPartition struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The issue type of InvalidDataPartition.
	ExpectedStructure Action_InvalidDataPartition_PartitionStructure `protobuf:"varint,1,opt,name=expected_structure,json=expectedStructure,proto3,enum=google.cloud.dataplex.v1.Action_InvalidDataPartition_PartitionStructure" json:"expected_structure,omitempty"`
}

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

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

func (*Action_InvalidDataPartition) ProtoMessage() {}

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

func (x *Action_InvalidDataPartition) GetExpectedStructure() Action_InvalidDataPartition_PartitionStructure {
	if x != nil {
		return x.ExpectedStructure
	}
	return Action_InvalidDataPartition_PARTITION_STRUCTURE_UNSPECIFIED
}

// Action details for absence of data detected by discovery.
type Action_MissingData struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*Action_MissingData) ProtoMessage() {}

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

// Action details for invalid data arrangement.
type Action_InvalidDataOrganization struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*Action_InvalidDataOrganization) ProtoMessage() {}

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

// Security policy status of the asset. Data security policy, i.e., readers,
// writers & owners, should be specified in the lake/zone/asset IAM policy.
type Asset_SecurityStatus struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The current state of the security policy applied to the attached
	// resource.
	State Asset_SecurityStatus_State `protobuf:"varint,1,opt,name=state,proto3,enum=google.cloud.dataplex.v1.Asset_SecurityStatus_State" json:"state,omitempty"`
	// Additional information about the current state.
	Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
	// Last update time of the status.
	UpdateTime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
}

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

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

func (*Asset_SecurityStatus) ProtoMessage() {}

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

func (x *Asset_SecurityStatus) GetState() Asset_SecurityStatus_State {
	if x != nil {
		return x.State
	}
	return Asset_SecurityStatus_STATE_UNSPECIFIED
}

func (x *Asset_SecurityStatus) GetMessage() string {
	if x != nil {
		return x.Message
	}
	return ""
}

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

// Settings to manage the metadata discovery and publishing for an asset.
type Asset_DiscoverySpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Optional. Whether discovery is enabled.
	Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
	// Optional. The list of patterns to apply for selecting data to include during
	// discovery if only a subset of the data should considered.  For Cloud
	// Storage bucket assets, these are interpreted as glob patterns used to
	// match object names. For BigQuery dataset assets, these are interpreted as
	// patterns to match table names.
	IncludePatterns []string `protobuf:"bytes,2,rep,name=include_patterns,json=includePatterns,proto3" json:"include_patterns,omitempty"`
	// Optional. The list of patterns to apply for selecting data to exclude during
	// discovery.  For Cloud Storage bucket assets, these are interpreted as
	// glob patterns used to match object names. For BigQuery dataset assets,
	// these are interpreted as patterns to match table names.
	ExcludePatterns []string `protobuf:"bytes,3,rep,name=exclude_patterns,json=excludePatterns,proto3" json:"exclude_patterns,omitempty"`
	// Optional. Configuration for CSV data.
	CsvOptions *Asset_DiscoverySpec_CsvOptions `protobuf:"bytes,4,opt,name=csv_options,json=csvOptions,proto3" json:"csv_options,omitempty"`
	// Optional. Configuration for Json data.
	JsonOptions *Asset_DiscoverySpec_JsonOptions `protobuf:"bytes,5,opt,name=json_options,json=jsonOptions,proto3" json:"json_options,omitempty"`
	// Determines when discovery is triggered.
	//
	// Types that are assignable to Trigger:
	//
	//	*Asset_DiscoverySpec_Schedule
	Trigger isAsset_DiscoverySpec_Trigger `protobuf_oneof:"trigger"`
}

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

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

func (*Asset_DiscoverySpec) ProtoMessage() {}

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

func (x *Asset_DiscoverySpec) GetEnabled() bool {
	if x != nil {
		return x.Enabled
	}
	return false
}

func (x *Asset_DiscoverySpec) GetIncludePatterns() []string {
	if x != nil {
		return x.IncludePatterns
	}
	return nil
}

func (x *Asset_DiscoverySpec) GetExcludePatterns() []string {
	if x != nil {
		return x.ExcludePatterns
	}
	return nil
}

func (x *Asset_DiscoverySpec) GetCsvOptions() *Asset_DiscoverySpec_CsvOptions {
	if x != nil {
		return x.CsvOptions
	}
	return nil
}

func (x *Asset_DiscoverySpec) GetJsonOptions() *Asset_DiscoverySpec_JsonOptions {
	if x != nil {
		return x.JsonOptions
	}
	return nil
}

func (m *Asset_DiscoverySpec) GetTrigger() isAsset_DiscoverySpec_Trigger {
	if m != nil {
		return m.Trigger
	}
	return nil
}

func (x *Asset_DiscoverySpec) GetSchedule() string {
	if x, ok := x.GetTrigger().(*Asset_DiscoverySpec_Schedule); ok {
		return x.Schedule
	}
	return ""
}

type isAsset_DiscoverySpec_Trigger interface {
	isAsset_DiscoverySpec_Trigger()
}

type Asset_DiscoverySpec_Schedule struct {
	// Optional. Cron schedule (https://en.wikipedia.org/wiki/Cron) for running
	// discovery periodically. Successive discovery runs must be scheduled at
	// least 60 minutes apart.
	// The default value is to run discovery every 60 minutes.
	// To explicitly set a timezone to the cron tab, apply a prefix in the
	// cron tab: "CRON_TZ=${IANA_TIME_ZONE}" or TZ=${IANA_TIME_ZONE}".
	// The ${IANA_TIME_ZONE} may only be a valid string from IANA time zone
	// database. For example, "CRON_TZ=America/New_York 1 * * * *", or
	// "TZ=America/New_York 1 * * * *".
	Schedule string `protobuf:"bytes,10,opt,name=schedule,proto3,oneof"`
}

func (*Asset_DiscoverySpec_Schedule) isAsset_DiscoverySpec_Trigger() {}

// Identifies the cloud resource that is referenced by this asset.
type Asset_ResourceSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Immutable. Relative name of the cloud resource that contains the data that is
	// being managed within a lake. For example:
	//
	//	`projects/{project_number}/buckets/{bucket_id}`
	//	`projects/{project_number}/datasets/{dataset_id}`
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Required. Immutable. Type of resource.
	Type Asset_ResourceSpec_Type `protobuf:"varint,2,opt,name=type,proto3,enum=google.cloud.dataplex.v1.Asset_ResourceSpec_Type" json:"type,omitempty"`
}

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

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

func (*Asset_ResourceSpec) ProtoMessage() {}

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

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

func (x *Asset_ResourceSpec) GetType() Asset_ResourceSpec_Type {
	if x != nil {
		return x.Type
	}
	return Asset_ResourceSpec_TYPE_UNSPECIFIED
}

// Status of the resource referenced by an asset.
type Asset_ResourceStatus struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The current state of the managed resource.
	State Asset_ResourceStatus_State `protobuf:"varint,1,opt,name=state,proto3,enum=google.cloud.dataplex.v1.Asset_ResourceStatus_State" json:"state,omitempty"`
	// Additional information about the current state.
	Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
	// Last update time of the status.
	UpdateTime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
}

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

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

func (*Asset_ResourceStatus) ProtoMessage() {}

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

func (x *Asset_ResourceStatus) GetState() Asset_ResourceStatus_State {
	if x != nil {
		return x.State
	}
	return Asset_ResourceStatus_STATE_UNSPECIFIED
}

func (x *Asset_ResourceStatus) GetMessage() string {
	if x != nil {
		return x.Message
	}
	return ""
}

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

// Status of discovery for an asset.
type Asset_DiscoveryStatus struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The current status of the discovery feature.
	State Asset_DiscoveryStatus_State `protobuf:"varint,1,opt,name=state,proto3,enum=google.cloud.dataplex.v1.Asset_DiscoveryStatus_State" json:"state,omitempty"`
	// Additional information about the current state.
	Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
	// Last update time of the status.
	UpdateTime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"`
	// The start time of the last discovery run.
	LastRunTime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=last_run_time,json=lastRunTime,proto3" json:"last_run_time,omitempty"`
	// Data Stats of the asset reported by discovery.
	Stats *Asset_DiscoveryStatus_Stats `protobuf:"bytes,6,opt,name=stats,proto3" json:"stats,omitempty"`
	// The duration of the last discovery run.
	LastRunDuration *duration.Duration `protobuf:"bytes,7,opt,name=last_run_duration,json=lastRunDuration,proto3" json:"last_run_duration,omitempty"`
}

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

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

func (*Asset_DiscoveryStatus) ProtoMessage() {}

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

func (x *Asset_DiscoveryStatus) GetState() Asset_DiscoveryStatus_State {
	if x != nil {
		return x.State
	}
	return Asset_DiscoveryStatus_STATE_UNSPECIFIED
}

func (x *Asset_DiscoveryStatus) GetMessage() string {
	if x != nil {
		return x.Message
	}
	return ""
}

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

func (x *Asset_DiscoveryStatus) GetLastRunTime() *timestamp.Timestamp {
	if x != nil {
		return x.LastRunTime
	}
	return nil
}

func (x *Asset_DiscoveryStatus) GetStats() *Asset_DiscoveryStatus_Stats {
	if x != nil {
		return x.Stats
	}
	return nil
}

func (x *Asset_DiscoveryStatus) GetLastRunDuration() *duration.Duration {
	if x != nil {
		return x.LastRunDuration
	}
	return nil
}

// Describe CSV and similar semi-structured data formats.
type Asset_DiscoverySpec_CsvOptions struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Optional. The number of rows to interpret as header rows that should be skipped
	// when reading data rows.
	HeaderRows int32 `protobuf:"varint,1,opt,name=header_rows,json=headerRows,proto3" json:"header_rows,omitempty"`
	// Optional. The delimiter being used to separate values. This defaults to ','.
	Delimiter string `protobuf:"bytes,2,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
	// Optional. The character encoding of the data. The default is UTF-8.
	Encoding string `protobuf:"bytes,3,opt,name=encoding,proto3" json:"encoding,omitempty"`
	// Optional. Whether to disable the inference of data type for CSV data.
	// If true, all columns will be registered as strings.
	DisableTypeInference bool `protobuf:"varint,4,opt,name=disable_type_inference,json=disableTypeInference,proto3" json:"disable_type_inference,omitempty"`
}

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

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

func (*Asset_DiscoverySpec_CsvOptions) ProtoMessage() {}

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

func (x *Asset_DiscoverySpec_CsvOptions) GetHeaderRows() int32 {
	if x != nil {
		return x.HeaderRows
	}
	return 0
}

func (x *Asset_DiscoverySpec_CsvOptions) GetDelimiter() string {
	if x != nil {
		return x.Delimiter
	}
	return ""
}

func (x *Asset_DiscoverySpec_CsvOptions) GetEncoding() string {
	if x != nil {
		return x.Encoding
	}
	return ""
}

func (x *Asset_DiscoverySpec_CsvOptions) GetDisableTypeInference() bool {
	if x != nil {
		return x.DisableTypeInference
	}
	return false
}

// Describe JSON data format.
type Asset_DiscoverySpec_JsonOptions struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Optional. The character encoding of the data. The default is UTF-8.
	Encoding string `protobuf:"bytes,1,opt,name=encoding,proto3" json:"encoding,omitempty"`
	// Optional. Whether to disable the inference of data type for Json data.
	// If true, all columns will be registered as their primitive types
	// (strings, number or boolean).
	DisableTypeInference bool `protobuf:"varint,2,opt,name=disable_type_inference,json=disableTypeInference,proto3" json:"disable_type_inference,omitempty"`
}

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

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

func (*Asset_DiscoverySpec_JsonOptions) ProtoMessage() {}

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

func (x *Asset_DiscoverySpec_JsonOptions) GetEncoding() string {
	if x != nil {
		return x.Encoding
	}
	return ""
}

func (x *Asset_DiscoverySpec_JsonOptions) GetDisableTypeInference() bool {
	if x != nil {
		return x.DisableTypeInference
	}
	return false
}

// The aggregated data statistics for the asset reported by discovery.
type Asset_DiscoveryStatus_Stats struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The count of data items within the referenced resource.
	DataItems int64 `protobuf:"varint,1,opt,name=data_items,json=dataItems,proto3" json:"data_items,omitempty"`
	// The number of stored data bytes within the referenced resource.
	DataSize int64 `protobuf:"varint,2,opt,name=data_size,json=dataSize,proto3" json:"data_size,omitempty"`
	// The count of table entities within the referenced resource.
	Tables int64 `protobuf:"varint,3,opt,name=tables,proto3" json:"tables,omitempty"`
	// The count of fileset entities within the referenced resource.
	Filesets int64 `protobuf:"varint,4,opt,name=filesets,proto3" json:"filesets,omitempty"`
}

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

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

func (*Asset_DiscoveryStatus_Stats) ProtoMessage() {}

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

func (x *Asset_DiscoveryStatus_Stats) GetDataItems() int64 {
	if x != nil {
		return x.DataItems
	}
	return 0
}

func (x *Asset_DiscoveryStatus_Stats) GetDataSize() int64 {
	if x != nil {
		return x.DataSize
	}
	return 0
}

func (x *Asset_DiscoveryStatus_Stats) GetTables() int64 {
	if x != nil {
		return x.Tables
	}
	return 0
}

func (x *Asset_DiscoveryStatus_Stats) GetFilesets() int64 {
	if x != nil {
		return x.Filesets
	}
	return 0
}

var File_google_cloud_dataplex_v1_resources_proto protoreflect.FileDescriptor

var file_google_cloud_dataplex_v1_resources_proto_rawDesc = []byte{
	0x0a, 0x28, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x64,
	0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75,
	0x72, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65,
	0x78, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69,
	0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70,
	0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
	0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x22, 0xba, 0x09, 0x0a, 0x04, 0x4c, 0x61, 0x6b, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x6e, 0x61,
	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0xe0, 0x41, 0x03, 0xfa, 0x41, 0x1e,
	0x0a, 0x1c, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x6b, 0x65, 0x52, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f,
	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52,
	0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x03,
	0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x03,
	0x75, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69,
	0x6d, 0x65, 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, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74,
	0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 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, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64,
	0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c,
	0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e,
	0x76, 0x31, 0x2e, 0x4c, 0x61, 0x6b, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e,
	0x74, 0x72, 0x79, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73,
	0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
	0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63,
	0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
	0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76,
	0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x73, 0x74,
	0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61,
	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41,
	0x03, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
	0x74, 0x12, 0x4b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x66,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
	0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e,
	0x4c, 0x61, 0x6b, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x03,
	0xe0, 0x41, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x4d,
	0x0a, 0x0c, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x67,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
	0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e,
	0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03,
	0x52, 0x0b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x5e, 0x0a,
	0x10, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75,
	0x73, 0x18, 0x68, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e,
	0x76, 0x31, 0x2e, 0x4c, 0x61, 0x6b, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72,
	0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0f, 0x6d, 0x65,
	0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x2a, 0x0a,
	0x09, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x73, 0x65,
	0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01,
	0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x9e, 0x02, 0x0a, 0x0f, 0x4d, 0x65,
	0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4a, 0x0a,
	0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61,
	0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x6b, 0x65, 0x2e, 0x4d, 0x65, 0x74,
	0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61,
	0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73,
	0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73,
	0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69,
	0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
	0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65,
	0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x4c, 0x0a, 0x05,
	0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55,
	0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04,
	0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10,
	0x02, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x50, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12,
	0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61,
	0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
	0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x57, 0xea, 0x41, 0x54, 0x0a, 0x1c, 0x64, 0x61, 0x74, 0x61,
	0x70, 0x6c, 0x65, 0x78, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
	0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x6b, 0x65, 0x12, 0x34, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
	0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x7d, 0x2f, 0x6c, 0x61, 0x6b, 0x65, 0x73, 0x2f, 0x7b, 0x6c, 0x61, 0x6b, 0x65, 0x7d, 0x22, 0xb6,
	0x01, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b,
	0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
	0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61,
	0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73,
	0x12, 0x45, 0x0a, 0x1f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x6f, 0x6c,
	0x69, 0x63, 0x79, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x73, 0x73,
	0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1c, 0x73, 0x65, 0x63, 0x75, 0x72,
	0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x69, 0x6e,
	0x67, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0xb0, 0x0e, 0x0a, 0x04, 0x5a, 0x6f, 0x6e, 0x65,
	0x12, 0x38, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24,
	0xe0, 0x41, 0x03, 0xfa, 0x41, 0x1e, 0x0a, 0x1c, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
	0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x64, 0x69,
	0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61,
	0x6d, 0x65, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42,
	0x03, 0xe0, 0x41, 0x03, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65,
	0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52,
	0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x75,
	0x70, 0x64, 0x61, 0x74, 0x65, 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, 0x42, 0x03, 0xe0, 0x41,
	0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x47, 0x0a,
	0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74,
	0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x2e, 0x4c, 0x61,
	0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x06,
	0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01,
	0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a,
	0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61,
	0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x03, 0xe0,
	0x41, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x04, 0x74, 0x79, 0x70,
	0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e,
	0x76, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x42, 0x06, 0xe0, 0x41,
	0x02, 0xe0, 0x41, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x0e, 0x64, 0x69,
	0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x67, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
	0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x6f,
	0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63,
	0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79,
	0x53, 0x70, 0x65, 0x63, 0x12, 0x55, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
	0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x68, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70,
	0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f,
	0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x72,
	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4d, 0x0a, 0x0c, 0x61,
	0x73, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x69, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64,
	0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73,
	0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0b, 0x61,
	0x73, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xc9, 0x01, 0x0a, 0x0c, 0x52,
	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x65, 0x0a, 0x0d, 0x6c,
	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
	0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x6f,
	0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e,
	0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x42, 0x06, 0xe0, 0x41,
	0x02, 0xe0, 0x41, 0x05, 0x52, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79,
	0x70, 0x65, 0x22, 0x52, 0x0a, 0x0c, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79,
	0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54,
	0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10,
	0x00, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x47, 0x49,
	0x4f, 0x4e, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x52, 0x45,
	0x47, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x1a, 0x9c, 0x05, 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x63, 0x6f,
	0x76, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1d, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62,
	0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07,
	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75,
	0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
	0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50,
	0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75,
	0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
	0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50,
	0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x5d, 0x0a, 0x0b, 0x63, 0x73, 0x76, 0x5f, 0x6f,
	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61,
	0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73,
	0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x73, 0x76, 0x4f, 0x70,
	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x63, 0x73, 0x76, 0x4f,
	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x60, 0x0a, 0x0c, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6f,
	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61,
	0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x5a, 0x6f, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73,
	0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x4f,
	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x6a, 0x73, 0x6f,
	0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65,
	0x64, 0x75, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x48,
	0x00, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x1a, 0xb1, 0x01, 0x0a, 0x0a,
	0x43, 0x73, 0x76, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0b, 0x68, 0x65,
	0x61, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42,
	0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x6f, 0x77, 0x73,
	0x12, 0x21, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69,
	0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f,
	0x64, 0x69, 0x6e, 0x67, 0x12, 0x39, 0x0a, 0x16, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f,
	0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x14, 0x64, 0x69, 0x73, 0x61, 0x62,
	0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x1a,
	0x69, 0x0a, 0x0b, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f,
	0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12,
	0x39, 0x0a, 0x16, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f,
	0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42,
	0x03, 0xe0, 0x41, 0x01, 0x52, 0x14, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70,
	0x65, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x74, 0x72,
	0x69, 0x67, 0x67, 0x65, 0x72, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45,
	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
	0x22, 0x32, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45,
	0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07,
	0x0a, 0x03, 0x52, 0x41, 0x57, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x55, 0x52, 0x41, 0x54,
	0x45, 0x44, 0x10, 0x02, 0x3a, 0x64, 0xea, 0x41, 0x61, 0x0a, 0x1c, 0x64, 0x61, 0x74, 0x61, 0x70,
	0x6c, 0x65, 0x78, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63,
	0x6f, 0x6d, 0x2f, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x41, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
	0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d,
	0x2f, 0x6c, 0x61, 0x6b, 0x65, 0x73, 0x2f, 0x7b, 0x6c, 0x61, 0x6b, 0x65, 0x7d, 0x2f, 0x7a, 0x6f,
	0x6e, 0x65, 0x73, 0x2f, 0x7b, 0x7a, 0x6f, 0x6e, 0x65, 0x7d, 0x22, 0xab, 0x14, 0x0a, 0x06, 0x41,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72,
	0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e,
	0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f,
	0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05,
	0x69, 0x73, 0x73, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x73, 0x73,
	0x75, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d,
	0x65, 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, 0x0a, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12,
	0x3a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0xe0,
	0x41, 0x03, 0xfa, 0x41, 0x20, 0x0a, 0x1e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x41,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x6c,
	0x61, 0x6b, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0xe0, 0x41, 0x03, 0xfa, 0x41,
	0x1e, 0x0a, 0x1c, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x6b, 0x65, 0x52,
	0x04, 0x6c, 0x61, 0x6b, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x07, 0x20,
	0x01, 0x28, 0x09, 0x42, 0x24, 0xe0, 0x41, 0x03, 0xfa, 0x41, 0x1e, 0x0a, 0x1c, 0x64, 0x61, 0x74,
	0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73,
	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12,
	0x3b, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25,
	0xe0, 0x41, 0x03, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
	0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e,
	0x64, 0x61, 0x74, 0x61, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x73, 0x12, 0x64, 0x0a, 0x13, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x64,
	0x61, 0x74, 0x61, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69,
	0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f,
	0x72, 0x6d, 0x61, 0x74, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44,
	0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x73, 0x0a, 0x18, 0x69, 0x6e, 0x63,
	0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73,
	0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70,
	0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e,
	0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x63,
	0x68, 0x65, 0x6d, 0x61, 0x48, 0x00, 0x52, 0x16, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74,
	0x69, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x6d,
	0x0a, 0x16, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70,
	0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61,
	0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x72, 0x74,
	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,
	0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a,
	0x0c, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0d, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
	0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74,
	0x61, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61,
	0x12, 0x5d, 0x0a, 0x10, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x73, 0x6f,
	0x75, 0x72, 0x63, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c,
	0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x69, 0x73,
	0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0f,
	0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12,
	0x6c, 0x0a, 0x15, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f,
	0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61,
	0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x65, 0x73,
	0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x14, 0x75, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f,
	0x72, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x7d, 0x0a,
	0x1c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79,
	0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x15, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
	0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x63, 0x75,
	0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x48,
	0x00, 0x52, 0x19, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74,
	0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x76, 0x0a, 0x19,
	0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6f, 0x72, 0x67,
	0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64,
	0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f,
	0x6e, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44, 0x61, 0x74, 0x61, 0x4f, 0x72, 0x67,
	0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x17, 0x69, 0x6e, 0x76,
	0x61, 0x6c, 0x69, 0x64, 0x44, 0x61, 0x74, 0x61, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x11, 0x0a, 0x0f, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x52,
	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x16, 0x0a, 0x14, 0x55, 0x6e, 0x61, 0x75, 0x74,
	0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a,
	0x31, 0x0a, 0x19, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74,
	0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05,
	0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x73, 0x73,
	0x65, 0x74, 0x1a, 0x91, 0x01, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44, 0x61,
	0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x61, 0x6d, 0x70,
	0x6c, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65,
	0x64, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27,
	0x0a, 0x0f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61,
	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
	0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x5f, 0x66,
	0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x77,
	0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x1a, 0xe6, 0x02, 0x0a, 0x16, 0x49, 0x6e, 0x63, 0x6f, 0x6d,
	0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53, 0x63, 0x68, 0x65, 0x6d,
	0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x69, 0x73, 0x74,
	0x69, 0x6e, 0x67, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61,
	0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12,
	0x34, 0x0a, 0x16, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f,
	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52,
	0x14, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x69, 0x0a, 0x0d, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f,
	0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x44, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61,
	0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49,
	0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x53,
	0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e,
	0x67, 0x65, 0x52, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
	0x22, 0x4d, 0x0a, 0x0c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
	0x12, 0x1d, 0x0a, 0x19, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x41, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47,
	0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
	0x10, 0x0a, 0x0c, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x54, 0x49, 0x42, 0x4c, 0x45, 0x10,
	0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x02, 0x1a,
	0xf4, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44, 0x61, 0x74, 0x61, 0x50,
	0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x77, 0x0a, 0x12, 0x65, 0x78, 0x70, 0x65,
	0x63, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0e, 0x32, 0x48, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
	0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e,
	0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x44, 0x61,
	0x74, 0x61, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x74,
	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x52, 0x11,
	0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72,
	0x65, 0x22, 0x63, 0x0a, 0x12, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
	0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x41, 0x52, 0x54, 0x49,
	0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55,
	0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f,
	0x43, 0x4f, 0x4e, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x10,
	0x01, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f,
	0x4b, 0x45, 0x59, 0x53, 0x10, 0x02, 0x1a, 0x0d, 0x0a, 0x0b, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e,
	0x67, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x19, 0x0a, 0x17, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,
	0x44, 0x61, 0x74, 0x61, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x22, 0x66, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14,
	0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
	0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52,
	0x43, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12,
	0x13, 0x0a, 0x0f, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x4f, 0x4c, 0x49,
	0x43, 0x59, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x44, 0x49, 0x53,
	0x43, 0x4f, 0x56, 0x45, 0x52, 0x59, 0x10, 0x03, 0x3a, 0xa2, 0x02, 0xea, 0x41, 0x9e, 0x02, 0x0a,
	0x1e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
	0x45, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65,
	0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c,
	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x6c, 0x61, 0x6b, 0x65, 0x73, 0x2f, 0x7b,
	0x6c, 0x61, 0x6b, 0x65, 0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0x52, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73,
	0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f,
	0x6c, 0x61, 0x6b, 0x65, 0x73, 0x2f, 0x7b, 0x6c, 0x61, 0x6b, 0x65, 0x7d, 0x2f, 0x7a, 0x6f, 0x6e,
	0x65, 0x73, 0x2f, 0x7b, 0x7a, 0x6f, 0x6e, 0x65, 0x7d, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
	0x73, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0x61, 0x70, 0x72, 0x6f, 0x6a,
	0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c,
	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x7d, 0x2f, 0x6c, 0x61, 0x6b, 0x65, 0x73, 0x2f, 0x7b, 0x6c, 0x61, 0x6b, 0x65, 0x7d,
	0x2f, 0x7a, 0x6f, 0x6e, 0x65, 0x73, 0x2f, 0x7b, 0x7a, 0x6f, 0x6e, 0x65, 0x7d, 0x2f, 0x61, 0x73,
	0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x7d, 0x2f, 0x61, 0x63, 0x74,
	0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x42, 0x09, 0x0a,
	0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xda, 0x17, 0x0a, 0x05, 0x41, 0x73, 0x73,
	0x65, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x42, 0x25, 0xe0, 0x41, 0x03, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c,
	0x65, 0x78, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f,
	0x6d, 0x2f, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a,
	0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61,
	0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0b,
	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x42, 0x03, 0xe0,
	0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40,
	0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 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, 0x42,
	0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65,
	0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65,
	0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xe0,
	0x41, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x25, 0x0a, 0x0b, 0x64, 0x65,
	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42,
	0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
	0x6e, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74,
	0x65, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a,
	0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x64,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
	0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e,
	0x41, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70,
	0x65, 0x63, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
	0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x5c, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
	0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61,
	0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x2e,
	0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03,
	0xe0, 0x41, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61,
	0x74, 0x75, 0x73, 0x12, 0x5c, 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f,
	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x67, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61,
	0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x53, 0x65,
	0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41,
	0x03, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75,
	0x73, 0x12, 0x59, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x73,
	0x70, 0x65, 0x63, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65,
	0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f,
	0x76, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0d, 0x64,
	0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x5f, 0x0a, 0x10,
	0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
	0x18, 0x6b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76,
	0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72,
	0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0f, 0x64, 0x69,
	0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xf7, 0x01,
	0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
	0x12, 0x4a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64,
	0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74,
	0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e,
	0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07,
	0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d,
	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54,
	0x69, 0x6d, 0x65, 0x22, 0x42, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11,
	0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45,
	0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x01, 0x12, 0x0c,
	0x0a, 0x08, 0x41, 0x50, 0x50, 0x4c, 0x59, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05,
	0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x1a, 0x9e, 0x05, 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x63,
	0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1d, 0x0a, 0x07, 0x65, 0x6e, 0x61,
	0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52,
	0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c,
	0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03,
	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
	0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c,
	0x75, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03,
	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65,
	0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x5e, 0x0a, 0x0b, 0x63, 0x73, 0x76, 0x5f,
	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74,
	0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x44,
	0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x73, 0x76,
	0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x63, 0x73,
	0x76, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x61, 0x0a, 0x0c, 0x6a, 0x73, 0x6f, 0x6e,
	0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61,
	0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x2e,
	0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4a, 0x73,
	0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0b,
	0x6a, 0x73, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x08, 0x73,
	0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0,
	0x41, 0x01, 0x48, 0x00, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x1a, 0xb1,
	0x01, 0x0a, 0x0a, 0x43, 0x73, 0x76, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a,
	0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52,
	0x6f, 0x77, 0x73, 0x12, 0x21, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x64, 0x65, 0x6c,
	0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69,
	0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x65,
	0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x39, 0x0a, 0x16, 0x64, 0x69, 0x73, 0x61, 0x62,
	0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x14, 0x64, 0x69,
	0x73, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e,
	0x63, 0x65, 0x1a, 0x69, 0x0a, 0x0b, 0x4a, 0x73, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
	0x73, 0x12, 0x1f, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69,
	0x6e, 0x67, 0x12, 0x39, 0x0a, 0x16, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79,
	0x70, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x08, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x14, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
	0x54, 0x79, 0x70, 0x65, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x09, 0x0a,
	0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x1a, 0xbe, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x73,
	0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x05, 0x52, 0x04, 0x6e, 0x61,
	0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65,
	0x74, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x54,
	0x79, 0x70, 0x65, 0x42, 0x06, 0xe0, 0x41, 0x02, 0xe0, 0x41, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70,
	0x65, 0x22, 0x46, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50,
	0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
	0x12, 0x0a, 0x0e, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x42, 0x55, 0x43, 0x4b, 0x45,
	0x54, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x49, 0x47, 0x51, 0x55, 0x45, 0x52, 0x59, 0x5f,
	0x44, 0x41, 0x54, 0x41, 0x53, 0x45, 0x54, 0x10, 0x02, 0x1a, 0xe9, 0x01, 0x0a, 0x0e, 0x52, 0x65,
	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4a, 0x0a, 0x05,
	0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70,
	0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x73,
	0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74,
	0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
	0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
	0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d,
	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
	0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22,
	0x34, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54,
	0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
	0x09, 0x0a, 0x05, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52,
	0x52, 0x4f, 0x52, 0x10, 0x02, 0x1a, 0xdc, 0x04, 0x0a, 0x0f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76,
	0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x74, 0x61,
	0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78,
	0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76,
	0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52,
	0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
	0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
	0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3e, 0x0a,
	0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4b, 0x0a,
	0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61,
	0x70, 0x6c, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x44, 0x69,
	0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74,
	0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x6c, 0x61,
	0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
	0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x1a, 0x77, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61,
	0x74, 0x61, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
	0x64, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x61, 0x74,
	0x61, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x61,
	0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1a,
	0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
	0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x74, 0x73, 0x22, 0x58, 0x0a, 0x05, 0x53, 0x74,
	0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53,
	0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x43,
	0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x5f,
	0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x41,
	0x55, 0x53, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c,
	0x45, 0x44, 0x10, 0x05, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e,
	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a,
	0x74, 0xea, 0x41, 0x71, 0x0a, 0x1d, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x41, 0x73,
	0x73, 0x65, 0x74, 0x12, 0x50, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70,
	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x6c, 0x61, 0x6b,
	0x65, 0x73, 0x2f, 0x7b, 0x6c, 0x61, 0x6b, 0x65, 0x7d, 0x2f, 0x7a, 0x6f, 0x6e, 0x65, 0x73, 0x2f,
	0x7b, 0x7a, 0x6f, 0x6e, 0x65, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x61,
	0x73, 0x73, 0x65, 0x74, 0x7d, 0x2a, 0x5b, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15,
	0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
	0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10,
	0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12,
	0x0c, 0x0a, 0x08, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x13, 0x0a,
	0x0f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44,
	0x10, 0x04, 0x42, 0x72, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2e,
	0x76, 0x31, 0x42, 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f,
	0x74, 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c,
	0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x63, 0x6c, 0x6f, 0x75,
	0x64, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x61,
	0x74, 0x61, 0x70, 0x6c, 0x65, 0x78, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_google_cloud_dataplex_v1_resources_proto_rawDescOnce sync.Once
	file_google_cloud_dataplex_v1_resources_proto_rawDescData = file_google_cloud_dataplex_v1_resources_proto_rawDesc
)

func file_google_cloud_dataplex_v1_resources_proto_rawDescGZIP() []byte {
	file_google_cloud_dataplex_v1_resources_proto_rawDescOnce.Do(func() {
		file_google_cloud_dataplex_v1_resources_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_dataplex_v1_resources_proto_rawDescData)
	})
	return file_google_cloud_dataplex_v1_resources_proto_rawDescData
}

var file_google_cloud_dataplex_v1_resources_proto_enumTypes = make([]protoimpl.EnumInfo, 11)
var file_google_cloud_dataplex_v1_resources_proto_msgTypes = make([]protoimpl.MessageInfo, 30)
var file_google_cloud_dataplex_v1_resources_proto_goTypes = []interface{}{
	(State)(0),                                          // 0: google.cloud.dataplex.v1.State
	(Lake_MetastoreStatus_State)(0),                     // 1: google.cloud.dataplex.v1.Lake.MetastoreStatus.State
	(Zone_Type)(0),                                      // 2: google.cloud.dataplex.v1.Zone.Type
	(Zone_ResourceSpec_LocationType)(0),                 // 3: google.cloud.dataplex.v1.Zone.ResourceSpec.LocationType
	(Action_Category)(0),                                // 4: google.cloud.dataplex.v1.Action.Category
	(Action_IncompatibleDataSchema_SchemaChange)(0),     // 5: google.cloud.dataplex.v1.Action.IncompatibleDataSchema.SchemaChange
	(Action_InvalidDataPartition_PartitionStructure)(0), // 6: google.cloud.dataplex.v1.Action.InvalidDataPartition.PartitionStructure
	(Asset_SecurityStatus_State)(0),                     // 7: google.cloud.dataplex.v1.Asset.SecurityStatus.State
	(Asset_ResourceSpec_Type)(0),                        // 8: google.cloud.dataplex.v1.Asset.ResourceSpec.Type
	(Asset_ResourceStatus_State)(0),                     // 9: google.cloud.dataplex.v1.Asset.ResourceStatus.State
	(Asset_DiscoveryStatus_State)(0),                    // 10: google.cloud.dataplex.v1.Asset.DiscoveryStatus.State
	(*Lake)(nil),                                        // 11: google.cloud.dataplex.v1.Lake
	(*AssetStatus)(nil),                                 // 12: google.cloud.dataplex.v1.AssetStatus
	(*Zone)(nil),                                        // 13: google.cloud.dataplex.v1.Zone
	(*Action)(nil),                                      // 14: google.cloud.dataplex.v1.Action
	(*Asset)(nil),                                       // 15: google.cloud.dataplex.v1.Asset
	(*Lake_Metastore)(nil),                              // 16: google.cloud.dataplex.v1.Lake.Metastore
	(*Lake_MetastoreStatus)(nil),                        // 17: google.cloud.dataplex.v1.Lake.MetastoreStatus
	nil,                                                 // 18: google.cloud.dataplex.v1.Lake.LabelsEntry
	(*Zone_ResourceSpec)(nil),                           // 19: google.cloud.dataplex.v1.Zone.ResourceSpec
	(*Zone_DiscoverySpec)(nil),                          // 20: google.cloud.dataplex.v1.Zone.DiscoverySpec
	nil,                                                 // 21: google.cloud.dataplex.v1.Zone.LabelsEntry
	(*Zone_DiscoverySpec_CsvOptions)(nil),               // 22: google.cloud.dataplex.v1.Zone.DiscoverySpec.CsvOptions
	(*Zone_DiscoverySpec_JsonOptions)(nil),              // 23: google.cloud.dataplex.v1.Zone.DiscoverySpec.JsonOptions
	(*Action_MissingResource)(nil),                      // 24: google.cloud.dataplex.v1.Action.MissingResource
	(*Action_UnauthorizedResource)(nil),                 // 25: google.cloud.dataplex.v1.Action.UnauthorizedResource
	(*Action_FailedSecurityPolicyApply)(nil),            // 26: google.cloud.dataplex.v1.Action.FailedSecurityPolicyApply
	(*Action_InvalidDataFormat)(nil),                    // 27: google.cloud.dataplex.v1.Action.InvalidDataFormat
	(*Action_IncompatibleDataSchema)(nil),               // 28: google.cloud.dataplex.v1.Action.IncompatibleDataSchema
	(*Action_InvalidDataPartition)(nil),                 // 29: google.cloud.dataplex.v1.Action.InvalidDataPartition
	(*Action_MissingData)(nil),                          // 30: google.cloud.dataplex.v1.Action.MissingData
	(*Action_InvalidDataOrganization)(nil),              // 31: google.cloud.dataplex.v1.Action.InvalidDataOrganization
	(*Asset_SecurityStatus)(nil),                        // 32: google.cloud.dataplex.v1.Asset.SecurityStatus
	(*Asset_DiscoverySpec)(nil),                         // 33: google.cloud.dataplex.v1.Asset.DiscoverySpec
	(*Asset_ResourceSpec)(nil),                          // 34: google.cloud.dataplex.v1.Asset.ResourceSpec
	(*Asset_ResourceStatus)(nil),                        // 35: google.cloud.dataplex.v1.Asset.ResourceStatus
	(*Asset_DiscoveryStatus)(nil),                       // 36: google.cloud.dataplex.v1.Asset.DiscoveryStatus
	nil,                                                 // 37: google.cloud.dataplex.v1.Asset.LabelsEntry
	(*Asset_DiscoverySpec_CsvOptions)(nil),              // 38: google.cloud.dataplex.v1.Asset.DiscoverySpec.CsvOptions
	(*Asset_DiscoverySpec_JsonOptions)(nil),             // 39: google.cloud.dataplex.v1.Asset.DiscoverySpec.JsonOptions
	(*Asset_DiscoveryStatus_Stats)(nil),                 // 40: google.cloud.dataplex.v1.Asset.DiscoveryStatus.Stats
	(*timestamp.Timestamp)(nil),                         // 41: google.protobuf.Timestamp
	(*duration.Duration)(nil),                           // 42: google.protobuf.Duration
}
var file_google_cloud_dataplex_v1_resources_proto_depIdxs = []int32{
	41, // 0: google.cloud.dataplex.v1.Lake.create_time:type_name -> google.protobuf.Timestamp
	41, // 1: google.cloud.dataplex.v1.Lake.update_time:type_name -> google.protobuf.Timestamp
	18, // 2: google.cloud.dataplex.v1.Lake.labels:type_name -> google.cloud.dataplex.v1.Lake.LabelsEntry
	0,  // 3: google.cloud.dataplex.v1.Lake.state:type_name -> google.cloud.dataplex.v1.State
	16, // 4: google.cloud.dataplex.v1.Lake.metastore:type_name -> google.cloud.dataplex.v1.Lake.Metastore
	12, // 5: google.cloud.dataplex.v1.Lake.asset_status:type_name -> google.cloud.dataplex.v1.AssetStatus
	17, // 6: google.cloud.dataplex.v1.Lake.metastore_status:type_name -> google.cloud.dataplex.v1.Lake.MetastoreStatus
	41, // 7: google.cloud.dataplex.v1.AssetStatus.update_time:type_name -> google.protobuf.Timestamp
	41, // 8: google.cloud.dataplex.v1.Zone.create_time:type_name -> google.protobuf.Timestamp
	41, // 9: google.cloud.dataplex.v1.Zone.update_time:type_name -> google.protobuf.Timestamp
	21, // 10: google.cloud.dataplex.v1.Zone.labels:type_name -> google.cloud.dataplex.v1.Zone.LabelsEntry
	0,  // 11: google.cloud.dataplex.v1.Zone.state:type_name -> google.cloud.dataplex.v1.State
	2,  // 12: google.cloud.dataplex.v1.Zone.type:type_name -> google.cloud.dataplex.v1.Zone.Type
	20, // 13: google.cloud.dataplex.v1.Zone.discovery_spec:type_name -> google.cloud.dataplex.v1.Zone.DiscoverySpec
	19, // 14: google.cloud.dataplex.v1.Zone.resource_spec:type_name -> google.cloud.dataplex.v1.Zone.ResourceSpec
	12, // 15: google.cloud.dataplex.v1.Zone.asset_status:type_name -> google.cloud.dataplex.v1.AssetStatus
	4,  // 16: google.cloud.dataplex.v1.Action.category:type_name -> google.cloud.dataplex.v1.Action.Category
	41, // 17: google.cloud.dataplex.v1.Action.detect_time:type_name -> google.protobuf.Timestamp
	27, // 18: google.cloud.dataplex.v1.Action.invalid_data_format:type_name -> google.cloud.dataplex.v1.Action.InvalidDataFormat
	28, // 19: google.cloud.dataplex.v1.Action.incompatible_data_schema:type_name -> google.cloud.dataplex.v1.Action.IncompatibleDataSchema
	29, // 20: google.cloud.dataplex.v1.Action.invalid_data_partition:type_name -> google.cloud.dataplex.v1.Action.InvalidDataPartition
	30, // 21: google.cloud.dataplex.v1.Action.missing_data:type_name -> google.cloud.dataplex.v1.Action.MissingData
	24, // 22: google.cloud.dataplex.v1.Action.missing_resource:type_name -> google.cloud.dataplex.v1.Action.MissingResource
	25, // 23: google.cloud.dataplex.v1.Action.unauthorized_resource:type_name -> google.cloud.dataplex.v1.Action.UnauthorizedResource
	26, // 24: google.cloud.dataplex.v1.Action.failed_security_policy_apply:type_name -> google.cloud.dataplex.v1.Action.FailedSecurityPolicyApply
	31, // 25: google.cloud.dataplex.v1.Action.invalid_data_organization:type_name -> google.cloud.dataplex.v1.Action.InvalidDataOrganization
	41, // 26: google.cloud.dataplex.v1.Asset.create_time:type_name -> google.protobuf.Timestamp
	41, // 27: google.cloud.dataplex.v1.Asset.update_time:type_name -> google.protobuf.Timestamp
	37, // 28: google.cloud.dataplex.v1.Asset.labels:type_name -> google.cloud.dataplex.v1.Asset.LabelsEntry
	0,  // 29: google.cloud.dataplex.v1.Asset.state:type_name -> google.cloud.dataplex.v1.State
	34, // 30: google.cloud.dataplex.v1.Asset.resource_spec:type_name -> google.cloud.dataplex.v1.Asset.ResourceSpec
	35, // 31: google.cloud.dataplex.v1.Asset.resource_status:type_name -> google.cloud.dataplex.v1.Asset.ResourceStatus
	32, // 32: google.cloud.dataplex.v1.Asset.security_status:type_name -> google.cloud.dataplex.v1.Asset.SecurityStatus
	33, // 33: google.cloud.dataplex.v1.Asset.discovery_spec:type_name -> google.cloud.dataplex.v1.Asset.DiscoverySpec
	36, // 34: google.cloud.dataplex.v1.Asset.discovery_status:type_name -> google.cloud.dataplex.v1.Asset.DiscoveryStatus
	1,  // 35: google.cloud.dataplex.v1.Lake.MetastoreStatus.state:type_name -> google.cloud.dataplex.v1.Lake.MetastoreStatus.State
	41, // 36: google.cloud.dataplex.v1.Lake.MetastoreStatus.update_time:type_name -> google.protobuf.Timestamp
	3,  // 37: google.cloud.dataplex.v1.Zone.ResourceSpec.location_type:type_name -> google.cloud.dataplex.v1.Zone.ResourceSpec.LocationType
	22, // 38: google.cloud.dataplex.v1.Zone.DiscoverySpec.csv_options:type_name -> google.cloud.dataplex.v1.Zone.DiscoverySpec.CsvOptions
	23, // 39: google.cloud.dataplex.v1.Zone.DiscoverySpec.json_options:type_name -> google.cloud.dataplex.v1.Zone.DiscoverySpec.JsonOptions
	5,  // 40: google.cloud.dataplex.v1.Action.IncompatibleDataSchema.schema_change:type_name -> google.cloud.dataplex.v1.Action.IncompatibleDataSchema.SchemaChange
	6,  // 41: google.cloud.dataplex.v1.Action.InvalidDataPartition.expected_structure:type_name -> google.cloud.dataplex.v1.Action.InvalidDataPartition.PartitionStructure
	7,  // 42: google.cloud.dataplex.v1.Asset.SecurityStatus.state:type_name -> google.cloud.dataplex.v1.Asset.SecurityStatus.State
	41, // 43: google.cloud.dataplex.v1.Asset.SecurityStatus.update_time:type_name -> google.protobuf.Timestamp
	38, // 44: google.cloud.dataplex.v1.Asset.DiscoverySpec.csv_options:type_name -> google.cloud.dataplex.v1.Asset.DiscoverySpec.CsvOptions
	39, // 45: google.cloud.dataplex.v1.Asset.DiscoverySpec.json_options:type_name -> google.cloud.dataplex.v1.Asset.DiscoverySpec.JsonOptions
	8,  // 46: google.cloud.dataplex.v1.Asset.ResourceSpec.type:type_name -> google.cloud.dataplex.v1.Asset.ResourceSpec.Type
	9,  // 47: google.cloud.dataplex.v1.Asset.ResourceStatus.state:type_name -> google.cloud.dataplex.v1.Asset.ResourceStatus.State
	41, // 48: google.cloud.dataplex.v1.Asset.ResourceStatus.update_time:type_name -> google.protobuf.Timestamp
	10, // 49: google.cloud.dataplex.v1.Asset.DiscoveryStatus.state:type_name -> google.cloud.dataplex.v1.Asset.DiscoveryStatus.State
	41, // 50: google.cloud.dataplex.v1.Asset.DiscoveryStatus.update_time:type_name -> google.protobuf.Timestamp
	41, // 51: google.cloud.dataplex.v1.Asset.DiscoveryStatus.last_run_time:type_name -> google.protobuf.Timestamp
	40, // 52: google.cloud.dataplex.v1.Asset.DiscoveryStatus.stats:type_name -> google.cloud.dataplex.v1.Asset.DiscoveryStatus.Stats
	42, // 53: google.cloud.dataplex.v1.Asset.DiscoveryStatus.last_run_duration:type_name -> google.protobuf.Duration
	54, // [54:54] is the sub-list for method output_type
	54, // [54:54] is the sub-list for method input_type
	54, // [54:54] is the sub-list for extension type_name
	54, // [54:54] is the sub-list for extension extendee
	0,  // [0:54] is the sub-list for field type_name
}

func init() { file_google_cloud_dataplex_v1_resources_proto_init() }
func file_google_cloud_dataplex_v1_resources_proto_init() {
	if File_google_cloud_dataplex_v1_resources_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Lake); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AssetStatus); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Zone); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Action); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Asset); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Lake_Metastore); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Lake_MetastoreStatus); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Zone_ResourceSpec); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Zone_DiscoverySpec); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Zone_DiscoverySpec_CsvOptions); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Zone_DiscoverySpec_JsonOptions); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Action_MissingResource); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Action_UnauthorizedResource); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Action_FailedSecurityPolicyApply); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Action_InvalidDataFormat); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Action_IncompatibleDataSchema); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Action_InvalidDataPartition); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Action_MissingData); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Action_InvalidDataOrganization); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Asset_SecurityStatus); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Asset_DiscoverySpec); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Asset_ResourceSpec); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Asset_ResourceStatus); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Asset_DiscoveryStatus); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Asset_DiscoverySpec_CsvOptions); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Asset_DiscoverySpec_JsonOptions); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_google_cloud_dataplex_v1_resources_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Asset_DiscoveryStatus_Stats); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_google_cloud_dataplex_v1_resources_proto_msgTypes[3].OneofWrappers = []interface{}{
		(*Action_InvalidDataFormat_)(nil),
		(*Action_IncompatibleDataSchema_)(nil),
		(*Action_InvalidDataPartition_)(nil),
		(*Action_MissingData_)(nil),
		(*Action_MissingResource_)(nil),
		(*Action_UnauthorizedResource_)(nil),
		(*Action_FailedSecurityPolicyApply_)(nil),
		(*Action_InvalidDataOrganization_)(nil),
	}
	file_google_cloud_dataplex_v1_resources_proto_msgTypes[9].OneofWrappers = []interface{}{
		(*Zone_DiscoverySpec_Schedule)(nil),
	}
	file_google_cloud_dataplex_v1_resources_proto_msgTypes[22].OneofWrappers = []interface{}{
		(*Asset_DiscoverySpec_Schedule)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_google_cloud_dataplex_v1_resources_proto_rawDesc,
			NumEnums:      11,
			NumMessages:   30,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_google_cloud_dataplex_v1_resources_proto_goTypes,
		DependencyIndexes: file_google_cloud_dataplex_v1_resources_proto_depIdxs,
		EnumInfos:         file_google_cloud_dataplex_v1_resources_proto_enumTypes,
		MessageInfos:      file_google_cloud_dataplex_v1_resources_proto_msgTypes,
	}.Build()
	File_google_cloud_dataplex_v1_resources_proto = out.File
	file_google_cloud_dataplex_v1_resources_proto_rawDesc = nil
	file_google_cloud_dataplex_v1_resources_proto_goTypes = nil
	file_google_cloud_dataplex_v1_resources_proto_depIdxs = nil
}
