// Copyright 2025 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.35.2
// 	protoc        v4.25.7
// source: google/cloud/retail/v2/search_service.proto

package retailpb

import (
	context "context"
	_ "google.golang.org/genproto/googleapis/api/annotations"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb"
	structpb "google.golang.org/protobuf/types/known/structpb"
	reflect "reflect"
	sync "sync"
)

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

// The search mode of each search request.
type SearchRequest_SearchMode int32

const (
	// Default value. In this case both product search and faceted search will
	// be performed. Both
	// [SearchResponse.SearchResult][google.cloud.retail.v2.SearchResponse.SearchResult]
	// and [SearchResponse.Facet][google.cloud.retail.v2.SearchResponse.Facet]
	// will be returned.
	SearchRequest_SEARCH_MODE_UNSPECIFIED SearchRequest_SearchMode = 0
	// Only product search will be performed. The faceted search will be
	// disabled.
	//
	// Only
	// [SearchResponse.SearchResult][google.cloud.retail.v2.SearchResponse.SearchResult]
	// will be returned.
	// [SearchResponse.Facet][google.cloud.retail.v2.SearchResponse.Facet] will
	// not be returned, even if
	// [SearchRequest.facet_specs][google.cloud.retail.v2.SearchRequest.facet_specs]
	// or
	// [SearchRequest.dynamic_facet_spec][google.cloud.retail.v2.SearchRequest.dynamic_facet_spec]
	// is set.
	SearchRequest_PRODUCT_SEARCH_ONLY SearchRequest_SearchMode = 1
	// Only faceted search will be performed. The product search will be
	// disabled.
	//
	// When in this mode, one or both of
	// [SearchRequest.facet_specs][google.cloud.retail.v2.SearchRequest.facet_specs]
	// and
	// [SearchRequest.dynamic_facet_spec][google.cloud.retail.v2.SearchRequest.dynamic_facet_spec]
	// should be set. Otherwise, an INVALID_ARGUMENT error is returned. Only
	// [SearchResponse.Facet][google.cloud.retail.v2.SearchResponse.Facet] will
	// be returned.
	// [SearchResponse.SearchResult][google.cloud.retail.v2.SearchResponse.SearchResult]
	// will not be returned.
	SearchRequest_FACETED_SEARCH_ONLY SearchRequest_SearchMode = 2
)

// Enum value maps for SearchRequest_SearchMode.
var (
	SearchRequest_SearchMode_name = map[int32]string{
		0: "SEARCH_MODE_UNSPECIFIED",
		1: "PRODUCT_SEARCH_ONLY",
		2: "FACETED_SEARCH_ONLY",
	}
	SearchRequest_SearchMode_value = map[string]int32{
		"SEARCH_MODE_UNSPECIFIED": 0,
		"PRODUCT_SEARCH_ONLY":     1,
		"FACETED_SEARCH_ONLY":     2,
	}
)

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

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

func (SearchRequest_SearchMode) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_retail_v2_search_service_proto_enumTypes[0].Descriptor()
}

func (SearchRequest_SearchMode) Type() protoreflect.EnumType {
	return &file_google_cloud_retail_v2_search_service_proto_enumTypes[0]
}

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

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

// Enum to control DynamicFacet mode
type SearchRequest_DynamicFacetSpec_Mode int32

const (
	// Default value.
	SearchRequest_DynamicFacetSpec_MODE_UNSPECIFIED SearchRequest_DynamicFacetSpec_Mode = 0
	// Disable Dynamic Facet.
	SearchRequest_DynamicFacetSpec_DISABLED SearchRequest_DynamicFacetSpec_Mode = 1
	// Automatic mode built by Google Retail Search.
	SearchRequest_DynamicFacetSpec_ENABLED SearchRequest_DynamicFacetSpec_Mode = 2
)

// Enum value maps for SearchRequest_DynamicFacetSpec_Mode.
var (
	SearchRequest_DynamicFacetSpec_Mode_name = map[int32]string{
		0: "MODE_UNSPECIFIED",
		1: "DISABLED",
		2: "ENABLED",
	}
	SearchRequest_DynamicFacetSpec_Mode_value = map[string]int32{
		"MODE_UNSPECIFIED": 0,
		"DISABLED":         1,
		"ENABLED":          2,
	}
)

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

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

func (SearchRequest_DynamicFacetSpec_Mode) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_retail_v2_search_service_proto_enumTypes[1].Descriptor()
}

func (SearchRequest_DynamicFacetSpec_Mode) Type() protoreflect.EnumType {
	return &file_google_cloud_retail_v2_search_service_proto_enumTypes[1]
}

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

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

// Enum describing under which condition query expansion should occur.
type SearchRequest_QueryExpansionSpec_Condition int32

const (
	// Unspecified query expansion condition. In this case, server behavior
	// defaults to
	// [Condition.DISABLED][google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition.DISABLED].
	SearchRequest_QueryExpansionSpec_CONDITION_UNSPECIFIED SearchRequest_QueryExpansionSpec_Condition = 0
	// Disabled query expansion. Only the exact search query is used, even if
	// [SearchResponse.total_size][google.cloud.retail.v2.SearchResponse.total_size]
	// is zero.
	SearchRequest_QueryExpansionSpec_DISABLED SearchRequest_QueryExpansionSpec_Condition = 1
	// Automatic query expansion built by Google Retail Search.
	SearchRequest_QueryExpansionSpec_AUTO SearchRequest_QueryExpansionSpec_Condition = 3
)

// Enum value maps for SearchRequest_QueryExpansionSpec_Condition.
var (
	SearchRequest_QueryExpansionSpec_Condition_name = map[int32]string{
		0: "CONDITION_UNSPECIFIED",
		1: "DISABLED",
		3: "AUTO",
	}
	SearchRequest_QueryExpansionSpec_Condition_value = map[string]int32{
		"CONDITION_UNSPECIFIED": 0,
		"DISABLED":              1,
		"AUTO":                  3,
	}
)

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

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

func (SearchRequest_QueryExpansionSpec_Condition) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_retail_v2_search_service_proto_enumTypes[2].Descriptor()
}

func (SearchRequest_QueryExpansionSpec_Condition) Type() protoreflect.EnumType {
	return &file_google_cloud_retail_v2_search_service_proto_enumTypes[2]
}

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

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

// The personalization mode of each search request.
type SearchRequest_PersonalizationSpec_Mode int32

const (
	// Default value. In this case, server behavior defaults to
	// [Mode.AUTO][google.cloud.retail.v2.SearchRequest.PersonalizationSpec.Mode.AUTO].
	SearchRequest_PersonalizationSpec_MODE_UNSPECIFIED SearchRequest_PersonalizationSpec_Mode = 0
	// Let CRS decide whether to use personalization based on quality of user
	// event data.
	SearchRequest_PersonalizationSpec_AUTO SearchRequest_PersonalizationSpec_Mode = 1
	// Disable personalization.
	SearchRequest_PersonalizationSpec_DISABLED SearchRequest_PersonalizationSpec_Mode = 2
)

// Enum value maps for SearchRequest_PersonalizationSpec_Mode.
var (
	SearchRequest_PersonalizationSpec_Mode_name = map[int32]string{
		0: "MODE_UNSPECIFIED",
		1: "AUTO",
		2: "DISABLED",
	}
	SearchRequest_PersonalizationSpec_Mode_value = map[string]int32{
		"MODE_UNSPECIFIED": 0,
		"AUTO":             1,
		"DISABLED":         2,
	}
)

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

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

func (SearchRequest_PersonalizationSpec_Mode) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_retail_v2_search_service_proto_enumTypes[3].Descriptor()
}

func (SearchRequest_PersonalizationSpec_Mode) Type() protoreflect.EnumType {
	return &file_google_cloud_retail_v2_search_service_proto_enumTypes[3]
}

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

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

// Enum describing under which mode spell correction should occur.
type SearchRequest_SpellCorrectionSpec_Mode int32

const (
	// Unspecified spell correction mode. In this case, server behavior
	// defaults to
	// [Mode.AUTO][google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.Mode.AUTO].
	SearchRequest_SpellCorrectionSpec_MODE_UNSPECIFIED SearchRequest_SpellCorrectionSpec_Mode = 0
	// Google Retail Search will try to find a spell suggestion if there
	// is any and put in the
	// [SearchResponse.corrected_query][google.cloud.retail.v2.SearchResponse.corrected_query].
	// The spell suggestion will not be used as the search query.
	SearchRequest_SpellCorrectionSpec_SUGGESTION_ONLY SearchRequest_SpellCorrectionSpec_Mode = 1
	// Automatic spell correction built by Google Retail Search. Search will
	// be based on the corrected query if found.
	SearchRequest_SpellCorrectionSpec_AUTO SearchRequest_SpellCorrectionSpec_Mode = 2
)

// Enum value maps for SearchRequest_SpellCorrectionSpec_Mode.
var (
	SearchRequest_SpellCorrectionSpec_Mode_name = map[int32]string{
		0: "MODE_UNSPECIFIED",
		1: "SUGGESTION_ONLY",
		2: "AUTO",
	}
	SearchRequest_SpellCorrectionSpec_Mode_value = map[string]int32{
		"MODE_UNSPECIFIED": 0,
		"SUGGESTION_ONLY":  1,
		"AUTO":             2,
	}
)

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

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

func (SearchRequest_SpellCorrectionSpec_Mode) Descriptor() protoreflect.EnumDescriptor {
	return file_google_cloud_retail_v2_search_service_proto_enumTypes[4].Descriptor()
}

func (SearchRequest_SpellCorrectionSpec_Mode) Type() protoreflect.EnumType {
	return &file_google_cloud_retail_v2_search_service_proto_enumTypes[4]
}

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

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

// Product attribute which structured by an attribute name and value. This
// structure is used in conversational search filters and answers. For example,
// if we have `name=color` and `value=red`, this means that the color is `red`.
type ProductAttributeValue struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The attribute name.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The attribute value.
	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}

func (x *ProductAttributeValue) Reset() {
	*x = ProductAttributeValue{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*ProductAttributeValue) ProtoMessage() {}

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

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

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

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

// Product attribute name and numeric interval.
type ProductAttributeInterval struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The attribute name (e.g. "length")
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The numeric interval (e.g. [10, 20))
	Interval *Interval `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"`
}

func (x *ProductAttributeInterval) Reset() {
	*x = ProductAttributeInterval{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*ProductAttributeInterval) ProtoMessage() {}

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

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

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

func (x *ProductAttributeInterval) GetInterval() *Interval {
	if x != nil {
		return x.Interval
	}
	return nil
}

// This field specifies the tile information including an attribute key,
// attribute value. More fields will be added in the future, eg: product id
// or product counts, etc.
type Tile struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The attribute key and value for the tile.
	//
	// Types that are assignable to ProductAttribute:
	//
	//	*Tile_ProductAttributeValue
	//	*Tile_ProductAttributeInterval
	ProductAttribute isTile_ProductAttribute `protobuf_oneof:"product_attribute"`
	// The representative product id for this tile.
	RepresentativeProductId string `protobuf:"bytes,3,opt,name=representative_product_id,json=representativeProductId,proto3" json:"representative_product_id,omitempty"`
}

func (x *Tile) Reset() {
	*x = Tile{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*Tile) ProtoMessage() {}

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

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

func (m *Tile) GetProductAttribute() isTile_ProductAttribute {
	if m != nil {
		return m.ProductAttribute
	}
	return nil
}

func (x *Tile) GetProductAttributeValue() *ProductAttributeValue {
	if x, ok := x.GetProductAttribute().(*Tile_ProductAttributeValue); ok {
		return x.ProductAttributeValue
	}
	return nil
}

func (x *Tile) GetProductAttributeInterval() *ProductAttributeInterval {
	if x, ok := x.GetProductAttribute().(*Tile_ProductAttributeInterval); ok {
		return x.ProductAttributeInterval
	}
	return nil
}

func (x *Tile) GetRepresentativeProductId() string {
	if x != nil {
		return x.RepresentativeProductId
	}
	return ""
}

type isTile_ProductAttribute interface {
	isTile_ProductAttribute()
}

type Tile_ProductAttributeValue struct {
	// The product attribute key-value.
	ProductAttributeValue *ProductAttributeValue `protobuf:"bytes,1,opt,name=product_attribute_value,json=productAttributeValue,proto3,oneof"`
}

type Tile_ProductAttributeInterval struct {
	// The product attribute key-numeric interval.
	ProductAttributeInterval *ProductAttributeInterval `protobuf:"bytes,2,opt,name=product_attribute_interval,json=productAttributeInterval,proto3,oneof"`
}

func (*Tile_ProductAttributeValue) isTile_ProductAttribute() {}

func (*Tile_ProductAttributeInterval) isTile_ProductAttribute() {}

// Request message for
// [SearchService.Search][google.cloud.retail.v2.SearchService.Search] method.
type SearchRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. The resource name of the Retail Search serving config, such as
	// `projects/*/locations/global/catalogs/default_catalog/servingConfigs/default_serving_config`
	// or the name of the legacy placement resource, such as
	// `projects/*/locations/global/catalogs/default_catalog/placements/default_search`.
	// This field is used to identify the serving config name and the set
	// of models that are used to make the search.
	Placement string `protobuf:"bytes,1,opt,name=placement,proto3" json:"placement,omitempty"`
	// The branch resource name, such as
	// `projects/*/locations/global/catalogs/default_catalog/branches/0`.
	//
	// Use "default_branch" as the branch ID or leave this field empty, to search
	// products under the default branch.
	Branch string `protobuf:"bytes,2,opt,name=branch,proto3" json:"branch,omitempty"`
	// Raw search query.
	//
	// If this field is empty, the request is considered a category browsing
	// request and returned results are based on
	// [filter][google.cloud.retail.v2.SearchRequest.filter] and
	// [page_categories][google.cloud.retail.v2.SearchRequest.page_categories].
	Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"`
	// Required. A unique identifier for tracking visitors. For example, this
	// could be implemented with an HTTP cookie, which should be able to uniquely
	// identify a visitor on a single device. This unique identifier should not
	// change if the visitor logs in or out of the website.
	//
	// This should be the same identifier as
	// [UserEvent.visitor_id][google.cloud.retail.v2.UserEvent.visitor_id].
	//
	// The field must be a UTF-8 encoded string with a length limit of 128
	// characters. Otherwise, an INVALID_ARGUMENT error is returned.
	VisitorId string `protobuf:"bytes,4,opt,name=visitor_id,json=visitorId,proto3" json:"visitor_id,omitempty"`
	// User information.
	UserInfo *UserInfo `protobuf:"bytes,5,opt,name=user_info,json=userInfo,proto3" json:"user_info,omitempty"`
	// Maximum number of [Product][google.cloud.retail.v2.Product]s to return. If
	// unspecified, defaults to a reasonable value. The maximum allowed value is
	// 120. Values above 120 will be coerced to 120.
	//
	// If this field is negative, an INVALID_ARGUMENT is returned.
	PageSize int32 `protobuf:"varint,7,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
	// A page token
	// [SearchResponse.next_page_token][google.cloud.retail.v2.SearchResponse.next_page_token],
	// received from a previous
	// [SearchService.Search][google.cloud.retail.v2.SearchService.Search] call.
	// Provide this to retrieve the subsequent page.
	//
	// When paginating, all other parameters provided to
	// [SearchService.Search][google.cloud.retail.v2.SearchService.Search] must
	// match the call that provided the page token. Otherwise, an INVALID_ARGUMENT
	// error is returned.
	PageToken string `protobuf:"bytes,8,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
	// A 0-indexed integer that specifies the current offset (that is, starting
	// result location, amongst the [Product][google.cloud.retail.v2.Product]s
	// deemed by the API as relevant) in search results. This field is only
	// considered if [page_token][google.cloud.retail.v2.SearchRequest.page_token]
	// is unset.
	//
	// If this field is negative, an INVALID_ARGUMENT is returned.
	Offset int32 `protobuf:"varint,9,opt,name=offset,proto3" json:"offset,omitempty"`
	// The filter syntax consists of an expression language for constructing a
	// predicate from one or more fields of the products being filtered. Filter
	// expression is case-sensitive. For more information, see
	// [Filter](https://cloud.google.com/retail/docs/filter-and-order#filter).
	//
	// If this field is unrecognizable, an INVALID_ARGUMENT is returned.
	Filter string `protobuf:"bytes,10,opt,name=filter,proto3" json:"filter,omitempty"`
	// The default filter that is applied when a user performs a search without
	// checking any filters on the search page.
	//
	// The filter applied to every search request when quality improvement such as
	// query expansion is needed. In the case a query does not have a sufficient
	// amount of results this filter will be used to determine whether or not to
	// enable the query expansion flow. The original filter will still be used for
	// the query expanded search.
	// This field is strongly recommended to achieve high search quality.
	//
	// For more information about filter syntax, see
	// [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter].
	CanonicalFilter string `protobuf:"bytes,28,opt,name=canonical_filter,json=canonicalFilter,proto3" json:"canonical_filter,omitempty"`
	// The order in which products are returned. Products can be ordered by
	// a field in an [Product][google.cloud.retail.v2.Product] object. Leave it
	// unset if ordered by relevance. OrderBy expression is case-sensitive. For
	// more information, see
	// [Order](https://cloud.google.com/retail/docs/filter-and-order#order).
	//
	// If this field is unrecognizable, an INVALID_ARGUMENT is returned.
	OrderBy string `protobuf:"bytes,11,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
	// Facet specifications for faceted search. If empty, no facets are returned.
	//
	// A maximum of 200 values are allowed. Otherwise, an INVALID_ARGUMENT error
	// is returned.
	FacetSpecs []*SearchRequest_FacetSpec `protobuf:"bytes,12,rep,name=facet_specs,json=facetSpecs,proto3" json:"facet_specs,omitempty"`
	// Deprecated. Refer to https://cloud.google.com/retail/docs/configs#dynamic
	// to enable dynamic facets. Do not set this field.
	//
	// The specification for dynamically generated facets. Notice that only
	// textual facets can be dynamically generated.
	//
	// Deprecated: Marked as deprecated in google/cloud/retail/v2/search_service.proto.
	DynamicFacetSpec *SearchRequest_DynamicFacetSpec `protobuf:"bytes,21,opt,name=dynamic_facet_spec,json=dynamicFacetSpec,proto3" json:"dynamic_facet_spec,omitempty"`
	// Boost specification to boost certain products. For more information, see
	// [Boost results](https://cloud.google.com/retail/docs/boosting).
	//
	// Notice that if both
	// [ServingConfig.boost_control_ids][google.cloud.retail.v2.ServingConfig.boost_control_ids]
	// and
	// [SearchRequest.boost_spec][google.cloud.retail.v2.SearchRequest.boost_spec]
	// are set, the boost conditions from both places are evaluated. If a search
	// request matches multiple boost conditions, the final boost score is equal
	// to the sum of the boost scores from all matched boost conditions.
	BoostSpec *SearchRequest_BoostSpec `protobuf:"bytes,13,opt,name=boost_spec,json=boostSpec,proto3" json:"boost_spec,omitempty"`
	// The query expansion specification that specifies the conditions under which
	// query expansion occurs. For more information, see [Query
	// expansion](https://cloud.google.com/retail/docs/result-size#query_expansion).
	QueryExpansionSpec *SearchRequest_QueryExpansionSpec `protobuf:"bytes,14,opt,name=query_expansion_spec,json=queryExpansionSpec,proto3" json:"query_expansion_spec,omitempty"`
	// The keys to fetch and rollup the matching
	// [variant][google.cloud.retail.v2.Product.Type.VARIANT]
	// [Product][google.cloud.retail.v2.Product]s attributes,
	// [FulfillmentInfo][google.cloud.retail.v2.FulfillmentInfo] or
	// [LocalInventory][google.cloud.retail.v2.LocalInventory]s attributes. The
	// attributes from all the matching
	// [variant][google.cloud.retail.v2.Product.Type.VARIANT]
	// [Product][google.cloud.retail.v2.Product]s or
	// [LocalInventory][google.cloud.retail.v2.LocalInventory]s are merged and
	// de-duplicated. Notice that rollup attributes will lead to extra query
	// latency. Maximum number of keys is 30.
	//
	// For [FulfillmentInfo][google.cloud.retail.v2.FulfillmentInfo], a
	// fulfillment type and a fulfillment ID must be provided in the format of
	// "fulfillmentType.fulfillmentId". E.g., in "pickupInStore.store123",
	// "pickupInStore" is fulfillment type and "store123" is the store ID.
	//
	// Supported keys are:
	//
	//   - colorFamilies
	//   - price
	//   - originalPrice
	//   - discount
	//   - variantId
	//   - inventory(place_id,price)
	//   - inventory(place_id,original_price)
	//   - inventory(place_id,attributes.key), where key is any key in the
	//     [Product.local_inventories.attributes][google.cloud.retail.v2.LocalInventory.attributes]
	//     map.
	//   - attributes.key, where key is any key in the
	//     [Product.attributes][google.cloud.retail.v2.Product.attributes] map.
	//   - pickupInStore.id, where id is any
	//
	// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
	// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
	//
	//	"pickup-in-store".
	//
	// * shipToStore.id, where id is any
	// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
	// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
	//
	//	"ship-to-store".
	//
	// * sameDayDelivery.id, where id is any
	// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
	// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
	//
	//	"same-day-delivery".
	//
	// * nextDayDelivery.id, where id is any
	// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
	// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
	//
	//	"next-day-delivery".
	//
	// * customFulfillment1.id, where id is any
	// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
	// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
	//
	//	"custom-type-1".
	//
	// * customFulfillment2.id, where id is any
	// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
	// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
	//
	//	"custom-type-2".
	//
	// * customFulfillment3.id, where id is any
	// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
	// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
	//
	//	"custom-type-3".
	//
	// * customFulfillment4.id, where id is any
	// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
	// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
	//
	//	"custom-type-4".
	//
	// * customFulfillment5.id, where id is any
	// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
	// for [FulfillmentInfo.type][google.cloud.retail.v2.FulfillmentInfo.type]
	//
	//	"custom-type-5".
	//
	// If this field is set to an invalid value other than these, an
	// INVALID_ARGUMENT error is returned.
	VariantRollupKeys []string `protobuf:"bytes,17,rep,name=variant_rollup_keys,json=variantRollupKeys,proto3" json:"variant_rollup_keys,omitempty"`
	// The categories associated with a category page. Must be set for category
	// navigation queries to achieve good search quality. The format should be
	// the same as
	// [UserEvent.page_categories][google.cloud.retail.v2.UserEvent.page_categories];
	//
	// To represent full path of category, use '>' sign to separate different
	// hierarchies. If '>' is part of the category name, replace it with
	// other character(s).
	//
	// Category pages include special pages such as sales or promotions. For
	// instance, a special sale page may have the category hierarchy:
	// "pageCategories" : ["Sales > 2017 Black Friday Deals"].
	PageCategories []string `protobuf:"bytes,23,rep,name=page_categories,json=pageCategories,proto3" json:"page_categories,omitempty"`
	// The search mode of the search request. If not specified, a single search
	// request triggers both product search and faceted search.
	SearchMode SearchRequest_SearchMode `protobuf:"varint,31,opt,name=search_mode,json=searchMode,proto3,enum=google.cloud.retail.v2.SearchRequest_SearchMode" json:"search_mode,omitempty"`
	// The specification for personalization.
	//
	// Notice that if both
	// [ServingConfig.personalization_spec][google.cloud.retail.v2.ServingConfig.personalization_spec]
	// and
	// [SearchRequest.personalization_spec][google.cloud.retail.v2.SearchRequest.personalization_spec]
	// are set.
	// [SearchRequest.personalization_spec][google.cloud.retail.v2.SearchRequest.personalization_spec]
	// will override
	// [ServingConfig.personalization_spec][google.cloud.retail.v2.ServingConfig.personalization_spec].
	PersonalizationSpec *SearchRequest_PersonalizationSpec `protobuf:"bytes,32,opt,name=personalization_spec,json=personalizationSpec,proto3" json:"personalization_spec,omitempty"`
	// The labels applied to a resource must meet the following requirements:
	//
	//   - Each resource can have multiple labels, up to a maximum of 64.
	//   - Each label must be a key-value pair.
	//   - Keys have a minimum length of 1 character and a maximum length of 63
	//     characters and cannot be empty. Values can be empty and have a maximum
	//     length of 63 characters.
	//   - Keys and values can contain only lowercase letters, numeric characters,
	//     underscores, and dashes. All characters must use UTF-8 encoding, and
	//     international characters are allowed.
	//   - The key portion of a label must be unique. However, you can use the same
	//     key with multiple resources.
	//   - Keys must start with a lowercase letter or international character.
	//
	// For more information, see [Requirements for
	// labels](https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements)
	// in the Resource Manager documentation.
	Labels map[string]string `protobuf:"bytes,34,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// The spell correction specification that specifies the mode under
	// which spell correction will take effect.
	SpellCorrectionSpec *SearchRequest_SpellCorrectionSpec `protobuf:"bytes,35,opt,name=spell_correction_spec,json=spellCorrectionSpec,proto3,oneof" json:"spell_correction_spec,omitempty"`
	// The entity for customers that may run multiple different entities, domains,
	// sites or regions, for example, `Google US`, `Google Ads`, `Waymo`,
	// `google.com`, `youtube.com`, etc.
	// If this is set, it should be exactly matched with
	// [UserEvent.entity][google.cloud.retail.v2.UserEvent.entity] to get search
	// results boosted by entity.
	Entity string `protobuf:"bytes,38,opt,name=entity,proto3" json:"entity,omitempty"`
	// Optional. This field specifies all conversational related parameters
	// addition to traditional retail search.
	ConversationalSearchSpec *SearchRequest_ConversationalSearchSpec `protobuf:"bytes,40,opt,name=conversational_search_spec,json=conversationalSearchSpec,proto3" json:"conversational_search_spec,omitempty"`
	// Optional. This field specifies tile navigation related parameters.
	TileNavigationSpec *SearchRequest_TileNavigationSpec `protobuf:"bytes,41,opt,name=tile_navigation_spec,json=tileNavigationSpec,proto3" json:"tile_navigation_spec,omitempty"`
	// Optional. The BCP-47 language code, such as "en-US" or "sr-Latn"
	// [list](https://www.unicode.org/cldr/charts/46/summary/root.html). For more
	// information, see [Standardized codes](https://google.aip.dev/143). This
	// field helps to better interpret the query. If a value isn't specified, the
	// query language code is automatically detected, which may not be accurate.
	LanguageCode string `protobuf:"bytes,43,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
	// Optional. The Unicode country/region code (CLDR) of a location, such as
	// "US" and "419"
	// [list](https://www.unicode.org/cldr/charts/46/supplemental/territory_information.html).
	// For more information, see [Standardized codes](https://google.aip.dev/143).
	// If set, then results will be boosted based on the region_code provided.
	RegionCode string `protobuf:"bytes,44,opt,name=region_code,json=regionCode,proto3" json:"region_code,omitempty"`
	// Optional. An id corresponding to a place, such as a store id or region id.
	// When specified, we use the price from the local inventory with the matching
	// product's
	// [LocalInventory.place_id][google.cloud.retail.v2.LocalInventory.place_id]
	// for revenue optimization.
	PlaceId string `protobuf:"bytes,46,opt,name=place_id,json=placeId,proto3" json:"place_id,omitempty"`
	// Optional. The user attributes that could be used for personalization of
	// search results.
	// * Populate at most 100 key-value pairs per query.
	// * Only supports string keys and repeated string values.
	// * Duplcate keys are not allowed within a single query.
	//
	// Example:
	//
	//	user_attributes: [
	//	 { key: "pets"
	//	   value {
	//	     values: "dog"
	//	     values: "cat"
	//	   }
	//	 },
	//	 { key: "state"
	//	   value {
	//	     values: "CA"
	//	   }
	//	 }
	//	]
	UserAttributes map[string]*StringList `protobuf:"bytes,47,rep,name=user_attributes,json=userAttributes,proto3" json:"user_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}

func (x *SearchRequest) Reset() {
	*x = SearchRequest{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest) ProtoMessage() {}

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

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

func (x *SearchRequest) GetPlacement() string {
	if x != nil {
		return x.Placement
	}
	return ""
}

func (x *SearchRequest) GetBranch() string {
	if x != nil {
		return x.Branch
	}
	return ""
}

func (x *SearchRequest) GetQuery() string {
	if x != nil {
		return x.Query
	}
	return ""
}

func (x *SearchRequest) GetVisitorId() string {
	if x != nil {
		return x.VisitorId
	}
	return ""
}

func (x *SearchRequest) GetUserInfo() *UserInfo {
	if x != nil {
		return x.UserInfo
	}
	return nil
}

func (x *SearchRequest) GetPageSize() int32 {
	if x != nil {
		return x.PageSize
	}
	return 0
}

func (x *SearchRequest) GetPageToken() string {
	if x != nil {
		return x.PageToken
	}
	return ""
}

func (x *SearchRequest) GetOffset() int32 {
	if x != nil {
		return x.Offset
	}
	return 0
}

func (x *SearchRequest) GetFilter() string {
	if x != nil {
		return x.Filter
	}
	return ""
}

func (x *SearchRequest) GetCanonicalFilter() string {
	if x != nil {
		return x.CanonicalFilter
	}
	return ""
}

func (x *SearchRequest) GetOrderBy() string {
	if x != nil {
		return x.OrderBy
	}
	return ""
}

func (x *SearchRequest) GetFacetSpecs() []*SearchRequest_FacetSpec {
	if x != nil {
		return x.FacetSpecs
	}
	return nil
}

// Deprecated: Marked as deprecated in google/cloud/retail/v2/search_service.proto.
func (x *SearchRequest) GetDynamicFacetSpec() *SearchRequest_DynamicFacetSpec {
	if x != nil {
		return x.DynamicFacetSpec
	}
	return nil
}

func (x *SearchRequest) GetBoostSpec() *SearchRequest_BoostSpec {
	if x != nil {
		return x.BoostSpec
	}
	return nil
}

func (x *SearchRequest) GetQueryExpansionSpec() *SearchRequest_QueryExpansionSpec {
	if x != nil {
		return x.QueryExpansionSpec
	}
	return nil
}

func (x *SearchRequest) GetVariantRollupKeys() []string {
	if x != nil {
		return x.VariantRollupKeys
	}
	return nil
}

func (x *SearchRequest) GetPageCategories() []string {
	if x != nil {
		return x.PageCategories
	}
	return nil
}

func (x *SearchRequest) GetSearchMode() SearchRequest_SearchMode {
	if x != nil {
		return x.SearchMode
	}
	return SearchRequest_SEARCH_MODE_UNSPECIFIED
}

func (x *SearchRequest) GetPersonalizationSpec() *SearchRequest_PersonalizationSpec {
	if x != nil {
		return x.PersonalizationSpec
	}
	return nil
}

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

func (x *SearchRequest) GetSpellCorrectionSpec() *SearchRequest_SpellCorrectionSpec {
	if x != nil {
		return x.SpellCorrectionSpec
	}
	return nil
}

func (x *SearchRequest) GetEntity() string {
	if x != nil {
		return x.Entity
	}
	return ""
}

func (x *SearchRequest) GetConversationalSearchSpec() *SearchRequest_ConversationalSearchSpec {
	if x != nil {
		return x.ConversationalSearchSpec
	}
	return nil
}

func (x *SearchRequest) GetTileNavigationSpec() *SearchRequest_TileNavigationSpec {
	if x != nil {
		return x.TileNavigationSpec
	}
	return nil
}

func (x *SearchRequest) GetLanguageCode() string {
	if x != nil {
		return x.LanguageCode
	}
	return ""
}

func (x *SearchRequest) GetRegionCode() string {
	if x != nil {
		return x.RegionCode
	}
	return ""
}

func (x *SearchRequest) GetPlaceId() string {
	if x != nil {
		return x.PlaceId
	}
	return ""
}

func (x *SearchRequest) GetUserAttributes() map[string]*StringList {
	if x != nil {
		return x.UserAttributes
	}
	return nil
}

// Response message for
// [SearchService.Search][google.cloud.retail.v2.SearchService.Search] method.
type SearchResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// A list of matched items. The order represents the ranking.
	Results []*SearchResponse_SearchResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"`
	// Results of facets requested by user.
	Facets []*SearchResponse_Facet `protobuf:"bytes,2,rep,name=facets,proto3" json:"facets,omitempty"`
	// The estimated total count of matched items irrespective of pagination. The
	// count of [results][google.cloud.retail.v2.SearchResponse.results] returned
	// by pagination may be less than the
	// [total_size][google.cloud.retail.v2.SearchResponse.total_size] that
	// matches.
	TotalSize int32 `protobuf:"varint,3,opt,name=total_size,json=totalSize,proto3" json:"total_size,omitempty"`
	// Contains the spell corrected query, if found. If the spell correction type
	// is AUTOMATIC, then the search results are based on corrected_query.
	// Otherwise the original query is used for search.
	CorrectedQuery string `protobuf:"bytes,4,opt,name=corrected_query,json=correctedQuery,proto3" json:"corrected_query,omitempty"`
	// A unique search token. This should be included in the
	// [UserEvent][google.cloud.retail.v2.UserEvent] logs resulting from this
	// search, which enables accurate attribution of search model performance.
	AttributionToken string `protobuf:"bytes,5,opt,name=attribution_token,json=attributionToken,proto3" json:"attribution_token,omitempty"`
	// A token that can be sent as
	// [SearchRequest.page_token][google.cloud.retail.v2.SearchRequest.page_token]
	// to retrieve the next page. If this field is omitted, there are no
	// subsequent pages.
	NextPageToken string `protobuf:"bytes,6,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
	// Query expansion information for the returned results.
	QueryExpansionInfo *SearchResponse_QueryExpansionInfo `protobuf:"bytes,7,opt,name=query_expansion_info,json=queryExpansionInfo,proto3" json:"query_expansion_info,omitempty"`
	// The URI of a customer-defined redirect page. If redirect action is
	// triggered, no search is performed, and only
	// [redirect_uri][google.cloud.retail.v2.SearchResponse.redirect_uri] and
	// [attribution_token][google.cloud.retail.v2.SearchResponse.attribution_token]
	// are set in the response.
	RedirectUri string `protobuf:"bytes,10,opt,name=redirect_uri,json=redirectUri,proto3" json:"redirect_uri,omitempty"`
	// The fully qualified resource name of applied
	// [controls](https://cloud.google.com/retail/docs/serving-control-rules).
	AppliedControls []string `protobuf:"bytes,12,rep,name=applied_controls,json=appliedControls,proto3" json:"applied_controls,omitempty"`
	// Metadata for pin controls which were applicable to the request.
	// This contains two map fields, one for all matched pins and one for pins
	// which were matched but not applied.
	//
	// The two maps are keyed by pin position, and the values are the product ids
	// which were matched to that pin.
	PinControlMetadata *PinControlMetadata `protobuf:"bytes,22,opt,name=pin_control_metadata,json=pinControlMetadata,proto3" json:"pin_control_metadata,omitempty"`
	// The invalid
	// [SearchRequest.BoostSpec.condition_boost_specs][google.cloud.retail.v2.SearchRequest.BoostSpec.condition_boost_specs]
	// that are not applied during serving.
	InvalidConditionBoostSpecs []*SearchRequest_BoostSpec_ConditionBoostSpec `protobuf:"bytes,14,rep,name=invalid_condition_boost_specs,json=invalidConditionBoostSpecs,proto3" json:"invalid_condition_boost_specs,omitempty"`
	// Metadata related to A/B testing experiment associated with this
	// response. Only exists when an experiment is triggered.
	ExperimentInfo []*ExperimentInfo `protobuf:"bytes,17,rep,name=experiment_info,json=experimentInfo,proto3" json:"experiment_info,omitempty"`
	// This field specifies all related information that is needed on client
	// side for UI rendering of conversational retail search.
	ConversationalSearchResult *SearchResponse_ConversationalSearchResult `protobuf:"bytes,18,opt,name=conversational_search_result,json=conversationalSearchResult,proto3" json:"conversational_search_result,omitempty"`
	// This field specifies all related information for tile navigation that will
	// be used in client side.
	TileNavigationResult *SearchResponse_TileNavigationResult `protobuf:"bytes,19,opt,name=tile_navigation_result,json=tileNavigationResult,proto3" json:"tile_navigation_result,omitempty"`
}

func (x *SearchResponse) Reset() {
	*x = SearchResponse{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchResponse) ProtoMessage() {}

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

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

func (x *SearchResponse) GetResults() []*SearchResponse_SearchResult {
	if x != nil {
		return x.Results
	}
	return nil
}

func (x *SearchResponse) GetFacets() []*SearchResponse_Facet {
	if x != nil {
		return x.Facets
	}
	return nil
}

func (x *SearchResponse) GetTotalSize() int32 {
	if x != nil {
		return x.TotalSize
	}
	return 0
}

func (x *SearchResponse) GetCorrectedQuery() string {
	if x != nil {
		return x.CorrectedQuery
	}
	return ""
}

func (x *SearchResponse) GetAttributionToken() string {
	if x != nil {
		return x.AttributionToken
	}
	return ""
}

func (x *SearchResponse) GetNextPageToken() string {
	if x != nil {
		return x.NextPageToken
	}
	return ""
}

func (x *SearchResponse) GetQueryExpansionInfo() *SearchResponse_QueryExpansionInfo {
	if x != nil {
		return x.QueryExpansionInfo
	}
	return nil
}

func (x *SearchResponse) GetRedirectUri() string {
	if x != nil {
		return x.RedirectUri
	}
	return ""
}

func (x *SearchResponse) GetAppliedControls() []string {
	if x != nil {
		return x.AppliedControls
	}
	return nil
}

func (x *SearchResponse) GetPinControlMetadata() *PinControlMetadata {
	if x != nil {
		return x.PinControlMetadata
	}
	return nil
}

func (x *SearchResponse) GetInvalidConditionBoostSpecs() []*SearchRequest_BoostSpec_ConditionBoostSpec {
	if x != nil {
		return x.InvalidConditionBoostSpecs
	}
	return nil
}

func (x *SearchResponse) GetExperimentInfo() []*ExperimentInfo {
	if x != nil {
		return x.ExperimentInfo
	}
	return nil
}

func (x *SearchResponse) GetConversationalSearchResult() *SearchResponse_ConversationalSearchResult {
	if x != nil {
		return x.ConversationalSearchResult
	}
	return nil
}

func (x *SearchResponse) GetTileNavigationResult() *SearchResponse_TileNavigationResult {
	if x != nil {
		return x.TileNavigationResult
	}
	return nil
}

// Metadata for active A/B testing experiment.
type ExperimentInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Information associated with the specific experiment entity being recorded.
	//
	// Types that are assignable to ExperimentMetadata:
	//
	//	*ExperimentInfo_ServingConfigExperiment_
	ExperimentMetadata isExperimentInfo_ExperimentMetadata `protobuf_oneof:"experiment_metadata"`
	// The fully qualified resource name of the experiment that provides the
	// serving config under test, should an active experiment exist. For example:
	// `projects/*/locations/global/catalogs/default_catalog/experiments/experiment_id`
	Experiment string `protobuf:"bytes,1,opt,name=experiment,proto3" json:"experiment,omitempty"`
}

func (x *ExperimentInfo) Reset() {
	*x = ExperimentInfo{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*ExperimentInfo) ProtoMessage() {}

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

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

func (m *ExperimentInfo) GetExperimentMetadata() isExperimentInfo_ExperimentMetadata {
	if m != nil {
		return m.ExperimentMetadata
	}
	return nil
}

func (x *ExperimentInfo) GetServingConfigExperiment() *ExperimentInfo_ServingConfigExperiment {
	if x, ok := x.GetExperimentMetadata().(*ExperimentInfo_ServingConfigExperiment_); ok {
		return x.ServingConfigExperiment
	}
	return nil
}

func (x *ExperimentInfo) GetExperiment() string {
	if x != nil {
		return x.Experiment
	}
	return ""
}

type isExperimentInfo_ExperimentMetadata interface {
	isExperimentInfo_ExperimentMetadata()
}

type ExperimentInfo_ServingConfigExperiment_ struct {
	// A/B test between existing Cloud Retail Search
	// [ServingConfig][google.cloud.retail.v2.ServingConfig]s.
	ServingConfigExperiment *ExperimentInfo_ServingConfigExperiment `protobuf:"bytes,2,opt,name=serving_config_experiment,json=servingConfigExperiment,proto3,oneof"`
}

func (*ExperimentInfo_ServingConfigExperiment_) isExperimentInfo_ExperimentMetadata() {}

// A facet specification to perform faceted search.
type SearchRequest_FacetSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. The facet key specification.
	FacetKey *SearchRequest_FacetSpec_FacetKey `protobuf:"bytes,1,opt,name=facet_key,json=facetKey,proto3" json:"facet_key,omitempty"`
	// Maximum of facet values that should be returned for this facet. If
	// unspecified, defaults to 50. The maximum allowed value is 300. Values
	// above 300 will be coerced to 300.
	//
	// If this field is negative, an INVALID_ARGUMENT is returned.
	Limit int32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"`
	// List of keys to exclude when faceting.
	//
	// By default,
	// [FacetKey.key][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.key]
	// is not excluded from the filter unless it is listed in this field.
	//
	// Listing a facet key in this field allows its values to appear as facet
	// results, even when they are filtered out of search results. Using this
	// field does not affect what search results are returned.
	//
	// For example, suppose there are 100 products with the color facet "Red"
	// and 200 products with the color facet "Blue". A query containing the
	// filter "colorFamilies:ANY("Red")" and having "colorFamilies" as
	// [FacetKey.key][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.key]
	// would by default return only "Red" products in the search results, and
	// also return "Red" with count 100 as the only color facet. Although there
	// are also blue products available, "Blue" would not be shown as an
	// available facet value.
	//
	// If "colorFamilies" is listed in "excludedFilterKeys", then the query
	// returns the facet values "Red" with count 100 and "Blue" with count
	// 200, because the "colorFamilies" key is now excluded from the filter.
	// Because this field doesn't affect search results, the search results
	// are still correctly filtered to return only "Red" products.
	//
	// A maximum of 100 values are allowed. Otherwise, an INVALID_ARGUMENT error
	// is returned.
	ExcludedFilterKeys []string `protobuf:"bytes,3,rep,name=excluded_filter_keys,json=excludedFilterKeys,proto3" json:"excluded_filter_keys,omitempty"`
	// Enables dynamic position for this facet. If set to true, the position of
	// this facet among all facets in the response is determined by Google
	// Retail Search. It is ordered together with dynamic facets if dynamic
	// facets is enabled. If set to false, the position of this facet in the
	// response is the same as in the request, and it is ranked before
	// the facets with dynamic position enable and all dynamic facets.
	//
	// For example, you may always want to have rating facet returned in
	// the response, but it's not necessarily to always display the rating facet
	// at the top. In that case, you can set enable_dynamic_position to true so
	// that the position of rating facet in response is determined by
	// Google Retail Search.
	//
	// Another example, assuming you have the following facets in the request:
	//
	// * "rating", enable_dynamic_position = true
	//
	// * "price", enable_dynamic_position = false
	//
	// * "brands", enable_dynamic_position = false
	//
	// And also you have a dynamic facets enable, which generates a facet
	// "gender". Then, the final order of the facets in the response can be
	// ("price", "brands", "rating", "gender") or ("price", "brands", "gender",
	// "rating") depends on how Google Retail Search orders "gender" and
	// "rating" facets. However, notice that "price" and "brands" are always
	// ranked at first and second position because their enable_dynamic_position
	// values are false.
	EnableDynamicPosition bool `protobuf:"varint,4,opt,name=enable_dynamic_position,json=enableDynamicPosition,proto3" json:"enable_dynamic_position,omitempty"`
}

func (x *SearchRequest_FacetSpec) Reset() {
	*x = SearchRequest_FacetSpec{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_FacetSpec) ProtoMessage() {}

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

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

func (x *SearchRequest_FacetSpec) GetFacetKey() *SearchRequest_FacetSpec_FacetKey {
	if x != nil {
		return x.FacetKey
	}
	return nil
}

func (x *SearchRequest_FacetSpec) GetLimit() int32 {
	if x != nil {
		return x.Limit
	}
	return 0
}

func (x *SearchRequest_FacetSpec) GetExcludedFilterKeys() []string {
	if x != nil {
		return x.ExcludedFilterKeys
	}
	return nil
}

func (x *SearchRequest_FacetSpec) GetEnableDynamicPosition() bool {
	if x != nil {
		return x.EnableDynamicPosition
	}
	return false
}

// The specifications of dynamically generated facets.
type SearchRequest_DynamicFacetSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Mode of the DynamicFacet feature.
	// Defaults to
	// [Mode.DISABLED][google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.Mode.DISABLED]
	// if it's unset.
	Mode SearchRequest_DynamicFacetSpec_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=google.cloud.retail.v2.SearchRequest_DynamicFacetSpec_Mode" json:"mode,omitempty"`
}

func (x *SearchRequest_DynamicFacetSpec) Reset() {
	*x = SearchRequest_DynamicFacetSpec{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_DynamicFacetSpec) ProtoMessage() {}

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

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

func (x *SearchRequest_DynamicFacetSpec) GetMode() SearchRequest_DynamicFacetSpec_Mode {
	if x != nil {
		return x.Mode
	}
	return SearchRequest_DynamicFacetSpec_MODE_UNSPECIFIED
}

// Boost specification to boost certain items.
type SearchRequest_BoostSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Condition boost specifications. If a product matches multiple conditions
	// in the specifications, boost scores from these specifications are all
	// applied and combined in a non-linear way. Maximum number of
	// specifications is 20.
	ConditionBoostSpecs []*SearchRequest_BoostSpec_ConditionBoostSpec `protobuf:"bytes,1,rep,name=condition_boost_specs,json=conditionBoostSpecs,proto3" json:"condition_boost_specs,omitempty"`
	// Whether to skip boostspec validation. If this field is set to true,
	// invalid
	// [BoostSpec.condition_boost_specs][google.cloud.retail.v2.SearchRequest.BoostSpec.condition_boost_specs]
	// will be ignored and valid
	// [BoostSpec.condition_boost_specs][google.cloud.retail.v2.SearchRequest.BoostSpec.condition_boost_specs]
	// will still be applied.
	SkipBoostSpecValidation *bool `protobuf:"varint,2,opt,name=skip_boost_spec_validation,json=skipBoostSpecValidation,proto3,oneof" json:"skip_boost_spec_validation,omitempty"`
}

func (x *SearchRequest_BoostSpec) Reset() {
	*x = SearchRequest_BoostSpec{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_BoostSpec) ProtoMessage() {}

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

// Deprecated: Use SearchRequest_BoostSpec.ProtoReflect.Descriptor instead.
func (*SearchRequest_BoostSpec) Descriptor() ([]byte, []int) {
	return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{3, 2}
}

func (x *SearchRequest_BoostSpec) GetConditionBoostSpecs() []*SearchRequest_BoostSpec_ConditionBoostSpec {
	if x != nil {
		return x.ConditionBoostSpecs
	}
	return nil
}

func (x *SearchRequest_BoostSpec) GetSkipBoostSpecValidation() bool {
	if x != nil && x.SkipBoostSpecValidation != nil {
		return *x.SkipBoostSpecValidation
	}
	return false
}

// Specification to determine under which conditions query expansion should
// occur.
type SearchRequest_QueryExpansionSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The condition under which query expansion should occur. Default to
	// [Condition.DISABLED][google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition.DISABLED].
	Condition SearchRequest_QueryExpansionSpec_Condition `protobuf:"varint,1,opt,name=condition,proto3,enum=google.cloud.retail.v2.SearchRequest_QueryExpansionSpec_Condition" json:"condition,omitempty"`
	// Whether to pin unexpanded results. The default value is false. If this
	// field is set to true,
	// unexpanded products are always at the top of the search results, followed
	// by the expanded results.
	PinUnexpandedResults bool `protobuf:"varint,2,opt,name=pin_unexpanded_results,json=pinUnexpandedResults,proto3" json:"pin_unexpanded_results,omitempty"`
}

func (x *SearchRequest_QueryExpansionSpec) Reset() {
	*x = SearchRequest_QueryExpansionSpec{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_QueryExpansionSpec) ProtoMessage() {}

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

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

func (x *SearchRequest_QueryExpansionSpec) GetCondition() SearchRequest_QueryExpansionSpec_Condition {
	if x != nil {
		return x.Condition
	}
	return SearchRequest_QueryExpansionSpec_CONDITION_UNSPECIFIED
}

func (x *SearchRequest_QueryExpansionSpec) GetPinUnexpandedResults() bool {
	if x != nil {
		return x.PinUnexpandedResults
	}
	return false
}

// The specification for personalization.
type SearchRequest_PersonalizationSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Defaults to
	// [Mode.AUTO][google.cloud.retail.v2.SearchRequest.PersonalizationSpec.Mode.AUTO].
	Mode SearchRequest_PersonalizationSpec_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=google.cloud.retail.v2.SearchRequest_PersonalizationSpec_Mode" json:"mode,omitempty"`
}

func (x *SearchRequest_PersonalizationSpec) Reset() {
	*x = SearchRequest_PersonalizationSpec{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_PersonalizationSpec) ProtoMessage() {}

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

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

func (x *SearchRequest_PersonalizationSpec) GetMode() SearchRequest_PersonalizationSpec_Mode {
	if x != nil {
		return x.Mode
	}
	return SearchRequest_PersonalizationSpec_MODE_UNSPECIFIED
}

// The specification for query spell correction.
type SearchRequest_SpellCorrectionSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The mode under which spell correction should take effect to
	// replace the original search query. Default to
	// [Mode.AUTO][google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.Mode.AUTO].
	Mode SearchRequest_SpellCorrectionSpec_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=google.cloud.retail.v2.SearchRequest_SpellCorrectionSpec_Mode" json:"mode,omitempty"`
}

func (x *SearchRequest_SpellCorrectionSpec) Reset() {
	*x = SearchRequest_SpellCorrectionSpec{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[11]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_SpellCorrectionSpec) ProtoMessage() {}

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

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

func (x *SearchRequest_SpellCorrectionSpec) GetMode() SearchRequest_SpellCorrectionSpec_Mode {
	if x != nil {
		return x.Mode
	}
	return SearchRequest_SpellCorrectionSpec_MODE_UNSPECIFIED
}

// This field specifies all conversational related parameters addition to
// traditional retail search.
type SearchRequest_ConversationalSearchSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// This field specifies whether the customer would like to do conversational
	// search. If this field is set to true, conversational related extra
	// information will be returned from server side, including follow-up
	// question, answer options, etc.
	FollowupConversationRequested bool `protobuf:"varint,1,opt,name=followup_conversation_requested,json=followupConversationRequested,proto3" json:"followup_conversation_requested,omitempty"`
	// This field specifies the conversation id, which maintains the state of
	// the conversation between client side and server side. Use the value from
	// the previous [ConversationalSearchResult.conversation_id][]. For the
	// initial request, this should be empty.
	ConversationId string `protobuf:"bytes,2,opt,name=conversation_id,json=conversationId,proto3" json:"conversation_id,omitempty"`
	// This field specifies the current user answer during the conversational
	// search. This can be either user selected from suggested answers or user
	// input plain text.
	UserAnswer *SearchRequest_ConversationalSearchSpec_UserAnswer `protobuf:"bytes,3,opt,name=user_answer,json=userAnswer,proto3" json:"user_answer,omitempty"`
}

func (x *SearchRequest_ConversationalSearchSpec) Reset() {
	*x = SearchRequest_ConversationalSearchSpec{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[12]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_ConversationalSearchSpec) ProtoMessage() {}

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

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

func (x *SearchRequest_ConversationalSearchSpec) GetFollowupConversationRequested() bool {
	if x != nil {
		return x.FollowupConversationRequested
	}
	return false
}

func (x *SearchRequest_ConversationalSearchSpec) GetConversationId() string {
	if x != nil {
		return x.ConversationId
	}
	return ""
}

func (x *SearchRequest_ConversationalSearchSpec) GetUserAnswer() *SearchRequest_ConversationalSearchSpec_UserAnswer {
	if x != nil {
		return x.UserAnswer
	}
	return nil
}

// This field specifies tile navigation related parameters.
type SearchRequest_TileNavigationSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// This field specifies whether the customer would like to request tile
	// navigation.
	TileNavigationRequested bool `protobuf:"varint,1,opt,name=tile_navigation_requested,json=tileNavigationRequested,proto3" json:"tile_navigation_requested,omitempty"`
	// This optional field specifies the tiles which are already clicked in
	// client side. While the feature works without this field set, particularly
	// for an initial query, it is highly recommended to set this field because
	// it can improve the quality of the search response and removes possible
	// duplicate tiles.
	//
	// NOTE: This field is not being used for filtering search
	// products. Client side should also put all the applied tiles in
	// [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter].
	AppliedTiles []*Tile `protobuf:"bytes,2,rep,name=applied_tiles,json=appliedTiles,proto3" json:"applied_tiles,omitempty"`
}

func (x *SearchRequest_TileNavigationSpec) Reset() {
	*x = SearchRequest_TileNavigationSpec{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[13]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_TileNavigationSpec) ProtoMessage() {}

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

// Deprecated: Use SearchRequest_TileNavigationSpec.ProtoReflect.Descriptor instead.
func (*SearchRequest_TileNavigationSpec) Descriptor() ([]byte, []int) {
	return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{3, 7}
}

func (x *SearchRequest_TileNavigationSpec) GetTileNavigationRequested() bool {
	if x != nil {
		return x.TileNavigationRequested
	}
	return false
}

func (x *SearchRequest_TileNavigationSpec) GetAppliedTiles() []*Tile {
	if x != nil {
		return x.AppliedTiles
	}
	return nil
}

// Specifies how a facet is computed.
type SearchRequest_FacetSpec_FacetKey struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. Supported textual and numerical facet keys in
	// [Product][google.cloud.retail.v2.Product] object, over which the facet
	// values are computed. Facet key is case-sensitive.
	//
	// Allowed facet keys when
	// [FacetKey.query][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.query]
	// is not specified:
	//
	// * textual_field =
	//   - "brands"
	//   - "categories"
	//   - "genders"
	//   - "ageGroups"
	//   - "availability"
	//   - "colorFamilies"
	//   - "colors"
	//   - "sizes"
	//   - "materials"
	//   - "patterns"
	//   - "conditions"
	//   - "attributes.key"
	//   - "pickupInStore"
	//   - "shipToStore"
	//   - "sameDayDelivery"
	//   - "nextDayDelivery"
	//   - "customFulfillment1"
	//   - "customFulfillment2"
	//   - "customFulfillment3"
	//   - "customFulfillment4"
	//   - "customFulfillment5"
	//   - "inventory(place_id,attributes.key)"
	//
	// * numerical_field =
	//   - "price"
	//   - "discount"
	//   - "rating"
	//   - "ratingCount"
	//   - "attributes.key"
	//   - "inventory(place_id,price)"
	//   - "inventory(place_id,original_price)"
	//   - "inventory(place_id,attributes.key)"
	Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	// Set only if values should be bucketized into intervals. Must be set
	// for facets with numerical values. Must not be set for facet with text
	// values. Maximum number of intervals is 40.
	//
	// For all numerical facet keys that appear in the list of products from
	// the catalog, the percentiles 0, 10, 30, 50, 70, 90, and 100 are
	// computed from their distribution weekly. If the model assigns a high
	// score to a numerical facet key and its intervals are not specified in
	// the search request, these percentiles become the bounds
	// for its intervals and are returned in the response. If the
	// facet key intervals are specified in the request, then the specified
	// intervals are returned instead.
	Intervals []*Interval `protobuf:"bytes,2,rep,name=intervals,proto3" json:"intervals,omitempty"`
	// Only get facet for the given restricted values. For example, when using
	// "pickupInStore" as key and set restricted values to
	// ["store123", "store456"], only facets for "store123" and "store456" are
	// returned. Only supported on predefined textual fields, custom textual
	// attributes and fulfillments. Maximum is 20.
	//
	// Must be set for the fulfillment facet keys:
	//
	// * pickupInStore
	//
	// * shipToStore
	//
	// * sameDayDelivery
	//
	// * nextDayDelivery
	//
	// * customFulfillment1
	//
	// * customFulfillment2
	//
	// * customFulfillment3
	//
	// * customFulfillment4
	//
	// * customFulfillment5
	RestrictedValues []string `protobuf:"bytes,3,rep,name=restricted_values,json=restrictedValues,proto3" json:"restricted_values,omitempty"`
	// Only get facet values that start with the given string prefix. For
	// example, suppose "categories" has three values "Women > Shoe",
	// "Women > Dress" and "Men > Shoe". If set "prefixes" to "Women", the
	// "categories" facet gives only "Women > Shoe" and "Women > Dress".
	// Only supported on textual fields. Maximum is 10.
	Prefixes []string `protobuf:"bytes,8,rep,name=prefixes,proto3" json:"prefixes,omitempty"`
	// Only get facet values that contains the given strings. For example,
	// suppose "categories" has three values "Women > Shoe",
	// "Women > Dress" and "Men > Shoe". If set "contains" to "Shoe", the
	// "categories" facet gives only "Women > Shoe" and "Men > Shoe".
	// Only supported on textual fields. Maximum is 10.
	Contains []string `protobuf:"bytes,9,rep,name=contains,proto3" json:"contains,omitempty"`
	// True to make facet keys case insensitive when getting faceting
	// values with prefixes or contains; false otherwise.
	CaseInsensitive bool `protobuf:"varint,10,opt,name=case_insensitive,json=caseInsensitive,proto3" json:"case_insensitive,omitempty"`
	// The order in which
	// [SearchResponse.Facet.values][google.cloud.retail.v2.SearchResponse.Facet.values]
	// are returned.
	//
	// Allowed values are:
	//
	// * "count desc", which means order by
	// [SearchResponse.Facet.values.count][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.count]
	// descending.
	//
	// * "value desc", which means order by
	// [SearchResponse.Facet.values.value][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.value]
	// descending.
	//
	//	Only applies to textual facets.
	//
	// If not set, textual values are sorted in [natural
	// order](https://en.wikipedia.org/wiki/Natural_sort_order); numerical
	// intervals are sorted in the order given by
	// [FacetSpec.FacetKey.intervals][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.intervals];
	// [FulfillmentInfo.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids]
	// are sorted in the order given by
	// [FacetSpec.FacetKey.restricted_values][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.restricted_values].
	OrderBy string `protobuf:"bytes,4,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"`
	// The query that is used to compute facet for the given facet key.
	// When provided, it overrides the default behavior of facet
	// computation. The query syntax is the same as a filter expression. See
	// [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter] for
	// detail syntax and limitations. Notice that there is no limitation on
	// [FacetKey.key][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.key]
	// when query is specified.
	//
	// In the response,
	// [SearchResponse.Facet.values.value][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.value]
	// is always "1" and
	// [SearchResponse.Facet.values.count][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.count]
	// is the number of results that match the query.
	//
	// For example, you can set a customized facet for "shipToStore",
	// where
	// [FacetKey.key][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.key]
	// is "customizedShipToStore", and
	// [FacetKey.query][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.query]
	// is "availability: ANY(\"IN_STOCK\") AND shipToStore: ANY(\"123\")".
	// Then the facet counts the products that are both in stock and ship
	// to store "123".
	Query string `protobuf:"bytes,5,opt,name=query,proto3" json:"query,omitempty"`
	// Returns the min and max value for each numerical facet intervals.
	// Ignored for textual facets.
	ReturnMinMax bool `protobuf:"varint,11,opt,name=return_min_max,json=returnMinMax,proto3" json:"return_min_max,omitempty"`
}

func (x *SearchRequest_FacetSpec_FacetKey) Reset() {
	*x = SearchRequest_FacetSpec_FacetKey{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[16]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_FacetSpec_FacetKey) ProtoMessage() {}

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

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

func (x *SearchRequest_FacetSpec_FacetKey) GetKey() string {
	if x != nil {
		return x.Key
	}
	return ""
}

func (x *SearchRequest_FacetSpec_FacetKey) GetIntervals() []*Interval {
	if x != nil {
		return x.Intervals
	}
	return nil
}

func (x *SearchRequest_FacetSpec_FacetKey) GetRestrictedValues() []string {
	if x != nil {
		return x.RestrictedValues
	}
	return nil
}

func (x *SearchRequest_FacetSpec_FacetKey) GetPrefixes() []string {
	if x != nil {
		return x.Prefixes
	}
	return nil
}

func (x *SearchRequest_FacetSpec_FacetKey) GetContains() []string {
	if x != nil {
		return x.Contains
	}
	return nil
}

func (x *SearchRequest_FacetSpec_FacetKey) GetCaseInsensitive() bool {
	if x != nil {
		return x.CaseInsensitive
	}
	return false
}

func (x *SearchRequest_FacetSpec_FacetKey) GetOrderBy() string {
	if x != nil {
		return x.OrderBy
	}
	return ""
}

func (x *SearchRequest_FacetSpec_FacetKey) GetQuery() string {
	if x != nil {
		return x.Query
	}
	return ""
}

func (x *SearchRequest_FacetSpec_FacetKey) GetReturnMinMax() bool {
	if x != nil {
		return x.ReturnMinMax
	}
	return false
}

// Boost applies to products which match a condition.
type SearchRequest_BoostSpec_ConditionBoostSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// An expression which specifies a boost condition. The syntax and
	// supported fields are the same as a filter expression. See
	// [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter] for
	// detail syntax and limitations.
	//
	// Examples:
	//
	// * To boost products with product ID "product_1" or "product_2", and
	// color
	//
	//	"Red" or "Blue":
	//	  * (id: ANY("product_1", "product_2")) AND (colorFamilies:
	//	  ANY("Red","Blue"))
	Condition string `protobuf:"bytes,1,opt,name=condition,proto3" json:"condition,omitempty"`
	// Strength of the condition boost, which should be in [-1, 1]. Negative
	// boost means demotion. Default is 0.0.
	//
	// Setting to 1.0 gives the item a big promotion. However, it does not
	// necessarily mean that the boosted item will be the top result at all
	// times, nor that other items will be excluded. Results could still be
	// shown even when none of them matches the condition. And results that
	// are significantly more relevant to the search query can still trump
	// your heavily favored but irrelevant items.
	//
	// Setting to -1.0 gives the item a big demotion. However, results that
	// are deeply relevant might still be shown. The item will have an
	// upstream battle to get a fairly high ranking, but it is not blocked out
	// completely.
	//
	// Setting to 0.0 means no boost applied. The boosting condition is
	// ignored.
	Boost float32 `protobuf:"fixed32,2,opt,name=boost,proto3" json:"boost,omitempty"`
}

func (x *SearchRequest_BoostSpec_ConditionBoostSpec) Reset() {
	*x = SearchRequest_BoostSpec_ConditionBoostSpec{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[17]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_BoostSpec_ConditionBoostSpec) ProtoMessage() {}

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

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

func (x *SearchRequest_BoostSpec_ConditionBoostSpec) GetCondition() string {
	if x != nil {
		return x.Condition
	}
	return ""
}

func (x *SearchRequest_BoostSpec_ConditionBoostSpec) GetBoost() float32 {
	if x != nil {
		return x.Boost
	}
	return 0
}

// This field specifies the current user answer during the conversational
// search. This can be either user selected from suggested answers or user
// input plain text.
type SearchRequest_ConversationalSearchSpec_UserAnswer struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// This field specifies the type of user answer.
	//
	// Types that are assignable to Type:
	//
	//	*SearchRequest_ConversationalSearchSpec_UserAnswer_TextAnswer
	//	*SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer_
	Type isSearchRequest_ConversationalSearchSpec_UserAnswer_Type `protobuf_oneof:"type"`
}

func (x *SearchRequest_ConversationalSearchSpec_UserAnswer) Reset() {
	*x = SearchRequest_ConversationalSearchSpec_UserAnswer{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[18]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_ConversationalSearchSpec_UserAnswer) ProtoMessage() {}

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

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

func (m *SearchRequest_ConversationalSearchSpec_UserAnswer) GetType() isSearchRequest_ConversationalSearchSpec_UserAnswer_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (x *SearchRequest_ConversationalSearchSpec_UserAnswer) GetTextAnswer() string {
	if x, ok := x.GetType().(*SearchRequest_ConversationalSearchSpec_UserAnswer_TextAnswer); ok {
		return x.TextAnswer
	}
	return ""
}

func (x *SearchRequest_ConversationalSearchSpec_UserAnswer) GetSelectedAnswer() *SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer {
	if x, ok := x.GetType().(*SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer_); ok {
		return x.SelectedAnswer
	}
	return nil
}

type isSearchRequest_ConversationalSearchSpec_UserAnswer_Type interface {
	isSearchRequest_ConversationalSearchSpec_UserAnswer_Type()
}

type SearchRequest_ConversationalSearchSpec_UserAnswer_TextAnswer struct {
	// This field specifies the incremental input text from the user during
	// the conversational search.
	TextAnswer string `protobuf:"bytes,1,opt,name=text_answer,json=textAnswer,proto3,oneof"`
}

type SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer_ struct {
	// This field specifies the selected attributes during the
	// conversational search. This should be a subset of
	// [ConversationalSearchResult.suggested_answers][].
	SelectedAnswer *SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer `protobuf:"bytes,2,opt,name=selected_answer,json=selectedAnswer,proto3,oneof"`
}

func (*SearchRequest_ConversationalSearchSpec_UserAnswer_TextAnswer) isSearchRequest_ConversationalSearchSpec_UserAnswer_Type() {
}

func (*SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer_) isSearchRequest_ConversationalSearchSpec_UserAnswer_Type() {
}

// This field specifies the selected answers during the conversational
// search.
type SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// This field is deprecated and should not be set.
	//
	// Deprecated: Marked as deprecated in google/cloud/retail/v2/search_service.proto.
	ProductAttributeValues []*ProductAttributeValue `protobuf:"bytes,1,rep,name=product_attribute_values,json=productAttributeValues,proto3" json:"product_attribute_values,omitempty"`
	// This field specifies the selected answer which is a attribute
	// key-value.
	ProductAttributeValue *ProductAttributeValue `protobuf:"bytes,2,opt,name=product_attribute_value,json=productAttributeValue,proto3" json:"product_attribute_value,omitempty"`
}

func (x *SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer) Reset() {
	*x = SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[19]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer) ProtoMessage() {}

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

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

// Deprecated: Marked as deprecated in google/cloud/retail/v2/search_service.proto.
func (x *SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer) GetProductAttributeValues() []*ProductAttributeValue {
	if x != nil {
		return x.ProductAttributeValues
	}
	return nil
}

func (x *SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer) GetProductAttributeValue() *ProductAttributeValue {
	if x != nil {
		return x.ProductAttributeValue
	}
	return nil
}

// Represents the search results.
type SearchResponse_SearchResult struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// [Product.id][google.cloud.retail.v2.Product.id] of the searched
	// [Product][google.cloud.retail.v2.Product].
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// The product data snippet in the search response. Only
	// [Product.name][google.cloud.retail.v2.Product.name] is guaranteed to be
	// populated.
	//
	// [Product.variants][google.cloud.retail.v2.Product.variants] contains the
	// product variants that match the search query. If there are multiple
	// product variants matching the query, top 5 most relevant product variants
	// are returned and ordered by relevancy.
	//
	// If relevancy can be deternmined, use
	// [matching_variant_fields][google.cloud.retail.v2.SearchResponse.SearchResult.matching_variant_fields]
	// to look up matched product variants fields. If relevancy cannot be
	// determined, e.g. when searching "shoe" all products in a shoe product can
	// be a match, 5 product variants are returned but order is meaningless.
	Product *Product `protobuf:"bytes,2,opt,name=product,proto3" json:"product,omitempty"`
	// The count of matched
	// [variant][google.cloud.retail.v2.Product.Type.VARIANT]
	// [Product][google.cloud.retail.v2.Product]s.
	MatchingVariantCount int32 `protobuf:"varint,3,opt,name=matching_variant_count,json=matchingVariantCount,proto3" json:"matching_variant_count,omitempty"`
	// If a [variant][google.cloud.retail.v2.Product.Type.VARIANT]
	// [Product][google.cloud.retail.v2.Product] matches the search query, this
	// map indicates which [Product][google.cloud.retail.v2.Product] fields are
	// matched. The key is the
	// [Product.name][google.cloud.retail.v2.Product.name], the value is a field
	// mask of the matched [Product][google.cloud.retail.v2.Product] fields. If
	// matched attributes cannot be determined, this map will be empty.
	//
	// For example, a key "sku1" with field mask
	// "products.color_info" indicates there is a match between
	// "sku1" [ColorInfo][google.cloud.retail.v2.ColorInfo] and the query.
	MatchingVariantFields map[string]*fieldmaskpb.FieldMask `protobuf:"bytes,4,rep,name=matching_variant_fields,json=matchingVariantFields,proto3" json:"matching_variant_fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// The rollup matching
	// [variant][google.cloud.retail.v2.Product.Type.VARIANT]
	// [Product][google.cloud.retail.v2.Product] attributes. The key is one of
	// the
	// [SearchRequest.variant_rollup_keys][google.cloud.retail.v2.SearchRequest.variant_rollup_keys].
	// The values are the merged and de-duplicated
	// [Product][google.cloud.retail.v2.Product] attributes. Notice that the
	// rollup values are respect filter. For example, when filtering by
	// "colorFamilies:ANY(\"red\")" and rollup "colorFamilies", only "red" is
	// returned.
	//
	// For textual and numerical attributes, the rollup values is a list of
	// string or double values with type
	// [google.protobuf.ListValue][google.protobuf.ListValue]. For example, if
	// there are two variants with colors "red" and "blue", the rollup values
	// are
	//
	//	{ key: "colorFamilies"
	//	  value {
	//	    list_value {
	//	      values { string_value: "red" }
	//	      values { string_value: "blue" }
	//	     }
	//	  }
	//	}
	//
	// For [FulfillmentInfo][google.cloud.retail.v2.FulfillmentInfo], the rollup
	// values is a double value with type
	// [google.protobuf.Value][google.protobuf.Value]. For example,
	// `{key: "pickupInStore.store1" value { number_value: 10 }}` means a there
	// are 10 variants in this product are available in the store "store1".
	VariantRollupValues map[string]*structpb.Value `protobuf:"bytes,5,rep,name=variant_rollup_values,json=variantRollupValues,proto3" json:"variant_rollup_values,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Specifies previous events related to this product for this user based on
	// [UserEvent][google.cloud.retail.v2.UserEvent] with same
	// [SearchRequest.visitor_id][google.cloud.retail.v2.SearchRequest.visitor_id]
	// or [UserInfo.user_id][google.cloud.retail.v2.UserInfo.user_id].
	//
	// This is set only when
	// [SearchRequest.PersonalizationSpec.mode][google.cloud.retail.v2.SearchRequest.PersonalizationSpec.mode]
	// is
	// [SearchRequest.PersonalizationSpec.Mode.AUTO][google.cloud.retail.v2.SearchRequest.PersonalizationSpec.Mode.AUTO].
	//
	// Possible values:
	//
	// * `purchased`: Indicates that this product has been purchased before.
	PersonalLabels []string `protobuf:"bytes,7,rep,name=personal_labels,json=personalLabels,proto3" json:"personal_labels,omitempty"`
	// Google provided available scores.
	ModelScores map[string]*DoubleList `protobuf:"bytes,8,rep,name=model_scores,json=modelScores,proto3" json:"model_scores,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}

func (x *SearchResponse_SearchResult) Reset() {
	*x = SearchResponse_SearchResult{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[20]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchResponse_SearchResult) ProtoMessage() {}

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

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

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

func (x *SearchResponse_SearchResult) GetProduct() *Product {
	if x != nil {
		return x.Product
	}
	return nil
}

func (x *SearchResponse_SearchResult) GetMatchingVariantCount() int32 {
	if x != nil {
		return x.MatchingVariantCount
	}
	return 0
}

func (x *SearchResponse_SearchResult) GetMatchingVariantFields() map[string]*fieldmaskpb.FieldMask {
	if x != nil {
		return x.MatchingVariantFields
	}
	return nil
}

func (x *SearchResponse_SearchResult) GetVariantRollupValues() map[string]*structpb.Value {
	if x != nil {
		return x.VariantRollupValues
	}
	return nil
}

func (x *SearchResponse_SearchResult) GetPersonalLabels() []string {
	if x != nil {
		return x.PersonalLabels
	}
	return nil
}

func (x *SearchResponse_SearchResult) GetModelScores() map[string]*DoubleList {
	if x != nil {
		return x.ModelScores
	}
	return nil
}

// A facet result.
type SearchResponse_Facet struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The key for this facet. E.g., "colorFamilies" or "price" or
	// "attributes.attr1".
	Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	// The facet values for this field.
	Values []*SearchResponse_Facet_FacetValue `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"`
	// Whether the facet is dynamically generated.
	DynamicFacet bool `protobuf:"varint,3,opt,name=dynamic_facet,json=dynamicFacet,proto3" json:"dynamic_facet,omitempty"`
}

func (x *SearchResponse_Facet) Reset() {
	*x = SearchResponse_Facet{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[21]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchResponse_Facet) ProtoMessage() {}

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

// Deprecated: Use SearchResponse_Facet.ProtoReflect.Descriptor instead.
func (*SearchResponse_Facet) Descriptor() ([]byte, []int) {
	return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{4, 1}
}

func (x *SearchResponse_Facet) GetKey() string {
	if x != nil {
		return x.Key
	}
	return ""
}

func (x *SearchResponse_Facet) GetValues() []*SearchResponse_Facet_FacetValue {
	if x != nil {
		return x.Values
	}
	return nil
}

func (x *SearchResponse_Facet) GetDynamicFacet() bool {
	if x != nil {
		return x.DynamicFacet
	}
	return false
}

// Information describing query expansion including whether expansion has
// occurred.
type SearchResponse_QueryExpansionInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Bool describing whether query expansion has occurred.
	ExpandedQuery bool `protobuf:"varint,1,opt,name=expanded_query,json=expandedQuery,proto3" json:"expanded_query,omitempty"`
	// Number of pinned results. This field will only be set when expansion
	// happens and
	// [SearchRequest.QueryExpansionSpec.pin_unexpanded_results][google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.pin_unexpanded_results]
	// is set to true.
	PinnedResultCount int64 `protobuf:"varint,2,opt,name=pinned_result_count,json=pinnedResultCount,proto3" json:"pinned_result_count,omitempty"`
}

func (x *SearchResponse_QueryExpansionInfo) Reset() {
	*x = SearchResponse_QueryExpansionInfo{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[22]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchResponse_QueryExpansionInfo) ProtoMessage() {}

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

// Deprecated: Use SearchResponse_QueryExpansionInfo.ProtoReflect.Descriptor instead.
func (*SearchResponse_QueryExpansionInfo) Descriptor() ([]byte, []int) {
	return file_google_cloud_retail_v2_search_service_proto_rawDescGZIP(), []int{4, 2}
}

func (x *SearchResponse_QueryExpansionInfo) GetExpandedQuery() bool {
	if x != nil {
		return x.ExpandedQuery
	}
	return false
}

func (x *SearchResponse_QueryExpansionInfo) GetPinnedResultCount() int64 {
	if x != nil {
		return x.PinnedResultCount
	}
	return 0
}

// This field specifies all related information that is needed on client
// side for UI rendering of conversational retail search.
type SearchResponse_ConversationalSearchResult struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Conversation UUID. This field will be stored in client side storage to
	// maintain the conversation session with server and will be used for next
	// search request's
	// [SearchRequest.ConversationalSearchSpec.conversation_id][google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.conversation_id]
	// to restore conversation state in server.
	ConversationId string `protobuf:"bytes,1,opt,name=conversation_id,json=conversationId,proto3" json:"conversation_id,omitempty"`
	// The current refined query for the conversational search. This field
	// will be used in customer UI that the query in the search bar should be
	// replaced with the refined query. For example, if
	// [SearchRequest.query][google.cloud.retail.v2.SearchRequest.query] is
	// `dress` and next
	// [SearchRequest.ConversationalSearchSpec.UserAnswer.text_answer][google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.text_answer]
	// is `red color`, which does not match any product attribute value filters,
	// the refined query will be `dress, red color`.
	RefinedQuery string `protobuf:"bytes,2,opt,name=refined_query,json=refinedQuery,proto3" json:"refined_query,omitempty"`
	// This field is deprecated but will be kept for backward compatibility.
	// There is expected to have only one additional filter and the value will
	// be the same to the same as field `additional_filter`.
	//
	// Deprecated: Marked as deprecated in google/cloud/retail/v2/search_service.proto.
	AdditionalFilters []*SearchResponse_ConversationalSearchResult_AdditionalFilter `protobuf:"bytes,3,rep,name=additional_filters,json=additionalFilters,proto3" json:"additional_filters,omitempty"`
	// The follow-up question. e.g., `What is the color?`
	FollowupQuestion string `protobuf:"bytes,4,opt,name=followup_question,json=followupQuestion,proto3" json:"followup_question,omitempty"`
	// The answer options provided to client for the follow-up question.
	SuggestedAnswers []*SearchResponse_ConversationalSearchResult_SuggestedAnswer `protobuf:"bytes,5,rep,name=suggested_answers,json=suggestedAnswers,proto3" json:"suggested_answers,omitempty"`
	// This is the incremental additional filters implied from the current
	// user answer. User should add the suggested addition filters to the
	// previous
	// [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter],  and
	// use the merged filter in the follow up search request.
	AdditionalFilter *SearchResponse_ConversationalSearchResult_AdditionalFilter `protobuf:"bytes,6,opt,name=additional_filter,json=additionalFilter,proto3" json:"additional_filter,omitempty"`
}

func (x *SearchResponse_ConversationalSearchResult) Reset() {
	*x = SearchResponse_ConversationalSearchResult{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[23]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchResponse_ConversationalSearchResult) ProtoMessage() {}

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

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

func (x *SearchResponse_ConversationalSearchResult) GetConversationId() string {
	if x != nil {
		return x.ConversationId
	}
	return ""
}

func (x *SearchResponse_ConversationalSearchResult) GetRefinedQuery() string {
	if x != nil {
		return x.RefinedQuery
	}
	return ""
}

// Deprecated: Marked as deprecated in google/cloud/retail/v2/search_service.proto.
func (x *SearchResponse_ConversationalSearchResult) GetAdditionalFilters() []*SearchResponse_ConversationalSearchResult_AdditionalFilter {
	if x != nil {
		return x.AdditionalFilters
	}
	return nil
}

func (x *SearchResponse_ConversationalSearchResult) GetFollowupQuestion() string {
	if x != nil {
		return x.FollowupQuestion
	}
	return ""
}

func (x *SearchResponse_ConversationalSearchResult) GetSuggestedAnswers() []*SearchResponse_ConversationalSearchResult_SuggestedAnswer {
	if x != nil {
		return x.SuggestedAnswers
	}
	return nil
}

func (x *SearchResponse_ConversationalSearchResult) GetAdditionalFilter() *SearchResponse_ConversationalSearchResult_AdditionalFilter {
	if x != nil {
		return x.AdditionalFilter
	}
	return nil
}

// This field specifies all related information for tile navigation that will
// be used in client side.
type SearchResponse_TileNavigationResult struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The current tiles that are used for tile navigation, sorted by
	// engagement.
	Tiles []*Tile `protobuf:"bytes,1,rep,name=tiles,proto3" json:"tiles,omitempty"`
}

func (x *SearchResponse_TileNavigationResult) Reset() {
	*x = SearchResponse_TileNavigationResult{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[24]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchResponse_TileNavigationResult) ProtoMessage() {}

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

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

func (x *SearchResponse_TileNavigationResult) GetTiles() []*Tile {
	if x != nil {
		return x.Tiles
	}
	return nil
}

// A facet value which contains value names and their count.
type SearchResponse_Facet_FacetValue struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// A facet value which contains values.
	//
	// Types that are assignable to FacetValue:
	//
	//	*SearchResponse_Facet_FacetValue_Value
	//	*SearchResponse_Facet_FacetValue_Interval
	FacetValue isSearchResponse_Facet_FacetValue_FacetValue `protobuf_oneof:"facet_value"`
	// Number of items that have this facet value.
	Count int64 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"`
	// The minimum value in the
	// [FacetValue.interval][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.interval].
	// Only supported on numerical facets and returned if
	// [SearchRequest.FacetSpec.FacetKey.return_min_max][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.return_min_max]
	// is true.
	MinValue float64 `protobuf:"fixed64,5,opt,name=min_value,json=minValue,proto3" json:"min_value,omitempty"`
	// The maximum value in the
	// [FacetValue.interval][google.cloud.retail.v2.SearchResponse.Facet.FacetValue.interval].
	// Only supported on numerical facets and returned if
	// [SearchRequest.FacetSpec.FacetKey.return_min_max][google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.return_min_max]
	// is true.
	MaxValue float64 `protobuf:"fixed64,6,opt,name=max_value,json=maxValue,proto3" json:"max_value,omitempty"`
}

func (x *SearchResponse_Facet_FacetValue) Reset() {
	*x = SearchResponse_Facet_FacetValue{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[28]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchResponse_Facet_FacetValue) ProtoMessage() {}

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

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

func (m *SearchResponse_Facet_FacetValue) GetFacetValue() isSearchResponse_Facet_FacetValue_FacetValue {
	if m != nil {
		return m.FacetValue
	}
	return nil
}

func (x *SearchResponse_Facet_FacetValue) GetValue() string {
	if x, ok := x.GetFacetValue().(*SearchResponse_Facet_FacetValue_Value); ok {
		return x.Value
	}
	return ""
}

func (x *SearchResponse_Facet_FacetValue) GetInterval() *Interval {
	if x, ok := x.GetFacetValue().(*SearchResponse_Facet_FacetValue_Interval); ok {
		return x.Interval
	}
	return nil
}

func (x *SearchResponse_Facet_FacetValue) GetCount() int64 {
	if x != nil {
		return x.Count
	}
	return 0
}

func (x *SearchResponse_Facet_FacetValue) GetMinValue() float64 {
	if x != nil {
		return x.MinValue
	}
	return 0
}

func (x *SearchResponse_Facet_FacetValue) GetMaxValue() float64 {
	if x != nil {
		return x.MaxValue
	}
	return 0
}

type isSearchResponse_Facet_FacetValue_FacetValue interface {
	isSearchResponse_Facet_FacetValue_FacetValue()
}

type SearchResponse_Facet_FacetValue_Value struct {
	// Text value of a facet, such as "Black" for facet "colorFamilies".
	Value string `protobuf:"bytes,1,opt,name=value,proto3,oneof"`
}

type SearchResponse_Facet_FacetValue_Interval struct {
	// Interval value for a facet, such as [10, 20) for facet "price".
	Interval *Interval `protobuf:"bytes,2,opt,name=interval,proto3,oneof"`
}

func (*SearchResponse_Facet_FacetValue_Value) isSearchResponse_Facet_FacetValue_FacetValue() {}

func (*SearchResponse_Facet_FacetValue_Interval) isSearchResponse_Facet_FacetValue_FacetValue() {}

// Suggested answers to the follow-up question.
type SearchResponse_ConversationalSearchResult_SuggestedAnswer struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Product attribute value, including an attribute key and an
	// attribute value. Other types can be added here in the future.
	ProductAttributeValue *ProductAttributeValue `protobuf:"bytes,1,opt,name=product_attribute_value,json=productAttributeValue,proto3" json:"product_attribute_value,omitempty"`
}

func (x *SearchResponse_ConversationalSearchResult_SuggestedAnswer) Reset() {
	*x = SearchResponse_ConversationalSearchResult_SuggestedAnswer{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[29]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchResponse_ConversationalSearchResult_SuggestedAnswer) ProtoMessage() {}

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

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

func (x *SearchResponse_ConversationalSearchResult_SuggestedAnswer) GetProductAttributeValue() *ProductAttributeValue {
	if x != nil {
		return x.ProductAttributeValue
	}
	return nil
}

// Additional filter that client side need to apply.
type SearchResponse_ConversationalSearchResult_AdditionalFilter struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Product attribute value, including an attribute key and an
	// attribute value. Other types can be added here in the future.
	ProductAttributeValue *ProductAttributeValue `protobuf:"bytes,1,opt,name=product_attribute_value,json=productAttributeValue,proto3" json:"product_attribute_value,omitempty"`
}

func (x *SearchResponse_ConversationalSearchResult_AdditionalFilter) Reset() {
	*x = SearchResponse_ConversationalSearchResult_AdditionalFilter{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[30]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*SearchResponse_ConversationalSearchResult_AdditionalFilter) ProtoMessage() {}

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

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

func (x *SearchResponse_ConversationalSearchResult_AdditionalFilter) GetProductAttributeValue() *ProductAttributeValue {
	if x != nil {
		return x.ProductAttributeValue
	}
	return nil
}

// Metadata for active serving config A/B tests.
type ExperimentInfo_ServingConfigExperiment struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The fully qualified resource name of the original
	// [SearchRequest.placement][google.cloud.retail.v2.SearchRequest.placement]
	// in the search request prior to reassignment by experiment API. For
	// example: `projects/*/locations/*/catalogs/*/servingConfigs/*`.
	OriginalServingConfig string `protobuf:"bytes,1,opt,name=original_serving_config,json=originalServingConfig,proto3" json:"original_serving_config,omitempty"`
	// The fully qualified resource name of the serving config
	// `Experiment.VariantArm.serving_config_id` responsible for generating
	// the search response. For example:
	// `projects/*/locations/*/catalogs/*/servingConfigs/*`.
	ExperimentServingConfig string `protobuf:"bytes,2,opt,name=experiment_serving_config,json=experimentServingConfig,proto3" json:"experiment_serving_config,omitempty"`
}

func (x *ExperimentInfo_ServingConfigExperiment) Reset() {
	*x = ExperimentInfo_ServingConfigExperiment{}
	mi := &file_google_cloud_retail_v2_search_service_proto_msgTypes[31]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

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

func (*ExperimentInfo_ServingConfigExperiment) ProtoMessage() {}

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

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

func (x *ExperimentInfo_ServingConfigExperiment) GetOriginalServingConfig() string {
	if x != nil {
		return x.OriginalServingConfig
	}
	return ""
}

func (x *ExperimentInfo_ServingConfigExperiment) GetExperimentServingConfig() string {
	if x != nil {
		return x.ExperimentServingConfig
	}
	return ""
}

var File_google_cloud_retail_v2_search_service_proto protoreflect.FileDescriptor

var file_google_cloud_retail_v2_search_service_proto_rawDesc = []byte{
	0x0a, 0x2b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72,
	0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f,
	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
	0x69, 0x6c, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70,
	0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f,
	0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 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, 0x23, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x76, 0x32,
	0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74, 0x61,
	0x69, 0x6c, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x22, 0x41, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x74,
	0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6c, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
	0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76,
	0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76,
	0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76,
	0x32, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65,
	0x72, 0x76, 0x61, 0x6c, 0x22, 0xb2, 0x02, 0x0a, 0x04, 0x54, 0x69, 0x6c, 0x65, 0x12, 0x67, 0x0a,
	0x17, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
	0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41,
	0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52,
	0x15, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
	0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x70, 0x0a, 0x1a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
	0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65,
	0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c,
	0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69,
	0x62, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x18,
	0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
	0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x19, 0x72, 0x65, 0x70, 0x72,
	0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75,
	0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x72, 0x65, 0x70,
	0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75,
	0x63, 0x74, 0x49, 0x64, 0x42, 0x13, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f,
	0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0xde, 0x22, 0x0a, 0x0d, 0x53, 0x65,
	0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x09, 0x70,
	0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03,
	0xe0, 0x41, 0x02, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x39,
	0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21,
	0xfa, 0x41, 0x1e, 0x0a, 0x1c, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x72, 0x61, 0x6e, 0x63,
	0x68, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65,
	0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12,
	0x22, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20,
	0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x76, 0x69, 0x73, 0x69, 0x74, 0x6f,
	0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
	0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e,
	0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18,
	0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12,
	0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16,
	0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
	0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
	0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x29,
	0x0a, 0x10, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74,
	0x65, 0x72, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69,
	0x63, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64,
	0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64,
	0x65, 0x72, 0x42, 0x79, 0x12, 0x50, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x5f, 0x73, 0x70,
	0x65, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e,
	0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
	0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x66, 0x61, 0x63, 0x65,
	0x74, 0x53, 0x70, 0x65, 0x63, 0x73, 0x12, 0x68, 0x0a, 0x12, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69,
	0x63, 0x5f, 0x66, 0x61, 0x63, 0x65, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x15, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
	0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72,
	0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69,
	0x63, 0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x42, 0x02, 0x18, 0x01, 0x52, 0x10,
	0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63,
	0x12, 0x4e, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x0d,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
	0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65,
	0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x6f, 0x6f, 0x73,
	0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63,
	0x12, 0x6a, 0x0a, 0x14, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73,
	0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
	0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x61, 0x6e,
	0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x12, 0x71, 0x75, 0x65, 0x72, 0x79, 0x45,
	0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x2e, 0x0a, 0x13,
	0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x5f, 0x6b,
	0x65, 0x79, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x76, 0x61, 0x72, 0x69, 0x61,
	0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x27, 0x0a, 0x0f,
	0x70, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18,
	0x17, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x67, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67,
	0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f,
	0x6d, 0x6f, 0x64, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c,
	0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x73, 0x65,
	0x61, 0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x6c, 0x0a, 0x14, 0x70, 0x65, 0x72, 0x73,
	0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63,
	0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x65,
	0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65,
	0x63, 0x52, 0x13, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x49, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73,
	0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61,
	0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c,
	0x73, 0x12, 0x72, 0x0a, 0x15, 0x73, 0x70, 0x65, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x70, 0x65, 0x6c, 0x6c, 0x43, 0x6f, 0x72,
	0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x13, 0x73,
	0x70, 0x65, 0x6c, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70,
	0x65, 0x63, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18,
	0x26, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x81, 0x01,
	0x0a, 0x1a, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
	0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x28, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
	0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72,
	0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
	0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x70,
	0x65, 0x63, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x70, 0x65,
	0x63, 0x12, 0x6f, 0x0a, 0x14, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72,
	0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52,
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x76, 0x69, 0x67,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x12,
	0x74, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70,
	0x65, 0x63, 0x12, 0x28, 0x0a, 0x0d, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, 0x63,
	0x6f, 0x64, 0x65, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0c,
	0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0b,
	0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28,
	0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x43, 0x6f,
	0x64, 0x65, 0x12, 0x1e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x2e,
	0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x07, 0x70, 0x6c, 0x61, 0x63, 0x65,
	0x49, 0x64, 0x12, 0x67, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69,
	0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x2f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69,
	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
	0x73, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
	0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x0e, 0x75, 0x73, 0x65,
	0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x1a, 0xb2, 0x04, 0x0a, 0x09,
	0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x5a, 0x0a, 0x09, 0x66, 0x61, 0x63,
	0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
	0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x46, 0x61,
	0x63, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x66, 0x61, 0x63,
	0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x65,
	0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6b,
	0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75,
	0x64, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x36, 0x0a,
	0x17, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f,
	0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15,
	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x50, 0x6f, 0x73,
	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xc8, 0x02, 0x0a, 0x08, 0x46, 0x61, 0x63, 0x65, 0x74, 0x4b,
	0x65, 0x79, 0x12, 0x15, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
	0x03, 0xe0, 0x41, 0x02, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x09, 0x69, 0x6e, 0x74,
	0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
	0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x09,
	0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x73,
	0x74, 0x72, 0x69, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x65, 0x64,
	0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
	0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
	0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x09,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x29,
	0x0a, 0x10, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69,
	0x76, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x61, 0x73, 0x65, 0x49, 0x6e,
	0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64,
	0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64,
	0x65, 0x72, 0x42, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65,
	0x74, 0x75, 0x72, 0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x0b, 0x20, 0x01,
	0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x4d, 0x69, 0x6e, 0x4d, 0x61, 0x78,
	0x1a, 0x9c, 0x01, 0x0a, 0x10, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x46, 0x61, 0x63, 0x65,
	0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x4f, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
	0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61,
	0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d,
	0x69, 0x63, 0x46, 0x61, 0x63, 0x65, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4d, 0x6f, 0x64, 0x65,
	0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x37, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14,
	0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
	0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44,
	0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x1a,
	0xae, 0x02, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x76, 0x0a,
	0x15, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x6f, 0x6f, 0x73, 0x74,
	0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
	0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x2e, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x6f,
	0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63,
	0x52, 0x13, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x73, 0x74,
	0x53, 0x70, 0x65, 0x63, 0x73, 0x12, 0x40, 0x0a, 0x1a, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x62, 0x6f,
	0x6f, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x17, 0x73, 0x6b, 0x69,
	0x70, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x1a, 0x48, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1c, 0x0a,
	0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62,
	0x6f, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x62, 0x6f, 0x6f, 0x73,
	0x74, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x73, 0x74,
	0x5f, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x1a, 0xec, 0x01, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73,
	0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x60, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x42, 0x2e, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c,
	0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
	0x53, 0x70, 0x65, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09,
	0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x69, 0x6e,
	0x5f, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75,
	0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x70, 0x69, 0x6e, 0x55, 0x6e,
	0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22,
	0x3e, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15,
	0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
	0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42,
	0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x03, 0x1a,
	0x9f, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x52, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63,
	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53,
	0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x65, 0x72,
	0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63,
	0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x34, 0x0a, 0x04, 0x4d,
	0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50,
	0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54,
	0x4f, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10,
	0x02, 0x1a, 0xa6, 0x01, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6c, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x52, 0x0a, 0x04, 0x6d, 0x6f, 0x64,
	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
	0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53,
	0x70, 0x65, 0x6c, 0x6c, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70,
	0x65, 0x63, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x3b, 0x0a,
	0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e,
	0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53,
	0x55, 0x47, 0x47, 0x45, 0x53, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01,
	0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x1a, 0x9e, 0x05, 0x0a, 0x18, 0x43,
	0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x61,
	0x72, 0x63, 0x68, 0x53, 0x70, 0x65, 0x63, 0x12, 0x46, 0x0a, 0x1f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f,
	0x77, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
	0x52, 0x1d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72,
	0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12,
	0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
	0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72,
	0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x6a, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72,
	0x5f, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74,
	0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x55, 0x73,
	0x65, 0x72, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x41, 0x6e,
	0x73, 0x77, 0x65, 0x72, 0x1a, 0xa4, 0x03, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x41, 0x6e, 0x73,
	0x77, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0b, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x6e, 0x73, 0x77,
	0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x65, 0x78, 0x74,
	0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x12, 0x83, 0x01, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63,
	0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x58, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x70, 0x65, 0x63,
	0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6c, 0x65,
	0x63, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65,
	0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x1a, 0xe4, 0x01, 0x0a,
	0x0e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x12,
	0x6b, 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69,
	0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64,
	0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75,
	0x63, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
	0x42, 0x02, 0x18, 0x01, 0x52, 0x16, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x74, 0x74,
	0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x65, 0x0a, 0x17,
	0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
	0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74,
	0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x74,
	0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x70, 0x72,
	0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61,
	0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x93, 0x01, 0x0a, 0x12,
	0x54, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70,
	0x65, 0x63, 0x12, 0x3a, 0x0a, 0x19, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x76, 0x69, 0x67,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x74, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x76, 0x69, 0x67,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x41,
	0x0a, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x18,
	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63,
	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x54,
	0x69, 0x6c, 0x65, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6c, 0x65,
	0x73, 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, 0x1a, 0x65, 0x0a, 0x13,
	0x55, 0x73, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e,
	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
	0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74,
	0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
	0x02, 0x38, 0x01, 0x22, 0x5b, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4d, 0x6f, 0x64,
	0x65, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x4d, 0x4f, 0x44, 0x45,
	0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17,
	0x0a, 0x13, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48,
	0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x46, 0x41, 0x43, 0x45, 0x54,
	0x45, 0x44, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02,
	0x42, 0x18, 0x0a, 0x16, 0x5f, 0x73, 0x70, 0x65, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65,
	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x22, 0xb0, 0x19, 0x0a, 0x0e, 0x53,
	0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a,
	0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73,
	0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x06,
	0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
	0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70,
	0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, 0x66, 0x61, 0x63, 0x65,
	0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a,
	0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x71,
	0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x72, 0x72,
	0x65, 0x63, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x74,
	0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69,
	0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f,
	0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
	0x6b, 0x0a, 0x14, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69,
	0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74,
	0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x61, 0x6e,
	0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x12, 0x71, 0x75, 0x65, 0x72, 0x79, 0x45,
	0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x0c,
	0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x0a, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x69, 0x12,
	0x29, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72,
	0x6f, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69,
	0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x12, 0x5c, 0x0a, 0x14, 0x70, 0x69,
	0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
	0x74, 0x61, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76,
	0x32, 0x2e, 0x50, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x4d, 0x65, 0x74, 0x61,
	0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x70, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
	0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x85, 0x01, 0x0a, 0x1d, 0x69, 0x6e, 0x76,
	0x61, 0x6c, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62,
	0x6f, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x42, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65,
	0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x73, 0x74,
	0x53, 0x70, 0x65, 0x63, 0x52, 0x1a, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x6f, 0x6e,
	0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x73, 0x74, 0x53, 0x70, 0x65, 0x63, 0x73,
	0x12, 0x4f, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69,
	0x6e, 0x66, 0x6f, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e,
	0x76, 0x32, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66,
	0x6f, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66,
	0x6f, 0x12, 0x83, 0x01, 0x0a, 0x1c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x72, 0x65, 0x73, 0x75,
	0x6c, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76,
	0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53,
	0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x1a, 0x63, 0x6f, 0x6e,
	0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63,
	0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x71, 0x0a, 0x16, 0x74, 0x69, 0x6c, 0x65, 0x5f,
	0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
	0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
	0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
	0x54, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x52, 0x14, 0x74, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0xd7, 0x06, 0x0a, 0x0c, 0x53,
	0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x70,
	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
	0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70,
	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69,
	0x6e, 0x67, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67,
	0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x86, 0x01, 0x0a,
	0x17, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e,
	0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e,
	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73,
	0x75, 0x6c, 0x74, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x72, 0x69,
	0x61, 0x6e, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15,
	0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x46,
	0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x15, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e,
	0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18,
	0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63,
	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53,
	0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65,
	0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61,
	0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e,
	0x74, 0x72, 0x79, 0x52, 0x13, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x6c,
	0x75, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x73,
	0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28,
	0x09, 0x52, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c,
	0x73, 0x12, 0x67, 0x0a, 0x0c, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65,
	0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
	0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x4d, 0x6f, 0x64,
	0x65, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d,
	0x6f, 0x64, 0x65, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x1a, 0x64, 0x0a, 0x1a, 0x4d, 0x61,
	0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x46, 0x69, 0x65,
	0x6c, 0x64, 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, 0x30, 0x0a, 0x05, 0x76, 0x61,
	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c,
	0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
	0x1a, 0x5e, 0x0a, 0x18, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x75,
	0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c,
	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
	0x1a, 0x62, 0x0a, 0x10, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x45,
	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63,
	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x44,
	0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
	0x3a, 0x02, 0x38, 0x01, 0x1a, 0xd5, 0x02, 0x0a, 0x05, 0x46, 0x61, 0x63, 0x65, 0x74, 0x12, 0x10,
	0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
	0x12, 0x4f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x2e, 0x46,
	0x61, 0x63, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65,
	0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x5f, 0x66, 0x61, 0x63,
	0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69,
	0x63, 0x46, 0x61, 0x63, 0x65, 0x74, 0x1a, 0xc3, 0x01, 0x0a, 0x0a, 0x46, 0x61, 0x63, 0x65, 0x74,
	0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3e, 0x0a,
	0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72,
	0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61,
	0x6c, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x14, 0x0a,
	0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f,
	0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
	0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20,
	0x01, 0x28, 0x01, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0d, 0x0a,
	0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x6b, 0x0a, 0x12,
	0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e,
	0x66, 0x6f, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x71,
	0x75, 0x65, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x61,
	0x6e, 0x64, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x69, 0x6e,
	0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x95, 0x06, 0x0a, 0x1a, 0x43, 0x6f,
	0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72,
	0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x76,
	0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
	0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x65,
	0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x69, 0x6e, 0x65,
	0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x85, 0x01, 0x0a, 0x12, 0x61, 0x64, 0x64, 0x69, 0x74,
	0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
	0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61,
	0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x76,
	0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
	0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x61, 0x64, 0x64,
	0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2b,
	0x0a, 0x11, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x75, 0x70, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x66, 0x6f, 0x6c, 0x6c, 0x6f,
	0x77, 0x75, 0x70, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7e, 0x0a, 0x11, 0x73,
	0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x73,
	0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43,
	0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x61,
	0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73,
	0x74, 0x65, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x52, 0x10, 0x73, 0x75, 0x67, 0x67, 0x65,
	0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x73, 0x12, 0x7f, 0x0a, 0x11, 0x61,
	0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
	0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
	0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43,
	0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x61,
	0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x10, 0x61, 0x64, 0x64, 0x69,
	0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x78, 0x0a, 0x0f,
	0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x12,
	0x65, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69,
	0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
	0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
	0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
	0x15, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
	0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x79, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x17, 0x70, 0x72,
	0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f,
	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69,
	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x74, 0x74, 0x72,
	0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x64,
	0x75, 0x63, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75,
	0x65, 0x1a, 0x4a, 0x0a, 0x14, 0x54, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x69, 0x6c,
	0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76,
	0x32, 0x2e, 0x54, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xd0, 0x03,
	0x0a, 0x0e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f,
	0x12, 0x7c, 0x0a, 0x19, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
	0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x70,
	0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76,
	0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d,
	0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x45,
	0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x42, 0x25, 0xfa, 0x41, 0x22, 0x0a, 0x20, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x45,
	0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72,
	0x69, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0xe1, 0x01, 0x0a, 0x17, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e,
	0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e,
	0x74, 0x12, 0x60, 0x0a, 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65,
	0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x42, 0x28, 0xfa, 0x41, 0x25, 0x0a, 0x23, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x53,
	0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x6f, 0x72,
	0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x12, 0x64, 0x0a, 0x19, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e,
	0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0xfa, 0x41, 0x25, 0x0a, 0x23, 0x72, 0x65, 0x74,
	0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63,
	0x6f, 0x6d, 0x2f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x52, 0x17, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76,
	0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x15, 0x0a, 0x13, 0x65, 0x78, 0x70,
	0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
	0x32, 0xd8, 0x02, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69,
	0x63, 0x65, 0x12, 0xfb, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x25, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74,
	0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
	0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65,
	0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa1, 0x01, 0x82,
	0xd3, 0xe4, 0x93, 0x02, 0x9a, 0x01, 0x3a, 0x01, 0x2a, 0x5a, 0x4e, 0x3a, 0x01, 0x2a, 0x22, 0x49,
	0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3d, 0x70,
	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a,
	0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f,
	0x2a, 0x7d, 0x3a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x45, 0x2f, 0x76, 0x32, 0x2f, 0x7b,
	0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
	0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a,
	0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x70, 0x6c, 0x61, 0x63,
	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68,
	0x1a, 0x49, 0xca, 0x41, 0x15, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, 0x74,
	0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
	0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f,
	0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0xb7, 0x02, 0xea, 0x41,
	0x77, 0x0a, 0x20, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d,
	0x65, 0x6e, 0x74, 0x12, 0x53, 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, 0x63, 0x61, 0x74,
	0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x7b, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x7d, 0x2f,
	0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x65, 0x78, 0x70,
	0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x7d, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f,
	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69,
	0x6c, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x65, 0x72, 0x76,
	0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x63, 0x6c, 0x6f, 0x75,
	0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f,
	0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x74,
	0x61, 0x69, 0x6c, 0x70, 0x62, 0x3b, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x70, 0x62, 0xa2, 0x02,
	0x06, 0x52, 0x45, 0x54, 0x41, 0x49, 0x4c, 0xaa, 0x02, 0x16, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x52, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x56, 0x32,
	0xca, 0x02, 0x16, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c,
	0x52, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x5c, 0x56, 0x32, 0xea, 0x02, 0x19, 0x47, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x74, 0x61, 0x69,
	0x6c, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_google_cloud_retail_v2_search_service_proto_rawDescOnce sync.Once
	file_google_cloud_retail_v2_search_service_proto_rawDescData = file_google_cloud_retail_v2_search_service_proto_rawDesc
)

func file_google_cloud_retail_v2_search_service_proto_rawDescGZIP() []byte {
	file_google_cloud_retail_v2_search_service_proto_rawDescOnce.Do(func() {
		file_google_cloud_retail_v2_search_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_retail_v2_search_service_proto_rawDescData)
	})
	return file_google_cloud_retail_v2_search_service_proto_rawDescData
}

var file_google_cloud_retail_v2_search_service_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
var file_google_cloud_retail_v2_search_service_proto_msgTypes = make([]protoimpl.MessageInfo, 32)
var file_google_cloud_retail_v2_search_service_proto_goTypes = []any{
	(SearchRequest_SearchMode)(0),                             // 0: google.cloud.retail.v2.SearchRequest.SearchMode
	(SearchRequest_DynamicFacetSpec_Mode)(0),                  // 1: google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.Mode
	(SearchRequest_QueryExpansionSpec_Condition)(0),           // 2: google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition
	(SearchRequest_PersonalizationSpec_Mode)(0),               // 3: google.cloud.retail.v2.SearchRequest.PersonalizationSpec.Mode
	(SearchRequest_SpellCorrectionSpec_Mode)(0),               // 4: google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.Mode
	(*ProductAttributeValue)(nil),                             // 5: google.cloud.retail.v2.ProductAttributeValue
	(*ProductAttributeInterval)(nil),                          // 6: google.cloud.retail.v2.ProductAttributeInterval
	(*Tile)(nil),                                              // 7: google.cloud.retail.v2.Tile
	(*SearchRequest)(nil),                                     // 8: google.cloud.retail.v2.SearchRequest
	(*SearchResponse)(nil),                                    // 9: google.cloud.retail.v2.SearchResponse
	(*ExperimentInfo)(nil),                                    // 10: google.cloud.retail.v2.ExperimentInfo
	(*SearchRequest_FacetSpec)(nil),                           // 11: google.cloud.retail.v2.SearchRequest.FacetSpec
	(*SearchRequest_DynamicFacetSpec)(nil),                    // 12: google.cloud.retail.v2.SearchRequest.DynamicFacetSpec
	(*SearchRequest_BoostSpec)(nil),                           // 13: google.cloud.retail.v2.SearchRequest.BoostSpec
	(*SearchRequest_QueryExpansionSpec)(nil),                  // 14: google.cloud.retail.v2.SearchRequest.QueryExpansionSpec
	(*SearchRequest_PersonalizationSpec)(nil),                 // 15: google.cloud.retail.v2.SearchRequest.PersonalizationSpec
	(*SearchRequest_SpellCorrectionSpec)(nil),                 // 16: google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec
	(*SearchRequest_ConversationalSearchSpec)(nil),            // 17: google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec
	(*SearchRequest_TileNavigationSpec)(nil),                  // 18: google.cloud.retail.v2.SearchRequest.TileNavigationSpec
	nil,                                                       // 19: google.cloud.retail.v2.SearchRequest.LabelsEntry
	nil,                                                       // 20: google.cloud.retail.v2.SearchRequest.UserAttributesEntry
	(*SearchRequest_FacetSpec_FacetKey)(nil),                  // 21: google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey
	(*SearchRequest_BoostSpec_ConditionBoostSpec)(nil),        // 22: google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec
	(*SearchRequest_ConversationalSearchSpec_UserAnswer)(nil), // 23: google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer
	(*SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer)(nil), // 24: google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer
	(*SearchResponse_SearchResult)(nil),                                      // 25: google.cloud.retail.v2.SearchResponse.SearchResult
	(*SearchResponse_Facet)(nil),                                             // 26: google.cloud.retail.v2.SearchResponse.Facet
	(*SearchResponse_QueryExpansionInfo)(nil),                                // 27: google.cloud.retail.v2.SearchResponse.QueryExpansionInfo
	(*SearchResponse_ConversationalSearchResult)(nil),                        // 28: google.cloud.retail.v2.SearchResponse.ConversationalSearchResult
	(*SearchResponse_TileNavigationResult)(nil),                              // 29: google.cloud.retail.v2.SearchResponse.TileNavigationResult
	nil,                                     // 30: google.cloud.retail.v2.SearchResponse.SearchResult.MatchingVariantFieldsEntry
	nil,                                     // 31: google.cloud.retail.v2.SearchResponse.SearchResult.VariantRollupValuesEntry
	nil,                                     // 32: google.cloud.retail.v2.SearchResponse.SearchResult.ModelScoresEntry
	(*SearchResponse_Facet_FacetValue)(nil), // 33: google.cloud.retail.v2.SearchResponse.Facet.FacetValue
	(*SearchResponse_ConversationalSearchResult_SuggestedAnswer)(nil),  // 34: google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer
	(*SearchResponse_ConversationalSearchResult_AdditionalFilter)(nil), // 35: google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter
	(*ExperimentInfo_ServingConfigExperiment)(nil),                     // 36: google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment
	(*Interval)(nil),              // 37: google.cloud.retail.v2.Interval
	(*UserInfo)(nil),              // 38: google.cloud.retail.v2.UserInfo
	(*PinControlMetadata)(nil),    // 39: google.cloud.retail.v2.PinControlMetadata
	(*StringList)(nil),            // 40: google.cloud.retail.v2.StringList
	(*Product)(nil),               // 41: google.cloud.retail.v2.Product
	(*fieldmaskpb.FieldMask)(nil), // 42: google.protobuf.FieldMask
	(*structpb.Value)(nil),        // 43: google.protobuf.Value
	(*DoubleList)(nil),            // 44: google.cloud.retail.v2.DoubleList
}
var file_google_cloud_retail_v2_search_service_proto_depIdxs = []int32{
	37, // 0: google.cloud.retail.v2.ProductAttributeInterval.interval:type_name -> google.cloud.retail.v2.Interval
	5,  // 1: google.cloud.retail.v2.Tile.product_attribute_value:type_name -> google.cloud.retail.v2.ProductAttributeValue
	6,  // 2: google.cloud.retail.v2.Tile.product_attribute_interval:type_name -> google.cloud.retail.v2.ProductAttributeInterval
	38, // 3: google.cloud.retail.v2.SearchRequest.user_info:type_name -> google.cloud.retail.v2.UserInfo
	11, // 4: google.cloud.retail.v2.SearchRequest.facet_specs:type_name -> google.cloud.retail.v2.SearchRequest.FacetSpec
	12, // 5: google.cloud.retail.v2.SearchRequest.dynamic_facet_spec:type_name -> google.cloud.retail.v2.SearchRequest.DynamicFacetSpec
	13, // 6: google.cloud.retail.v2.SearchRequest.boost_spec:type_name -> google.cloud.retail.v2.SearchRequest.BoostSpec
	14, // 7: google.cloud.retail.v2.SearchRequest.query_expansion_spec:type_name -> google.cloud.retail.v2.SearchRequest.QueryExpansionSpec
	0,  // 8: google.cloud.retail.v2.SearchRequest.search_mode:type_name -> google.cloud.retail.v2.SearchRequest.SearchMode
	15, // 9: google.cloud.retail.v2.SearchRequest.personalization_spec:type_name -> google.cloud.retail.v2.SearchRequest.PersonalizationSpec
	19, // 10: google.cloud.retail.v2.SearchRequest.labels:type_name -> google.cloud.retail.v2.SearchRequest.LabelsEntry
	16, // 11: google.cloud.retail.v2.SearchRequest.spell_correction_spec:type_name -> google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec
	17, // 12: google.cloud.retail.v2.SearchRequest.conversational_search_spec:type_name -> google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec
	18, // 13: google.cloud.retail.v2.SearchRequest.tile_navigation_spec:type_name -> google.cloud.retail.v2.SearchRequest.TileNavigationSpec
	20, // 14: google.cloud.retail.v2.SearchRequest.user_attributes:type_name -> google.cloud.retail.v2.SearchRequest.UserAttributesEntry
	25, // 15: google.cloud.retail.v2.SearchResponse.results:type_name -> google.cloud.retail.v2.SearchResponse.SearchResult
	26, // 16: google.cloud.retail.v2.SearchResponse.facets:type_name -> google.cloud.retail.v2.SearchResponse.Facet
	27, // 17: google.cloud.retail.v2.SearchResponse.query_expansion_info:type_name -> google.cloud.retail.v2.SearchResponse.QueryExpansionInfo
	39, // 18: google.cloud.retail.v2.SearchResponse.pin_control_metadata:type_name -> google.cloud.retail.v2.PinControlMetadata
	22, // 19: google.cloud.retail.v2.SearchResponse.invalid_condition_boost_specs:type_name -> google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec
	10, // 20: google.cloud.retail.v2.SearchResponse.experiment_info:type_name -> google.cloud.retail.v2.ExperimentInfo
	28, // 21: google.cloud.retail.v2.SearchResponse.conversational_search_result:type_name -> google.cloud.retail.v2.SearchResponse.ConversationalSearchResult
	29, // 22: google.cloud.retail.v2.SearchResponse.tile_navigation_result:type_name -> google.cloud.retail.v2.SearchResponse.TileNavigationResult
	36, // 23: google.cloud.retail.v2.ExperimentInfo.serving_config_experiment:type_name -> google.cloud.retail.v2.ExperimentInfo.ServingConfigExperiment
	21, // 24: google.cloud.retail.v2.SearchRequest.FacetSpec.facet_key:type_name -> google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey
	1,  // 25: google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.mode:type_name -> google.cloud.retail.v2.SearchRequest.DynamicFacetSpec.Mode
	22, // 26: google.cloud.retail.v2.SearchRequest.BoostSpec.condition_boost_specs:type_name -> google.cloud.retail.v2.SearchRequest.BoostSpec.ConditionBoostSpec
	2,  // 27: google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.condition:type_name -> google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition
	3,  // 28: google.cloud.retail.v2.SearchRequest.PersonalizationSpec.mode:type_name -> google.cloud.retail.v2.SearchRequest.PersonalizationSpec.Mode
	4,  // 29: google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.mode:type_name -> google.cloud.retail.v2.SearchRequest.SpellCorrectionSpec.Mode
	23, // 30: google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.user_answer:type_name -> google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer
	7,  // 31: google.cloud.retail.v2.SearchRequest.TileNavigationSpec.applied_tiles:type_name -> google.cloud.retail.v2.Tile
	40, // 32: google.cloud.retail.v2.SearchRequest.UserAttributesEntry.value:type_name -> google.cloud.retail.v2.StringList
	37, // 33: google.cloud.retail.v2.SearchRequest.FacetSpec.FacetKey.intervals:type_name -> google.cloud.retail.v2.Interval
	24, // 34: google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.selected_answer:type_name -> google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer
	5,  // 35: google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.product_attribute_values:type_name -> google.cloud.retail.v2.ProductAttributeValue
	5,  // 36: google.cloud.retail.v2.SearchRequest.ConversationalSearchSpec.UserAnswer.SelectedAnswer.product_attribute_value:type_name -> google.cloud.retail.v2.ProductAttributeValue
	41, // 37: google.cloud.retail.v2.SearchResponse.SearchResult.product:type_name -> google.cloud.retail.v2.Product
	30, // 38: google.cloud.retail.v2.SearchResponse.SearchResult.matching_variant_fields:type_name -> google.cloud.retail.v2.SearchResponse.SearchResult.MatchingVariantFieldsEntry
	31, // 39: google.cloud.retail.v2.SearchResponse.SearchResult.variant_rollup_values:type_name -> google.cloud.retail.v2.SearchResponse.SearchResult.VariantRollupValuesEntry
	32, // 40: google.cloud.retail.v2.SearchResponse.SearchResult.model_scores:type_name -> google.cloud.retail.v2.SearchResponse.SearchResult.ModelScoresEntry
	33, // 41: google.cloud.retail.v2.SearchResponse.Facet.values:type_name -> google.cloud.retail.v2.SearchResponse.Facet.FacetValue
	35, // 42: google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.additional_filters:type_name -> google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter
	34, // 43: google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.suggested_answers:type_name -> google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer
	35, // 44: google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.additional_filter:type_name -> google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter
	7,  // 45: google.cloud.retail.v2.SearchResponse.TileNavigationResult.tiles:type_name -> google.cloud.retail.v2.Tile
	42, // 46: google.cloud.retail.v2.SearchResponse.SearchResult.MatchingVariantFieldsEntry.value:type_name -> google.protobuf.FieldMask
	43, // 47: google.cloud.retail.v2.SearchResponse.SearchResult.VariantRollupValuesEntry.value:type_name -> google.protobuf.Value
	44, // 48: google.cloud.retail.v2.SearchResponse.SearchResult.ModelScoresEntry.value:type_name -> google.cloud.retail.v2.DoubleList
	37, // 49: google.cloud.retail.v2.SearchResponse.Facet.FacetValue.interval:type_name -> google.cloud.retail.v2.Interval
	5,  // 50: google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.SuggestedAnswer.product_attribute_value:type_name -> google.cloud.retail.v2.ProductAttributeValue
	5,  // 51: google.cloud.retail.v2.SearchResponse.ConversationalSearchResult.AdditionalFilter.product_attribute_value:type_name -> google.cloud.retail.v2.ProductAttributeValue
	8,  // 52: google.cloud.retail.v2.SearchService.Search:input_type -> google.cloud.retail.v2.SearchRequest
	9,  // 53: google.cloud.retail.v2.SearchService.Search:output_type -> google.cloud.retail.v2.SearchResponse
	53, // [53:54] is the sub-list for method output_type
	52, // [52:53] is the sub-list for method input_type
	52, // [52:52] is the sub-list for extension type_name
	52, // [52:52] is the sub-list for extension extendee
	0,  // [0:52] is the sub-list for field type_name
}

func init() { file_google_cloud_retail_v2_search_service_proto_init() }
func file_google_cloud_retail_v2_search_service_proto_init() {
	if File_google_cloud_retail_v2_search_service_proto != nil {
		return
	}
	file_google_cloud_retail_v2_common_proto_init()
	file_google_cloud_retail_v2_product_proto_init()
	file_google_cloud_retail_v2_search_service_proto_msgTypes[2].OneofWrappers = []any{
		(*Tile_ProductAttributeValue)(nil),
		(*Tile_ProductAttributeInterval)(nil),
	}
	file_google_cloud_retail_v2_search_service_proto_msgTypes[3].OneofWrappers = []any{}
	file_google_cloud_retail_v2_search_service_proto_msgTypes[5].OneofWrappers = []any{
		(*ExperimentInfo_ServingConfigExperiment_)(nil),
	}
	file_google_cloud_retail_v2_search_service_proto_msgTypes[8].OneofWrappers = []any{}
	file_google_cloud_retail_v2_search_service_proto_msgTypes[18].OneofWrappers = []any{
		(*SearchRequest_ConversationalSearchSpec_UserAnswer_TextAnswer)(nil),
		(*SearchRequest_ConversationalSearchSpec_UserAnswer_SelectedAnswer_)(nil),
	}
	file_google_cloud_retail_v2_search_service_proto_msgTypes[28].OneofWrappers = []any{
		(*SearchResponse_Facet_FacetValue_Value)(nil),
		(*SearchResponse_Facet_FacetValue_Interval)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_google_cloud_retail_v2_search_service_proto_rawDesc,
			NumEnums:      5,
			NumMessages:   32,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_google_cloud_retail_v2_search_service_proto_goTypes,
		DependencyIndexes: file_google_cloud_retail_v2_search_service_proto_depIdxs,
		EnumInfos:         file_google_cloud_retail_v2_search_service_proto_enumTypes,
		MessageInfos:      file_google_cloud_retail_v2_search_service_proto_msgTypes,
	}.Build()
	File_google_cloud_retail_v2_search_service_proto = out.File
	file_google_cloud_retail_v2_search_service_proto_rawDesc = nil
	file_google_cloud_retail_v2_search_service_proto_goTypes = nil
	file_google_cloud_retail_v2_search_service_proto_depIdxs = nil
}

// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6

// SearchServiceClient is the client API for SearchService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type SearchServiceClient interface {
	// Performs a search.
	//
	// This feature is only available for users who have Retail Search enabled.
	// Enable Retail Search on Cloud Console before using this feature.
	Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (*SearchResponse, error)
}

type searchServiceClient struct {
	cc grpc.ClientConnInterface
}

func NewSearchServiceClient(cc grpc.ClientConnInterface) SearchServiceClient {
	return &searchServiceClient{cc}
}

func (c *searchServiceClient) Search(ctx context.Context, in *SearchRequest, opts ...grpc.CallOption) (*SearchResponse, error) {
	out := new(SearchResponse)
	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.SearchService/Search", in, out, opts...)
	if err != nil {
		return nil, err
	}
	return out, nil
}

// SearchServiceServer is the server API for SearchService service.
type SearchServiceServer interface {
	// Performs a search.
	//
	// This feature is only available for users who have Retail Search enabled.
	// Enable Retail Search on Cloud Console before using this feature.
	Search(context.Context, *SearchRequest) (*SearchResponse, error)
}

// UnimplementedSearchServiceServer can be embedded to have forward compatible implementations.
type UnimplementedSearchServiceServer struct {
}

func (*UnimplementedSearchServiceServer) Search(context.Context, *SearchRequest) (*SearchResponse, error) {
	return nil, status.Errorf(codes.Unimplemented, "method Search not implemented")
}

func RegisterSearchServiceServer(s *grpc.Server, srv SearchServiceServer) {
	s.RegisterService(&_SearchService_serviceDesc, srv)
}

func _SearchService_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	in := new(SearchRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return srv.(SearchServiceServer).Search(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     srv,
		FullMethod: "/google.cloud.retail.v2.SearchService/Search",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return srv.(SearchServiceServer).Search(ctx, req.(*SearchRequest))
	}
	return interceptor(ctx, in, info, handler)
}

var _SearchService_serviceDesc = grpc.ServiceDesc{
	ServiceName: "google.cloud.retail.v2.SearchService",
	HandlerType: (*SearchServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "Search",
			Handler:    _SearchService_Search_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "google/cloud/retail/v2/search_service.proto",
}
